<!-- functionsJava.js  -->

var f;

// STARTS JAVASCRIPT VALIDATION FUNCTIONS

function IsBlank( str ) {
	for(var i = 0; i < str.length; i++)
	{
		var c = str.charAt(i); if( (c!=' ') && (c!='\n') && (c!='\t') ) return false;
	}
	return true;
}

function IsValidChars(str) {
	if( (str == null) || (str == '') || IsBlank(str) ) return false; //empty and required

	return true;
}

function IsNumeric(str) {
	var validchar = "0123456789. ";
	var strchar;
	var result = true;
	for (i = 0; i < str.length && result == true; i++)
		{
		strchar = str.charAt(i);
		if (validchar.indexOf(strchar) == -1)
			{
			result = false;
			}
		}

	return result;
}

function IsInteger(str) {
	var validchar = "0123456789";
	var strchar;
	var result = true;
	for (i = 0; i < str.length && result == true; i++)
		{
		strchar = str.charAt(i);
		if (validchar.indexOf(strchar) == -1)
			{
			result = false;
			}
		}

	return result;
}

function IsFilteredOK(str,filterset) {
	var validchar = filterset;
	var strchar;
	var result = true;
	for (i = 0; i < str.length && result == true; i++)
		{
		strchar = str.charAt(i);
		if (validchar.indexOf(strchar) == -1)
			{
			result = false;
			}
		}

	return result;
}


function ValidateNames(str, required)
{

	var auxstr,validset;

	if( IsValidChars(str)==false )	
	{
		if(required==true)
			return "is blank";
		else
			return "";
	}
	else
	{
		auxstr = str.toUpperCase();
		validset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .'-";
		
		if( IsFilteredOK(auxstr, validset)==false )	
			return "contains invalid characters";
	}	
	return "";
}

function ValidEmail(str, AtStart, DotDiff, EndChars)
   {
   // The AtStart is the position where we want the "@" to be.
   // The DotDiff is the number of characters that need to be between the "@" and the "."
   // The EndChars determines the number of characters that end the email.
   var At = str.indexOf('@');
   var Dot = str.indexOf('.', At);
   var returnValue = true;
   
   if (At < AtStart || (Dot - At - 1) < DotDiff || (str.length - Dot - 1) < EndChars)
      {
      returnValue = false;
      }
   return returnValue;
   }

function ValidateEmail(str, required, alternate)
 {
	
		//Function parameters:
		//str: email string to be validated
		//required: true will provoke an error message to be returned if email is found blank
		//alternate: input string to be used as alternate value, for example "NA". If not needed, leave it as "" 
		
		var straux,strchar,strInvalids;
		var lastdotpos;
		var result = true;
		var state = 0;
		var filter;
		
		//These Regular Expressions failed when validating number of characters after last dot
		//They also admitted the sequence .@ which may indicate something is missing
		//filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		//filter  = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
					
		if (IsValidChars(str)==false) {
			if (required==true)
				return "is blank";
			else
				return "";
		}
		else {
			straux = str.toUpperCase();
			if(straux == alternate)
				return "";
			else{
				//Starts email validation
				for (i=0; i < straux.length; i++) {
					strchar = straux.charAt(i);
					if (strchar==" ") {
						return "invalid space character";
					}
					switch (state)
					{
						case 0:		//First character
								filter  = /^([a-zA-Z0-9])$/;
								if (filter.test(strchar)) 
									state = 1;
								else
									return "invalid starting character";
								break	
						case 1:		// After first character and before @ appearance
								filter  = /^([a-zA-Z0-9_\.\-\@])$/;
								if (!(filter.test(strchar))) 
									return "invalid character before @";
								else if (strchar == "@")
										if(straux.charAt(i-1)==".")
											return "invalid .@ sequence";
										else
											state = 2;
								break
								
						case 2:	// After @ appearance and before appearance of first dot
								filter  = /^([a-zA-Z0-9\.\-\@])$/;
								if (!(filter.test(strchar))) 
									return "invalid character after @";
								if (strchar == "@")
									return "multiple @ occurrence";
								else
									if(strchar == ".") {
										lastdotpos = i;
										if (straux.charAt(i-1)=="@")
											return "invalid @. occurrence";
										else
											state = 3;	
									}			
								break	
								
						case 3:	// After appearance of first dot
								filter  = /^([a-zA-Z0-9\.\-\@])$/;
								if (!(filter.test(strchar))) 
									return "invalid character after first dot";
								if (strchar == "@")
									return "multiple @ occurrence";
								else
									if(strchar == ".") {
										lastdotpos = i;
										if (straux.charAt(i-1)==".")
											return "invalid .. occurrence";
										else if (straux.charAt(i-1)=="@")
											return "invalid @. occurrence";
									}			
								break	
						}	//Switch
				} //For
				
				if (state<2)
					return "missing @";
				else if (state==2)
						return "missing dot after @";	
				else if (((straux.length - lastdotpos - 1) < 2 ) || ((straux.length - lastdotpos - 1) > 3 ))
						return "invalid number of characters after last dot";	
				
				//Ends email validation
			}
		}
		return "";
	}

