//Title Validation.js
//Author : AK
//Date   : 14 Feb,2010
//This file contains the functions for input data validation
//at client side with the help of java script.
	function check_dob_value(val){
		if(val.checked){
			document.getElementById("dob_yes").style.display="none";
			document.getElementById("chkcheck_hide_dob_day").style.display="none";
			document.getElementById("chkcheck_hide_dob_month").style.display="none";
			document.getElementById("chkcheck_hide_dob_year").style.display="none";
		
		}else{
			document.getElementById("dob_yes").style.display="";
			document.getElementById("chkcheck_hide_dob_day").style.display="";
			document.getElementById("chkcheck_hide_dob_month").style.display="";
			document.getElementById("chkcheck_hide_dob_year").style.display="";
		}
			
	}

	function check_tob_value(val){
		if(val.checked){
			document.getElementById("tob_yes").style.display="none";
			document.getElementById("chkcheck_hide_tob_hour").style.display="none";
			document.getElementById("chkcheck_hide_tob_minute").style.display="none";
			document.getElementById("chkradiohide_meridian").style.display="none";
			document.getElementById("chkradiohide_meridianpm").style.display="none";
		}else{
			document.getElementById("tob_yes").style.display="";
			document.getElementById("chkcheck_hide_tob_hour").style.display="";
			document.getElementById("chkcheck_hide_tob_minute").style.display="";
			document.getElementById("chkradiohide_meridian").style.display="";
			document.getElementById("chkradiohide_meridianpm").style.display="";
		}
			
	}
	
	// Payment method options
	function payment_method(val){
		if(val.value=='CHEQUE'){
			//document.getElementById("Cheque").style.display="";
			cheque_type("");
			bank_transfer_type("none");
			dd_type("none");
		}else if(val.value=='DD'){
			//document.getElementById("Demand").style.display=""
			dd_type("");
			bank_transfer_type("none");
			cheque_type("none");
		}else if(val.value=='BANKTRANSFER'){
			//document.getElementById("bank_transfer").style.display="";
			bank_transfer_type("");
			cheque_type("none");
			dd_type("none");
		}else{
			other_type();
		}
	}

	// Cheque
	function cheque_type(type){
			document.getElementById("Cheque").style.display=type;
			document.getElementById("chknum_chq_no").style.display=type;
			document.getElementById("chk_hide_dob_day").style.display=type;
			document.getElementById("chk_hide_dob_month").style.display=type;
			document.getElementById("chk_hide_dob_year").style.display=type;
			document.getElementById("chk_chq_amount").style.display=type;
			document.getElementById("chk_chq_issue_bank").style.display=type;
			document.getElementById("chk_chq_bank_branch_address").style.display=type;
	}
	
	// Bank transfer type
	function bank_transfer_type(type){
			document.getElementById("bank_transfer").style.display=type;
			document.getElementById("chk_bt_transfer_no").style.display=type;
			document.getElementById("chk_bt_day").style.display=type;
			document.getElementById("chk_bt_month").style.display=type;
			document.getElementById("chk_bt_year").style.display=type;
			document.getElementById("chk_bt_bank_name").style.display=type;
			document.getElementById("chk_bt_bank_ifsc_code").style.display=type;
			document.getElementById("chk_bt_bank_branch_address").style.display=type;
			document.getElementById("chk_bt_transfer_amount").style.display=type;
	}

	// DD
	function dd_type(type){
			document.getElementById("Demand").style.display=type;
			document.getElementById("chknum_dd_no").style.display=type;
			document.getElementById("chk_dd_dob_day").style.display=type;
			document.getElementById("chk_dd_dob_month").style.display=type;
			document.getElementById("chk_dd_dob_year").style.display=type;
			document.getElementById("chk_dd_amount").style.display=type;
			document.getElementById("chk_dd_issue_bank").style.display=type;
	}

	// Other payment type
	function other_type(){
			bank_transfer_type("none");
			cheque_type("none");
			dd_type("none");

	}

//  this function checks the email format is correct or not
//  and return true or false accordingly.
	function is_email(email)
	{
		if(!email.match(/^[A-Za-z0-9\._\-+]+@[A-Za-z0-9_\-+]+(\.[A-Za-z0-9_\-+]+)+$/))
			return false;
		return true;
	}
// End of is_email Function

// Checking for special character
	function is_special_char(string2)		
	{	
		var iChars = "!@#$%^&*()+=-[]\';,./{}|\":<>?";  
		for (var i = 0; i < string2.length; i++) 
		{  	
			if (iChars.indexOf(string2.charAt(i)) != -1)
			{  	
				//document.write("Containts special characters. \n These are not allowed.\n Please remove them and try again.");
				return false;
			}
		}

		return true;
	}

