// Workaround to prevent "exception thrown but not caught" error
window.onerror=function(message,url,line){return true;};

//*********************************************************************/
//	Function Name		: isRequired
//	Purpose			: checks if field is null/spaces 
//	Parameters in		: form object for which date validation is required
//	Parameters out		: true/false 
//	Returns			: false in case field is empty or spaces
//	Notes			: If Spaces are entered the functions trims the 
//						  spaces	
//*********************************************************************/
function isRequired(formObj) { 	
  var reWhitespace = /^\s+$/
  var s = formObj.value;    
   if ((s == null) || (s.length == 0) || (reWhitespace.test(s))) {
       return false;
	} else {
    return true;
    }  
}

//*********************************************************************/
//	Function Name		: isRange
//	Purpose			: checks if field value is in Range with given minLength
//						  and maxLength				 
//	Parameters in		: form object for which Range validation is required
//	Parameters out		: true/false 
//	Returns			: true if the value is in range with minLength and maxLength
//						  else returns false
//*********************************************************************/
function isRange(formObj, minValue, maxValue) {
	var temp;
	if(isInteger(formObj)) {
		if(minValue > maxValue) {
			temp = minValue;
        	minValue = maxValue;
        	maxValue = temp;	
		}
		if (formObj.value < minValue || formObj.value > maxValue ) {
			return false;
		} else {
			return true;
		} 
	} else {
		return false;
	}
}

//*********************************************************************/
//	Function Name		: isEqual
//	Purpose			: checks whether the two fields are equal 
//	Parameters in		: form objects for which Equality to be validated
//	Parameters out		: true/false 
//	Returns			: true in case the two field values are equal else
//						  returns false
//*********************************************************************/
function isEqual(formObj1, formObj2) {	
	if(formObj1.value != formObj2.value) {		
		return false;
	} else {		
		return true;
	}
}

//*********************************************************************/
//	Function Name		: isTitleCase
//	Purpose			: checks if field value is TitleCase 
//	Parameters in		: form object for which TitleCase validation is required
//	Parameters out		: true/false 
//	Returns			: true in case field value is TitleCase else returns false
//*********************************************************************/
function isTitleCase(formObj) {

	var evaluem = trimTxt(formObj);
    var elength = evaluem.length;
	var flag = true;
	
	if(!isRequired(formObj)) {
  		return true;
	}
	if(evaluem.charAt(0) > 'A' && evaluem.charAt(0) < 'Z' ) {
		for (var i=0; i < elength ; i++) {
			if (evaluem.charAt(i) == ' ') {
				if(!((evaluem.charAt(i+1) > 'A') && (evaluem.charAt(i+1) < 'Z'))) {
					flag = false;
					break;
				}
			}
		}
	} else {
		flag = false;
		}
	return flag; 
}

//*********************************************************************/
//	Function Name		: requiredIf
//	Purpose			: checks whether the field is required or not based on 
//						  the condition of other component			   
//	Parameters in		: form objects for which requiredIf validation is required
//	Parameters out		: true/false 
//	Returns			: When condition is true, it returns false when the field 
//						  is empty, else returns true
//*********************************************************************/
function requiredIf(formObj1, formObj2) {

   var condition = formObj1.checked;
   var isValid;
   if (condition == true) {
  	 if(!isRequired(formObj2)) {
	  	 isValid = false;
  	 } else {
  	 isValid = true;
  	 }
  	} else {
    isValid = true;
    }
    return isValid;	 
}

//*********************************************************************/
//	Function Name		: isEmail
//	Purpose			: checks for  a valid e mail address
//	Parameters in		: form object for which email validation is required
//	Parameters out		: true/false 
//	Returns			: true in case valid email else false
//	Notes			: Validates email . Treats the following as valid
//						   i) Alphanumeric characters  [aA-zZ] [0-9]
//						  ii) Hyphen and underscore ("-" and "_")
//						 iii) Atleast and only one "@" in between 
//						  iv) Atleast one period (".") in between 
//							 (two successive periods are not allowed
//							  period immediately before or after @ are not allowed)
//*********************************************************************/ 
function isEmail(formObj) {
   var t1 = new Date();
   var evaluem = trimTxt(formObj);  
   formObj.value = evaluem;
   var evalue = evaluem;
   var elength = evalue.length;
   var echeck =  /^.+\@.+\..+$/
   var a = new Array();
   var i=0;
   var j=0;  
   var b=0;
   var c =0;
   var testchar;
   
   if (evalue=="")
   {return true;}
   // Check min and max length of the email String
   if (elength < 7 || elength >128) {
   	return false;
   }
   
   // Check for the presence of only Alphanumeric characters, underscores,periods.
   for (var i=0; i < elength; i++) {
		testChar = evalue.charAt(i);
		
		if ( (testChar < '0' || testChar > '9') &&
			 (testChar < 'a' || testChar > 'z') &&
			 (testChar < 'A' || testChar > 'Z') &&
			 (testChar != '@') && (testChar != '.') &&
			 (testChar != '_') && (testChar != '-')) {
			return false;
		}
	}

   // Finding the no.of '@'	   
   for(i=0; i < elength; i++) {
		a[i] = evalue.charAt(i);	  
	    if (a[i] == '@') {
	    	b=b+1;
	    }
   }
	
   if(b>1){return false;}   
   
   for(i=0; i < elength; i++) {
		a[i] = evalue.charAt(i);	  
		j = evalue.charAt(i+1);
	    if((a[i] == '.') && (j == '.')) {
	      return false;
	    }
    }
	 
    for(i=0; i < elength; i++) {
	    a[i] = evalue.charAt(i);	  
		j = evalue.charAt(i+1);
	    if((a[i] == '@') && (j == '.')) {
	    	return false;
	    }
    }
   
    for(i=0; i < elength; i++) {
		a[i] = evalue.charAt(i);	  
		j = evalue.charAt(i+1);
	    if((a[i] == '.') && (j == '@')) {
	    	return false;
	    }
    }
	
    for(i=0; i < elength; i++) {
		a[i] = evalue.charAt(i);	  
	    var b = evalue.charAt(elength-1);	  
	    if ((a[i] == ' ') || (b == '.')) {
	    	return false;
	    }
    }
    
    for (var i=0; i < elength; i++) {
		a[i] = evalue.charAt(i);
		if ((a[i] == '+') || (a[i] == '#'))	{
			return false;
		}
	}
	// Checking the emailID with the specified format
	if (echeck.test(evalue) == false) {
		return false;
	} else {
		return true;
	}
 } 

