
//Function to check whether a field is empty or not
function checkEmpty(fieldName,message){
 if(document.getElementById(fieldName) != null){
   	if (trim(document.getElementById(fieldName).value) == "")
	{
		alert(message);
		document.getElementById(fieldName).focus();
		return (false);
	}else{
		return (true);
	}
 }else{
 	return (true);
 }
}




//Function to remove spaces from start and end of the string
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function checkstringlength(fieldName, min, max, message){

	sText = document.getElementById(fieldName).value;

	if(sText.length < 6 || sText.length > 24){
		alert(message);
		document.getElementById(fieldName).focus();
		return (false);
	}

	return (true);
}

//Function to check whether the field is numeric or not
function IsNumeric(fieldName, message)
{   
   sText = trim(document.getElementById(fieldName).value);
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;
   

   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
	      Char = sText.charAt(i); 
	      if (ValidChars.indexOf(Char) == -1) 
	         {
		         alert(message);
		         document.getElementById(fieldName).focus();
		         return (false);
	         }
      }
    return IsNumber;
}

function checkNumericValue(numericValue)
{   
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;
   for (i = 0; i < numericValue.length && IsNumber == true; i++) 
      { 
	      Char = numericValue.charAt(i); 
	      if (ValidChars.indexOf(Char) == -1) 
	         {
				IsNumber=false;
				break;
	         }
      }
    return IsNumber;
}


//Function to check whether a field contails integer value or not and check the length of the string
function checkInteger(fieldName,message,length1,lenMessage){
	var checkOK = "0123456789";
	var checkStr = trim(document.getElementById(fieldName).value);
	var allValid = true;
	var allNum = "";
	for (i = 0;  i < checkStr.length;  i++){
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
		if (ch == checkOK.charAt(j))
		break;
		if (j == checkOK.length)
		{
			allValid = false;
			break;
		}
		if (ch != ",")
		allNum += ch;
	}
	if (!allValid){
		alert(message);
		document.getElementById(fieldName).focus();
		return (false);
	}else{
		if(length1 != ""){
			if(checkStr.length < length1){
				alert(lenMessage);
				return(false);
			}
			if(checkStr.length > length1){
				alert(lenMessage);
				return(false);
			}
		}
		return (true);
	}
}

var one_day=1000*60*60*24
var one_month=1000*60*60*24*30
var one_year=1000*60*60*24*30*12

