/* This function validates if the 'required' form field has a value */
function validate_req(element,strErrorField,strErrorMsg)
{
	var charpos1 = element.value.search(/^\s/);
	if(charpos1 >= 0) {
		element.value = trim(element.value);
	}
	var charpos = element.value.search(/^\s/);
	if(eval(element.value.length) == 0 || (element.value.length > 0 &&  charpos >= 0)) 
	{
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	return true;
}

function validate_requireSelected(element,strErrorField,strErrorMsg)
{
	var selectedIndex = element.selectedIndex;
	if (selectedIndex == 0) {
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	return true;
}
/* This function validates if the default text is being submitted */
function validate_notdefault(element,strErrorField,strErrorMsg,defaulttext)
{
	if(element.value == defaulttext) 
	{
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	return true;
}

/* This function validates the 'maxLength' feature of the value entered for a field */
function validate_maxlen(element,strErrorField,strErrorMsg,len)
{
	if(eval(element.value.length) > len) 
	{ 
		add_error(strErrorField,strErrorMsg);
		return false; 
	}
	return true;
}

/* This function validates the 'minLength' feature of the value entered for a field */
function validate_minlen(element,strErrorField,strErrorMsg,len)
{
	if(eval(element.value.length) < len) 
	{ 
		add_error(strErrorField,strErrorMsg);
		return false; 
	}
	return true;
}

/* This function validates if a form field has an alpha-numeric value */
function validate_alpha(element,strErrorField,strErrorMsg)
{
	var charpos = element.value.search("[^A-Za-z0-9]"); 
	if(element.value.length > 0 &&  charpos >= 0) 
	{ 
		add_error(strErrorField,strErrorMsg);
		return false; 
	}
	return true;
}


/* This function validates if a form field has an alpha-space value */
function validate_alphaspace(element,strErrorField,strErrorMsg)
{
	var charpos = element.value.search("[^A-Za-z\\s]"); 
	if(element.value.length > 0 &&  charpos >= 0) 
	{ 
		add_error(strErrorField,strErrorMsg);
		return false; 
	}
	return true;
}

/* This function validates if a form field has an alpha-numeric value in the position provided*/
function validate_alpha_inpos(element,strErrorField,strErrorMsg,pos)
{
	var charpos = element.value.substring(pos,pos+1).search("[^A-Za-z0-9]"); 
	if(element.value.length > 0 &&  charpos >= 0) 
	{ 
		add_error(strErrorField,strErrorMsg);
		return false; 
	}
	return true;
}

/* This function validates if a form field has an alphabetical value */
function validate_letter(element,strErrorField,strErrorMsg)
{
	var charpos = element.value.search("[^A-Za-z.[:space:]'-]"); 
	if(element.value.length > 0 &&  charpos >= 0) 
	{ 
		add_error(strErrorField,strErrorMsg);
		return false; 
	}
	return true;
}

/* This function validates if a form field has an numeric value, e.g. zip code, phone numbers */
function validate_numeric(element,strErrorField,strErrorMsg)
{
	var charpos = element.value.search("[^0-9]"); 
	if(element.value.length > 0 &&  charpos >= 0) 
	{
		add_error(strErrorField,strErrorMsg);
		return false; 
	}
	return true;
}

/* This function validates if the date entered is a future date, e.g. Credit Card Expiration Date */
function validate_date_greater(element,strErrorField,strErrorMsg,yearId,monthId,year2,month2)
{
	var yearElement =  document.getElementById(yearId);
	var monthElement =  document.getElementById(monthId);
	var yearNumber = eval(year2);
	var monthNumber = eval(month2);
	

	if (yearElement.value > yearNumber) return true;
		
	if (yearElement.value < yearNumber)
	{
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	
	if (yearElement.value == year2 && monthElement.value < monthNumber)
	{
		add_error(strErrorField,strErrorMsg);
		return false;
	}
}

/* This function validates if the Month, Date and Year fields have a value, else shows the error message */
function validate_req_date(element,strErrorField,strErrorMsg,yearId,monthId,dateId)
{
	var monthElement = document.getElementById(monthId).value;
	var dateElement  = document.getElementById(dateId).value;
	var yearElement  = document.getElementById(yearId).value;
	
	if (monthElement == '' || dateElement == '' || yearElement == '')
	{
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	
	return true;	
}

/* This function validates if the Month and Year fields have a value (typically the CC exp date), else shows the error message */
function validate_req_exp_date(element,strErrorField,strErrorMsg,yearId,monthId)
{
	var monthElement = document.getElementById(monthId).value;
	var yearElement  = document.getElementById(yearId).value;
	
	if (monthElement == '' || yearElement == '')
	{
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	
	return true;	
}



/* This function validates if the checkbox is checked or not. If not, it shows the appropriate error */
function validate_checkbox(element,strErrorField,strErrorMsg)
{
	if(eval(!element.checked)) 
	{ 
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	return true;


}

/* This function validates if two inputs are same or not, the actual element (emailaddress) and another input element (confirm email address) should be passed as an argument */
function validate_equal_values(element,strErrorField,strErrorMsg,equalElementId)
{
	var element1 = element.value;
	var equalElement = document.getElementById(equalElementId);
	if (!equalElement)
	{
		equalElement = document.getElementsByName(equalElementId)[0];
	}
	var element2 = equalElement.value;
	if(element1 != null)
		element1 = element1.toLowerCase();
	if(element2 != null)
		element2 = element2.toLowerCase();
	
	if (element1 != element2) {
		add_error(strErrorField,strErrorMsg);
		/*add_error(equalElementDivId,''); */
		return false;
	}
	return true;
}

/* This function validates the format of the email. If it is, it shows the appropriate error */
function validate_email(element,strErrorField,strErrorMsg)
{
	var validEmail = isValidEmail(element.value);

	if (validEmail == 'EMPTY_EMAIL' || validEmail == 'INVALID_EMAIL') {	
		add_error(strErrorField,strErrorMsg);
		return false;
	}

	return true;
}

function validate_pobox(element,strErrorField,strErrorMsg)
{
	var str = element.value;
	var reg = /^post office|^p o|^p\.o|^po|^post box|^postbox|^fpo|^apo/; //all these are considered as PO Box addresses
	var strLowerCase = str.toLowerCase();
	if (reg.test(strLowerCase)){
		var poBoxArr = ['post office','p o','po','p o box','p.o','p.o box','po box','post box','postbox','fpo','apo']; //these too are considered as PO Box addresses
		for (i = 0; i < poBoxArr.length; i++) {
			var splitBySpace = strLowerCase.split(' ');
			if(splitBySpace[0] == poBoxArr[i]) {
				add_error(strErrorField,strErrorMsg);
				return false;
			}
		}
	}
	return true;
}

/* This function validates the format of the email. If it is, it shows the appropriate error */
function validate_optional_email(element,strErrorField,strErrorMsg)
{
	if (element.value) {
		return validate_email(element,strErrorField,strErrorMsg);	
	}

	return true;
}

/* This function validates if the email is not an admin email. If it is, it shows the appropriate error */
function validate_adminemail(element,strErrorField,strErrorMsg)
{
	var validEmail = isValidEmail(element.value);
	var showError = false;
	if (validEmail == 'EMPTY_EMAIL' || validEmail == 'INVALID_EMAIL') {		
		showError=true;
	} else {
		//If valid email then check if the following admin patterns match.
		var adminregExp = /^webmaster@|^administrator@|^support@|^admin@/; 
		var emailstr = element.value;
		if (adminregExp.test(emailstr.toLowerCase()))
	  		showError=false;	    	
		else 
			showError=true;
	}
	
	if(showError) { 
		add_error(strErrorField,strErrorMsg); 
		return false;
	}
		return true;
}


/* This function validates if the zip code */
function validate_zip(element,strErrorField,strErrorMsg,countryRegionId)
{
	 v = element.value.toUpperCase();
    var regex = /(^\d{5}(\d{4})?([- |]\d{4})?$)/;
    
    if($(countryRegionId).value == 'CA')
    regex = /(^[A-Z]\d[A-Z]([ |])?\d[A-Z]\d$)/;
    
    
    if( regex.test(v)){        
        return true;
    }else{
    	add_error(strErrorField,strErrorMsg);
    }				
    return false;
}

/* This function validates if the zip code is valid for either US or Canada */
function validate_zipUSCA(element,strErrorField,strErrorMsg)
{
		
       var re = /^((\d{5}([- ])\d{4})|(\d{5})|([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d[A-Za-z]\s?\d[A-Za-z]\d))$/;
       if (re.test(element.value))
       {
    		return true;
    	
   		}
   		else
   		{
   			add_error(strErrorField,strErrorMsg);
   			return false;
   			
   		}

}

/* This function validates US zipcode */
function validate_zipUS(element,strErrorField,strErrorMsg)
{
	v = element.value.toUpperCase();
    var regex = /(^\d{5}(\d{4})?([- |]\d{4})?$)/;
      
    if( regex.test(v)){        
        return true;
    }else{
    	add_error(strErrorField,strErrorMsg);
    }				
    return false;
}

/* This function validates if the zip code valid, when Canada is selected  */
function validate_zipCA(element,strErrorField,strErrorMsg,countryRegionId)
{
	if ($(countryRegionId).value == 'CA')
	{
		if ( eval(element.value.length) != 7) 
		{ 
			add_error(strErrorField,strErrorMsg);			
			return false; 
		}
		
		var charpos =(element.value.substring(1,2)+element.value.substring(4,5)+element.value.substring(6,7)).search("[^0-9]");
		var noncharpos = (element.value.substring(0,1)+element.value.substring(2,3)+element.value.substring(5,6)).search("[^A-Za-z]");
		if ( charpos>0 || noncharpos>0 ||element.value.substring(3,4)!=' ')
		{
			add_error(strErrorField,strErrorMsg);				
			return false; 		
		}
	}
	return true;
}


/* This function validates the state dropdown */
function validate_reqFormValues(element,strErrorField,strErrorMsg,element1Id,element1DivId,element2Id,element2DivId)
{


/*form validation*/
     if(element.value.length==0 && Trim($(element1Id).value).length == 0 && $(element2Id).value == 'state')  
          {
          //alert("inside all 3 empty...strErrorMsg is -> "+strErrorMsg);
          add_shipToStoreError(strErrorField,strErrorMsg);
          add_shipToStoreError(element1DivId,'');
          add_shipToStoreError(element2DivId,'');	
          return false;
          }
/*zipcode validation*/
      else  if(element.value.length>0  && eval(element.value.length) < 5)   
          {
          add_shipToStoreError(strErrorField,_ERR_CHECKOUT_ADDRESS_SHIPTOSTORE_ZIPCODE_REQ);
          return false;
          }  
/*state validation*/			 
	  else	if(Trim($(element1Id).value).length > 0 &&  $(element2Id).value == 'state' && (element.value.length==0))  
				{
				add_shipToStoreError(element2DivId,_ERR_SHIP_TO_STORE_CITY_VALID);
				return false;
				}
				             
//city validation         
       	else if(($(element1Id).value.length) == 0  &&  ($(element2Id).value != 'state')	&& (element.value.length==0)) 
		{	 
			//add_shipToStoreError(element1Id,Error_StoreLocatorPanel_StateCity);
			//add_shipToStoreError(element1Id,strErrorMsg);
			//alert("inside city and state empty...strErrorMsg is -> "+strErrorMsg);
			add_shipToStoreError(strErrorField,strErrorMsg);
			add_shipToStoreError(element1DivId,'');
			 return false;
			 }
	return true;
}

/* Validates ship to store selected */
function validate_shipToStoreSelected(element,strErrorField,strErrorMsg)
{
		add_error(strErrorField,strErrorMsg);
		return false;
}

/* Validates if the SSN typed by user is 0000 */
function validate_invalidSSN(element,strErrorField,strErrorMsg)
{
	if (element.value == 0)
	{
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	return true;
}

/* Validate if the age is 18 based on the Date of Birth selected */
function validate_minimumAge(element,strErrorField,strErrorMsg,yearId,monthId,dateId)
{
	var monthElement = document.getElementById(monthId).value;
	var dateElement  = document.getElementById(dateId).value;
	var yearElement  = document.getElementById(yearId).value;
	var birthDate = new Date(yearElement + "/" + monthElement + "/" + dateElement);
	var minimumDate = new Date();
	minimumDate.setYear(minimumDate.getYear() - 18);
	if(minimumDate < birthDate)
	{
		add_error(strErrorField,strErrorMsg);
		return false;	
	}
	return true;
}

function isValidEmail(strEmail){
	var errorEmail = '';
	if (strEmail == null || strEmail == '') {
  		errorEmail = 'EMPTY_EMAIL';
		return errorEmail;
	}
		
	var str = strEmail;
  	var reg1 = /(\.\.)|(@\.)|(\.@)|(^\.)|(^\&)/; //not valid 
  	var reg2 = /^[a-zA-Z0-9._%?#&+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/; // Patterns specified from http://www.regular-expressions.info/email.html
	if (!reg1.test(str) && reg2.test(str)) { 
	  		errorEmail = 'VALID_EMAIL';	    	
	} else { 
	 		errorEmail = 'INVALID_EMAIL';	 		 		
	}
	return errorEmail;
}


/* 
	This function validates a 4 part phone where the format is (phone1) phone2 - phone3 EXT: phone4
	
	required - true if the phone number is a required field
	part1 - area code is 3 digits
	part2 - second part of phone number is 3 digits
	part3 - third part of phone number is 4 digits
	part4 - extension and never required
*/
function validate_phone_4part(element,strErrorField,strErrorMsg,required,part1,part2,part3,part4)
{
	var part1Element =  document.getElementById(part1);
	var part2Element =  document.getElementById(part2);
	var part3Element =  document.getElementById(part3);
	var part4Element =  document.getElementById(part4);

	if (required == "true")
	{
		if(eval(part1Element.value.length) != 3) 
		{
			add_error(strErrorField,strErrorMsg);
			return false;
		}
	
		if(eval(part2Element.value.length) != 3) 
		{
			add_error(strErrorField,strErrorMsg);
			return false;
		}
	
		if(eval(part3Element.value.length) != 4) 
		{
			add_error(strErrorField,strErrorMsg);
			return false;
		}
	}
	
	if(part1Element.value.length > 0 && part1Element.value.search("[^0-9]") >= 0) 
	{
		add_error(strErrorField,strErrorMsg);
		return false; 
	}

	if(part2Element.value.length > 0 && part2Element.value.search("[^0-9]") >= 0) 
	{
		add_error(strErrorField,strErrorMsg);
		return false; 
	}

	if(part3Element.value.length > 0 && part3Element.value.search("[^0-9]") >= 0) 
	{
		add_error(strErrorField,strErrorMsg);
		return false; 
	}

	if(part4Element && part4Element.value.length > 0 && part4Element.value.search("[^0-9]") >= 0) 
	{
		add_error(strErrorField,strErrorMsg);
		return false; 
	}

	return true;


	return true;
}




/* 
	This function validates a 4 part phone where the format is (phone1) phone2 - phone3 EXT: phone4
	
	required - true if the phone number is a required field
	part1 - area code is 3 digits
	part2 - second part of phone number is 3 digits
	part3 - third part of phone number is 4 digits
	part4 - extension and never required
*/
function validate_phone_eachpart(element,strErrorField,strErrorMsg,required,part1,part2,part3,part4)
{
	var part1Element =  document.getElementById(part1);
	var part2Element =  document.getElementById(part2);
	var part3Element =  document.getElementById(part3);
	var part4Element =  document.getElementById(part4);

	if (required == "true")
	{
	if(eval(part1Element.value.length) == 0 &&  eval(part2Element.value.length) == 0 &&  eval(part3Element.value.length) ==0)
		{
			 
			return true;
		} 
		
		if(eval(part1Element.value.length) != 3 || eval(part2Element.value.length) != 3 || eval(part3Element.value.length) != 4)
		{
			add_error(strErrorField,strErrorMsg);
			return false;
		} 
	 return true;
	}
	
	 
}



/* 
	This function validates a 4 part phone where the format is (phone1) phone2 - phone3 EXT: phone4
	
	required - true if the phone number is a required field
	part1 - area code is 3 digits
	part2 - second part of phone number is 3 digits
	part3 - third part of phone number is 4 digits
	part4 - extension and never required
*/
function validate_phone_fullpart(element,strErrorField,strErrorMsg,required,part1,part2,part3,part4)
{
	var part1Element =  document.getElementById(part1);
	var part2Element =  document.getElementById(part2);
	var part3Element =  document.getElementById(part3);
	var part4Element =  document.getElementById(part4);

	if (required == "true")
	{
	if(eval(part1Element.value.length) == 0 &&  eval(part2Element.value.length) == 0 &&  eval(part3Element.value.length) ==0)
		{
			 
			add_error(strErrorField,strErrorMsg);
			return false;
		} 
		
		 
	 return true;
	}
	
	 
}

/* This function validates the credit card brand */
function validate_ccBrand(element,strErrorField,strErrorMsg)
{
      // American Express: length 15, prefix 34 or 37.
      //var amex = /^3[4,7]\d{13}$/;
      // Mastercard: length 16, prefix 51-55.
      //var mc = /^5[1-5]\d{14}$/;
      // Visa: length 13 or 16, prefix 4.
      //var visa = /^4(\d{12}|\d{15})$/;
      
      //if (!amex.test(element.value) && !mc.test(element.value) && !visa.test(element.value))
      if (getCreditCardType(element.value) == '')
	  {
		add_error(strErrorField,strErrorMsg);
		return false;
	  }
	  return true;
} 

/* This function validates the credit card number with the Luhn check*/
function validate_ccLuhn(element,strErrorField,strErrorMsg)
{
      if (!luhn_check(element.value))
	  {
		add_error(strErrorField,strErrorMsg);
		return false;
	  }
	  return true;
} 

/* This function validates the length of the ccid based on brand */
function validate_ccidLength(element,strErrorField,strErrorMsg,ccNum)
{
	var brand = getCreditCardType($(ccNum).value)
	var ccidlen = eval(element.value.length);
	
	if (!ccidLengthCheck(brand, ccidlen))
    {
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	return true;
} 


function validate_search(element,strErrorField,strErrorMsg){
	
	var str = element.value;
	str = str.replace(/^\s*(.*?)\s*$/,"$1");
	
	
	if(eval(str.length) == 0 || eval(str.length) < 2) 
	{
	
		add_error(strErrorField,strErrorMsg);
		return false;
	}
	
	
	return true;
	

}



 