//### validation rules ###//
/*
  Easy Function Reference - BASED ON rc_formValidtor to mimic via JS...

  checkNotEmpty($field, $msg='', $allowNull) - // essentialy does any data exist
  checkIsNumeric($field, $msg='', $allowNull) - // make sure that the data is a number
**  checkLength($field, $min, $max, $msg='', $allowNull) - //
**  checkIdentical($field, $field2, $msg='', $allowNull) - // used for testing against dual passwords or email entry
  checkIsValidEmail($field, $msg='', $allowNull) - // email validation only regex not MX records
  checkIsText($field, $msg='', $allowNull) - // not needed as alphanumrec is the same sort of thing
  checkIsAlphabetic($field, $msg='', $allowNull) - // same as checkIsNumeric but text only no special characters
  checkIsDigit($field, $msg='', $allowNull) - // same as checkIsNumeric but 0-9 only
  checkIsAlphanum($field, $msg='', $allowNull) - // essentially no special characters
**  checkPassword($field, $field2, $min, $max, $msg='', $allowNull)
**  checkIsOfValues($field, $validValues, $msg='', $allowNull)
**  checkIsWithinRange($field, $min, $max, $msg='', $allowNull)
**  checkIsSmallerThan($field, $value, $msg='', $allowNull)
**  checkIsGreaterThan($field, $value, $msg='', $allowNull)
  checkDateFormat($field, $format, $seperator='-', $msg='', $allowNull) - // checks date via regex dd/mm/yyyy only

** ones not done as yet,

*/

// event like listener for validation
function validDocEL(){
 $(".req1").blur( function() {  // if label has class validate and an input field
	 var v = $(this).attr("id"); // get ID to validate
	 var vr = $(this).attr("class"); // get all rules for input field
	inputCheck(v,vr) } );

	$(".req1").change( function() {  // capture input on change
	 var v = $(this).attr("id");
	 var vr = $(this).attr("class"); // get all rules for input field
	inputCheck(v,vr) } );
}



function validDoc(){
	 var formValidated = true;
	 $(".req1").each(function(i){  // if label has class validate and an input field
	  var v = $(this).attr("id"); // get ID to validate
	  var vr = $(this).attr("class"); // get all rules for input field
	  if(inputCheck(v,vr) == false){
	    //alert(inputCheck(v,vr));
	    formValidated = false;
	  }} );	
	
	if(formValidated == false){
	 // ThickBox pop up custom modal
	  $("#errorHere").removeClass("noDisplay");  
		//$("#customDialog h1").text("Form Errors Found");
	  //$("#customDialog .text").text("Please Check: Sorry we found an error/s, can you please check and correct all items marked in red.");
	  //tb_show('SORRY WE FOUND SOME ERRORS', '#TB_inline?height=200&width=335&inlineId=customDialog&modal=true', null);
	  //$("#TB_window").css({ border: "0", background:"transparent" });
	  return false;
	}
}