//*********************************************************************/
//	Function Name		: isInteger
//	Purpose			: checks for Non numeric entries
//	Parameters in		: form object which is to be validated
//	Parameters out		: true/false
//	Returns			: false if  Non numeric entries are present/else true
//*********************************************************************/
function isInteger(formObj) {
	var testChar  = " ";
	var objVal    = trimTxt(formObj);
	var valLength = objVal.length;
	for (var i=0; i < valLength; i++) {
		testChar = objVal.charAt(i);
		
		if (testChar < '0' || testChar > '9' ) {			
			return false;
		}
		
	}
	return true;
}

//*********************************************************************/
//	Function Name		: isAlpha
//	Purpose			: checks for Non Alpha entries
//				: also allows characters that are found in person 
//				: names <space>, dash, and apostrophe
//	Parameters in		: form object which is to be validated
//	Parameters out		: true/false
//	Returns			: false if  Non Alpha entries are present/else true
//*********************************************************************/
function isAlpha(formObj) {
	var strlen=trimTxt(formObj).length;
	var namePattern;
	if (strlen==0) {
		// handle case where required field is not 
		// checked before calling this function
		return true;
	}
	else {
		if (strlen==1) {
			// single-character pattern must be alpha only
			namePattern="^([A-Za-z])$";
		}
		else {
			// otherwise use pattern which allows alpha, dash, space, or apostrophe
			namePattern="^([A-Za-z\\-\\' ]{1,})$";
		}
		var re = new RegExp(namePattern);
		return re.test(trimTxt(formObj));
	}
}

//*********************************************************************/
//	Function Name		: isDecimal
//	Purpose			: checks for  a valid Decimal entry 
//	Parameters in		: form object for which decimal validation is required
//	Parameters out		: true/false 
//	Returns			: true in case valid decimal entry else false
//*********************************************************************/
function isDecimal(formObj) {
	var objVal = trimTxt(formObj);
	var b_firstDecimalFound = false;
	var i = 0;
	
	if((objVal == ".") || (objVal == "+") || (objVal == "+.") || (objVal == "-")) {
		return false;
	}
	
	// Test for repeated decimal points		
	for (i=0;i<=objVal.length;i++) {  
		if(objVal.charAt(i) == ".") {
			if(b_firstDecimalFound) {	
				return false;
			} else {
				b_firstDecimalFound = true;	
		 }
	   }		
	}
	
	// Test for numbers or decimals
	for (var i=0; i < objVal.length; i++) { 
		if ((objVal.charAt(i) < '0' || objVal.charAt(i) > '9') && (objVal.charAt(i) != '.') && (objVal.charAt(i) != '-')) { //Added to include minus sign
				 	 return false;
		}
	}
	return true;
}	

//*********************************************************************/
//	Function Name		:  isAlphaNumeric
//	Purpose			:  To check if alphanumeric characters are entered   
//	Parameters in		:  Form object to be validated
//	Parameters out		:  true/false
//	Returns			:  false if  Non AlphaNumeric entries are present/else true
//*********************************************************************/
function isAlphaNumeric(formObj) {
	
	var objVal = trimTxt(formObj)	
	var respc = /^[\s]+$/

	if (respc.test(formObj.value) == true) {		
		return false;
	}
	
	if (objVal == "") {		
		return true;
	}

	// Check only for presence of Alphanumeric characters
	for (var i=0; i < objVal.length; i++) {
		if ((objVal.charAt(i) < 'a' || objVal.charAt(i) > 'z') &&
			 (objVal.charAt(i) < 'A' || objVal.charAt(i) > 'Z') && 
			 (objVal.charAt(i) < '0' || objVal.charAt(i) > '9') &&
			 (objVal.charAt(i) != ' ')) {			 
			return false;
		}
	}
	return true;
}

//*********************************************************************/
//	Function Name		: isDate
//	Purpose			: checks for a valid date 
//	Parameters in		: MM,DD,YYYY 
//	Parameters out		: true/false 
//	Returns			: false in case of an invalid date else true
//	Notes			: This function is for internal use in JSFunctions.js
//						  and is not meant to be called from outside
//*********************************************************************/
function isDate(mm,dd,yyyy)
{
  if ((yyyy  < 1753) || (yyyy > 9999)) //valid window : 1753 - 9999 
 	return false;	
  var arrMonthDays = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
  if ((mm == "") || (mm == 0) || (mm > 12)) 
	return false;	
  if ((dd == "") || (dd == 0) || (dd > 31)) 
 	return false;	
  if ((yyyy % 4) == 0)	
  {
   	if ((yyyy % 100) == 0){			// Leap year Check
         if ((yyyy %400) == 0) 	
		 	arrMonthDays [2] = 29;}
 	else			
		 	arrMonthDays [2] = 29;
  }			
 if ( dd > arrMonthDays [mm])
	return false;	   
  return true;	
}

//*********************************************************************/
//	Function Name		: isDateDMY
//	Purpose			: checks for a valid date in DD/MM/YYYY format
//	Parameters in		: form object for which date validation is required
//	Parameters out		: true/false 
//	Returns			: false in case of an invalid date else true
//	Notes			: The date is expected in format dd/mm/yyyy or
//						  dd-mm-yyyy
//						  Valid dates are considered only between years
//						  1000 AD and  9999 AD 
//						  The function pads up "0" for dd or mm lesser 
//						  than 9 and also formats the date in dd/mm/yyyy
//						  for the object value
//						  Eg. 2-02-2002 will be converted to 02/02/2002
//*********************************************************************/
var reDateFmt1=/(^[0-9]+)\/+([0-9]+)\/+([0-9]+)$/;
var reDateFmt2=/(^[0-9]+)[\-|\/|\.]([0-9]+)[\-|\/|\.]([0-9]+)$/;
var reDateFmt3=/(^\d\d\d\d\d\d)$/;
var reDateFmt4=/(^\d\d\d\d\d\d\d\d)$/;