function ValidateEmailEG(str)
   {
   var straux, strchar, strInvalids;
   var lastdotpos;
   var state = 0;
   var filter;
   var ReturnValue = 0;
   
   /**************************************************************************
   Return Values     Description
   -------------------------------
      1              Invalid Starting String
      2              Invalid character BEFORE "@"
      3              Invalid sequence ".@"
      4              Invalid character AFTER "@"
      5              Multiple "@" occurences
      6              Invalid sequence "@."
      7              Invalid character AFTER first dot
      8              Invalid ".." sequence
      9              Missing "@"
     10              Missing "." AFTER "@"
     11              Invalid number of characters after last dot
   ***************************************************************************/
   			
   straux = str.toUpperCase();
   //Starts email validation
   for (i=0; i < straux.length; i++)
      {
		strchar = straux.charAt(i);
      switch (state)
         {
         case 0:		//First character
            filter  = /^([a-zA-Z0-9])$/;
            if (filter.test(strchar)) 
               state = 1;
            else
               ReturnValue = 1;
            break	
         case 1:		// After first character and before @ appearance
            filter  = /^([a-zA-Z0-9_\.\-\@])$/;
            if (!(filter.test(strchar))) 
               ReturnValue = 2;
            else if (strchar == "@")
               if(straux.charAt(i-1)==".")
                  ReturnValue = 3;
               else
                  state = 2;
            break
         case 2:	// After @ appearance and before appearance of first dot
            filter  = /^([a-zA-Z0-9\.\-\@])$/;
            if (!(filter.test(strchar))) 
               ReturnValue = 4;
            if (strchar == "@")
               ReturnValue = 5;
            else
               if(strchar == ".") {
                  lastdotpos = i;
                  if (straux.charAt(i-1)=="@")
                     ReturnValue = 6;
                  else
                     state = 3;	
               }			
            break	
         case 3:	// After appearance of first dot
            filter  = /^([a-zA-Z0-9\.\-\@])$/;
            if (!(filter.test(strchar))) 
               ReturnValue = 7;
            if (strchar == "@")
               ReturnValue = 5;
            else
               if(strchar == ".") {
                  lastdotpos = i;
                  if (straux.charAt(i-1)==".")
                     ReturnValue = 8;
                  else if (straux.charAt(i-1)=="@")
                     ReturnValue = 6;
               }			
            break	
			}	//Switch
	   } //For
	if (((straux.length - lastdotpos - 1) < 2 ) || ((straux.length - lastdotpos - 1) > 3 ))
      ReturnValue = 11;
	if (straux.indexOf("@") == -1)
      ReturnValue = 9;
	if (state == 2)
      ReturnValue = 10;
   //Ends email validation
   return(ReturnValue);
   }

function ValidateZipCode(str) {

	if( IsValidChars(str)==false )	
		return "is blank";
	else
	{
		if( IsInteger(str)==false )	
			return "contains invalid characters";
		else
		{
			if( str.length != 5 )	
				return "must be a 5-digits code";
		}		
	}	
	return "";
}


function CleanPhoneValue(instr) {

	var str = "";
	var strchar;
	var validchar = "0123456789";
		
	for (i = 0; i < instr.length; i++)
		{
		strchar = instr.charAt(i);
		if (validchar.indexOf(strchar) != -1)
			{
				str = str + strchar;
			}
		}
	return str;
}


function ValidatePhoneWithDelims(instr) {

	var str = CleanPhoneValue(instr);
	
	if( IsValidChars(str)==false )	
		return "no digit was found";
	else
	{
		if( str.length != 10 )	
				return "must contain 10 digits";
	}	
	return "";
}


function ValidateIntegerRange(str, LowerLimit, UpperLimit){
	
		var aux;

		if( IsValidChars(str)==false )	
			return "is blank";	
		else {
			aux = parseInt(str,10);
			if (str!=aux)
				return "contains invalid characters";
			else {
				diff= aux - UpperLimit;
				if (diff>0)
					return ("is higher than " + UpperLimit);
				else{
					diff= LowerLimit - aux;
					if (diff>0)
						return ("is lower than " + LowerLimit);
				}	
			}
		}	
		return "";
}

	
function ValidateFloatRange(str, LowerLimit, UpperLimit){
	
		var aux;

		if( IsValidChars(str)==false )	
			return "is blank";	
		else {
			aux = parseFloat(str);
			if (str!=aux)
				return "contains invalid characters";
			else {
				diff= aux - UpperLimit;
				if (diff>0)
					return ("is higher than " + UpperLimit);
				else{
					diff= LowerLimit - aux;
					if (diff>0)
						return ("is lower than " + LowerLimit);
				}	
			}
		}	
		return "";
}


