function catchCTRLTAB(evt)
{
	var isIE = true;
	var TAB = 84;
	var keyCode;	
	if (window.event)//IE
	{
		keyCode = window.event.keyCode;
	}
	else if (evt)//FF
	{
		keyCode = evt.which;
		isIE = false;
	}
	if (keyCode == TAB && evt.ctrlKey)  
	{
		if(isIE)
		{
			evt.cancelBubble = true;
			evt.returnValue = false;
		}
		else
		{
			evt.stopPropagation();
			evt.preventDefault();	
		}
		AddTabulation(evt);	
	}
}
function AddTabulation(evt)
{
	var tab = "        ";
	if(evt.srcElement == null)
	{
		var element = evt.target;
		var ss = element.selectionStart;
		var se = element.selectionEnd;
		evt.preventDefault();
	    
		if (ss != se && element.value.slice(ss,se).indexOf("\n") != -1) 
		{
			// In case selection was not of entire lines (e.g. selection begins in the middle of a line)
			// we ought to tab at the beginning as well as at the start of every following line.
			var pre = element.value.slice(0,ss);
			var sel = element.value.slice(ss,se).replace(/\n/g,"\n"+tab);
			var post = element.value.slice(se,element.value.length);
			element.value = pre.concat(tab).concat(sel).concat(post);	                
			element.selectionStart = ss + tab.length;
			element.selectionEnd = se + tab.length;
		}
	            
		// "Normal" case (no selection or selection on one line only)
		else {
			element.value = element.value.slice(0,ss).concat(tab).concat(element.value.slice(ss,element.value.length));
			if (ss == se) {
				element.selectionStart = element.selectionEnd = ss + tab.length;
			}
			else {
				element.selectionStart = ss + tab.length;
				element.selectionEnd = se + tab.length;
			}
		}
    }
    else
    {
		if (document.selection != null) 
		{   
			document.selection.createRange().text = tab;                  
		}               
		else 
		{                  
			event.srcElement.value += tab;                  
		}
    }
}
function EnableDisableRadioOptions(checkboxID, radioYesID, radioNoID)
{
	var myCheckBox = document.getElementById(checkboxID);
	var myRadioNo = document.getElementById(radioNoID);
	var myRadioYes = document.getElementById(radioYesID);
	if(myCheckBox!=null)
	{
		if(myCheckBox.checked)
		{
			myRadioNo.disabled = false;
			myRadioYes.disabled = false;
		}
		else
		{
			myRadioNo.checked = true;
			myRadioYes.checked = false;
			myRadioNo.disabled = true;
			myRadioYes.disabled = true;
		}
	}
}
function trim(stringToTrim) 
{
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function changeVisibility(elm, strVisible)
{
	elm.style.visibility= strVisible;
}
var sentWLTestEmailCounter = 0;
function SendWhiteLabelTestEmail(subjectID, textID, rdbTextID, username, strPassed, strFailed )
{
	//Declarations
	var subject = "";
	var text = "";
	var isText = false;	
	var url = "http://localhost/BackupAgentServices/BAWebservice.asmx?wsdl";
	var xmlhttp = null;

	//set values
	if(document.getElementById(subjectID)!=null)
		subject = document.getElementById(subjectID).value;
	if(document.getElementById(textID)!=null)
		text = document.getElementById(textID).value;
	if(document.getElementById(rdbTextID)!= null)
		isText = document.getElementById(rdbTextID).checked;			
		
	 if(typeof XMLHttpRequest != "undefined"){
        xmlhttp = new XMLHttpRequest();
    }
    else if(typeof window.ActiveXObject != "undefined"){
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.4.0");
        }
        catch(e){
            try {
                xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
            }
            catch(e){
                try {
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(e){
                    xmlhttp = null;
                }
            }
        }
    }	
	if(xmlhttp != null && subject!= "" && text!="" && username!="") 
	{
		xmlhttp.open("POST", url, true);				
		xmlhttp.onreadystatechange=function()
		{		
			// only if req shows "complete"
			if (xmlhttp.readyState==4) 
			{
				// only if "OK"
				if (xmlhttp.status == 200) 
				{					
					if(xmlhttp.responseXML.documentElement.getElementsByTagName('SendWhiteLabelTestEmailResult')[0].firstChild.data == "true")
						alert(strPassed);	
					else
						alert(strFailed);
					sentWLTestEmailCounter = 0;	
				}
				else if(xmlhttp.status == 500)
				{
					if(sentWLTestEmailCounter < 5)
					{
						sentWLTestEmailCounter = sentWLTestEmailCounter+1;
						SendWhiteLabelTestEmail(subjectID, textID, rdbTextID, username, strPassed, strFailed);
					}
				}
				else 
				{
					alert(strFailed);
					sentWLTestEmailCounter = 0;
				}
			}
        }	
		var soapenvelope = "<?xml version='1.0' encoding='utf-8'?>"+"\n\n";
		soapenvelope += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"> ";
		soapenvelope += "<soap:Body> ";
		soapenvelope += "<SendWhiteLabelTestEmail xmlns=\"http://localhost/BAWebService2\">";
		soapenvelope += "<subject>"+subject+"</subject> ";
		soapenvelope += "<text>![CDATA["+text.replace(/>/g,"&gt;").replace(/</g,"&lt;")+"]]</text> ";
		soapenvelope += "<isText>"+isText+"</isText> ";
		soapenvelope += "<username>"+username+"</username> ";
		soapenvelope += "</SendWhiteLabelTestEmail> ";
		soapenvelope += "</soap:Body> ";
		soapenvelope += "</soap:Envelope> ";
		xmlhttp.setRequestHeader("Content-Type", "text/xml");
		xmlhttp.setRequestHeader('SOAPAction','http://localhost/BAWebService2/SendWhiteLabelTestEmail');
		xmlhttp.send(soapenvelope);			
	}	
}
function UpdateUserProfile(accountElmt, profileElmt)
{
	var account = document.getElementById(accountElmt);
	var profile = document.getElementById(profileElmt);
	
	if(account != null && profile != null )
	{
		var selectProfile = "-1";
		var selectedProfile = profile.selectedIndex;
		if(account.selectedIndex >-1)
		{
			selectProfile = defaultAccountType;
			var selectedAccount = account.options[account.selectedIndex].value;
			 for (index=0;index<accountArray.length;index++)
			{
				if(accountArray[index][0] == selectedAccount)
				{
					selectProfile = accountArray[index][1]
					break;
				}
			}
			}
			if(profile.options[0]!=null)
			{
				profile.remove(0);
			}	
			if(profile.options[0]!=null)
			{
				profile.remove(0);
			}	
			switch(selectProfile)
			{
				case "0"://shows only prof				
					appendOptionLast(profile, strProf, 0);
					profile.options[0].selected  = true;				
					break;   
				case "1"://shows only home
					appendOptionLast(profile, strHome, 1);

					profile.options[0].selected  = true;	
					break;    
				case "2":
					appendOptionLast(profile, strProf, 0);
					appendOptionLast(profile, strHome, 1);
					if (selectedProfile == 1)
						profile.options[1].selected  = true;								
					else
						profile.options[0].selected  = true;								
					break;
				
			}			
	}
}
function appendOptionLast(selectElmt, strText, strVal)
{
  var elOptNew = document.createElement('option');
  elOptNew.text = strText;
  elOptNew.value = strVal; 

  try {
    selectElmt.add(elOptNew, null); // standards compliant; doesn't work in IE
  }
  catch(ex) {
    selectElmt.add(elOptNew); // IE only
  }
}
function insertOption(selectElmt, strText, strVal, blBefore)
{
  
  if (selectElmt.selectedIndex >= 0) 
  {
    var elOptNew = document.createElement('option');
    elOptNew.text = strText;
    elOptNew.value = strVal;
    var elOptOld = selectElmt.options[selectElmt.selectedIndex];  
    if(blBefore)
    {
		try 
		{
			selectElmt.add(elOptNew, elOptOld); // standards compliant; doesn't work in IE
		 }
		catch(ex) 
		{
			selectElmt.add(elOptNew, selectElmt.selectedIndex); // IE only
		}
    }
    else
    {
    try 
		{
			selectElmt.add(elOptNew, null); // standards compliant; doesn't work in IE
		 }
		catch(ex) 
		{
			selectElmt.add(elOptNew); // IE only
		}   
    }
  }
}
function ShowHideCell(cellName)
{
	if(document.getElementById(cellName)!=null)
	{
		if(document.getElementById(cellName).style.display =='none')
		{
			document.getElementById(cellName).style.display ='';
		}
		else
		{
			document.getElementById(cellName).style.display ='none';
		}	
	}
}
//Hide the row in hiddenRows and reassign row stylesheet on every row of the tables in redrawTable
function HideRow()
{
  for (i=0;i<hiddenRows.length;i++)
    {
          if(document.getElementById(hiddenRows[i])!=null)
		  {
			document.getElementById(hiddenRows[i]).style.display ='none';	
		  }
    }
    for (j=0;j<redrawTable.length;j++)
    {
		setAlternateRows(redrawTable[j]);
	}	
}
//When changing the parent in the user form will update the country with the default parent country
function SetDefaultCountry(parentIndex, countryID, StateID, TableName)
{
	if(document.getElementById(countryID)!= null)
	{
		for (i=0;i<document.getElementById(countryID).length;i++)
		{
			if(document.getElementById(countryID).options[i].value == parentsDefaultCountry[parentIndex])
			{				
				document.getElementById(countryID).options[i].selected = true;
				setState(document.getElementById(countryID).options[i].text, -1, StateID, TableName)
				break;
			}
		}
	}	
}
//Enable/Disable the buttons that allow to activate/deactivate account
function ActiveDeactivateAccount(lst, btnID)
{
	if(document.getElementById(btnID)!= null)
		document.getElementById(btnID).disabled = (lst.selectedIndex == -1);	
		return false;
}
//Set the state dropdown list when a country is selected
function setState(countryName, stateID, targetID, tableName)
{
	document.getElementById(targetID).options[document.getElementById(targetID).selectedIndex].selected = false;
	if(countryName.toUpperCase() == 'UNITED STATES')
	{
		document.getElementById('rowState').style.display ='';
		for (i=0;i<document.getElementById(targetID).length;i++)
		{
			if(document.getElementById(targetID).options[i].value == stateID)
			{
				document.getElementById(targetID).options[i].style.visibility = 'visible';
				document.getElementById(targetID).options[i].selected = true;
				break;
			}
		}
	}
	else
	{
		//if country is not USA then there is no state selected
		for (i=0;i<document.getElementById(targetID).length;i++)
		{
			if(document.getElementById(targetID).options[i].value == '-1')
			{				
				document.getElementById(targetID).options[i].selected = true;
				break;
			}
		}
		document.getElementById('rowState').style.display ='none';			
	}
	if(tableName!='')
		setAlternateRows(tableName);
}
function setAlternateRows(tablename)
{
	var myTable = document.getElementById(tablename);
	if(myTable!= null)
	{
		var len = myTable.rows.length;
		var tmpClass = 'specialRow'
		for(i=0 ; i< len; i++)
		{
			if(myTable.rows[i].style.display != 'none')
			{
				myTable.rows[i].className = tmpClass;
				if(tmpClass == '')
					tmpClass = 'specialRow';
				else
					tmpClass = '';
			}	
		}
	}
}
//###############################################################
//#### Insert tag: header and footer			#################
//###############################################################

function insertAtCursor(sourceID, targetID, insertTag) 
{
	var target = eval("document.MainForm."+targetID);
	
	//IE support
	
	if (document.selection) 
	{
		target.focus();
		sel = document.selection.createRange();
		sel.text = insertTag;
	}
	//MOZILLA/NETSCAPE support
	else if (target.selectionStart || target.selectionStart == '0') 
	{
		var startPos = target.selectionStart;
		var endPos = target.selectionEnd;
		target.value = target.value.substring(0, startPos)
		+ insertTag
		+ target.value.substring(endPos,target.value.length);
	} 
	else 
	{
		target.value += insertTag;
	}
	
	//check if value exist
	document.getElementById(sourceID).style.display = 'none';	
	
	return false;
}

function checkStyleSheetTag(sourceID,targetID,styleTag)
{
	if(document.getElementById(targetID).value.indexOf(styleTag) != -1)
		document.getElementById(sourceID).style.display = 'none';
	else
		document.getElementById(sourceID).style.display = '';
}

function checkHeaderFooterForm(targetIDHeader,targetIDFooter ,styleTag,messageTagMissing,headMisConfiguration,messageTagMisplaced)
{
	var inputHeader = document.getElementById(targetIDHeader).value.toLowerCase();
	var inputFooter = document.getElementById(targetIDFooter).value.toLowerCase();
	
	if(inputHeader == '' && inputFooter == '')	
	{
		return true
	}
	else
	{
		styleTag = styleTag.toLowerCase();
		
		if(inputHeader.indexOf(styleTag) == -1)
		{
			alert(messageTagMissing);
			return false;
		}
		else if(inputHeader.indexOf('<head>') == -1 || inputHeader.indexOf('<body') == -1)
		{
			alert(headMisConfiguration);
			return false;
		}
		else if(inputHeader.indexOf(styleTag) < inputHeader.indexOf('<head>') || inputHeader.indexOf(styleTag) > inputHeader.indexOf('<body'))
		{
			alert(messageTagMisplaced);
			return false;
		}
		else
			return true
	}
}

//###############################################################
//#### Event viewer								#################
//###############################################################

function eventviewer_showrecords(targetID,itemCommand, displayTypeID)
{
	targetCommand('','Datagrid',itemCommand,targetID,document.getElementById(displayTypeID).value);
}

//find action
function eventviewer_findGUID(targetID,itemCommand,criteriaTextID)
{
	var values = document.getElementById(criteriaTextID).value;
	
	targetCommand('','Datagrid',itemCommand,targetID,values);
}

//###############################################################
//#### Reseller dashboard						#################
//###############################################################

//find action users form
function resellerDB_showUsers(targetID,itemCommand)
{
	if(document.getElementById('userDisplayCriteria').value != '------------')
	{
		var values = document.getElementById('userDisplayCriteria').value+"|"+document.getElementById('userUserName').value;
	
		targetCommand('','Datagrid',itemCommand,targetID,values);
	}
}

//###############################################################
//#### Admin dashboard							#################
//###############################################################

//find action users form
function adminDB_showUsers(targetID,itemCommand,userNameID,displayTypeID)
{
	if(document.getElementById(displayTypeID).value != '------------')
	{
		var values = document.getElementById(displayTypeID).value+"|"+document.getElementById(userNameID).value;
	
		targetCommand('','Datagrid',itemCommand,targetID,values);
	}
}

//###############################################################
//#### Find users								#################
//###############################################################

function changeOwnersParent(defaultParent, targetID, ownerDropDown, informationLabel)
{
	if(document.getElementById(targetID).value == defaultParent)
	{
		document.getElementById(ownerDropDown).disabled				= false;
		document.getElementById(informationLabel).style.display		= 'none';		
	}
	else
	{
		document.getElementById(ownerDropDown).disabled				= true;
		document.getElementById(informationLabel).style.display		= '';		
	}
}

//###############################################################
//#### Find users								#################
//###############################################################

//find action users form
function findUsers(targetID,itemCommand,criteriaTextID,criteriaDdlID,storageDdlID,accountDdlID,startDateID, endDateID, criteria2DdlID, resellerID, userNameID)
{
	var values = document.getElementById(accountDdlID).value+"|"+document.getElementById(criteriaDdlID).value+"|"+document.getElementById(criteriaTextID).value+"|"+document.getElementById(resellerID).value+"|"+document.getElementById(userNameID).value;
	values += "|"+document.getElementById(startDateID).value+"|"+document.getElementById(endDateID).value+"|"+document.getElementById(criteria2DdlID).value+"|"+document.getElementById(storageDdlID).value;
	
	targetCommand('','Datagrid',itemCommand,targetID,values);
}

//switch search criteria (finUsers)
function showUserCriteriaOptions(criteriaTextID,criteriaDdlID,storageDdlID,accountDdlID)
{
	if(document.getElementById(criteriaDdlID).value == 'accountType')
	{
		document.getElementById(criteriaTextID).style.display = 'none';
		document.getElementById(accountDdlID).style.display = '';
		document.getElementById(storageDdlID).style.display = 'none';
	}
	else if(document.getElementById(criteriaDdlID).value == 'ownerName')
	{
		document.getElementById(criteriaTextID).style.display = 'none';
		document.getElementById(accountDdlID).style.display = 'none';
		document.getElementById(storageDdlID).style.display = '';
	}
	else
	{
		document.getElementById(criteriaTextID).style.display = '';
		document.getElementById(accountDdlID).style.display = 'none';
		document.getElementById(storageDdlID).style.display = 'none';
	}
}

//###############################################################
//#### Find resellers							#################
//###############################################################

//find action resellers form
function findResellers(targetID,itemCommand,userNameID,criteriaTextID,criteriaDdlID,storageDdlID)
{
	var values = document.getElementById(criteriaDdlID).value+"|"+document.getElementById(criteriaTextID).value+"|"+document.getElementById(userNameID).value+"|"+document.getElementById(storageDdlID).value;
	
	targetCommand('','Datagrid',itemCommand,targetID,values);
}

//switch search criteria (finUsers)
function showResellerCriteriaOptions(criteriaTextID,criteriaDdlID,storageDdlID)
{
	if(document.getElementById(criteriaDdlID).value == 'Owner_ID')
	{
		document.getElementById(criteriaTextID).style.display = 'none';
		document.getElementById(storageDdlID).style.display = '';
	}
	else
	{
		document.getElementById(criteriaTextID).style.display = '';
		document.getElementById(storageDdlID).style.display = 'none';
	}
}

//###############################################################
//#### replace function (all instances)			#################
//###############################################################
function xreplace(input,original,replace)
{
	var i = input.indexOf(original);
	var returnStr = input;

	while(i != -1)
	{
		returnStr = returnStr.replace(original, replace);
		i = returnStr.indexOf(original);
	}

	return returnStr;
}