function isDateDMY(formObj)
{
  var objVal = formObj.value;
  var i;
  var a = new Array();
  var b,c;
  var x=0;
  
  if(!isRequired(formObj)) {
  	return true;
  }
  if ((!reDateFmt1.test(objVal)) && (!reDateFmt2.test(objVal))) 
  	return false; 										//  Invalid date format
  if (reDateFmt1.test(objVal))                        // Code to split the value entered
         { newstr = objVal.split(reDateFmt1,"$1,$2,$3");        // into DD/MM/YYYY using
           var dd_from1=parseInt(RegExp.$1,10);                       // Regular Expressions
           var mm_from1=parseInt(RegExp.$2,10);
           var yy_from1=parseInt(RegExp.$3,10);
         }
  else if (reDateFmt2.test(objVal))                  // Code to split the value entered
         { newstr = objVal.split(reDateFmt2,"$1,$2,$3");        // into DD-MM-YYYY using
           var dd_from1=parseInt(RegExp.$1,10);                       // Regular Expressions
           var mm_from1=parseInt(RegExp.$2,10);
           var yy_from1=parseInt(RegExp.$3,10); 
		  }
  else
  	return false;    	//  Date entered is in invalid	format 
  if(!isDate(mm_from1,dd_from1,yy_from1))	
 	return false;
  var strdd = dd_from1;
  var strmm = mm_from1;
  var stryyyy = yy_from1; 	

  if(strdd < 10 )
 	var strdd = "0" + strdd;
  if(parseInt(strmm,10) < 10 )
 	var strmm = "0" + strmm;	
  
  formObj.value = strdd + "/" + strmm + "/" +stryyyy;
  return true;
}	

//*********************************************************************/
//	Function Name		: isDateMDY
//	Purpose			: checks for a valid date in MM/DD/YYYY format
//	Parameters in		: form object for which date validation is required
//	Parameters out		: true/false 
//	Returns			: false in case of an invalid date else true
//	Notes			: The date is expected in format MM/DD/yyyy or
//						  MM-DD-yyyy
//						  Valid dates are considered only between years
//						  1000 AD and  9999 AD 
//						  The function pads up "0" for dd or mm lesser 
//						  than 9 and also formats the date in dd/mm/yyyy
//						  for the object value
//						  Eg. 2-02-2002 will be converted to 02/02/2002
//*********************************************************************/
function isDateMDY(formObj)
{
  var objVal = formObj.value;
  var i;
  var a = new Array();
  var b,c;
  var x=0;

  if(!isRequired(formObj)) {
  	return true;
  }

  if ((!reDateFmt1.test(objVal)) && (!reDateFmt2.test(objVal))) 
  {
    return false; 										//  Invalid date format
  } 
  if (reDateFmt1.test(objVal))                        // Code to split the value entered
         { newstr = objVal.split(reDateFmt1,"$1,$2,$3");        // into DD/MM/YYYY using
           var mm_from1=parseInt(RegExp.$1,10);                       // Regular Expressions
           var dd_from1=parseInt(RegExp.$2,10);
           var yy_from1=parseInt(RegExp.$3,10);
         }
  else if (reDateFmt2.test(objVal))                  // Code to split the value entered
         { newstr = objVal.split(reDateFmt2,"$1,$2,$3");        // into DD-MM-YYYY using
           var mm_from1=parseInt(RegExp.$1,10);                       // Regular Expressions
           var dd_from1=parseInt(RegExp.$2,10);
           var yy_from1=parseInt(RegExp.$3,10); 
		  }
  else
  	return false;    			//  Date entered is in invalid	format 
  if(!isDate(mm_from1,dd_from1,yy_from1))	
  	return false;
	
 var strdd = dd_from1;
 var strmm = mm_from1;
 var stryyyy = yy_from1; 		

 if(strdd < 10 )
 	var strdd = "0" + strdd;
 if(parseInt(strmm,10) < 10 )
 	var strmm = "0" + strmm;
  
 formObj.value = strmm + "/" + strdd + "/" +stryyyy;
 return true;
}