function ValidateMoneyRange(str, LowerLimit, UpperLimit){

	var res, aux;
	
	res = ValidateFloatRange(str, LowerLimit, UpperLimit)

	if( res != "" )
		return res; 
	else {
		aux = str.indexOf(".");
		if(( aux!= -1 ) && ((str.length - aux -1) > 2 )) 
			return "must have a maximum of two decimal positions";
	}
	return "";
}


function IsDateFormat(str) {
	var validchar = "0123456789/ ";
	var strchar;
	var result = true;
		for (i = 0; i < str.length && result == true; i++)
			{
			strchar = str.charAt(i);
			if (validchar.indexOf(strchar) == -1)
				{
				result = false;
				}
			}

		return result;
}


function CheckTextAreaTextLength(elmnt, AlertPercent, BkgCol, TextCol, AlertBkgCol, AlertTextCol){

	// Examples:
	// AlertPercent = "70"
	// BkgCol = "#FFFFFF", 	TextCol = "#24708b"
	// AlertBkgCol = "#FF0000", AlertTextCol = "#FFFFFF"
	
	var FilledRate = elmnt.value.length / elmnt.maxlength
	
	if (elmnt.value.length > elmnt.maxlength)
		elmnt.value = elmnt.value.substr(0, elmnt.maxlength)
	
	if (FilledRate > AlertPercent/100){
		elmnt.style.background = AlertBkgCol
		elmnt.style.color = AlertTextCol
	}
	else
	{
		elmnt.style.background = BkgCol
		elmnt.style.color = TextCol
	}
	
}


function replaceall(instr, toberep, repwith){


	var tempIn = instr;
	var tempOut = "";
	var i = tempIn.indexOf(toberep);

	while(i > -1)
	{
		tempOut = tempOut + tempIn.substr(0, i) + repwith;
		tempIn = tempIn.substr(i + toberep.length)
		i = tempIn.indexOf(toberep);			
	}
	
	tempOut = tempOut + tempIn;
	

	return tempOut;

}


function openWin(URL, w, h, scroll, size) {

	  tb = "no"  //toolbars
	  mb = "no"  //menubars
	  sb = "yes" //scrollbars
	  st = "yes"  //status
	  var winl = (screen.availWidth - w)/2;
	  var wint = (screen.availHeight - h)/2;
	  
	  strWindow = "width="+w+",height="+h+",top="+wint+",left="+winl;
	  strWindow = strWindow+",toolbar="+tb+",menubar="+mb+",scrollbars="+sb;
	  strWindow = strWindow+",status="+st;
	  
	  var win = window.open(URL,"_blank",strWindow);	
	  //alert(URL);
	  //alert(strWindow);
	  //alert(win);
	  if (win.opener == null) win.opener = window; // make sure the new window can use 'opener' to access this parent
	  win.opener.name = "opener"; // this is so action commands can use opener as a target object
	  
}
// ENDS JAVASCRIPT VALIDATION FUNCTIONS

/*
function changeon(e) { event.srcElement.style.backgroundColor = '#ffffe0'; } //#f5f5f9
function changeoff(e) { event.srcElement.style.backgroundColor = '#ffffff'; }


NEVER USED
 USED for Medical Services
function IsValidCharsLength(str) {
	if ( str.length < 5 ) return false; //empty and required

	return true;
}

function IsNineChars(str) {
	if ( str.length != 9 ) return false; //empty and required

	return true;
}

function IsNumber(str) {
	var validchar = "0123456789";
	var strchar;
	var result = true;
	for (i = 0; i < str.length && result == true; i++)
		{
		strchar = str.charAt(i);
		if (validchar.indexOf(strchar) == -1)
			{
			result = false;
			}
		}

	return result;
}*/


var DHTML = (document.getElementById || document.all || document.layers);

function getObj(name)	{
	  if (document.getElementById)	{    	// DOM level 1 browsers: IE 5+, NN 6+
	  	this.obj = document.getElementById(name);
		this.style = document.getElementById(name).style;
	  }
	  else if (document.all)	{  			// IE 4
		this.obj = document.all[name];
		this.style = document.all[name].style;
	  }
	  else if (document.layers)  { 			// NN 4
	   	this.obj = document.layers[name];
	   	this.style = document.layers[name];
	  }
}

