//Function: AddToFavorite
//Description/Purpose: adds the current page to "My Faviourates" list with given title 
//Arguments: name of the faviourate page as string
//Return values: none
function AddToFavorite(name)
{
	if((navigator.appName=="Microsoft Internet Explorer")&&(parseInt(navigator.appVersion)>=4)) 
    {
		window.external.AddFavorite(self.location.href,"SalesFuel - "+name);
    }else{
		var msg="Bookmark this page by pressing";
		if(navigator.appName == "Netscape") msg += " (CTRL-D) on your keyboard.";
		alert(msg);
	}
}
//Function: CheckAllGridChkBoxes
//Description/Purpose: checks all DataGrid CheckBoxes with the given name with the given
//Arguments: 1. string  - ID of the checkbox in the data grid
//           2. boolean - Status of the check box
//Return values: None
function CheckAllGridChkBoxes(pFrmName, aspCheckBoxID, checkVal) 
{    
    var re = new RegExp(':'+aspCheckBoxID+'$')//generated control name starts with a colon
	var lenElements = 0
	lenElements = document.forms[pFrmName].elements.length
     
    for(var i=0;i<lenElements;i++) 
    {
        elm = document.forms[pFrmName].elements[i]
		if(elm.type=='checkbox') 
		{
			if (aspCheckBoxID == "-1")	//For CheckBoxes on Preferences page aspCheckBoxID will be -1
			{elm.checked = checkVal;}
			else if (re.test(elm.name)) 
			{elm.checked = checkVal;}
		}
	}
}
//Function: SelectAllCheckboxes
//Description/Purpose: checks/unchecks all DataGrid CheckBoxes with the given name with the given depending on the value of the Salect All Check Box
//Arguments: 1. string  - ID of the checkbox in the data grid
//           2. string - datagrid name
//Return values: None
function SelectAllCheckboxes(pCheckBoxControl,pDgName)
{
	if (pCheckBoxControl.checked == true) 
	 {
		  var i;
		  for (i=0; i < document.forms[0].elements.length; i++) 
		  {
			   if ((document.forms[0].elements[i].type == 'checkbox') && (document.forms[0].elements[i].name.indexOf(pDgName) > -1)) 
			     	document.forms[0].elements[i].checked = true;
		  }
	 } 
	 else 
	 {
		  var i;
		  for(i=0;i<document.forms[0].elements.length;i++) 
		  {
			   if ((document.forms[0].elements[i].type == 'checkbox') && (document.forms[0].elements[i].name.indexOf(pDgName) > -1)) 
			     	document.forms[0].elements[i].checked = false;
		  }
	}
	
}
//Function: CheckUncheck
//Description/Purpose: checks/unchecks Select All CheckBoxe in the grid with the given name  depending on the value of the Check Box clicked
//Arguments: 1. string - ID of the checkbox in the data grid
//           2. string - ID of Select All Check Box
//	     3. string - Name of the Data Grid	
//Return values: None
function CheckUncheck(pCheckBoxControl,pControlAllName,pDgName)
{
	if(pCheckBoxControl.checked == true)
	{
		for (i=0;i<document.forms[0].elements.length;i++) 
		{
			if ((document.forms[0].elements[i].type=='checkbox') && 
			(document.forms[0].elements[i].name.indexOf(pDgName)>-1)) 
			{
				if(document.forms[0].elements[i].id==pControlAllName)
					continue;
				if(document.forms[0].elements[i].checked==false)
				{
					document.getElementById(pControlAllName).indeterminate=true;
					return;
				}
			}
		}
		document.getElementById(pControlAllName).indeterminate=false;
		document.getElementById(pControlAllName).checked=true;
	}
	else
	{
		for (i=0;i<document.forms[0].elements.length;i++) 
		{
			if ((document.forms[0].elements[i].type=='checkbox') && 
			(document.forms[0].elements[i].name.indexOf(pDgName) > -1)) 
			{
				if(document.forms[0].elements[i].id==pControlAllName)
					continue;
				if(document.forms[0].elements[i].checked==true)
				{
					document.getElementById(pControlAllName).indeterminate=true;
					return;
				}
			}
		}
		document.getElementById(pControlAllName).indeterminate=false;
		document.getElementById(pControlAllName).checked=false;
	}
}
//Function: 
//Description/Purpose: Checks if any of the check boxes are checked or not. Depending on this
//						and the 1st parameter it will display alert messages
//Arguments: 1A. string - Name of form which holds the grid.
//			 1B. int  - Total number of previously selected Checkboxes from other pages
//           2. string - Alert message1
//			 3. string - Alert message2
//			 4. string - Confirm Message
//Return values: boolean
function ValidateDelete(pFrmName,prevCheckItems,alertMsg1,alertMsg2,confirmMsg) 
{   
	var flag=false 
    for(var i=0;i<document.forms[pFrmName].elements.length;i++) 
    {
        elm = document.forms[pFrmName].elements[i]
        if(elm.type=='checkbox') 
        {
			if(elm.checked)
			{
				flag = true
				break	
			}
        }
    }
    if(prevCheckItems==0&&flag==false )
    {
		alert(alertMsg2)
		return false;
	}
	else
	{
		if(confirm(confirmMsg))
		{
			return true
		}
		else
		{
		  alert (alertMsg1);
		  return false
		}
	}
}
//Function: open_windowfromnavbar
//Description/Purpose: opens the URL in new window
//Arguments: 1. string  - new_url
//Return values: None
function open_windowfromnavbar(new_url) 
{
	top_win = (top)?top:self;
	email = top_win.open(new_url,"eMail",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,left=50,top=5,width=900,height=700');
}
//Function: open_smallwindowfromnavbar
//Description/Purpose: 
//Arguments: url as string
//Return values: none
function open_smallwindowfromnavbar(new_url) 
{
	top_win = (top)?top:self;
	email = top_win.open(new_url,"eMail",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=510,height=410');
}
//Function: checkselected
//Description/Purpose: 
//Arguments: list ID
//Return values: boolean
function checkselected(lst_Id)
{
	var limit = 0;
	var selbox = document.getElementById(lst_Id);

	for(var i=1;i<selbox.options.length;i++) 
	{	
		if(selbox.options[i].selected)
		{
			return true;
		}
	}
	return false;
}
//Function: ValidateText
//Description/Purpose: check whether the value enter in between script tag
//Arguments: none
//Return values: boolean
function ValidateText()
{
	var elements = document.getElementsByTagName('input');
	var i=0;
	var strstring = '';
	var strCheckChar = "/:?<>|*\"\\";

	for (var i = 0; i < elements.length; i++)
	{
		elements.item(i).value; 
		if(elements.item(i).type=='text')
		{
			var strTextvalue = elements.item(i).value;
			if(strTextvalue == '')
				continue;
			for(var count=0;count<strCheckChar.length;count++)
			{
				if (strTextvalue.indexOf(strCheckChar.charAt(count)) > -1) 
				{
					alert('Special characters like '+strCheckChar+' are not allowed.');
					return false;
				} 
			}	
		}		
	}
	return true;
}
//Function: ValidateNumber
//Description/Purpose: check if the data entered in given text control is a valid number or not
//Arguments: length, ID of text control,boolean flag
//Return values: boolean
function ValidateNumber(maxLength,elementID,flag)
{
	var strEmpText=document.getElementById(elementID).value;
	var temp = new Array();
	temp = strEmpText.split(',');

	strEmpText="";
	//Remove commas from string
	for(var count=0; count < temp.length; count++)
	{
		strEmpText+=temp[count];
	}
	strEmpText=strEmpText.replace(".","");
	strEmpText=strEmpText.replace("$","");

	if( flag == false)
	{
		if (strEmpText.length > maxLength)
		{
			alert("Maximum length allowed is "+maxLength+" digit");
			return false;
		}
	}
	else
	{
		if (strEmpText.length>=maxLength)
		{
			return false;
		}
	}
}
//Function: KeyDownHandler
//Description/Purpose: If user hits enter on page then call click event handler of submit button
//Arguments: ID of button control
//Return values: none
function KeyDownHandler(btn) //Added On Mar-01-06
{
	if(event.keyCode == 13)
	{ 
	 	if(checkForKeyDown() == false) 
		{
			 event.returnValue = false;
			 if(document.getElementById(btn) != null)
			 {
				document.getElementById(btn).click(); 
			 }
			 else
			 {
				if(document.getElementById('ibtnSubmitTop') != null)
					document.getElementById('ibtnSubmitTop').click(); 
			 }
		}
		else
		{
			event.srcElement.click();
			event.returnValue = false;
		}
	}
}
//Function: checkForKeyDown
//Description/Purpose: 
//Arguments: none
//Return values: boolean
function checkForKeyDown()
{
	var clickCodeExists  = false;
	if (event.srcElement.type  == 'submit' || event.srcElement.type  == 'button') 
	{ return true; } 
	else
	{
		for(i=0;i<event.srcElement.attributes.length;i++)
		{ 
			if (event.srcElement.attributes[i].name=='onclick' || event.srcElement.attributes[i].name=='onkeypress' || event.srcElement.attributes[i].name=='href') 
			{ 
				if ((event.srcElement.attributes[i].value != '') && (event.srcElement.attributes[i].value != 'null')) 
					return true; 
			} 
		} 
	}	
	return(clickCodeExists);
}
//Function: Trim
//Description/Purpose: To remove white spaces in the beginning or at the end of a string
//Arguments: String to be processed
//Return values: String with post/preceding white spaces removed
function Trim(TRIM_VALUE)
{
	if(TRIM_VALUE.length < 1)
		return"";
	TRIM_VALUE = RTrim(TRIM_VALUE);
	TRIM_VALUE = LTrim(TRIM_VALUE);
	if(TRIM_VALUE=="")
		return "";
	else
		return TRIM_VALUE;
} 
//Function: RTrim
//Description/Purpose: To remove white spaces at the end of a string
//Arguments: String to be processed
//Return values: String with post white spaces removed
function RTrim(VALUE)
{
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	if(v_length < 0)
		return"";
	var iTemp = v_length -1;
	while(iTemp > -1)
	{
		if(VALUE.charAt(iTemp)==w_space)
		{}
		else
		{
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp=iTemp-1;
	} 
	return strTemp;
} 
//Function: LTrim
//Description/Purpose: To remove white spaces from the beginning of a string
//Arguments: String to be processed
//Return values: String with preceding white spaces removed
function LTrim(VALUE){
var w_space = String.fromCharCode(32);
if(v_length < 1){
return"";
}
var v_length = VALUE.length;
var strTemp = "";

var iTemp = 0;

while(iTemp < v_length){
if(VALUE.charAt(iTemp) == w_space){
}
else{
strTemp = VALUE.substring(iTemp,v_length);
break;
}
iTemp = iTemp + 1;
} 
return strTemp;
} 
//Function: TrimAllTextBox
//Description/Purpose:
//Arguments: none
//Return values: boolean
function TrimAllTextBox()
{
	var elements=document.getElementsByTagName('input');
	for (i=0;i<elements.length;i++) 
	{
		if(elements[i].type=='text')
			elements[i].value=Trim(elements[i].value);
	}
	return true;
}
// Function to verify that Profile name contains special character
//Function: ValidateTextForSpecialChar
//Description/Purpose:
//Arguments: ID of controls
//Return values: boolean
function ValidateTextForSpecialChar(id)
{
	var strCheckChar = "/:?<>|*\"\\";
	if (document.getElementById('lblErrorMessage') != null)
		document.getElementById('lblErrorMessage').innerText = ""; // To clear the error message
	
	var strTextvalue = document.getElementById(id).value;
	for(var count=0;count<strCheckChar.length;count++)
	{
		if (strTextvalue.indexOf(strCheckChar.charAt(count)) > -1) 
		{
			document.getElementById("lblErrorMessage").innerHTML='Special characters like '+strCheckChar+ ' are not allowed.'
			document.getElementById(id).focus();
			return false;
		} 
	}
	if(document.getElementById('cellErrorMsg') != null)	
		document.getElementById('cellErrorMsg').style.display="none";

	return true;
}
//Function: ValidateZipCode
//Description/Purpose: To check if entered zip code is valid or not
//Arguments: zip code to be validated
//Return values: boolean value if given zip code is valid zip code
function ValidateZipCode(zipEntry)
{
	var zipRegExp = /^[a-zA-Z0-9\s\-\*]+$/;
	var entry = new String();
	entry = Trim(zipEntry);
	
	if(entry.indexOf("*")=="-1")
	{
		if(entry.length < 4)
			return false;
		
		if(entry.length > 12)
			return false;
	}
	else
	{
		if(entry.length < 3)
			return false;
		
		if(entry.length > 5)
			return false;
		
		if(entry.length > (entry.indexOf("*") + 1))
			return false;
			
		var entryStr = entry.replace("*","");
		if (isNaN(entryStr))  
			return false;
	}
    
  	if (entry.search(zipRegExp)==-1)  
		return false;
	 
	return true; 
}
//Function: ValidateRevenue
//Description/Purpose: To check if entered revenue is valid or not
//Arguments: revenue to be validated
//Return values: boolean value if given revenue is valid 
function ValidateRevenue(revEntry)
{
	var revRegExp = /^\$?\d*(\,\d{3})*?$/;
	var entry = new String();
	entry = Trim(revEntry);
	
  	if (entry.search(revRegExp)==-1)
		return false;
	
	return true; 
}
//Function: ValidateNumberOfEmployee
//Description/Purpose: To check if entered employee entry is valid or not
//Arguments: employee entry to be validated
//Return values: boolean value if given employee entry is valid 
function ValidateNumberOfEmployee(empEntry)
{
	var empRegExp = /^\d*(\,\d{3})*$/;
	var entry = new String();
	entry = Trim(empEntry);
	
  	if (entry.search(empRegExp)==-1)  
		return false;
	 
	return true; 
}
//Function: ValidateDistance
//Description/Purpose: To check if entered distance entry is valid or not
//Arguments: distance entry to be validated
//Return values: boolean value if given distance entry is valid 
function ValidateDistance(distEntry)
{
	var distRegExp = /^\d*(\,\d{3})*$/;
	var entry = new String();
	entry = Trim(distEntry);
	
  	if (entry.search(distRegExp)==-1)  
		return false;
	 
	return true; 
}
//Function: ValidateDate
//Description/Purpose: To check if entered date is valid or not
//Arguments: date to be validated
//Return values: boolean value if given date is valid 
function ValidateDate(dateEntry)
{
	var dateRegExp = /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$/;
	var entry = new String();
	entry = Trim(dateEntry);
	
  	if (entry.search(dateRegExp)==-1)  
		return false;
	return isDate(entry); 	
}
//Function: isInteger
//Description/Purpose: Check for given param is integer
//Arguments: number to be validated
//Return values: boolean 
function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c<"0") || (c>"9"))) return false;
    }
    // All characters are numbers.
    return true;
}
//Function: stripCharsInBag
//Description/Purpose:
//Arguments: string, string 
//Return values: string
function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c)==-1) returnString += c;
    }
    return returnString;
}
//Function: daysInFebruary
//Description/Purpose:
//Arguments: number
//Return values: number
function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
}
//Function: DaysArray
//Description/Purpose:
//Arguments: number
//Return values: Array
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}
//Function: isDate
//Description/Purpose:
//Arguments: date string value
//Return values: boolean
function isDate(dtStr){
	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		return false
	}