//*********************************************************************/
//	Function Name		: isDateMDYX
//	Purpose			: extension of isDateMDXY function, it checks for a valid date in MM/DD/YYYY format
//	Parameters in		: form object for which date validation is required
//	Parameters out		: true/false
//	Returns			: false in case of an invalid date else true
//	Notes			: The date is expected in format MM/DD/yyyy or
//						  MM-DD-yyyy or MM.DD.yyyy or MMDDYY or MMDDYYYY
//						  Valid dates are considered only between years
//						  1000 AD and  9999 AD
//						  The function pads up "0" for dd or mm lesser
//						  than 9 and also formats the date in dd/mm/yyyy
//						  for the object value
//						  Eg. 2-02-2002 will be converted to 02/02/2002
//*********************************************************************/
function isDateMDYX(formObj)
{
  var objVal = formObj.value;
  var i;
  var a = new Array();
  var b,c;
  var x=0;

  if(!isRequired(formObj)) {
  	return true;
  }

  if ((!reDateFmt2.test(objVal)) && (!reDateFmt3.test(objVal))
		  && (!reDateFmt4.test(objVal)))
  {
    return false; 										//  Invalid date format
  }

	if (reDateFmt2.test(objVal))                  // Code to split the value entered
		   { newstr = objVal.split(reDateFmt2,"$1,$2,$3");        // into MM-DD-YYYY or MM.DD.YYYY
			 var mm_from1=parseInt(RegExp.$1,10);                       // or MM/DD/YYYY using
			 var dd_from1=parseInt(RegExp.$2,10);                       // Regular Expressions
			 var yy_from1=parseInt(RegExp.$3,10);
			   if (RegExp.$3.length == 2) {
				   yy_from1 = "20" + RegExp.$3;
			   }
			}
	else if (reDateFmt3.test(objVal))                  // Code to split the value entered
		   {                                                      // into MMDDYY using
			 var mm_from1=objVal.substring(0, 2);                        // Regular Expressions
			 var dd_from1=objVal.substring(2, 4);
			 var yy_from1=objVal.substring(4, 6);
			 yy_from1 = "20" + yy_from1;
			}
	else if (reDateFmt4.test(objVal))                  // Code to split the value entered
		   {                                                      // into MMDDYYYY using
			 var mm_from1=objVal.substring(0, 2);                         // Regular Expressions
			 var dd_from1=objVal.substring(2, 4);
			 var yy_from1=objVal.substring(4, 8);
			}
	else
		return false;    			//  Date entered is in invalid	format

  if(!isDate(mm_from1,dd_from1,yy_from1))
  	return false;

 var strdd = dd_from1;
 var strmm = mm_from1;
 var stryyyy = yy_from1;

 if(strdd < 10 )
 	var strdd = "0" + strdd;
 if(parseInt(strmm,10) < 10 )
 	var strmm = "0" + strmm;

 	
 if(strdd.length == 3)
	strdd = strdd.substring(1);
 if(strmm.length == 3)
	strmm = strmm.substring(1);
	 
 formObj.value = strmm + "/" + strdd + "/" +stryyyy;
 
 return true;
}

//*********************************************************************/
//	Function Name		: isZipcode
//	Purpose				: checks whether the data in the field is a valid Zipcode
//						  or not
//	Parameters in		: form objects for which Zipcode validation is required
//	Parameters out		: true/false 
//	Returns				: It returns true if the zipcode is valid, else returns false
//*********************************************************************/
function isZipcode(formObj) {
  var objVal = formObj.value;
 	if(!isRequired(formObj)) {  // To ensure that when this validation is done the field is not mandatory
  		return true;
    }
  return (isInteger(formObj) && objVal.length==5);
 }

//*********************************************************************/
//	Function Name		: isMembershipNumber
//	Purpose			: checks whether the data in the field is a valid Zipcode
//						  or not			   
//	Parameters in		: form objects for which membership number validation is required
//	Parameters out		: true/false 
//	Returns			: It returns true if the zipcode is valid, else returns false
//*********************************************************************/ 
function isMembershipNumber(formObj) {
  var objVal = formObj.value;
 	if(!isRequired(formObj)) {  // To ensure that when this validation is done the field is not mandatory
  		return true;
    }
  return (isInteger(formObj) && objVal.length==16);
 }
 
//*********************************************************************/
//	Function Name		: isPhoneNumner
//	Purpose			: checks whether the data in the field is a valid Phone Number
//						  or not			   
//	Parameters in		: form objects for which phone number validation is required
//	Parameters out		: true/false 
//	Returns			: It returns true if the phone number is valid, else returns false
//*********************************************************************/ 

function isPhoneNumber(formObj) {

	// Minimum no of digits in an international phone no.
	var minDigitsInIPhoneNumber = 10;
	var strPhone = formObj.value;

	if(!isRequired(formObj)) {  // To ensure that when this validation is done the field is not mandatory
  		return true;
    	}
	var returnString = "";
	// Search through string's characters one by one for
	// non-digit characters which are allowed in phone numbers
	for (i = 0; i < strPhone.length; i++) {
	        // Check that current character isn't whitespace.
		var c = strPhone.charAt(i);
		if (c != '(' && c != ')' && c != '-' && c != ' ') {
		   returnString += c;
		}
	} 
    
	for (i = 0; i < returnString.length; i++) {
        // Check that current character is number.
		var c = returnString.charAt(i);
        if (((c < "0") || (c > "9"))) {
        	return false;
        }
	} 
	return (returnString.length == minDigitsInIPhoneNumber);
}

//*********************************************************************/
//	Function Name		: isTenDigitPhoneNumner
//	Purpose			: checks whether the data in the field is a 10 digit Phone Number
//						  or not			   
//	Parameters in		: form objects for which phone number validation is required
//	Parameters out		: true/false 
//	Returns			: It returns true if the phone number has 10 digits, else returns false
//*********************************************************************/ 