// this function makes the image visible
function showpic(visiblechunk) {
		if (!DHTML){
		 alert ('Sorry, your browser can\'t handle DHTML!');
		 return;
		}
		var displayedpic = new getObj(visiblechunk);

		displayedpic.style.visibility = 'visible';
	}

// this function makes the image invisible
function hidepic(invisiblechunk) {
		if (!DHTML){
		 alert ('Sorry, your browser can\'t handle DHTML!');
		 return;
		}

		var hiddenpic = new getObj(invisiblechunk);

		hiddenpic.style.visibility = 'hidden';
	}


// This function is exclusively for drop down objects
function AddOption(ObjI, Obj, Value, Text, IsSelected)
   {
   Obj.options[ObjI] =  new Option();
   Obj.options[ObjI].value = Value;
   Obj.options[ObjI].text = Text;
   Obj.options(ObjI).selected = IsSelected;
   }
   
   
// This function is exclusively for drop down objects
function RemoveOption(ObjI, Obj)
   {
   if (Obj.options.length > 0)
      {
      if (ObjI > Obj.options.length - 1)
         {
         ObjI = Obj.options.length - 1;
         }
      Obj.options.remove(ObjI);
      }
   }
   
   
function CopySelectContent(Source, Dest) {
		// Empty destination options
	
		var i;
		var DestSize = Dest.options.length;
		
		for(i = 0; i < DestSize; i++)
		{
			Dest.remove(0);
		}
		
		// Copy Options
		var SourceSize = Source.options.length;
		for(i = 0; i < SourceSize; i++)
		{
			Dest.options[i] =  new Option();
			Dest.options[i].value = Source.options[i].value;
			Dest.options[i].text = Source.options[i].text;
			Dest.options(i).selected = Source.options(i).selected;
		}
	}
	
function CheckToJump(elmnt,dest) {

		if(elmnt.value.length == elmnt.maxLength)
			document.getElementById(dest).focus();
}


/************************************* Credit Card and Expiration Date Validation ****************************/
function ValidateCCnum(Obj)
   {
   var CCNumber = Obj.value;
   if (CCMod10(CCNumber) || CCNumber == '')
      {
      return true;
      }
   else
      {
      alert('Invalid Card Number');
      Obj.focus();
      return false;
      }
   }


function CCMod10(CCard)
{
var ReturnResult = true;
var CcLength;
var Weight = 1;
var Acum = 0;
var CurrentDigit;
if (IsInteger(CCard))
   {
   CcLength = CCard.length;
   if (
      (CCard.substr(0, 1) == '4' && (CcLength == 13 || CcLength == 16)) ||   // Visa
      (+(CCard.substr(0, 2)) >= 51 && +(CCard.substr(0, 2)) <= 55 && CcLength == 16) ||  // Mastercard
      ((CCard.substr(0, 2) == '34' || CCard.substr(0, 2) == '37') && CcLength == 15) ||  // Amex
      (CCard.substr(0, 4) == '6011' && CcLength == 16)  // Discover
      )
      {
      for (i = CcLength - 1; i >= 0; i--)
         {
         CurrentDigit = (+CCard.substr(i, 1));
         Acum += parseInt((CurrentDigit*Weight)/10) + (CurrentDigit*Weight)%10;
         Weight = Weight == 1 ? 2 : 1;
         }
      ReturnResult = Acum % 10 == 0;
      }
   else
      ReturnResult = false;
   }
else
   ReturnResult = false;
return ReturnResult;
}


function ValidateExpDate(expMonthFieldName, expYearFieldName, ForceCompare)
   {
   var returnValue = true;
   var ObjYear = document.getElementById(expYearFieldName);
   var theYear = document.getElementById(expYearFieldName).value;
   var theMonth = document.getElementById(expMonthFieldName).value;
   var IsExpired
   
   // This piece forms the YYYYMM value from today's date
   var today = new Date();
   var todayMonth = (today.getMonth() + 1);
   var todayMM = todayMonth;
   var todayYYYY = (today.getFullYear());
   var todayYYYYMM;
   
   todayMM = (todayMM.toString.length < 2 ? '0' : '') + todayMM;
   todayYYYYMM = todayYYYY + todayMM;
   
   IsExpired = (theYear + theMonth < todayYYYYMM)
   if (ForceCompare && IsExpired)
      {
      returnValue = false;
      }
   else if (theYear != '' && theMonth != '' && IsExpired)
     {
     alert('Invalid Expiration Date');
     ObjYear.focus();
     returnValue = false;
     }
   return returnValue;
   }
/********************************************************************************************************/