// Searching number in a strig
	function search_number(string2)		
	{	
		var iChars = "0123456789";  
		for (var i = 0; i < string2.length; i++) 
		{  	
			if (iChars.indexOf(string2.charAt(i)) != -1)
			{  	
				//document.write("Containts special characters. \n These are not allowed.\n Please remove them and try again.");
				return false;
			}
		}

		return true;
	}

// Checking for minum character length
	function min_character(string,minlength)		
		{	
			
				if (string.length<minlength)
				{  	
					//document.write("Containts special characters. \n These are not allowed.\n Please remove them and try again.");
					return false;
				}
			
			return true;
		}

//  this function checks the given number is signed/unsigned number
//  and return true or false accordingly.
	function is_number(number)
	{
		if(!number.match(/^[\-\+0-9e1-9]+$/))
			return false;
		return true;
	}
	
	function is_nospace(string2)
	{
		if(!string2.match(/^[\-\+A-Za-z0-9]+$/))
			return false;
		return true;
	}
// End of is_number Function

//  this function checks the given number is unsigned number
//  and return true or false accordingly.
	function is_unsign_number(number)
	{
		if(!number.match(/^[\+0-9]+$/))
			return false;
		return true;
	}
	function is_double(number)
	{
		if(!number.match(/^[0-9]*\.?[0-9]*$/))
			return false;
		return true;
	}
// End of is_unsign_number Function
	
//  this function checks the given string is alphanumeric word or not
//  and return true or false accordingly.
	function is_alpha_numeric(str)
	{
		if(!str.match(/^[A-Za-z0-9 ]+$/))
			return false;
		return true;
	}
// End of is_alpha_numeric Function

//  this function checks the given string is empty or not
//  and return true or false accordingly.
	function is_empty(str)
	{
  		 str=trim(str);
		 if ((str.length==0)||(str==null))
			return true;
		 return false;
	}
