var RADIO_NAME = new Array();
function validate_survey(frm)
{
	var n = frm.elements.length;
	RADIO_NAME = new Array();
	for(var i=0;i<n;i++)
	{
		var alt = frm.elements[i].lang;
		var val = frm.elements[i].value;
		var obj_id = frm.elements[i].id;
		var type = frm.elements[i].type;
		if(val)
			val = Trim(val);
		var title = Trim(frm.elements[i].title);
		var name = frm.elements[i].name;
		var has_val = true;
		//Get the Question Number from ID
		var tmpArr = obj_id.split('_');
		var QueId =tmpArr[0];
    //Check Question is there and also not Hidden
    if(document.getElementById('hide_'+QueId) && document.getElementById('hide_'+QueId).style.display=='none')
    {
      continue;
    }  
		if(type!=undefined && (type.substr(0 , 6)=='select') || type=='hidden')
		{
			var gen_message = "Please Select ";
		}else if(type=='radio')
		{
			var gen_message ='';
			if(title=='')
				var title = "Please Select one Option";
			else
				var title = title;
		}else if(type=='checkbox'){
			var gen_message ='';
			if(title=='')
				var title = "Please Select atleast one Check Box";
			else
				var title = title;
		}else{
			var gen_message = "Please Enter ";
		}
		if(alt && alt != "")
		{
			display_msg =1;
			var comp = alt.charAt(0);
			rtn1=alt.indexOf('{');
			rtn2=alt.lastIndexOf('}');
			if(comp=="*" || comp=="_")
			{
				if(comp=="*")
				{
					if(type=='radio' || type=='checkbox')
					{
						if(RADIO_NAME.toString().indexOf(name)==-1)
						{
							has_val = checkSelectedRadio(name);
							if(has_val==-1)
							{
								has_val = false;
								display_msg = 0;
							}
						}
					}
					if(val=="")
					{
						has_val=false;
					}
					
					if(document.getElementsByName(name)[0].parentNode.parentNode.parentNode.style.display=='none')
					{
							has_val=true;
					}
					/*if(!document.getElementsByName(name)[0].focus)
					{
						has_val=true;
					}*/
					
					if(!has_val)
					{
						if(display_msg)
							alert(gen_message+title);
						//alert(frm.elements[i].disabled);
						if(frm.elements[i].className!='styled')
							frm.elements[i].focus();
						return false;
					}
				}
				var valid_char = '';
				var valid_email = 'No';
				for(var j=rtn1+1; j<rtn2; j++)
				{
					//alert(alt.charAt(j));
					if(alt.charAt(j)=="N")
						valid_char += '0123456789.';
					if(alt.charAt(j)=="G")//added By NM - 28-June-2008
					{
						if(RADIO_NAME.toString().indexOf(name)==-1)
						{
							 var return_val = checkEmptyTextGroup(name);
							 if(!return_val)
							 {
							 	alert(title);
								frm.elements[i].focus();
								return false;
							 }
						}
					}
					else if(alt.charAt(j)=="A")
						valid_char += 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
					else if(alt.charAt(j)=="C")
						valid_char += '0123456789.+-';
					else if(alt.charAt(j)=="T")
						valid_char += '0123456789.+-() ';
					else if(alt.charAt(j)=="D")
						valid_char += '0123456789-/: ';
					else if(alt.charAt(j)=="E")
					{
						valid_email = "Yes";
						valid_char += 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._-@';
					}
					else if(alt.charAt(j)=="X")
						valid_char = '';
					else if(alt.charAt(j)=="[")
					{
						irtn1=alt.indexOf('[');
						irtn2=alt.lastIndexOf(']');
						//alert(alt.substring(irtn1+1,irtn2));
						valid_char += alt.substring(irtn1+1,irtn2);
						j = rtn2;
					}
				}
				if(document.getElementsByName(name)[0].parentNode.parentNode.parentNode.style.display=='none')
				{
						valid_email='No';
				}
				/*if(!document.getElementsByName(name)[0].focus)
				{
					valid_email='No';
				}*/
				
				if(valid_email == 'Yes')
				{
					valid_msg = isValidEmail(frm.elements[i].value);
					if(valid_msg != 0)
					{
						alert(valid_msg);
						frm.elements[i].focus();
						return false;
					}
				}
				for(k=0;k<val.length && valid_char!='';k++)
				{
					ch=val.charAt(k);
					rtn=valid_char.indexOf(ch);
					if(rtn==-1)
					{
						alert("Please Enter Valid "+ title);
						if(frm.elements[i].focus)
						frm.elements[i].focus();
						return false;
					}
				}
				
				// Format Validation Here

				f_str = alt.substring(rtn2+1,alt.length);
				if(f_str != "" && comp=="*")
				{
					arr = f_str.split(':');
					if(parseInt(arr[0]) > 0)
					{
						if(val.length < parseInt(arr[0]))
						{
							alert(title + " must be atleast of "+parseInt(arr[0])+" characters");
							return false;
						} 
					}
					if(parseInt(arr[1]) > 0)
					{
						if(val.length > parseInt(arr[1]))
						{
							alert(title + " must be less than or equal of "+parseInt(arr[1])+" characters");
							return false;
						} 
					}
				}
			}
		}
	}
	return true;
}
function creditcardcheck()
{
		var vCardType = 'vCardType';
		var vCardNumber = 'vCardNumber';
		var vCVVCode = 'vCVVCode';
		var Month = 'dExpirationMonth';
		var Year = 'dExpirationYear';
		var CartHolder = 'vCardHolder';
		
		
		
		var card_hodler = document.getElementById(CartHolder).value;
		var cc_number = document.getElementById(vCardNumber).value;
		var cc_type = document.getElementById(vCardType).value;
		var cc_year = document.getElementById(Year).value;
		var cc_month = document.getElementById(Month).value;
		var cc_ccv = document.getElementById(vCVVCode).value;

		var mm = (new Date()).getMonth()+1;
		var yy = (new Date()).getYear();
		var error = 0;
		var error_message = "Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n";
		if(card_hodler== "")
		{
			error_message = error_message + "* Enter Credit card Holeder's Name.\n";
		 	error = 1;
		}
		if (cc_number == "" || cc_number.length < 10) {
		  error_message = error_message + "* The credit card number must be at least 10 characters.\n";
		  error = 1;
		}
		if (!isValidCreditCard(cc_type, cc_number)) {
		  error_message = error_message + "* Invalid Credit Card Number.\n";
		  error = 1;
		}//alert(cc_number); return false;
		
		if (cc_month == '') {
		  error_message = error_message + "* Enter Credit card expire Month.\n";
		  error = 1;
		}
		
		if (cc_year == "") {
		  error_message = error_message + "* Enter Credit card expire Year.\n";
		  error = 1;
		}

		if (cc_year<yy || (cc_year==yy && cc_month<mm)) {
		  error_message = error_message + "* The credit card has been Expired. Enter valid expire date.\n";
		  error = 1;
		}
		if (cc_ccv == "") {
		  error_message = error_message + "* Enter Credit card Verification Code.\n";
		  error = 1;
		}
		if (cc_ccv.length < 3 || cc_ccv.length > 4) {
		  error_message = error_message + "* Invalid Credit card Verification Code.\n";
		  error = 1;
		}
		if (error == 1) {
			alert(error_message);
			return false;
		} 	
	return true;
}
function isValidCreditCard(type, ccnum) {
  	if (type == "V") {
	  // Visa: length 16, prefix 4, dashes optional.
//	  var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
	  var re = /^4[0-9]{12}([0-9]{3})?$/;
   } else if (type == "M") {
	  // Mastercard: length 16, prefix 51-55, dashes optional.
//	  var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
	  var re = /^5[1-5][0-9]{14}$/;
   } else if (type == "D") {
	  // Discover: length 16, prefix 6011, dashes optional.
	  var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
//	  ^6011[0-9]{12}$
   } else if (type == "A") {
	  // 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}$/;
   }
   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;
}
//******************************************************************************************//
//********************* functions  for email-id validation ****************************//
//******************************************************************************************//
function isValidEmail(emailStr) {
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) {
		return "Email address seems incorrect (check @ and .'s)";
		//alert("Email address seems incorrect (check @ and .'s)");
		//return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	// Start by checking that only basic ASCII characters are in the strings (0-127).
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return "Ths username contains invalid characters.";
			//return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return "Ths domain name contains invalid characters.";
			//return false;
		}
	}
	if (user.match(userPat)==null) {
		return "The username doesn't seem to be valid.";
		//return false;
	}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return "Destination IP address is invalid!";
				//return false;
	   		}
		}
		return 0;
	}
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return "The domain name does not seem to be valid.";
			//return false;
	   }	
	}
	if (checkTLD && domArr[domArr.length-1].length!=2 && 
		domArr[domArr.length-1].search(knownDomsPat)==-1) {
		return "The address must end in a well-known domain or two letter " + "country.";
		//return false;
	}