/************************************* ACH Routing Number Validation ************************************/
function ACHMod10(AchRt)
   {
   var Acum
   Acum = 3*AchRt.substr(0,1) + 3*AchRt.substr(3,1) + 3*AchRt.substr(6,1) + 
          7*AchRt.substr(1,1) + 7*AchRt.substr(4,1) + 7*AchRt.substr(7,1) + 
          1*AchRt.substr(2,1) + 1*AchRt.substr(5,1) + 1*AchRt.substr(8,1);
   return ((Acum % 10) == 0);
   }


function ValidateAchRt(Obj)
   {
   var RouteNumber = Obj.value;
   if (ValidACHRNumber(RouteNumber) || RouteNumber == '')
      {
      return true;
      }
   else
      {
      alert('Invalid Routing Number');
      Obj.focus();
      return false;
      }
   }


function ValidACHRNumber(RouteNum)
	{
	var returnValue = true;
	if (!IsInteger(RouteNum) ||
	    RouteNum.length != 9 ||
	    RouteNum == '000000000')
	   {
	   returnValue = false;
	   }
	else if (!ACHMod10(RouteNum))
	   {
	   returnValue = false;	   
	   }
	return returnValue;
	}


function ValidateAcctNumber(Obj)
   {
   var AcctNumber = Obj.value;
   if (ValidACHAcctNum(AcctNumber) || AcctNumber == '')
      {
      return true;
      }
   else
      {
      alert('Invalid Account Number');
      Obj.focus();
      return false;
      }
   }


function ValidACHAcctNum(AcctNum)
	{
	var returnValue = true;
	if (!IsInteger(AcctNum) ||
	    AcctNum.length < 3 ||
	    AcctNum.length > 17)
	   {
	   returnValue = false;
	   }
	return returnValue;
	}
/********************************************************************************************************/
   

function CalculateAgeCL()
{
//Parameters to be passed assuming current date as reference:
//xYear, xMonth, xDay
//Parameters to be passed using any reference date:
//xYear, xMonth, xDay, rYear, rMonth, rDay
//Additional Parameter Information:
//xYear, xMonth, xDay are related with the corresponding date of birth
//rYear, rMonth, rDay are related with the corresponding reference date

xYear = arguments[0];
xMonth = arguments[1];
xDay = arguments[2];
rYear = arguments[3]
rMonth = arguments[4]
rDay = arguments[5]

var xsYear = new String(xYear)
var xsMonth = new String(xMonth)
var xsDay = new String(xDay)

var rsYear
var rsMonth
var rsDay


if (arguments[3] == null)
{
    //Assuming current date as reference
    var rNow = new Date()
    rYear	= rNow.getFullYear();
    rMonth	= rNow.getMonth()+1;
    rDay	= rNow.getDate();
}

 rsYear = new String(rYear)
 rsMonth = new String(rMonth)
 rsDay = new String(rDay)


xsMonth = (xsMonth.length < 2) ? "0" + xsMonth: xsMonth;
xsDay= (xsDay.length < 2) ? "0" + xsDay: xsDay;

if(!(rYear>xYear))
   return 0


var xsDateResult = xsMonth + xsDay 


rsMonth= (rsMonth.length < 2) ? "0" + rsMonth: rsMonth;
rsDay= (rsDay.length < 2) ? "0" + rsDay: rsDay;

var rsDateResult =  rsMonth + rsDay 

var CalcAge = rYear - xYear


if ((xsDateResult > rsDateResult) )
    CalcAge = CalcAge - 1



return CalcAge 

}


function valdobdate(vmonth,vday,vyear)
{
var bisy = vyear%4

var d  = new Date()
var dd = (d.getDate().toString().length < 2) ? "0" + d.getDate() : d.getDate();
var mm = ((d.getMonth()+1).toString().length < 2) ? "0" + (d.getMonth()+1) : (d.getMonth()+1);
var yy = d.getFullYear().toString()

var YYYYMM= yy+mm+dd

var dobd  = vyear+ vmonth + vday

	if(YYYYMM < dobd) return false
	
 	if((vmonth == "")||(vday == "")||(vyear==""))return false
 	
	if((vmonth==4)||(vmonth==6)||(vmonth==9)||(vmonth==11))
	{
		if(vday == 31)	return false
	}
	if(vmonth==2 )
	{	
		if((bisy == 0 )&& (vday > 29 )) return false
		
		if((bisy != 0 )&& (vday > 28 )) return false
   }
  	
return true	

}