// End of is_empty Function
	
	function trim(inputString) 
	{
	   inputString=inputString.replace(/^\s+/g,"");
	   inputString=inputString.replace(/\s+$/g,"");
	   return inputString;
	} // Ends the "trim" function

	function convertDate(d,dateformat)
	{
		if(dateformat==null)
			dateformat='dd-mm-yyyy';

		if(dateformat.match(/^dd[-\/]{1}mm[-\/]{1}yyyy$/i))
		{
			var T = d.split(/[-\/]/);
			var M = T[1];
			var D = T[0];
			var	Y = T[2];
		}
		else if(dateformat.match(/^yyyy[-\/]{1}mm[-\/]{1}dd$/i))
		{
			var T = d.split(/[-\/]/);
			var M = T[1];
			var D = T[2];
			var	Y = T[0];
		}
		else
			return d;

		return (M+"-"+D+"-"+Y);
	}

	function is_date(d,dateformat)
	{
		if(dateformat==null)
			dateformat='dd-mm-yyyy';

		if(!dateformat.match(/^mm[-\/]{1}dd[-\/]{1}yyyy$/i))
			d=convertDate(d,dateformat);

		if(d.search(/^(\d){1,2}[-\/\\](\d){1,2}[-\/\\]\d{4}$/)!=0)
			return -1;//Bad Date Format
		
		var T = d.split(/[-\/]/);
		var M = eval(T[0]);
		var D = T[1];
		var	Y = T[2];
	
		return D>0 && (D<=[,31,28,31,30,31,30,31,31,30,31,30,31][M] ||	D==29 && Y%4==0 && (Y%100!=0 || Y%400==0) ) 
	}

	/// Usage : daetDiif(FirstDate,SecondDate,dateformat,returnas)
	/// returnas=null or 0 //Difrence will return in days
	/// returnas=null or 1 //Difrence will return in hours;
	/// returnas=null or 2 //Difrence will return in mins;
	/// returnas=null or 3 //Difrence will return in secs;
	/// returnas=null or 4 //Difrence will return in weeks;
	/// returnas=null or 5 //An array will return;


	function dateDiff(firstdate,secondate,dateformat,returnas)
	{
		date1 = new Date();
		date2 = new Date();
		diff  = new Date();
		
		firstdate=convertDate(firstdate,dateformat);
		secondate=convertDate(secondate,dateformat);

		if(is_date(firstdate,'mm-dd-yyyy')) 
		{ // Validates first date 
			date1temp = new Date(firstdate);
			date1.setTime(date1temp.getTime());
		}
		else
			return false; // otherwise exits

		if(is_date(secondate,'mm-dd-yyyy')) 
		{ // Validates second date 
			date2temp = new Date(secondate);
			date2.setTime(date2temp.getTime());
		}
		else
			return false; // otherwise exits

		// sets difference date to difference of first date and second date

		diff.setTime(date1.getTime() - date2.getTime());

		timediff = diff.getTime();
		
		if(returnas==null || returnas==0)
			return Math.floor(timediff / (1000 * 60 * 60 * 24)); 
		else if(returnas==1)
			return Math.floor(timediff / (1000 * 60 * 60)); 
		else if(returnas==2)
			return Math.floor(timediff / (1000 * 60)); 
		else if(returnas==3)
			return Math.floor(timediff / 1000); 
		else if(returnas==4)
			return Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
		else if(returnas==5)
		{
			weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
			timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

			days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
			timediff -= days * (1000 * 60 * 60 * 24);

			hours = Math.floor(timediff / (1000 * 60 * 60)); 
			timediff -= hours * (1000 * 60 * 60);

			mins = Math.floor(timediff / (1000 * 60)); 
			timediff -= mins * (1000 * 60);

			secs = Math.floor(timediff / 1000); 
			timediff -= secs * 1000;

			retval=new Array(weeks,days,hours,mins,secs);

			return retval; // form should never submit, returns false
		}
	}

	function isPastDate(firstdate,secondate,dateformat)
	{

		diff=dateDiff(firstdate,secondate);
		
		if(diff<0)
			return true;
		return false;
	}

	function isValidCreditCard(type, ccnum) 
	{
	   if (type == "Visa" || type == "VI") {
		  // Visa: length 16, prefix 4, dashes optional.
		  var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "MasterCard" || type == "MC") {
		  // Mastercard: length 16, prefix 51-55, dashes optional.
		  var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "Discover"  || type == "NO") {
		  // Discover: length 16, prefix 6011, dashes optional.
		  var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "AmEx" || type == "AX") {
		  // American Express: length 15, prefix 34 or 37.
		  var re = /^3[4,7]\d{13}$/;
	   } else if (type == "Diners") {
		  // Diners: length 14, prefix 30, 36, or 38.
		  var re = /^3[0,6,8]\d{12}$/;
	   } else if (type == "Bankcard") {
		  // Bankcard: length 16, prefix 5610 dashes optional.
		  var re = /^5610-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "JCB") {
		  // Bankcard: length 16, prefix 5610 dashes optional.
		  var re = /^[3088|3096|3112|3158|3337|3528]\d{12}$/;
	   } else if (type == "EnRoute") {
		  // Bankcard: length 15, prefix 5610 dashes optional.
		  var re = /^[2014|2149]\d{11}$/;
	   } else if (type == "Switch") {
		  // Bankcard: length 16, prefix 5610 dashes optional.
		  var re = /^[4903|4911|4936|5641|6333|6759|6334|6767]\d{12}$/;
	   }

	   if (!re.test(ccnum)) return false;
	   // Checksum ("Mod 10")
	   // Add even digits in even length strings or odd digits in odd length strings.
	   var checksum = 0;
	   for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
		  checksum += parseInt(ccnum.charAt(i-1));
	   }
	   // Analyze odd digits in even length strings or even digits in odd length strings.
	   for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
		  var digit = parseInt(ccnum.charAt(i-1)) * 2;
		  if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
	   }
	   if ((checksum % 10) == 0) return true; else return false;
	}

	//Checks the phone number like (001)-330-330 OR 9992592892
	///Start Function
	function is_phone(varphone)
	{
		if(!varphone.match(/^(\(?[0-9]*[-#\*\s]*[0-9]+\)?)+$/))
			return false;
		return true
	}
	//End Function



	//Form validation

	function ValidateForm(theForm)
	{
		for(i=0;i<theForm.elements.length;i++)
		{
				field = theForm.elements[i];
				
				if(field.id.match(/^chkemail_/))
				{
						if(!is_email(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
						
						if(field.id.match(/^chkemail_re/))
						{
							if((field.value)!=(document.getElementById('chkemail_email').value))
							{
								alert("Email and Retype Email should be same.")
								field.focus();
								return false;
							}
						}

				}
				
				else if(field.id.match(/^chkphone_/))
				{
						/*fieldname = field.id.replace(/^chkphone_/,'');
						fieldobj = field.getElementById(fieldname);*/
						if(!is_phone(field.value))
						{
							alert(field.title+", it can only contain numbers or brackets like (91)-11-22022022 or 9818300246")
							field.focus();
							return false;
						}
						if(!min_character(field.value,10))
						{
							alert(field.title+", it should not be less than 10 digits")
							field.focus();
							return false;
						}
				}
				else if(field.id.match(/^chkselect_/))
				{
						/*fieldname = field.id.replace(/^chkphone_/,'');
						fieldobj = field.getElementById(fieldname);*/
						if(!field.value)
						{
							alert(field.title)
							field.focus();
							return false;
						}
				}
				else if(field.id.match(/^chknum_/))
				{
						if(!is_number(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
				}
				else if(field.id.match(/^chkchkbox_/))
				{
						if(!field.checked)
						{
							alert(field.title)
							field.focus();
							return false;
						}
				}
				else if(field.id.match(/chkchkmbox_/))
				{
					if(theForm.elements[field.name].length >0)
					{
						checked = false;
						for(j=0;j<theForm.elements[field.name].length;j++)
						{
							if(theForm.elements[field.name][j].checked)
							{
								checked = true;
								break
							}
						}
						if(!checked)
						{
							alert(field.title)
							field.focus();
							return false;
						}
		
					}
					else if(!field.checked)
					{
							alert(field.title)
							field.focus();
							return false;
					}
				}
				else if(field.id.match(/^chkradiohide_/))
				{  if(field.style.display!='none')
					{
						if(theForm.elements[field.name].length >0)
						{
							checked = false;
							for(j=0;j<theForm.elements[field.name].length;j++)
							{
								if(theForm.elements[field.name][j].checked)
								{
									checked = true;
									break
								}
							}
							if(!checked)
							{
								alert(field.title)
								field.focus();
								return false;
							}				
						}
					}
				}
				else if(field.id.match(/^chkradio_/))
				{
					if(theForm.elements[field.name].length >0)
					{
						checked = false;
						for(j=0;j<theForm.elements[field.name].length;j++)
						{
							if(theForm.elements[field.name][j].checked)
							{
								checked = true;
								break
							}
						}
						if(!checked)
						{
							alert(field.title)
							field.focus();
							return false;
						}
		
					}
					else if(!field.checked)
					{
							alert(field.title)
							field.focus();
							return false;
					}
				}
				else if(field.id.match(/^chk_/) || (field.value==field.title && !is_empty(field.value)))
				{
						if(is_empty(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
				}
				else if(field.id.match(/^chkcheck_hide_/) || (field.value==field.title && !is_empty(field.value)))
				{
						if(is_empty(field.value))
						{
							if(field.style.display!='none'){
								alert(field.title)
								field.focus();
								return false;
							}
						}
				}
		
				else if(field.id.match(/^chkspecial_/) || (field.value==field.title && !is_empty(field.value)))
				{
						if(is_empty(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
						if(!is_special_char(field.value))
						{
							alert(field.title+", Special character are not allowed.")
							field.focus();
							return false;
						}
				}
				else if(field.id.match(/^chklength_/) || (field.value==field.title && !is_empty(field.value)))
				{
						if(is_empty(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
						if(!min_character(field.value,3))
						{
							alert(field.title+", It should not be less than 3 characters.")
							field.focus();
							return false;
						}
				}
				else if(field.id.match(/^chkmsg_/) || (field.value==field.title && !is_empty(field.value)))
				{
						if(is_empty(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
						if(!min_character(field.value,25))
						{
							alert(field.title+", It should not be less than 25 characters. A valid message helps us to serve you better.")
							field.focus();
							return false;
						}
				}
				else if(field.id.match(/^chkspecialnumlength_/) || (field.value==field.title && !is_empty(field.value)))
				{
						if(is_empty(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
						if(!is_special_char(field.value))
						{
							alert(field.title+", special characters or numbers not allowed.")
							field.focus();
							return false;
						}
						if(!search_number(field.value))
						{
							alert(field.title+" special characters or numbers not allowed.")
							field.focus();
							return false;
						}
						if(!min_character(field.value,5))
						{
							alert(field.title+" and it should not less than 5 characters.")
							field.focus();
							return false;
						}
				}else if(field.id.match(/^chkspecialwordlength_/) || (field.value==field.title && !is_empty(field.value)))
				{
						if(is_empty(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
						if(!is_special_char(field.value))
						{
							alert(field.title+", Special character are not allowed.")
							field.focus();
							return false;
						}
						if(!is_number(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
						if(!min_character(field.value,7))
						{
							alert(field.title+", Minimum 7 characters required.")
							field.focus();
							return false;
						}
				}
				else if(field.id.match(/^chknospace_/))
				{
						
						if(!is_nospace(field.value))
						{
							alert(field.title)
							field.focus();
							return false;
						}
				}
				if (field.id.match(/^chkdisable_/))
					{   
						field.disabled=true;
						
					}	
		
		}
	return true;

	}