function isTenDigitPhoneNumber(formObj) {
	
	// Minimum no of digits in an international phone no.
	var minDigitsInIPhoneNumber = 10;
	var strPhone = formObj.value;

	if(!isRequired(formObj)) {  // To ensure that when this validation is done the field is not mandatory
  		return true;
   	 }
	var returnString = "";
	var temp="";
	// Search through string's characters one by one for
	// non-digit characters which are allowed in phone numbers
	for (i = 0; i < strPhone.length; i++) {
	        // Check that current character isn't whitespace.
		var c = strPhone.charAt(i);
		// Defect #172 fix Start
		if (c == '(' && c == ')' && c == ' ') {
		   return false;
		} else {
		temp += c;
		}
		// Defect #172 fix End
	} 
	// Defect # 2237 Fix Start
	if(temp =="000-000-0000" || temp =="0000000000" || temp =="000-0000000" || temp =="000000-0000"){
		return false;
	}
	// Defect # 2237 Fix End
	// Modified for Defect #115 -Phase 3 - Start
	var emDashCount=0;
	
	for(i=0;i<temp.length;i++) {
		var c = temp.charAt(i);
		if(c=='-') {
		    emDashCount+=1;
		} else{
		    returnString += c;
		}
	}	
	
	if(emDashCount==2) {	
		var result=temp.split('-');			
		if(result[0].length==3&&result[1].length==3) {			
			return (returnString.length == minDigitsInIPhoneNumber);
		}
		else {			
			return false;
		}
	}
	else if(emDashCount!=0) {		
		return false;
	}
	// Modified for Defect #115 - Phase 3-  End

	return (returnString.length == minDigitsInIPhoneNumber);		
}


 
//*********************************************************************/
//	Function Name		: trimTxt
//	Purpose			: TRIMS LEADING AND TRAILING SPACES.			
//	Parameters in		: form object whose value is to be trimmed.
//	Parameters out		: true/false 
//	Returns			: trimmed text
//	Notes			: This trims spaces only at the start and end of a 
//						  string but does not trim the spaces inside
//*********************************************************************/
function trimTxt(formobj)
 {
  	var sTxtval = formobj.value;
  	var iTxtlen = sTxtval.length;
 	var iFirstindex = -1;
 	var iLastindex = -1;
 	var sFinaltxt = "";
 	var i = 0;		

 	for (i=0;i<iTxtlen;i++)
 	{
 		if (sTxtval.charAt(i) == " ")
 		{	continue ;}
 		else
 		{ 
 			iFirstindex = i;
 			break;
 		}
 	}
 		
 	for (i=iTxtlen-1;i>=0;i--)
 	{
 		if (sTxtval.charAt(i) == " ")
 		{ 	continue ;}
 		else
 		{ 
 			iLastindex = i;
 			break;
 		}
      } 
  	 if (iFirstindex < 0 && iLastindex < 0)
 	 {
 	 		return "";
 	 }
 	 sFinaltxt = sTxtval.substring(iFirstindex,iLastindex+1); 
 	 // Rev 1.1 Starts
 	 formobj.value = remSuccSpace(formobj.value);
 	 // Rev 1.1 Ends 
 	 return sFinaltxt;
 }

//*********************************************************************/
//	Function Name		: remSuccSpace
//	Purpose			: Removes repetive spaces from text passed
//	Parameters in		: Input string with repetitive spaces
//	Parameters out		: trimmed string 
//*********************************************************************/
function remSuccSpace(strPassed)
{   
	var i;
    var whitespace = " \t\n\r";
	var returnString = "";
	var check=0;
	
    // Search through string's characters one by one.
    // If character is not in WhiteSpace, append to returnString.
	
    for (i = 0; i < strPassed.length; i++)
    {   
		var tmp_c = strPassed.charAt(i);
		if (whitespace.indexOf(tmp_c) == -1) 
		{
			returnString += tmp_c;
			check=0;
		}
		else if (check==0)
		{
			returnString += tmp_c;
			check=1;	
		}	
     }
    return returnString;
}

//*********************************************************************/
//	Function Name		: displayErrorMsg
//	Purpose			: To display error message in a label and highlight the
//						  error field and the component 
//	Parameters in		: divID - Label ID in which error message gets display
//						  errorMsg - Array Object containing the error messages
//						  highlightID - Array Object containing FieldID to be highlighted
//	Parameters out		: N/A 
//	Returns			: Displays the error messages and highlights the error
//						  field and component
//*********************************************************************/

var errorMsg = new Array();
var highlightID = new Array();
var nameError = "nameError";


// Defect No:869 InConsistent error message format in client and server side
function displayErrorMsg(divIDName, errorMsg, highlightID) {

	var errortext = "";
	var validationErr = "";
	var divID = document.getElementById(divIDName);
	for (i=errorMsg.length-1; i>=0; i--) { 	  
	 	errortext = "<font color=red><b>"+errorMsg[i]+"</b></font><br>"+errortext;
	}
	if (errortext != "") {	
		validationErr = "<h4>One or more validation errors has occurred:</h4>";
		errortext = validationErr +  errortext ;
		divID.innerHTML = errortext;
		divID.className = "csaaErrorDisplayLine"; 
	}
	   	  

   	for (i=0; i<highlightID.length; i++) { 
	  	document.getElementById(highlightID[i]).className = "errorText";
	}
}

 function characterExists(inputValue) {
   if(inputValue.search(/[A-Za-z]+/)==-1){
      return false;
   } 
   return true;
}

//*********************************************************************/
//	Function Name		: hidePreviousErrors
//	Purpose			: To hide the previous error message in the label and 
//						  de-highlight the error field and the component 
//	Parameters in		: divID - Label ID in which error message gets display
//	Parameters out		: N/A 
//	Returns			: Hides the error messages and de-highlight the error
//						  field and the component
//*********************************************************************/
function hidePreviousErrors(divIDName) {
	
	var divID = document.getElementById(divIDName);

	divID.className = "hide";
	
   	for (var i=0; i<highlightID.length; i++) { 
   		document.getElementById(highlightID[i]).className = "csaaImportantText";
   	}		
   	
   	errorMsg = new Array();
 	highlightID = new Array();
}
//*********************************************************************/
//	Function Name		: isRequiredCheckedRadio
//	Purpose			: To validated if radio buttons are checked  
//	Parameters in		: form object for which date validation is required
//	Parameters out		: true/false 
//	Returns			: true if radio button is checked
//				: false if radio button is not checked
//*********************************************************************/
function isRequiredCheckedRadio(formObj) {

     var isChecked = false;
     for (i=0;i<formObj.length;i++) {
         if (formObj[i].checked) {
             isChecked = true;
         }
     }

     if (formObj.checked) {
         isChecked = true;
     }

     if (isChecked) {
         return true;
     } else {
         return false;
     }
}
//*********************************************************************/
//	Function Name		: isRequiredDropdownList
//	Purpose			: To validated if dropdown list are selected 
//	Parameters in		: form object for which validation is required
//	Parameters out		: true/false 
//	Returns			: true if list box is selected
//						false if list box is not selected
//*********************************************************************/
function isRequiredDropdownList(formObj) {

  var index = formObj.selectedIndex;
  if (formObj.options[index].value != "") {
      return true;
  } else {
      return false;
  } 
}