// Make sure there's a host name preceding the domain.

	if (len<2) {
		return "This address is missing a hostname!";
		//return false;
	}	
	return 0;
}
function Trim(s) 
{
	return s.replace(/^\s+/g, '').replace(/\s+$/g, '');
}
function checkSelectedRadio(name)
{
	var len_arr = RADIO_NAME.length;
	RADIO_NAME[len_arr]=name;
	var len_radio = document.getElementsByName(name).length;
	var radio_checked = false;
	for(r=0;r<len_radio;r++)
	{
		if(document.getElementsByName(name)[r].checked)
		{
			var tmp_obj = document.getElementsByName(name)[r];
			if(tmp_obj.value=='-1')
			{
				var str_arr = tmp_obj.id.split('_');
				if(document.getElementById('other_'+str_arr[0]).innerHTML=='')
				{
					alert('Please Specify other text');
					document.getElementById('other_'+str_arr[0]).focus();
					return -1;
				}
			}
			radio_checked = true;
			if(tmp_obj.type!='checkbox')
			break;
		}
	}
	return radio_checked;
}
function checkEmptyTextGroup(name)
{
	var len_arr = RADIO_NAME.length;
	RADIO_NAME[len_arr]=name;
	var len_radio = document.getElementsByName(name).length;
	var value_entered = false;
	for(r=0;r<len_radio;r++)
	{
		if(document.getElementsByName(name)[r].value!='')
		{
			value_entered = true;
		}
	}
	return value_entered;
}