function ValidateDate(ObjMM, ObjDD, ObjYYYY)
   {
   var ReturnValue = true;
   var MM = ObjMM.value
   var DD = ObjDD.value
   var YYYY = ObjYYYY.value
   if (MM != '' && DD != '' && YYYY != '')
      {
      ReturnValue = valdobdate(MM, DD, YYYY);
      if (!ReturnValue)
         {
         alert("Invalid Date");
         ObjMM.value = '';
         ObjDD.value = '';
         ObjYYYY.value = '';
         }
      }
   return(ReturnValue);
   }

// FUNCTION TO VALIDATE DATE 
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

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(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 (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(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(dtStr){
	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){
		alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}

function AllUpper(obj)
   {
   obj.value = obj.value.toUpperCase();
   }


function AllLower(obj)
   {
   obj.value = obj.value.toLowerCase();
   }


function AllProper(obj)
   {
   obj.value = obj.value.substr(0, 1).toUpperCase() + 
               obj.value.substr(1, obj.value.length - 1).toLowerCase();
   }


function RemoveExtraSpaces(str, Spaces2Allow)
{
	var strchar;
	var OutputStr = '';
	var SpaceCount = 0;
	var IncludeChar;
	for (i = 0; i < str.length; i++)
		{
		strchar = str.charAt(i);
      IncludeChar = true;
		if (strchar == ' ')
			{
			++SpaceCount;
			if (SpaceCount > Spaces2Allow)
			   {
            IncludeChar = false;
			   }
			}
      else
         {
         SpaceCount = 0;
         }
      if (IncludeChar)
         {
         OutputStr += strchar;
         }
		}

	return OutputStr;
}

function CleanString(InStr)
   {
   var TmpString = InStr;
   TmpString = TmpString.toUpperCase();
   TmpString = replaceall(TmpString, '/', ' ');
   TmpString = replaceall(TmpString, '\\', ' ');
   TmpString = replaceall(TmpString, "'", ' ');
   TmpString = replaceall(TmpString, "#", ' ');
   TmpString = replaceall(TmpString, "(", ' ');
   TmpString = replaceall(TmpString, ")", ' ');
   TmpString = RemoveExtraSpaces(TmpString, 1);
   
   return TmpString;
   }


function CleanAddress(InStr)
   {
   var TmpString = InStr;
   TmpString = TmpString.toUpperCase();
   TmpString = replaceall(TmpString, '\\', ' ');
   TmpString = replaceall(TmpString, "'", ' ');
   TmpString = replaceall(TmpString, "#", ' ');
   TmpString = replaceall(TmpString, "(", ' ');
   TmpString = replaceall(TmpString, ")", ' ');
   TmpString = RemoveExtraSpaces(TmpString, 1);
   
   return TmpString;
   }


function ClipCopy(obj)
   {
   cb = obj.createTextRange();
   cb.execCommand("Copy");
   }


function ClipPaste()
   {
   var cb = document.selection.createRange(); 
   cb.execCommand("paste");
   }


function CheckPlan(PlanType)
   {
   var myString = document.getElementById("strPlan").value
   if (document.getElementById("chkInv" + PlanType).checked)
      myString = myString + PlanType + ",";
   else
      myString = myString.replace(PlanType + ",", "");
   document.getElementById("strPlan").value = myString;
   }


function CheckMenu(MenuId)
   {
   var myMString = document.getElementById("strMenu").value
   if (document.getElementById("M" + MenuId).checked)
      myMString = myMString + MenuId + ",";
   else
      myMString = myMString.replace(MenuId + ",", "");
   document.getElementById("strMenu").value = myMString;
   }

function CheckState(ObjName)
   {
   var myString = document.getElementById('strNoLicSt').value;
   var ObjVal = document.getElementById(ObjName).value; 
   if (document.getElementById(ObjName).checked)
     {
     myString = myString + ObjVal + ",";}
   else
      {myString = myString.replace(ObjVal + ",", "");}
   document.getElementById('strNoLicSt').value = myString;
   }   

   

function Dec2Hex(Num)
   {
    var Result = "";
    var Remainder = 0;
    var nn = Num; 
    do
      {
      Remainder = nn % 16 ;
      nn = nn / 16 ;
      switch (Remainder)
         {
         case 10: Result = "A" + Result; break ;
         case 11: Result = "B" + Result; break ;
         case 12: Result = "C" + Result; break ;
         case 13: Result = "D" + Result; break ;
         case 14: Result = "E" + Result; break ;
         case 15: Result = "F" + Result; break ;
         default: Result = Remainder + Result; break ;
         }
      }
   while (nn > 0);
   return Result;
   }

function Hex2Dec(str)
   {
    var Result = 0;
    var StrLength = str.length;
    var HexPower = StrLength - 1;
    var Multiplier;
    var CurrChar;
    var CurrVal;
    for (i = 0; i < StrLength; i++)
      {
      Multiplier = Math.pow(16, HexPower - i);
      CurrChar = str.substr(i, 1).toUpperCase();
      switch (CurrChar)
         {
         case "A": CurrVal = 10; break ;
         case "B": CurrVal = 11; break ;
         case "C": CurrVal = 12; break ;
         case "D": CurrVal = 13; break ;
         case "E": CurrVal = 14; break ;
         case "F": CurrVal = 15; break ;
         default: CurrVal = +CurrChar; break ;
         }
      Result = Result + Multiplier * CurrVal;
      }
   return Result;
   }

function SetScroll(XName, YName)
   {
       document.getElementById(YName).value = document.body.scrollTop;
       document.getElementById(XName).value = document.body.scrollLeft;
   }

function getCookie(Cname)
   {
   if (document.cookie.length>0)
     {
     Cstart=document.cookie.indexOf(Cname + "=")
     if (Cstart != -1)
       { 
       Cstart = Cstart + Cname.length+1 
       Cend=document.cookie.indexOf(";",Cstart)
       if (Cend == -1) Cend=document.cookie.length
       return unescape(document.cookie.substring(Cstart,Cend))
       } 
     }
   return null
   }
   
function parseIt(str, startDelimiter, endDelimiter)
   {
   var Start = str.indexOf(startDelimiter) + startDelimiter.length
   var End = str.indexOf(endDelimiter)
   var retValue
   if (End == "")
      {
      retValue = str.slice(Start)
      }
   else
      {
      retValue = str.slice(Start, End)
      }
   return retValue
   }

function FetchXMLRecordSet(url)
   {
   var ReturnValue;
   var xmlhttp = null;
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
   if (xmlhttp != null)
      {
      xmlhttp.open("POST", url, false);
      xmlhttp.send(null);
      if (xmlhttp.status == 200)
      	{
      	ReturnValue = xmlhttp.responseText;
      	}
      else
      	{
      	// Could not retrieve the data.
      	ReturnValue = "1";
       	}
      }
	else
      {
      // Browser does not support xmlhttp.
   	ReturnValue = "2";
      }
   return(ReturnValue);
   }

function Strextract(cStr, StartStr, EndChar)
   {
   var Startlen = StartStr.length;
   var StartPos = cStr.indexOf(StartStr) + Startlen;
   var EndPos = cStr.indexOf(EndChar, StartPos);   
   return cStr.slice(StartPos, EndPos);
   }

function RemoveInvalidChars(str, TheSet)
   {
   var Set0 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
   var Set1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
   var Set2 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@";
   var Set3 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@_-.";
   var Set4 = "1234567890";
   var ValidSet;
   var strChar;
   var Outstr = "";
   ValidSet = Set0;
   if (TheSet == "1")
      {
      ValidSet = Set1;
      }
   if (TheSet == "2")
      {
      ValidSet = Set2;
      }
   if (TheSet == "3")
      {
      ValidSet = Set3;
      }
   if (TheSet == "4")
      {
      ValidSet = Set4;
      }
   for (i = 0; i < str.length; i++)
      {
      strChar = str.charAt(i);
      if (ValidSet.indexOf(strChar) != -1)
         Outstr = Outstr + strChar;
      }
   return(Outstr);
   } 

function dateCompare(date1, date2)
   {
   /*
   0...both dates are the same
   1...date1 comes after date2 (or date2 come before date1)
   -1...date1 comes before date2 (or date2 comes after date1)
   */
   var ReturnValue;
   var date1UTC;
   var date2UTC;
   date1UTC = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate(), 0, 0, 0, 0);
   date2UTC = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate(), 0, 0, 0, 0);
   
   if (date1UTC == date2UTC)
      ReturnValue = 0;
   else if (date1UTC < date2UTC)
      ReturnValue = -1;
   else
      ReturnValue = 1;
   return(ReturnValue);
   }

function CheckSSN(ObjSSN, ClearField)
   {
   var SSLen = ObjSSN.value.length;
   if ((!IsInteger(ObjSSN.value) || SSLen != 9) && SSLen > 0)
   	{
   	alert("SSN must be 9 digits ")
   	if (ClearField)
   	   {
      	ObjSSN.value = '';
      	}
//      document.InsHEnrollForm.ssn.focus();
   	}
   }     

function toCurrency(num)
   {
   num = +num;
   var sNum1 = num.toFixed(2).toString();
   var sIntNum = Math.floor(num).toString();
   var sNum2 = AddCommas(sIntNum);
   var sNum2 = "$" + sNum2 + sNum1.substring(sNum1.indexOf("."));
   return(sNum2);
   }

function AddCommas(sNum)
   {
   var lenNum = sNum.length;
   var modNum = lenNum % 3;
   var commaCnt = Math.floor(lenNum/3) - 1;
   var k = 0;
   var RetStr = "";
   if (commaCnt < 0)
      {
      commsCnt = 0;
      }
   if (modNum > 0)
      {
      RetStr = sNum.substr(k, modNum);
      k = k + modNum;
      }
   for (i=1; i<= commaCnt; i++)
      {
      RetStr = RetStr + ((RetStr.length > 0)?',':'') + sNum.substr(k, 3);
      k = k + 3;
      }
   if (sNum.substr(k, 3).length > 0)
      {
      RetStr = RetStr + ((RetStr.length > 0)?',':'') + sNum.substr(k, 3);
      }
   return(RetStr);
   }
   
function CheckNoSaleStates(State, ProductSource)
   {
   var i;
   var j;
   var ReturnValue;
   var ColumnCount;
   var SelectObj; 
   var RowCount;
   var xmlDOM = null;
   var ReturnHttp;
   var RetVal;
   var url = "/ASPFetchers/GetSPROCAsXML.asp?SPROC=EG_CheckNoNoStates ";
   url = url + "'" + State + "', '" + ProductSource + "'";
   ReturnValue = -1;
   if (State != '' && ProductSource != '')
      {
      ReturnHttp = FetchXMLRecordSet(url);
      xmlDOM = new ActiveXObject("Msxml2.DOMDocument.5.0");
      if (ReturnHttp == "1")
         {
         alert("Could not retrieve data!");
         }
      else if (ReturnHttp == "2")
         {
         alert("xmlHttp object not supported!");
         }
      else
         {
         xmlDOM.async = false;
         xmlDOM.loadXML(ReturnHttp);
         RSSitems = xmlDOM.getElementsByTagName("item");
         RowCount = RSSitems.length;
         ReturnValue = 1;
         for (i = 0; i < RowCount; i++)
            {
            if (RSSitems.item(i).childNodes.item(0).nodeName.toUpperCase() == "RETURNVALUE")
               {
               RetVal = unescape(RSSitems.item(i).childNodes.item(j).text);
               }
            }
         ReturnValue = RetVal.toUpperCase() == "TRUE" ? 1 : 0;
         }
      }
	else
		{
      alert('State OR Product Source not included!');
      ReturnValue = -1;
		}
   return(ReturnValue);
   }

function IsNpaNxxGood(NpaNxx)
   {
   var xmlDOM = null;
   var urlPh = "/ASPFetchers/GetSPROCAsXML.asp?SPROC=EG_CheckNpaNxx '" + NpaNxx+ "'";
   var ReturnHttp;
   var FoundIT = "False";
   ReturnHttp = FetchXMLRecordSet(urlPh);
   xmlDOM = new ActiveXObject("Msxml2.DOMDocument.5.0");
   if (ReturnHttp == "1")
      {
      alert("Could not retrieve data!");
      }
   else if (ReturnHttp == "2")
      {
      alert("xmlHttp object not supported!");
      }
   else
      {
      xmlDOM.async = false;
      xmlDOM.loadXML(ReturnHttp);
      RSSitems = xmlDOM.getElementsByTagName("item");
      FoundIT = unescape(RSSitems.item(0).childNodes.item(0).text);
      }
   return(FoundIT);
   }
   



function GetCarrier(State, ProductSource)
   {
   var i;
   var Carrier;
   var RowCount;
   var xmlDOM = null;
   var ReturnHttp;
   var url = "/ASPFetchers/GetSPROCAsXML.asp?SPROC=ZF_GetCarrierFromStates ";
   url = url + "'" + State + "', '" + ProductSource + "'";
   url = url + ",'', 1";
   Carrier = 'UNK';
   if (State != '' && ProductSource != '')
      {
      ReturnHttp = FetchXMLRecordSet(url);
      xmlDOM = new ActiveXObject("Msxml2.DOMDocument.6.0");
      if (ReturnHttp == "1")
         {
         alert("Could not retrieve data!");
         }
      else if (ReturnHttp == "2")
         {
         alert("xmlHttp object not supported!");
         }
      else
         {
         xmlDOM.async = false;
         xmlDOM.loadXML(ReturnHttp);
         RSSitems = xmlDOM.getElementsByTagName("item");
         RowCount = RSSitems.length;
         for (i = 0; i < RowCount; i++)
            {
            if (RSSitems.item(i).childNodes.item(0).nodeName.toUpperCase() == "CARRIER")
               {
               Carrier = unescape(RSSitems.item(i).childNodes.item(0).text);
               }
            }
         }
      }
	else
		{
      alert('State OR Product Source not included!');
		}
   return(Carrier);
   }

  
// ENDS JAVASCRIPT UTILITY FUNCTIONS