// used to pretest if the field is required and to split class data into usable items
function inputCheck(v,vr){
 var returnVar = true;
 rules = vr.split(" "); // array all classes at space
 $.each(rules, function(i, n){ // check all class values being 'rules'
  var doVal = n.search(/vr#/); // for each rule check for validation trigger vr#
   if(doVal != -1){ // if vr# exists run next pass to find rules
	   r = n.split("#"); // split at # to find all rules
	   rules = r[1];
	   // check to see if required exists...
	   if(r[1].search(/req/) != -1){
	     req = true;
	   }else{
	     req = false;
	   }
    if(validCheck(v,req,rules) == false){
      returnVar = false;
    }
   }
  }
 );
 return returnVar;
}

// the validator checks validation rules for the field sent
function validCheck(v,req,rules){	
	ru = rules.split(":"); // split at : to find an exact rule
	if(ru.length == 1 && req==true){ // check for just required value - find out how many items are in the array ru.lenght
	  return checkNotEmpty(v);
	}else if(ru[0] == 'email' || ru[1] == 'email'){ // email check
	  return checkIsValidEmail(v,req);
	}else if(ru[0] == 'confirmemail'){
	  return checkIsConfirmEmail(v,req);
	}else if(ru[1] == 'NIS'){
	  return validNationalIns(v,req);
	}else if(ru[0] == 'phone'){
	  return phoneNumber(v,req,ru[1],ru[2]);
	}else if(ru[1] == 'phone'){
	  return phoneNumber(v,req,ru[2],ru[3]);
	}else if(ru[0] == 'number'){
	  return checkIsNumeric(v,req,ru[1],ru[2]);
	}else if(ru[1] == 'number'){
	  return checkIsNumeric(v,req,ru[2],ru[3]);
	}else if(ru[0] == 'numericString'){
	  return checkIsNumericString(v,req,ru[1],ru[2]);
	}else if(ru[1] == 'numericString'){
	  return checkIsNumericString(v,req,ru[2],ru[3]);
	}else if(ru[0] == 'date' || ru[1] == 'date'){ // date check
	  return checkDateFormat(v,req);
	}else if(ru[0] == 'alpha' || ru[1] == 'alpha'){ // alpha check
	  return checkIsAlphanum(v,req);
	}else if(ru[0] == 'string'){
	  return checkStringLength(v,req,ru[1],ru[2]);
	}else if(ru[1] == 'string'){
	  return checkStringLength(v,req,ru[2],ru[3]);
	}else if(ru[0] == 'digit' || ru[1] == 'digit'){ // digit check
	  return checkIsDigit(v,req);
	}else if(ru[0] == 'alphab' || ru[1] == 'alphab'){ // alphab check
		return checkIsAlphabetic(v,req);
	}else if(ru[0] == 'accountnumber' || ru[1] == 'accountnumber'){ // account number check
		return checkAccountNumber(v, req);
	}else if(ru[0] == 'postcode' || ru[1] == 'postcode'){ // post code check
		return isValidPostCode(v, req);
	}else if(ru[0] == 'timeperiod' || ru[1] == 'timeperiod'){ // post code check
		return timeAtEmployer(v, req);
	}else if(ru[0] == 'scode' || ru[1] == 'scode'){ // post code check
		return isValidSortCode(v, req);
	}else if(ru[0] == 'dateOB' || ru[1] == 'dateOB'){ // post code check
		return checkIsValidDOB(v, req);
	}else if(ru[0] == 'PayDate' || ru[1] == 'PayDate'){ // post code check
		return checkIsValidPayDate(v, req);
	}else{ 
		if (ru[0] == 'checkbox' || ru[1] == 'checkbox'){	
			return checkIsChecked(v, req);
		}	
	
		return false;
	}
} // end validCheck 

function checkStringLength(v, req, minlen, maxlen)
{
	val = document.getElementById(v).value;
	if(val == ''){ // check if this is a required field
		if(req) {
			return failure(v, 'A password is required');
		} else {
			return successFalse(v);
		}
	}
	
	if(minlen) {
		if(val.length < minlen) {
			return failure(v, 'Minimum length required is ' + minlen);
		}
	}

	if(maxlen) {
		if(val.length > maxlen) {
			return failure(v, 'Maximum length required is ' + maxlen);
		}
	}

	return success(v);
}

// basic does this exist data
function checkNotEmpty(v){
 var fielddata = document.getElementById(v).value;
 var data = $.trim(fielddata);
 var m = 'This field is required'; // message for this error
  if(data==null || data==""){
		  return failure(v,m);
	 }else{
		  return success(v);
	 }
}


//Checks if a checkbox has been checked
function checkIsChecked(v,req) {
  var data=document.getElementById(v).checked;
  var m = 'This is required';
  if (!data) 
  	return failure(v, m);
  else
  	return success(v);
  
 }
  

// numbers only including .
function checkIsNumeric(v,req,minExclusive,maxExclusive) {
  var data=document.getElementById(v).value;
  var data=$.trim(data).replace(/[a-zA-Z ,\$\-]+/g,'');

  if(req==true && data == '' || data == null){ // check if this is a required field
    var m = 'A number is required'; // message for this error
	   return failure(v,m);
  }
  
  if(data != ''){
		if((typeof minExclusive != 'undefined') && minExclusive !== null) {
			if(data <= minExclusive) {
				return failure(v,'The value for this field must be greater than ' + minExclusive);
			}
		}

		if((typeof maxExclusive != 'undefined') && maxExclusive !== null) {
			if(data >= maxExclusive) {
				return failure(v,'The value for this field must be lesser than ' + maxExclusive);
			}
		}

		document.getElementById(v).value = data;
	   return success(v);
  }
  
  if(data == '' && req == false){
    document.getElementById(v).value = data;
	   return successFalse(v);
  }

   var m = 'Expecting numbers only please correct'; // message for this error
   return failure(v,m);
}

function checkIsNumericString(v,req,minLength,maxLength) {
  var data=document.getElementById(v).value;
  var data=$.trim(data).replace(/[a-zA-Z ,\$\-]+/g,'');

  if(req==true && data == '' || data == null){ // check if this is a required field
    var m = 'A number is required'; // message for this error
	   return failure(v,m);
  }
  
  if(data != ''){
		if((typeof minLength != 'undefined') && minLength !== null) {
			if(data.length < minLength) {
				return failure(v,'You must type at least ' + minLength + ' characters');
			}
		}

		if((typeof maxLength != 'undefined') && maxLength !== null) {
			if(data.length >= maxLength) {
				return failure(v,'You must type at least ' + maxLength + ' characters');
			}
		}

		document.getElementById(v).value = data;
	   return success(v);
  }
  
  if(data == '' && req == false){
    document.getElementById(v).value = data;
	   return successFalse(v);
  }

   var m = 'Expecting numbers only please correct'; // message for this error
   return failure(v,m);
}

//national INS
function validNationalIns(v,req)
{
	
	var tnumber = $.trim(document.getElementById(v).value);
	
	
	var varString  = '';
	
	var varReg = /[0-9]+$/;
	var telnr = /^([a-zA-Z0-9-/_!#@]+)$/;
	
	varString = 'national insurance';
	
	
	
	if(tnumber == ''){ // check if this is a required field
		if(req==true) {
			var m = 'A '+ varString +' number is required'; // message for this error
			return failure(v,m);
		}

		return successFalse(v);
	}

	if(tnumber != '' && !telnr.test(tnumber)){
		var m = 'The '+ varString +' number should not have space'; // message for this error
		return failure(v,m);
	}
	else
	{
		//return success(v);
		//code to check the 6 digits
		var IntNumCnt = 0;
		var i;
		for(i = 0; i < tnumber.length; i++) 
		{
			var charvalue = tnumber.charAt(i);
			
			if(varReg.test(charvalue))
			{
				 IntNumCnt++;
			}

		}
		
		if(parseInt(IntNumCnt) < 6)
		{
			var m = 'The '+ varString +' number should have atleast 6 numeric digits'; // message for this error
			return failure(v,m);
		}
		else
		{
			return success(v);
		}
	}
	
	
	
	return failure(v,m);
}

// phone number data
function phoneNumber(v,req,minLength,maxLength){

	if(!minLength) {
		minLength = 10;
	}

	if(!maxLength) {
		maxLength = 11;
	}

	var tnumber=$.trim(document.getElementById(v).value);
	//var telnr = /^\+?[0-9 ()-.]+[0-9]?$/;
	//var telnr = /^\+?[0-9\-\.]+$/;
	
	var varString  = '';
	if(v == 'home_phone')
	{
		var telnr = /^((01)|(02)){1,1}[0-9]{0,9}$/;
		varString = 'home phone';
	}
	else if(v == 'work_phone')
	{
	
		//var telnr = /^(01)|^(02)|^(08)+([0-689])+[0-9]+$/;
		var telnr = /^((01)|(02)|(08)){1,1}[0-9]{0,9}$/;
		varString = 'work phone';
	}
	else if(v == 'mobile_phone')
	{
		//var telnr = /^(07)+?[0-9]+$/;
		var telnr = /^((07)){1,1}[0-9]{0,9}$/;
		varString = 'mobile phone';
	}
	
	if(tnumber == ''){ // check if this is a required field
		if(req==true) {
			var m = 'A '+ varString +' number is required'; // message for this error
			return failure(v,m);
		}

		return successFalse(v);
	}

	if(tnumber != '' && telnr.test(tnumber)){
		if(tnumber.length >= minLength && tnumber.length <= maxLength){
		    return success(v);
		}

		var m = 'The '+ varString +' number must have at least ' + minLength + 
			' digits and at most ' + maxLength + ' digits.'; // message for this error
		return failure(v,m);
	}

	//var m = varString +' number must include area code and no space For e.g. 0755912833'; // message for this error
	if(v == 'mobile_phone')
	{
		var m = varString +' number must start with 07 and should be of 11 digits with no space For e.g. 07123456789'; // message for this error
	}
	else if(v == 'work_phone')
	{
		var m = varString +' number must start with 01, 02 or 08 and should be of 10 to 11 digits with no space For e.g. 0123456789'; // message for this error
	}
	else if(v == 'home_phone')
	{
		var m = varString +' number must start with 01 or 02 and should be of 10 to 11 digits with no space For e.g. 0123456789'; // message for this error
	}
	return failure(v,m);
}

/*** 
function to chekc the valid date and also chekc the date validation 
should not exceed the current date
***/
function checkIsValidDOB(v,req){
	  
		var dateOfBirth = $.trim(document.getElementById(v).value);	//date_of_birth
		var currentDate = $.trim(document.getElementById('current_date').value);
		
		var splitCurrent = currentDate.split("/");
		
		var varString  = '';
		if(v == 'date_of_birth')
		{
			varString = 'date of birth';
		}
		
		
	  if($.trim(document.getElementById('date_of_birth').value) != ''){
			
			var splitdateOne = dateOfBirth.split("/");
			
			var sD = splitdateOne[0];
			var sM = splitdateOne[1];
			var sY = splitdateOne[2]
			
			var TD = splitCurrent[0];
			var TM = splitCurrent[1];
			var TY = splitCurrent[2];
			
			if(TY<sY) {
				var m = varString +' should be prior to current date.\n';
				return failure(v,m);
			}
			else if(TM==sM && TD<sD && TY==sY) { 
				var m = varString +' should be prior to current date.\n';
				return failure(v,m);
			}
			else if(TM<sM && sY==TY) { 
				var m = varString +' should be prior to current date.\n';
				return failure(v,m);
			}
			else
			{
				return success(v);
			}
			
	  }else if(req==true && dateOfBirth == ''){ // check if this is a required field
		var m = 'The field is required';
		return failure(v,m);
	 }else{
		 return success(v);
	 }
		
}
/*****
vaildation next pay date and following pay date
******/
function checkIsValidPayDate(v,req){
	  
		var nextPayDate = $.trim(document.getElementById('next_pay_date').value);	//next pay date
		var followingPayDate = $.trim(document.getElementById('following_pay_date').value);	//following pay date
		var currentDate = $.trim(document.getElementById('current_date').value);
		var splitCurrent = currentDate.split("/");
		//current date
		var TD = splitCurrent[0];
		var TM = splitCurrent[1];
		var TY = splitCurrent[2];
		
		var varString  = '';
		if(v == 'next_pay_date')
		{
			varString = 'next pay date';
		}
		else if(v == 'following_pay_date')
		{
			varString = 'following pay date';
		}
		
		
				
				var splitdateOne = nextPayDate.split("/");
				var splitdateTwo = followingPayDate.split("/");
				
				
				//next pay date
				var nD = splitdateOne[0];
				var nM = splitdateOne[1];
				var nY = splitdateOne[2]
				
				//following pay date
				var fD = splitdateTwo[0];
				var fM = splitdateTwo[1];
				var fY = splitdateTwo[2]
				
				
				if(v == 'next_pay_date')
				{
					
					if(req==true && nextPayDate == '')
					{ 
						var m = 'The field is required';
						return failure(v,m);
					}
					else if(nY<TY) {
						m = 'Next pay date should not be prior to current date.\n';
						return failure(v,m);
					}
					else if(nM==TM && nD<TD && nY==TY) { 
						m = 'Next pay date should not be prior to current date.\n';
						return failure(v,m);
					}
					else if(nM<TM && nY==TY) { 
						m = 'Next pay date should not be prior to current date.\n';
						return failure(v,m);
					}
					else if(fY<nY) {
						m = 'Next pay date should be prior to pay date after next.\n';
						return failure(v,m);
					}
					else if(fM==nM && fD<=nD && fY==nY) { 
						m = 'Next pay date should be prior to pay date after next.\n';
						return failure(v,m);
					}
					else if(fM<nM && fY==nY) { 
						m = 'Next pay date should be prior to pay date after next.\n';
						return failure(v,m);
					}
					else
					{
						return success(v);
					}
					
				}
				else if(v == 'following_pay_date')
				{
					
					if(req==true && followingPayDate == '')
					{ 
						var m = 'The field is required';
						return failure(v,m);
					}
					else if(fY<TY) {
						m = 'Pay date after next should not be prior to current date.\n';
						return failure(v,m);
					}
					else if(fM==TM && fD<TD && fY==TY) { 
						m = 'Pay date after next should not be prior to current date.\n';
						return failure(v,m);
					}
					else if(fM<TM && fY==TY) { 
						m = 'Pay date after next should not be prior to current date.\n';
						return failure(v,m);
					}
					else if(fY<nY) {
						m = 'Pay date after next should not be prior to next pay date.\n';
						return failure(v,m);
					}
					else if(fM==nM && fD<=nD && fY==nY) { 
						m = 'Pay date after next should not be prior to next pay date.\n';
						return failure(v,m);
					}
					else if(fM<nM && fY==nY) { 
						m = 'Pay date after next should not be prior to next pay date.\n';
						return failure(v,m);
					}
					else
					{
						return success(v);
					}
				}
				
	 }

function checkDateFormat(v,req){
	var dateE=$.trim(document.getElementById(v).value);

	if(dateE == ''){ // check if this is a required field
		if(req) {
			return failure(v, 'A date is required');
		} else {
			return successFalse(v);
		}
	}

	parts = dateE.split('/');
	d = parts[0]; 
	m = parts[1]; 
	y = parts[2];
	if(	
		(d > 0 && d < 32) && 
		(m > 0 && m < 13) &&
		(y > 1900 && y < 2100)
	) {
		return success(v);
	}

	var m = 'Not a valid date format, expecting dd/mm/yyyy. Please use pop up selector or re-type'; // message for this error
	return failure(v,m);
}

// check is alphanumeric
function checkIsAlphanum(v,req){
	  var dataA=$.trim(document.getElementById(v).value);
	  var dateChar=/^[a-z0-9]+$/i;
	  if(req==true && dataA == ''){ // check if this is a required field
	    var m = 'Some input is required'; // message for this error
		   return failure(v,m);
	  }else if(dataA != '' && dateChar.test(dataA) || req==false && dateChar.test(dataA)){
		   return success(v);
	  }else if(dataA == '' && req == false){
		   return successFalse(v);
	  }else{
	    var m = 'Please use numbers or text only, no special characters like (.,)*&^ etc...'; // message for this error
		   return failure(v,m);
	  }
}

// check is digit
function checkIsDigit(v,req){
	  var dataA=$.trim(document.getElementById(v).value);
	  var dateChar=/^[0-9]+$/;
	  var labelString = '';
	 if(v == 'monthly_pay')
	 {
	 	labelString = 'This field';
	 }
	 
	 if(req==true && dataA == ''){ // check if this is a required field
	  
	       var m = labelString + ' is required'; // message for this error
		   return failure(v,m);
	  }else if(dataA != '' && dateChar.test(dataA) || req==false && dateChar.test(dataA)){
		   return success(v);
	  }else if(dataA == '' && req == false){
		    return successFalse(v);
	  }else{
	    var m = 'Please use numbers only, no special characters like (.,)*&^ etc... or text a-z'; // message for this error
		   return failure(v,m);
	  }
}

// check is alphabetic
function checkIsAlphabetic(v,req){
	  var dataA=$.trim(document.getElementById(v).value);
	  var dateChar=/^[a-z]+$/i;
	  if(req==true && dataA == ''){ // check if this is a required field
     var m = 'Some input is required'; // message for this error
		   return failure(v,m);
	   }else if(dataA != '' && dateChar.test(dataA) || req==false && dateChar.test(dataA)){
      return success(v);
	   }else if(dataA == '' && req == false){
		    return successFalse(v);
	   }else{
	     var m = 'Please use a-z or A-Z only, and no special characters like (.,)*&^ etc...'; // message for this error
		    return failure(v,m);
	   }
}

// email check
function checkIsValidEmail(v,req){
	  var emaile=$.trim(document.getElementById(v).value);
	  var emailchar=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	  
	  //new code addded 
	  if($.trim(document.getElementById('email').value) != '' && $.trim(document.getElementById('confirm_email').value) != ''
			&& $.trim(document.getElementById('email').value) != $.trim(document.getElementById('confirm_email').value) ){
 		  	var m = 'email and confirm email should be same'; // message for this error
		   return failure(v,m);
	  }//end new code for confirm email
	  else if(req==true && emaile == ''){ // check if this is a required field
	    var m = 'An email address is required'; // message for this error
		   return failure(v,m);
	  }else if(emaile != '' && emailchar.test(emaile) || req==false && emailchar.test(emaile)){
		   return success(v);
	  }else if(emaile == '' && req == false){
 		 return successFalse(v);
	  }else{
	    var m = 'Not a valid email address'; // message for this error
		   return failure(v,m);
	  }

}

function checkAccountNumber(v, req)
{
	 var accountnumber =  /[0-9]{8}/;
	 var MyAccountNumber = $.trim(document.getElementById(v).value);
	 if(req==true && MyAccountNumber == '')
	 {
		 var m = 'Account number is required'; // message for this error
		 return failure(v,m);
	 }
	 else if(MyAccountNumber.length !=8 || !accountnumber.test(MyAccountNumber))
	 {
		 var m = 'Not a valid account number'; // message for this error
		 return failure(v,m);
	 }
	 else if(MyAccountNumber.length ==8 && accountnumber.test(MyAccountNumber))
	 {
		 return success(v);
	 }
}

function isValidPostCode(v, req)
{
	var RegPostCode = /(^(((GIR)\s{0,1}((0AA))))|(((X9)\s{0,1}((9AL))))|(((X9)\s{0,1}((9LF))))|(((X9)\s{0,1}((9BN))))|(([A-PR-UWYZ][0-9][0-9]?)|([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s{0,1}([0-9][ABD-HJLNP-UW-Z]{2})$)/;
	var MyPostCode = $.trim(document.getElementById(v).value.toUpperCase());
	if(req == true && MyPostCode == '')
	{
		var m = 'Post Code is required'; // message for this error
		return failure(v,m);
	}
	else if(!RegPostCode.test(MyPostCode))
	{
		var m = 'Not a valid post code'; // message for this error
		 return failure(v,m);
	}
	else if(MyPostCode != '' && RegPostCode.test(MyPostCode))
	{
		return success(v);
	}
	
}

function timeAtEmployer(v, req)
{
	var Regtimeperiod = /[0-9]+/; 
	var MyTimePeriod = $.trim(document.getElementById(v).value);
	if(req == true && MyTimePeriod == '')
	{
		var m = 'This filed is required'; // message for this error
		return failure(v,m);
	}
	else if(MyTimePeriod.length > 3 || !Regtimeperiod.test(MyTimePeriod))
	{
		 var m = 'Not a valid time at employer'; // message for this error
		 return failure(v,m);
	}
	else if(MyTimePeriod != '' && Regtimeperiod.test(MyTimePeriod))
	{
		return success(v);
	}
}

function isValidSortCode(v, req)
{
	var RegSortCode = sortcode = /[0-9]{6}/;
	var MySortCode = $.trim(document.getElementById(v).value);
	if(req == true && MySortCode == '')
	{
		var m = 'This field is required'; // message for this error
		return failure(v,m);
	}
	else if(MySortCode.length != 6 || !RegSortCode.test(MySortCode))
	{
		 var m = 'Not a valid sort code'; // message for this error
		 return failure(v,m);
	}
	else if(MySortCode != '' && RegSortCode.test(MySortCode))
	{
		return success(v);
	}
	
}

// failure details, change class and add comments
function failure(v,m){ var fail = true;$('#' + v).css({"border":"1px solid #CC0000"});$('#' + v).addClass("failApp"); $('#sta_' + v).addClass("failApp");$('#sta_' + v).removeClass("successApp");$('#' + v).removeClass("successApp");$('#' + v + '_msg').css({display:"block"}); $('#' + v + '_msg').html(m);return false;}
// success details, display green for go class
function success(v){$('#' + v).css({"border":"1px solid #79A450"});$('#' + v).removeClass("failApp");$('#sta_' + v).removeClass("failApp");$('#' + v).removeClass("error-php");$('#sta_' + v).addClass("successApp");$('#' + v).addClass("successApp");$('#' + v + '_msg').css({display:"none"});return true;}
// success false is a success without requiring a tick
function successFalse(v){$('#' + v).removeClass("failApp");$('#sta_' + v).removeClass("failApp");$('#sta_' + v).removeClass("successApp");$('#' + v).removeClass("successApp");$('#' + v + '_msg').css({display:"none"});return true;}

//### end validation rules ###//




//### common functions ###//

function getKeyCode(e)
{
	if (window.event) {
		return window.event.keyCode;
	}

	return e ? e.which : null;
}

function keyRestrict(e, validchars)
{
	key = getKeyCode(e);

	if(key == null || key == 0 || key == 8 || key == 9 || key == 13 || key == 27 ) {
		return true;
	}

	keychar = String.fromCharCode(key).toLowerCase();
	validchars = validchars.toLowerCase();

	if(validchars.indexOf(keychar) != -1) {
		return true;
	}

	return false;
}

function getLastXofMonth(x) {
  c = new Date()
  c.setMonth(c.getMonth()+1)
  c.setDate(0)
  num = 7
  while(c.toString().substring(0,2) != x.substring(0,2)) {
    c.setDate(c.getDate()-1)
    num -=1
    if(num==0)
      break
  }
 return c
}

function getFollowXofMonth(x) {
  c = new Date()
  c.setMonth(c.getMonth()+2)
  c.setDate(0)
  num = 7
  while(c.toString().substring(0,2) != x.substring(0,2)) {
    c.setDate(c.getDate()-1)
    num -=1
    if(num==0)
      break
  }
 return c
}

//for existing code 
function getNextPayDate(varSelectedIndex)
{
	np = document.getElementById('next_pay_date');
	c = new Date()
	fd = new Date()
    switch(varSelectedIndex) {
      case 0:
        np.disabled = 0
        np.value = ""
        break
      case 1:
	   np.disabled = 0
        c.setMonth(c.getMonth()+1)
        c.setDate(0)
        if(c.getDay() == 6) //SATURDAY
          c.setDate(c.getDate() - 1)
        else if(c.getDay() == 0) // SUNDAY
          c.setDate(c.getDate() - 2 )
        np.value = formatDate(c, "dd/MM/yyyy")
        break;
	case 2:
	   	np.disabled = 0
        np.value = ""
        break	
     case 3:
        np.disabled = 0
        c = getLastXofMonth("Monday")
        np.value = formatDate(c, "dd/MM/yyyy")
        break
      case 4:
        np.disabled = 0
        c = getLastXofMonth("Tuesday")
        np.value = formatDate(c, "dd/MM/yyyy")
       break
      case 5:
        np.disabled = 0
        c = getLastXofMonth("Wednesday")
        np.value = formatDate(c, "dd/MM/yyyy")
        break
      case 6:
        np.disabled = 0
        c = getLastXofMonth("Thursday")
        np.value = formatDate(c, "dd/MM/yyyy")
        break
      case 7:
        np.disabled = 0
        c = getLastXofMonth("Friday")
        np.value = formatDate(c, "dd/MM/yyyy")
        break
	  case 8:
	   	np.disabled = 0
        np.value = ""
        break
    }
}

//for leadmesh
function getNextPayDateLeadMesh(varSelectedIndex)
{
	np = document.getElementById('next_pay_date');
		nf = document.getElementById('following_pay_date');
	c = new Date()
	fd = new Date()
    switch(varSelectedIndex) {
      case 0:
        np.disabled = 0
        np.value = ""
		nf.disabled = 0
		nf.value = ""
        break
      case 1:
	   np.disabled = 0
        c.setMonth(c.getMonth()+1)
        c.setDate(0)
        if(c.getDay() == 6) //SATURDAY
          c.setDate(c.getDate() - 1)
        else if(c.getDay() == 0) // SUNDAY
          c.setDate(c.getDate() - 2 )
        np.value = formatDate(c, "dd/MM/yyyy")
		nf.value = formatDate(c, "dd/MM/yyyy")
        break;
	case 2:
	   	np.disabled = 0
        np.value = ""
		nf.disabled = 0
        nf.value = ""
        break	
	case 3:
	   	np.disabled = 0
        np.value = ""
		nf.disabled = 0
        nf.value = ""
        break
	case 4:
	   	np.disabled = 0
        np.value = ""
		nf.disabled = 0
        nf.value = ""
        break
	case 5:
	   	np.disabled = 0
        np.value = ""
		nf.disabled = 0
        nf.value = ""
        break	
     case 6:
        np.disabled = 0
        c = getLastXofMonth("Monday")
        np.value = formatDate(c, "dd/MM/yyyy")
		c = getFollowXofMonth("Monday") 
		nf.value = formatDate(c, "dd/MM/yyyy")
        break
      case 7:
        np.disabled = 0
        c = getLastXofMonth("Tuesday")
        np.value = formatDate(c, "dd/MM/yyyy")
		c = getFollowXofMonth("Tuesday") 
		nf.value = formatDate(c, "dd/MM/yyyy")
        break
      case 8:
        np.disabled = 0
        c = getLastXofMonth("Wednesday")
        np.value = formatDate(c, "dd/MM/yyyy")
		c = getFollowXofMonth("Wednesday") 
		nf.value = formatDate(c, "dd/MM/yyyy")
        break
      case 9:
        np.disabled = 0
        c = getLastXofMonth("Thursday")
        np.value = formatDate(c, "dd/MM/yyyy")
		c = getFollowXofMonth("Thursday") 
		nf.value = formatDate(c, "dd/MM/yyyy")
        break
      case 10:
        np.disabled = 0
        c = getLastXofMonth("Friday")
        np.value = formatDate(c, "dd/MM/yyyy")
		c = getFollowXofMonth("Friday") 
		nf.value = formatDate(c, "dd/MM/yyyy")
        break
	  case 11:
	   	np.disabled = 0
        np.value = ""
		nf.disabled = 0
        nf.value = ""
        break
	 case 12:
	   	np.disabled = 0
        np.value = ""
		nf.disabled = 0
        nf.value = ""
        break	
    }
}
//for follow pay date
function getFollowPayDate(varDate)
{
	arrDate = varDate.split("/");
	nf = document.getElementById('following_pay_date');
	nf.value = '';
	var vardate = arrDate[0];
	var varMonth = arrDate[1];
	var varYear = arrDate[2];
	
	if(varDate != '')
	{
		var c = new Date();
		c.setFullYear(varYear,varMonth,vardate);
		c.setMonth(parseInt(varMonth));
		if(parseInt(varMonth) == 12)		
		{
			c.setYear(parseInt(varYear) + 1);
		}
		else
		{
			c.setYear(parseInt(varYear));
		}
		
		//c.setDate(parseInt(vardate));
		nf.value = formatDate(c, "dd/MM/yyyy");
	}
}


