/*
 * 
 * E-Mail Vision Generic Join Webform Validation JavaScript - (c) 2002
 * 
*/ 

	// Script Pop Up Window
	function popupWindow(theURL,winName,features) {
		window.open(theURL,winName,features);
	}

	// This function retrieves the values of the DOB drop down lists and concatenate them into the 'DATEOFBIRTH_Name' hidden field
	function makeDate(dob_m, dob_d, dob_y) {
		if  ( (document.emvForm.dob_m.options[document.emvForm.dob_m.selectedIndex].value != '')&&(document.emvForm.dob_d.options[document.emvForm.dob_d.selectedIndex].value != '')&&(document.emvForm.dob_y.options[document.emvForm.dob_y.selectedIndex].value != '') ) {
			var month = String(document.emvForm.dob_m.options[document.emvForm.dob_m.selectedIndex].value);
			var day = String(document.emvForm.dob_d.options[document.emvForm.dob_d.selectedIndex].value);
			var year = String(document.emvForm.dob_y.options[document.emvForm.dob_y.selectedIndex].value);
			var emvDob =	month + '/' + day + '/' + year;
			}
		else {
			var emvDob = '';
		}
		return emvDob;
	}


	// Text field validator
	String.prototype.trim = function() { return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");	}
	
	function mandatoryText(input, fieldName, lang) {
		//if (lang != "fr" || lang != "en" || lang != "ge") {
			//alert("The language used for alert messages is unknown, it can only be: fr | en | ge");
			//return false;
		//} else 
		if (input.value.trim() == "" || input == null) {
			switch (lang) {
				case "fr": alert("Veuillez saisir " + fieldName + "."); break;
				case "en": alert("Please enter your " + fieldName + "."); break;
				case "ge": break;
				default : alert("Please enter your " + fieldName + ".");
			}
			input.focus();
			return false;
		}
		else {
			return true;
		}
	}
	
	
	// Drop Down Lists validator	
	function mandatoryCombo(dropdown, fieldName, lang) {
		//alert(lang)
		//if (lang != "fr" || lang != "en" || lang != "ge") {
			//alert("The language used for alert messages is unknown, it can only be: fr | en | ge");
			//return false;
		//} else 
		if (dropdown.options[0].selected) {
			switch (lang) {
				case "fr": alert("Veuillez sélectionner votre " + fieldName + "."); break;
				case "en": alert("Please select your " + fieldName + "."); break;
				case "ge": break;
				default : alert("Please enter your " + fieldName + ".");
			}
		
			
			dropdown.focus();
			return;
		}
		return true;
	}
		
	// Radio buttons arrays validator
	function mandatoryRadio(radioList, msg) {
		var radioValue = null;
		for (var i=0; i<radioList.length; i++) {
			if (radioList[i].checked) {
				radioValue = radioList[i].value;
				break;
			}
		}
		if (radioValue == null) {
			alert(msg);
			radioList[0].focus();
			return false;
		}
		else {
			return true;
		}
	}
	
/*
 * Functions for the Comments Box
 *
*/
  
	// Converts carriage returns to spaces
	function convertReturns(input) {
		var output = "";
		for (var i = 0; i < input.length; i++) {
			if ((input.charCodeAt(i) == 13) && (input.charCodeAt(i + 1) == 10)) {
			i++;
			output += " ";
			}
			else {
			output += input.charAt(i);
  	 		}
		}
		return output;
	}

	// Text counter function for the Comments Box
	function textCounter(field, countfield, maxlimit) {
		if (field.value.length > maxlimit) {
			field.value = field.value.substring(0, maxlimit);
		}
		else {
			countfield.value = maxlimit - field.value.length;
		}
	}

	/*
	 * This function validates the email address syntax and characters
	 * It also checks that the TLD is a 2 country code and if 3 or more, it ensures that it is in the Known Domains
	*/
	
	
	
	
	function isEmail(emailAddress, lang) {
		//if (lang != "fr" || lang != "en" || lang != "ge") {
			//alert("The language used for alert messages is unknown, it can only be: fr | en | ge");
			//return false;
		//}
		emailAddressValue=emailAddress.value.toLowerCase();
		// Below reside knows 2 letters country TLD and 3 letter gTLDs
		var countryTLDs=/^(ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$/;
		var gTLDs=/^(aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org)$/;
		var basicAddress=/^(.+)@(.+)$/;
		var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
		var validChars="\[^\\s" + specialChars + "\]";
		var validCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'-_.";
		var quotedUser="(\"[^\"]*\")";
		var atom=validChars + '+';
		var word="(" + atom + "|" + quotedUser + ")";
		var validUser=new RegExp("^" + word + "(\\." + word + ")*$");
		var symDomain=new RegExp("^" + atom + "(\\." + atom +")*$");
		var matchArray=emailAddressValue.match(basicAddress);
		if (matchArray==null) {
			switch (lang) {
				case "fr": alert("L'adresse e-mail semble incorrecte,\n(vérifiez la syntaxe)."); break;
				case "en": alert("The e-mail address doesn't seem to be correct,\n(check syntax)."); break;
				case "ge": break;
				default : alert("The e-mail address doesn't seem to be correct,\n(check syntax).");
			}
			emailAddress.focus();
			return false;
		}	else {
			var user=matchArray[1];
			var domain=matchArray[2];
			for (i=0; i<user.length; i++) {
				if(validCharset.indexOf(user.charAt(i))==-1) {
					switch (lang) {
						case "fr": alert("L'adresse e-mail contient des caractères,\n(vérifiez la partie avant l'arobase)."); break;
						case "en": alert("The e-mail address contains invalid characters\n(check the username)."); break;
						case "ge": break;
						default : alert("The e-mail address contains invalid characters\n(check the username).");
					}				
					emailAddress.focus();
					return false;
				}
			}
			for (i=0; i<domain.length; i++) {
				if(validCharset.indexOf(domain.charAt(i))==-1) {
					switch (lang) {
						case "fr": alert("L'adresse e-mail contient des caractères,\n(vérifiez la partie après l'arobase)."); break;
						case "en": alert("The e-mail address contains invalid characters\n(check the domain)."); break;
						case "ge": break;
						default : alert("The e-mail address contains invalid characters\n(check the domain).");
					}
					emailAddress.focus();
					return false;
				}
			}
			if (user.match(validUser)==null) {
				switch (lang) {
					case "fr": alert("L'adresse e-mail semble incorrecte,\n(vérifiez la partie avant l'arobase)."); break;
					case "en": alert("The e-mail address doesn't seem to be correct,\n(user part)."); break;
					case "ge": break;
					default : alert("The e-mail address doesn't seem to be correct,\n(user part).");
				}
				emailAddress.focus();
				return false;
			}
			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) {
					switch (lang) {
						case "fr": alert("L'adresse e-mail semble incorrecte,\n(vérifiez la partie après l'arobase)."); break;
						case "en": alert("The e-mail address doesn't seem to be correct,\n(Check the domain name)."); break;
						case "ge": break;
						default : alert("The e-mail address doesn't seem to be correct,\n(Check the domain name).");
					}
					emailAddress.focus();
					return false;
				}
			}
			if ((domArr[domArr.length-1].length==2)&&(domArr[domArr.length-1].search(countryTLDs)==-1)) {
					switch (lang) {
						case "fr": alert("L'adresse e-mail semble incorrecte,\n(vérifiez le suffixe du domaine)."); break;
						case "en": alert("The e-mail address doesn't seem to be correct,\n(check domain suffix)."); break;
						case "ge": break;
						default : alert("The e-mail address doesn't seem to be correct,\n(check domain suffix).");
					}
					emailAddress.focus();
					return false;
			}
			if ((domArr[domArr.length-1].length>2)&&(domArr[domArr.length-1].search(gTLDs)==-1)) {
				switch (lang) {
					case "fr": alert("L'adresse e-mail semble incorrecte,\n(vérifiez le suffixe du domaine)."); break;
					case "en": alert("The e-mail address doesn't seem to be correct,\n(check domain suffix)."); break;
					case "ge": break;
					default : alert("The e-mail address doesn't seem to be correct,\n(check domain suffix).");
				}
				emailAddress.focus();
				return false;
			}
			if ((domArr[domArr.length-1].length<2)||(domArr[domArr.length-1].length>6)) {
				switch (lang) {
					case "fr": alert("L'adresse e-mail semble incorrecte,\n(vérifiez le suffixe du domaine)."); break;
					case "en": alert("The e-mail address doesn't seem to be correct,\n(check domain suffix)."); break;
					case "ge": break;
					default : alert("The e-mail address doesn't seem to be correct,\n(check domain suffix).");
				}
				emailAddress.focus();
				return false;
			}
			if (len<2) {
				switch (lang) {
					case "fr": alert("L'adresse e-mail semble incorrecte."); break;
					case "en": alert("The e-mail address doesn't seem to be correct,\n(missing hostname)."); break;
					case "ge": break;
					default : alert("The e-mail address doesn't seem to be correct,\n(missing hostname).");
				}
				emailAddress.focus();
				return false;
			}
			return true;
		}
	}

/*
 *
 * This function validates the form fields
 * Use the functions above to make the relevant
 * fields required
 *
*/


/*
 *
 * End of the Validation function
 *
*/