return true
}
///start-this is the validation for valid day/month/year enter
//Function: ValidateDateRange
//Description/Purpose: To check if entered date range is valid or not i.e. fromdate is less than todate
//Arguments: fromdate, todate
//Return values: boolean value if given date range is valid 
function ValidateDateRange(fromDateEntry,toDateEntry)
{
	var fromDateEntry = Trim(fromDateEntry);
	var toDateEntry = Trim(toDateEntry);
	
	var tmpArr, tmpDayVal, tmpMonVal, tmpYearVal;
	if(fromDateEntry.indexOf("-") != "-1")
		tmpArr = fromDateEntry.split("-");
	else
		tmpArr = fromDateEntry.split("/");
	
	var fromDate = new Date(Number(tmpArr[2]),Number(tmpArr[0])-1,Number(tmpArr[1]));
	if(toDateEntry.indexOf("-") != "-1")
		tmpArr = toDateEntry.split("-");
	else
		tmpArr = toDateEntry.split("/");
	var toDate = new Date(Number(tmpArr[2]),Number(tmpArr[0])-1,Number(tmpArr[1]));
	if ((toDate-fromDate) < 0) 
		return false;
	 
	return true; 
}
//Function: CreateString
//Description/Purpose: to remove $ and , sign from entry
//Arguments: revenue entry
//Return values: string conaining entry free of signs
function RemoveSpecialCharacters(revText)
{   
	if(revText.indexOf('$') == 0)
        revText = revText.substring(1,revText.length);

    var correctFormatedString = new String();
    correctFormatedString = "";
    for(i=0;i < revText.length;i++)
    {
        if(revText.charAt(i)!= ',')
			correctFormatedString = correctFormatedString + revText.charAt(i);
    }
    return correctFormatedString;
}
//Function: ResetAllLabelColor
//Description/Purpose: to reset color of all labels passed to black
//Arguments: string containing ids of labels to be reseted
//Return values: none
function ResetAllLabelColor(LabelId)
{   
	var LabelIdArr;
	if(LabelId.indexOf(',') != "-1")
        LabelIdArr = LabelId.split(",");
    else
    {
		LabelIdArr = new Array(1);
		LabelIdArr[0] = LabelId;
    }
    
    for(i=0;i < LabelIdArr.length;i++)
    {
        if(document.getElementById(LabelIdArr[i]) != null)
            document.getElementById(LabelIdArr[i]).style.color = 'black';
    }
 
}
//Function: ValidateFirst/Last Name
//Description/Purpose: To check if entered Name is valid or not
//Arguments: Name to be validated
//Return values: boolean value if given Name is valid 
function ValidateName(nameEntry)
{
	var revRegExp = /^[a-zA-Z]+$/;
	var entry = new String();
	entry = Trim(nameEntry);
	
  	if (entry.search(revRegExp)==-1)  
		return false;
	 
	return true; 
}
//Function: GetBostonDate
//Description/Purpose: function to get current date in boston
//Arguments: none
//Return values: date object
function GetBostonDate()
{
    d = new Date();
    utc = d.getTime() + (d.getTimezoneOffset() * 60000);
    nd = new Date(utc + (3600000*(-5)));
    return nd;
}
//Function: MM_reloadPage
//Description/Purpose:
//Arguments: 
//Return values: none
function MM_reloadPage(init) 
{  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
//Function: MM_swapImgRestore
//Description/Purpose:
//Arguments: none
//Return values: none
function MM_swapImgRestore() 
{ //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
//Function: MM_preloadImages
//Description/Purpose:
//Arguments: none
//Return values: none
function MM_preloadImages() 
{ //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}

}
//Function: MM_findObj
//Description/Purpose:
//Arguments: number, number
//Return values: number
function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}
//Function: MM_swapImage
//Description/Purpose: 
//Arguments: none
//Return values: none
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