//*********************************************************************/
//	Function Name		: isEmailSpace(Added for defect 991)
//	Purpose			: checks for  a valid e mail address
//	Parameters in		: form object for which email validation is required
//	Parameters out		: true/false 
//	Returns			: true in case valid email else false
//	Notes			: Validates email . Treats the following as valid
//				  i) Alphanumeric characters  [aA-zZ] [0-9]
//				  ii) Hyphen and underscore ("-" and "_")
//				 iii) Atleast and only one "@" in between 
//				  iv) Atleast one period (".") in between 
//				 (two successive periods are not allowed
//				 period immediately before or after @ are not allowed)
//*********************************************************************/ 
function isEmailSpace(formObj) {

       var isChecked = true;
      
       // Check for null value      
	if (formObj.value != null) {
	var objVal = trimTxt(formObj);	
	 
           // To check sapces in email
	   for (i = 0; i < objVal.length; i++) {
	    
	      if ((objVal.charAt( i ) == " ")) {	   
		     isChecked= false;
		     break;
		}
	   }
	 }
	
	 return isChecked;
}

//*********************************************************************/
//	Function Name		: isEmailDot(Added for defect 991)
//	Purpose			: checks for  a valid e mail address
//	Parameters in		: form object for which email validation is required
//	Parameters out		: true/false 
//	Returns			: true in case valid email else false
//	Notes			: Validates email . Treats the following as valid
//				 i) Alphanumeric characters  [aA-zZ] [0-9]
//				 ii) Hyphen and underscore ("-" and "_")
//				 iii) Atleast and only one "@" in between 
//				 iv) Atleast one period (".") in between 
//				 (two successive periods are not allowed
//				  period immediately before or after @ are not allowed)
//*********************************************************************/ 
function isEmailDot(formObj) {
 
     var isChecked =true;
     var atPos=0;
     var dotCount=0;
  
	// Check for null value
		if (formObj.value != null) {
		
		   var objVal = trimTxt(formObj);	
				  
		   // Counting No.of '@' present in given String
		      for (i = 0; i < objVal.length; i++) {			  			  
			atPos++;			
			if ((objVal.charAt( i ) == '@')) {
			 break;
			}				
		  }
		  

		 // Checking No.of dots present after '@'
		  for (i = atPos + 1; i < objVal.length; i++) {
			if (objVal.charAt( i ) == '.') {				
				dotCount++;			
			}			
		  }
		 
		  // Checking for minimum 1 No.of dot
		  if (dotCount < 1) {
			isChecked = false;
		  }
		
	    }

		return isChecked;
	}

//*********************************************************************/
//	Function Name		: isEmailSpecial(Added for defect 991)
//	Purpose			: checks for  a valid e mail address
//	Parameters in		: form object for which email validation is required
//	Parameters out		: true/false 
//	Returns			: true in case valid email else false
//	Notes			: Validates email . Treats the following as valid
//				  i) Alphanumeric characters  [aA-zZ] [0-9]
//				  ii) Hyphen and underscore ("-" and "_")
//				 iii) Atleast and only one "@" in between 
//				 iv) Atleast one period (".") in between 
//				 (two successive periods are not allowed
//				 period immediately before or after @ are not allowed)
//*********************************************************************/ 
function isEmailSpecial(formObj) {
var isChecked =true;
var atCount=0;

        // Check for null value

	if (formObj.value != null) {
	
	    var objVal = trimTxt(formObj);	
	  
		 
	        // Counting No.of '@' present in given String
		for (i = 0; i < objVal.length; i++) {
		    
	           if ((objVal.charAt( i ) == '@' )) {		
			atCount++;
		   }
		}
		

		if (atCount != 1) {
			isChecked = false;
		}
	}

		return isChecked;
}

//*********************************************************************/
//	Function Name		: isEmailLength(Added for defect 991)
//	Purpose			: checks for  a valid e mail address
//	Parameters in		: form object for which email validation is required
//	Parameters out		: true/false 
//	Returns			: true in case valid email else false
//	Notes			: Validates email . Treats the following as valid
//				  i) Alphanumeric characters  [aA-zZ] [0-9]
//				 ii) Hyphen and underscore ("-" and "_")
//				 iii) Atleast and only one "@" in between 
//				 iv) Atleast one period (".") in between 
//				 (two successive periods are not allowed
//				 period immediately before or after @ are not allowed)
//*********************************************************************/ 

function isEmailLength (formObj) {

var isChecked =true;
var objVal = trimTxt(formObj);
var evalue=objVal;   
var elength = evalue.length;

      // Check for null value
    
    	if (formObj.value != null) {
    	 // Check min and max length of the email String
	   if (elength < 7 ) {
	   	isChecked = false;
            }
         }
         
         return isChecked;
    }

	//***********************************************************************/
    //	Function Name		: isEmailMaxLength

	function isEmailMaxLength (formObj) {

	var isChecked =true;
	var objVal = trimTxt(formObj);
	var evalue=objVal;
	var elength = evalue.length;

	      // Check for null value

	    	if (formObj.value != null) {
	    	 // Check min and max length of the email String
		  if ( elength > 100) {
		   	isChecked = false;
	            }
	         }

	         return isChecked;
    }