function displayage(yr, mon, day, unit, decimal, round){
	today=new Date()
	var pastdate=new Date(yr, mon-1, day)
	
	var countunit=unit
	var decimals=decimal
	var rounding=round
	
	finalunit=(countunit=="days")? one_day : (countunit=="months")? one_month : one_year
	decimals=(decimals<=0)? 1 : decimals*10

	if (unit!="years"){
	if (rounding=="rounddown")
	document.write(Math.floor((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals+" "+countunit)
	else
	document.write(Math.ceil((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals+" "+countunit)
	}
	else{
	yearspast=today.getFullYear()-yr-1
	tail=(today.getMonth()>mon-1 || today.getMonth()==mon-1 && today.getDate()>=day)? 1 : 0
	pastdate.setFullYear(today.getFullYear())
	pastdate2=new Date(today.getFullYear()-1, mon-1, day)
	tail=(tail==1)? tail+Math.floor((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals : Math.floor((today.getTime()-pastdate2.getTime())/(finalunit)*decimals)/decimals
	var age=yearspast+tail;
	return age;
	}
}











//Function to check whether the creditcard number is valid or not
function luhn_check(cc_num) {
	var i, n, c, r, t;
	r = "";
	for (i = 0; i < cc_num.length; i++) {
		c = parseInt(cc_num.charAt(i), 10);
		if (c >= 0 && c <= 9) {
			r = c + r;
		}
	}
	if (r.length <= 1) {
		return false;
	}
	t = "";
	for (i = 0; i < r.length; i++) {
		c = parseInt(r.charAt(i), 10);
		if (i % 2 != 0) {
			c *= 2;
		}
	t = t + c;
	}
	n = 0;
	for (i = 0; i < t.length; i++) {
		c = parseInt(t.charAt(i), 10);
		n = n + c;
	}
	if (n != 0 && n % 10 == 0) {
		return true;
	} else {
		return false;
	}
}
//Function to compare dates
function getDateObject(dateString,dateSeperator)
{
	//This function return a date object after accepting 
	//a date string ans dateseparator as arguments
	var curValue=dateString;
	var sepChar=dateSeperator;
	var curPos=0;
	var cDate,cMonth,cYear;

	//extract day portion
	curPos=dateString.indexOf(sepChar);
	cDate=dateString.substring(0,curPos);
	
	//extract month portion				
	endPos=dateString.indexOf(sepChar,curPos+1);
	cMonth=dateString.substring(curPos+1,endPos);

	//extract year portion				
	curPos=endPos;
	endPos=curPos+5;			
	cYear=curValue.substring(curPos+1,endPos);
	
	//Create Date Object
	dtObject=new Date(cYear,cMonth,cDate);	
	return dtObject;
}

//Function to check the format of the date
function isDate(val,format) {
	var date=getDateFromFormat(val,format);
	if (date==0) { return false; }
	return true;
}

//Function to check for valid date
var monthLength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

function checkDate(name)
{
	var x = document.forms[0].elements;
	var day = parseInt(x[name+"_day"].options[x[name+"_day"].selectedIndex].value);
	var mon = parseInt(x[name+"_mon"].options[x[name+"_mon"].selectedIndex].value);
	var year = parseInt(x[name+"_year"].options[x[name+"_year"].selectedIndex].value);

	if (year/4 == parseInt(year/4))
		monthLength[1] = 29;

	if (day > monthLength[mon-1])
		return false;

	return true;
}

// 	EMAIL ID VALIDATION STARTS HERE

	function echeck(str) {
		str = trim(str);
		var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
		if (filter.test(str)){
			return true;
		}else{
			alert(YOU_MUST_ENTER_VALID_EMAIL);
			return false;
		}
	}
	
    /** 		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		
		if (str.indexOf(at)==-1){
		   alert(YOU_MUST_ENTER_VALID_EMAIL)
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   alert(YOU_MUST_ENTER_VALID_EMAIL)
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    alert(YOU_MUST_ENTER_VALID_EMAIL)
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    alert(YOU_MUST_ENTER_VALID_EMAIL)
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    alert(YOU_MUST_ENTER_VALID_EMAIL)
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    alert(YOU_MUST_ENTER_VALID_EMAIL)
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    alert(YOU_MUST_ENTER_VALID_EMAIL)
		    return false
		 }

 		 return true					 **/
	    

// PHONE NUMBER VALIDATIONS STARTS HERE
	
			var digits = "0123456789";
			

				
			function isInteger1(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 = "";

			    
			    for (i = 0; i < s.length; i++)
			    {   
			        // Check that current character isn't whitespace.
			        var c = s.charAt(i);
			        if (bag.indexOf(c) == -1) returnString += c;
			    }
			    return returnString;
			}
			
			function checkInternationalPhone(strPhone){
			 	    
			    var digits = "0123456789";
			   	var phoneNumberDelimiters = "()- ";
				var validWorldPhoneChars = phoneNumberDelimiters + "+";
			    var minDigitsInIPhoneNumber = MINIMUM_DIGITS_IN_PHONE_NUMBER;
	    
			 	    
				s=stripCharsInBag(strPhone, validWorldPhoneChars);
			
				return (isInteger1(s) && s.length >= minDigitsInIPhoneNumber);
			}
			
			function checkPhoneNumbers(frmElementId, alertmsg){
				var Phone=document.getElementById(frmElementId).value;
				
				if (checkInternationalPhone(Phone)==false){
					alert(alertmsg);
					//document.getElementById(frmElementId).value="";
					document.getElementById(frmElementId).focus();
					return false;
				}
				return true
			 }
		
	
		// PHONE NUMBER VALIDATION ENDS HERE
		


	// 	Book Appointment FORM VALIDATION STARTS HERE 
	
	function Appointment_Validator(theForm, appointmentType){
			
		if(!checkEmpty("txtCode1",PLEASE_ENTER_FAST_TRACK_CODE)){
			return (false);
		}
		
		if(!checkEmpty("txtCode2",PLEASE_ENTER_FAST_TRACK_CODE)){
			return (false);
		}
		
		if(appointmentType == "O"){
			var isApptTypeSelected = false;
			
			for(var i=1; i<=5 ; i++){
			  if(document.getElementById("txtAppointmemtType"+i)!=null){
				if(document.getElementById("txtAppointmemtType"+i).value!="" && document.getElementById("txtAppointmemtType"+i).checked){
				   isApptTypeSelected = true;
				   break;
				}
			  }
			}
			if(!isApptTypeSelected){
				alert(YOU_MUST_SELECT_APPOINTMENT_TYPE);
				return (false);
			}
		}		
		
		if(!checkEmpty("txtFirstChoiceDay",YOU_MUST_SELECT_CHOICE_DAY)){
			return (false);
		}
		
		if(!checkEmpty("txtFirstChoiceMonth",YOU_MUST_SELECT_CHOICE_MONTH)){
			return (false);
		}
		
		if(!checkEmpty("txtFirstChoiceTime",YOU_MUST_SELECT_TIME)){
			return (false);
		}
		
		if(!checkEmpty("txtName",YOU_MUST_ENTER_NAME)){
			return (false);
		}
		
		if(!checkEmpty("txtAddressLine1",YOU_MUST_ENTER_ADDRESS)){
			return (false);
		}
		

		if(!checkEmpty("txtPostcode",YOU_MUST_ENTER_POSTCODE)){
			return (false);
		}
		
		if(appointmentType != "recall"){
			if(!checkEmpty("txtTelNo",PLEASE_ENTER_VALID_DAYTIME_PHONE)){
				return (false);
			}
		}
		
		if(!checkEmpty("selDayDob",YOU_MUST_SELECT_DAY)){
			return (false);
		}
		if(!checkEmpty("selMonthDob",YOU_MUST_SELECT_MONTH)){
			return (false);
		}
		if(!checkEmpty("selYearDob",YOU_MUST_SELECT_YEAR)){
			return (false);
		}
		
		if(!checkEmpty("txtPersonalIdentityNo",PLEASE_ENTER_PERSONAL_IDENTITY_NUMBER)){
			return (false);
		}
		
		if(document.getElementById('txtPersonalIdentityNo') != null){
			txtPersonalIdentityNo = trim(document.getElementById('txtPersonalIdentityNo').value);
			var prNoLength = txtPersonalIdentityNo.length;
			if(prNoLength<10 || prNoLength>11){
				alert(PLEASE_ENTER_VALID_PERSONAL_IDENTITY_NUMBER);
				document.getElementById('txtPersonalIdentityNo').focus();
				return (false);
			}
			if(!checkNumericValue(txtPersonalIdentityNo.substring(0,6))){
				alert(PLEASE_ENTER_VALID_PERSONAL_IDENTITY_NUMBER);
				document.getElementById('txtPersonalIdentityNo').focus();
				return (false);
			}
			if(!checkNumericValue(txtPersonalIdentityNo.substring(prNoLength-4,prNoLength))){
				alert(PLEASE_ENTER_VALID_PERSONAL_IDENTITY_NUMBER);
				document.getElementById('txtPersonalIdentityNo').focus();
				return (false);
			}
		}
		
		// check to see if e-mail is blank
		if(!checkEmpty("txtUserEmail",YOU_MUST_ENTER_EMAIL)){
			return (false);
		}

		//check whether email is valid or not
		if (echeck(trim(document.getElementById('txtUserEmail').value))==false){
			document.getElementById('txtUserEmail').focus();
			return (false);
		}
	
		if(appointmentType != "HT"){
			if(!checkEmpty("txtCurrentCustomer",YOU_MUST_SELECT_IS_EXISTING_CUSTOMER)){
				return (false);
			}
		}
		
		if(document.getElementById('txtPrivacyPolicy').checked == false){
			alert(YOU_MUST_SELECT_PRIVACY);
			return (false);
		}
		
		return true;
	}
	
	
	// Store Locator validation
	function validateOpticalStoreDropDown(theForm){
		if(trim(theForm.optical_store_id.value) == ""){
			alert(CHOOSE_A_STORE);
			theForm.optical_store_id.focus();
			return (false);
		}else{
			formaction = theForm.action;
			if(theForm.method_name.value != 'bookAppointment'){
				urlShortcut = theForm.optical_store_id.options[theForm.optical_store_id.selectedIndex].getAttribute("urlShortcut")
				//theForm.action = formaction+"/"+urlShortcut;
				location.href= formaction+"/"+urlShortcut;
                return (false); 
			}
		}   
	}
	
	function validateHearingStoreDropDown(theForm){
		if(trim(theForm.hearing_store_id.value) == ""){
			alert(CHOOSE_A_STORE);
			theForm.hearing_store_id.focus();
			return (false);
		}else{
			formaction = theForm.action;
			if(theForm.method_name.value != 'bookAppointment'){
				urlShortcut = theForm.hearing_store_id.options[theForm.hearing_store_id.selectedIndex].getAttribute("urlShortcut")
				//theForm.action = formaction+"/"+urlShortcut;
				location.href= formaction+"/"+urlShortcut;
				return (false);
			}
		}  
	}
	
	function isValidDate(day,month,year,message)
	{
	      source_date = new Date(year,month,day);
	
	      if(year != source_date.getFullYear())
	      {
	         alert(message);
	         return false;
	      }
	
	      if(month != source_date.getMonth())
	      {
	         alert(message);
	         return false;
	      }
	
	      if(day != source_date.getDate())
	      {
	         alert(message);
	         return false;
	      }
	   	  return true;
	}
		
	function validate_fast_track(theForm, appointmentType, Url){
			if(!Appointment_Validator(theForm, appointmentType)){
				return false;
			}
			if(!ajax_fast_track(Url)){
				return false;
		 	}
		
	 }
	

	 
	function findNearestStores(storeType, countryCode){
		var searchCriteria = document.getElementById('search_criteria').value;
		var defaultSearchCriteria = document.getElementById('search_criteria').getAttribute("oldValue");
		if(trim(searchCriteria) == "" ||   trim(searchCriteria) == defaultSearchCriteria){
			Lightbox.showBoxByID('info-holder-error-no-value', 585, 310);
			return false;
		}	
		
		if(document.getElementById('latitude')!= null && document.getElementById('longitude')!= null ){
			searchLocationsByGoogle(storeType, countryCode, searchCriteria);
		}else{
			searchLocationsByQAS(storeType, searchCriteria);
		}
	}
		
	function searchLocationsByQAS(storeType, searchCriteria){
		var url = document.getElementById('nearest_store_url').value;	
		url = url+searchCriteria+"&store_type="+storeType;
		
		var retvalue =  ajaxFindNearestStores(url);
		if(retvalue == "false"){
			//document.getElementById('keyed_in_search_criteria').innerHTML = searchCriteria;
			Lightbox.showBoxByID('info-holder', 585, 310);
			return false;
		}else if(retvalue != "true"){
			document.store_search.store_type.value= storeType;
			document.getElementById('search_criteria_for_duplicate_results').innerHTML = searchCriteria;
			document.getElementById('store_list').innerHTML = retvalue;
			Lightbox.showBoxByID('info-holder-duplicate-results', 585, 310);
			return false;
		}else if(retvalue == "true"){
			document.store_search.store_type.value=storeType;
			document.store_search.submit();			
		}
	}
	
	
	function submitStoreSearch(countryCode){
		var storeType;
		for (var i=0; i < document.store_search.store_type.length; i++){
		   if (document.store_search.store_type[i].checked)
		      {
			   	storeType = document.store_search.store_type[i].value;
		      }
		}
		findNearestStores(storeType, countryCode);
	}
	
	function submitDuplicateResultStoreSearch(searchCriteria,storeType){
			document.store_search.search_criteria.value= searchCriteria;
			document.store_search.submit();			
	}
	
	
	function catchEnterKey(e, store_type, countryCode)
	{
    	
		var key;

     	if(window.event){
        	  key = window.event.keyCode;     //IE
     	}else{
        	  key = e.which;     //firefox
     	}

     	if(key == 13){
          findNearestStores(store_type, countryCode);
          return false;
     	}else{
          return true;
     	}
	}
	
	
	
	function isEnterKeyNotPressed(e)
	{
    	var key;

     	if(window.event){
        	  key = window.event.keyCode;     //IE
     	}else{
        	  key = e.which;     //firefox
     	}

     	if(key == 13){
          return false;
     	}else{
          return true;
     	}
	}
	

	function catchDirectionFormEnterKey(e, formName)
	{
		var isEnterKeyNotPressed = isEnterKeyNotPressed(e);
     	if(isEnterKeyNotPressed == false){
     	  document.formName.submit();
          return false;
     	}else{
          return isEnterKeyNotPressed;
     	}
	}
	
	