//*********************************************************************/
//	Function Name		: isDateExpired
//	Purpose			: checks for current expiratino month/year
//	Parameters in		: month, year
//	Parameters out		: true/false 
//	Returns			: true if date is in the pastin case valid email else false
//	Notes			: accepts values (field.value), not form field reference
//*********************************************************************/ 
function isDateExpired(mm,yyyy) {

	var today = new Date();
	//alert('today : ' + today);
	//alert('today.getYear : ' + today.getYear());
	//alert('today.getMonth : ' + today.getMonth());
	//alert('today.getFullYear : ' + today.getFullYear());
	// Modified for defect #175-3596-Premier - Start
	//var compDate = new Date(today.getYear(),today.getMonth(),1);
	var compDate = new Date(today.getFullYear(),today.getMonth(),1);
	// Modified for defect #175-3596-Premier - End
	var ccExpDate=new Date(parseInt(yyyy),parseInt(mm),1);
	return !(compDate<ccExpDate);
}
//*********************************************************************/
//	Function Name		: isValidStateMembershipNumber
//	Purpose			: validates that the given membership number is valid
//					according to the defined pattern for the given states
//					CG: Changed as of TD 4439 - No longer required to validate
//					against the state - only ensure that the passed membership number
//					is valid for any of the defined states.
//	Parameters in		: membershipNumber, stateCode, membershipValidatePortionForStates
//	Parameters out		: true/false
//	Returns			: true if membership number is valid
//	Notes			: The 'membershipValidatePortionForStates' param is defined in the global properties file
//					and must be in the following format::438255,UT|429005,CA,NV
//*********************************************************************/
function isValidStateMembershipNumber(membershipNumber, stateCode, membershipValidatePortionForStates) {
	passedValidation = false;
	var membershipNumberAndStateList = membershipValidatePortionForStates.split("|");

	for (i = 0; i < membershipNumberAndStateList.length; i++) {
		var membershipNumberAndState = membershipNumberAndStateList[i];
		membershipNumberAndStateElements = membershipNumberAndState.split(",");
		membershipNumberValidPortion = membershipNumberAndStateElements[0];
		if (membershipNumber.substring(0,6) == membershipNumberValidPortion) {
			passedValidation = true;
			break;

		}
	}
	return passedValidation;
}

function isValidCreditCardLength (formObj)
{

var objVal = trimTxt(formObj);
var evalue=objVal;
var elength = evalue.length;

  if (evalue.length!=16)
   return false;
    
   return true;

}



function isAlphaMiddleName(formObj) {
	var strlen=trimTxt(formObj).length;
	var namePattern;
	if (strlen==0) {
		// handle case where required field is not 
		// checked before calling this function
		return true;
	}
	else {
		if (strlen==1) {
			// single-character pattern must be alpha or dot only
			namePattern="^([A-Za-z\.])$";
		}
		else {
			// otherwise use pattern which allows alpha, dash, space, or apostrophe
			namePattern="^([A-Za-z\\-\\' ]{1,})$";
		}
		var re = new RegExp(namePattern);
		return re.test(trimTxt(formObj));
	}
}



function isDateInteger(formObj) {

	var testChar  = " ";
	var objVal    = trimTxt(formObj);
	var valLength = objVal.length;
	for (var i=0; i < valLength; i++) {
		testChar = objVal.charAt(i);
		if(testChar != '/'){
			if (testChar < '0' || testChar > '9' ) {			
				return false;
			}
		}
	}
	return true;
}


	// Phase III Premier Project - Start
	
	/* Checks the given datas are equal or not */
	function isPasswordEqual(obj1,obj2) {
		
		var password = obj1.value;
		var passwordConfirm = obj2.value;				
		if (!isEqual(obj1,obj2)) {						
			return false;
			
		} else {			
			return true;
		}
		
	}
	
	
	/* Checks the entered data has both alphabet and number */
	function isPasswordAlphaNumeric(formObj){
		var anUpperCase = /[A-Z]/;
		var aLowerCase = /[a-z]/;
		var aNumber = /[0-9]/;		  
		var password=formObj.value;
		
		 if ((password.search(anUpperCase) == -1 &&
				password.search (aLowerCase) == -1 )||
				password.search (aNumber) == -1) {			
				
			return false;
		} else { 			
			return true;
		}
	 
	}
	
	/* Checks the entered password meets the minimum length requirement */
	function isPasswordMinLength(obj){	
		var password=obj.value;
		if(password.length<7) return false;
		return true;
	}	
		
	//Added code for Defect #47 - Phase 3 - Start
	function formatPhoneNumber(phoneNumber)
	{		
		var i = 0;
		var emDashFlag=false;		
		if(phoneNumber!=null && phoneNumber!=''){
			for( i=0;i<phoneNumber.length;i++) {
				if(phoneNumber.charAt(i)=="-") {
					emDashFlag=true;
				}
			}
			// If emDash is present, return the number as such, otherwise format
			if(!emDashFlag) {									
				phoneNumber =phoneNumber.substring(0,3)+ "-"  + phoneNumber.substring(3,6) + "-" +phoneNumber.substring(6,10);		    				
			}
		}
		return phoneNumber;
	
	}  
	//Added code for Defect #47 - Phase 3 - End
	
// Added for defect #2184 - Start

function isAtleastOneChar(formObj) {
   var t1 = new Date();
   var evaluem = trimTxt(formObj);  
   formObj.value = evaluem;
   var evalue = evaluem;
   var elength = evalue.length;
   var testchar;
   
   // Check for the presence of only Alphanumeric characters, underscores,periods.
   var isValid = false;
   for (var i=0; i < elength; i++) {
		testChar = evalue.charAt(i);
		
		if ( (testChar >= 'a' && testChar <= 'z') ||
			 (testChar >= 'A' && testChar <= 'Z') ) {
			isValid = true;
			break;
		}
	}
	return isValid;
}

function isEmailDotChar(formObj) {
	var isChecked =true;
	var atPos=0;
	var dotCount=0;

	// Check for null value
	if (formObj.value != null) {

		var objVal = trimTxt(formObj);	

		// Checking No.of dots present after '@'
		for (i = 0; i < objVal.length; i++) {
			if (objVal.charAt( i ) == '.') {				
				dotCount++;			
			}			
		}
		// Checking for minimum 1 No.of dot
		if (dotCount < 1) {
			isChecked = false;
		}
	}

	return isChecked;
}	
// Added for defect #2184 - End
// Phase III Premier Project - End
	
function isValidPolicyNumber(formObj) {
	
	var objVal = trimTxt(formObj)	
	var respc = /^[\s]+$/
	if (respc.test(formObj.value) == true) {		
		return false;
	}
	
	if (objVal == "") {		
		return true;
	}

	// Check only for presence of Alphanumeric characters
		for (var i=0; i < objVal.length; i++) {
			if((objVal.charAt(i) == '#')||(objVal.charAt(i) == '-')) {
				continue;
			}
			else if ((objVal.charAt(i) < 'a' || objVal.charAt(i) > 'z') &&
				 (objVal.charAt(i) < 'A' || objVal.charAt(i) > 'Z') &&
				 (objVal.charAt(i) < '0' || objVal.charAt(i) > '9') &&
				 (objVal.charAt(i) != ' ')) {
				 return false;
			}
		}
		return true;
}

function removeSpecialChar(formObj) {
	
	var objVal = trimTxt(formObj)	
	var respc = /^[\s]+$/
	var temp="";
	if (respc.test(formObj.value) == true) {		
		return false;
	}
	
	if (objVal == "") {		
		return true;
	}

	// Check only for presence of Alphanumeric characters
		for (var i=0; i < objVal.length; i++) {
			if((objVal.charAt(i) == '-')) {
				temp += objVal.charAt(i);
			}
			else if ((objVal.charAt(i) < 'a' || objVal.charAt(i) > 'z') &&
				 (objVal.charAt(i) < 'A' || objVal.charAt(i) > 'Z') &&
				 (objVal.charAt(i) < '0' || objVal.charAt(i) > '9') &&
				 (objVal.charAt(i) != ' ')) {
				 continue;
			}
			else {
				temp += objVal.charAt(i);
      }
		}
		return temp;
}

function isValidClaimsPhoneNumber(formObj) {
			var testChar;
			var objVal    = trimTxt(formObj);
			var valLength = objVal.length;
			var minDigitsInIPhoneNumber = 10;
			var temp="";
			for (var i=0; i < valLength; i++) {
				testChar = objVal.charAt(i);
		
				if (testChar < '0' || testChar > '9' ) {
				return false;
				} else {
				temp += testChar;
				}
		
			}
			
	    if(temp =="0000000000" || temp =="00000000000" || temp =="000000000000" || temp =="0000000000000" || temp =="00000000000000" || temp=="000000000000000"){
	         return false;	
		       }
	        if (temp.length >= minDigitsInIPhoneNumber) {
					        return true;
					        } else {
					        return false;
        	}
        	}
        
    function isPolicyNumberMinLength(formObj){
        		var objVal = trimTxt(formObj);	
			if(objVal.length<5)  {
			return false;
			}
			return true;
		}	
			


//*********************************************************************/
//	Function Name		: _trimValue
//	Purpose			: TRIMS LEADING AND TRAILING SPACES.			
//	Parameters in		: form object value is passed and trimmed.
//	Parameters out		: true/false 
//	Returns			: trimmed text
//	Notes			: This trims spaces only at the start and end of a 
//						  string but does not trim the spaces inside
//*********************************************************************/
function _trimValue(objVal) {
	while( objVal.length>0 && objVal.charAt(0)==' ' ) {
		objVal = objVal.substring(1, objVal.length);
	}

	while( objVal.length>0 && objVal.charAt(objVal.length-1)==' ' ) {
		objVal = objVal.substring(0, (objVal.length-1));
	}

	if( objVal==' ' || objVal=='' ) {
		objVal = "";
	}

	return objVal;
}

// Defect #2391 - For Project #2942/3596 - 01/20/2009 - Start 
function isCsaaPhoneNumber(formObj) {

	// Minimum no of digits in an international phone no.
	var minDigitsInIPhoneNumber = 10;
	var strPhone = formObj.value;

	if(!isRequired(formObj)) {  // To ensure that when this validation is done the field is not mandatory
  		return true;
    	}
	var returnString = "";
	// Search through string's characters one by one for
	// non-digit characters which are allowed in phone numbers
	for (i = 0; i < strPhone.length; i++) {
	        // Check that current character isn't whitespace.
		var c = strPhone.charAt(i);
		if (c != '(' && c != ')' && c != '-' && c != ' ') {
		   returnString += c;
		}
	} 
    
	for (i = 0; i < returnString.length; i++) {
        // Check that current character is number.
		var c = returnString.charAt(i);
        if (((c < "0") || (c > "9"))) {
        	return false;
        }
	} 
	return (returnString.length == minDigitsInIPhoneNumber);
}


function isCsaaAlpha(formObj) {
	var strPhone=trimTxt(formObj);
	var namePattern="^([A-Za-z])$";
	var re = new RegExp(namePattern);
 	for (i = 0; i < strPhone.length; i++) {               
		var c = strPhone.charAt(i);                                           
		if(re.test(c)){
			return true;
		}
	}
	return false;
}

function removeSpecialCharacters(formObj) {
	var strPhone=trimTxt(formObj);
	var parsedPhoneNumber = "";

 	for (i = 0; i < strPhone.length; i++) {               
		var c = strPhone.charAt(i);                                           
		if (parseInt(c) >= 0 ||parseInt(c) > 9){
			parsedPhoneNumber = parsedPhoneNumber + c;
		}
	}
	return parsedPhoneNumber;
}

function isCsaaTenDigitPhoneNumber(formObj) {

	// Minimum no of digits in an international phone no.
	var minDigitsInIPhoneNumber = 10;
	var strPhone = formObj.value;

	if(!isRequired(formObj)) {  // To ensure that when this validation is done the field is not mandatory
  		return true;
    	}
	var returnString = removeSpecialCharacters(formObj);
	
	var isEqual = false;
	if (returnString.length == minDigitsInIPhoneNumber) {
		isEqual = true;
	}
	
	if (isEqual) {
		formObj.value = formatCsaaPhoneNumber(formObj);
	}
	return (returnString.length == minDigitsInIPhoneNumber);
}

function formatCsaaPhoneNumber(formObj) {

	var phoneNumber = removeSpecialCharacters(formObj);
	phoneNumber = phoneNumber.substr(0,3)+ "-"+ phoneNumber.substr(3,3) + "-" + phoneNumber.substr(6);
	return phoneNumber;
}
// Defect #2391 - For Project #2942/3596 - 01/20/2009 - End
