function submit_edm(){

	var f = document.forms["edm"];
	var error = validateForm(f)
	if(error==""){
		f.elements["formSubmit"].value = "true";
		f.submit();
	}else{
		alert(error)
	}

}
// validate the form before submitting
function validateForm(f){

	var validated = true;
	var error = "Please complete the following before clicking on Go: \n\n";

	// check for non-ascii chars first and then perform validation
	// if(isEnglish(f) != ""){
	// 	error += isEnglish(f);
	//	validated = false;		
	// }
	if(validateFields(f)!= ""){
		error += validateFields(f)
		validated = false;
	}
	if(validateEmail(f)!= ""){
		error += validateEmail(f)
		validated = false;
	}
	if(validateNumbers(f)!= ""){
		error += validateNumbers(f)
		validated = false;
	}
	if(!f.elements["comments"] && !f.elements["unsubscribe"]){
		if(validateCheckboxes(f)!= ""){
			error += validateCheckboxes(f)
			validated = false;
		}
	}

	return (validated == true) ? "" : error;

}
// check contents of required form fields in general
function validateFields(f){

	var error = "";
	var compFieldNames = new Array(4);
	compFieldNames[0] = "firstName";
	compFieldNames[1] = "lastName";
	compFieldNames[2] = "country";
	compFieldNames[3] = "email";
//	compFieldNames[4] = "postCode";
//	compFieldNames[5] = "postCode";

	if(f.elements["unsubscribe"]){

		if(f.elements["email"].value == "" && f.elements["mobile"].value == ""){

			error += " " + translateFieldName('unsub') + "\n";

		}
		if(f.elements["mobile"].value != "" && f.elements["countryCode"].value == ""){

			error += " " + translateFieldName('mobileCountry') + "\n";

		}		
		if(f.elements["email"].value != ""){

			f.elements["jetMail"].value = "on";

		}
		if(f.elements["mobile"].value != ""){

			f.elements["jetTxt"].value = "on";

		}

	}else{

		for(i=0; i<compFieldNames.length; i++){

			// which field
			var val;
			var field = f.elements[compFieldNames[i]];

			// which type of element is it?
			if(field.type == "text"){
	  			val = field.value;
	   	}else if(field.type == "select-one"){
	   		val = field.options[field.selectedIndex].value;
	   	}

			// does it contain a value
	   	if(val==""){
				error += " " + translateFieldName(compFieldNames[i]) + "\n";
	   	}

		}

	}

	return error;

}
// check that appropriate checkboxes are complete
function validateCheckboxes(f){

	var error = "";
	var selectJQ = f.elements["jetstar"].checked;
	var select3K = f.elements["jetstarAsia"].checked;
	var selectJM = f.elements["jetMail"].checked;
	var selectJT = f.elements["jetTxt"].checked;
	var confirmed = f.elements["confirm"].checked;

	if(!selectJQ && !select3K){
		error += " " + translateFieldName("carrier") + "\n";
	}
	if(!selectJM && !selectJT){
		error += " " + translateFieldName("type") + "\n";
	}
	if(!confirmed){
		error += " " + translateFieldName("confirm") + "\n";
	}
	if(select3K && selectJT && !selectJQ && !selectJM){
		error += " " + translateFieldName("sms3k") + "\n";
	}

	return error;

}
// email validation
function validateEmail(f) {

	var error = "";
	var isValid = true;
	var invalidChars = " /:,;";
	var email = f.elements["email"].value;
	var atPos=email.indexOf("@",1);
	var periodPos=email.indexOf(".", atPos+1);
	var atPos2=email.indexOf("@.",1);
	var badChar;

	if(email=="") {return error;}

	for (i=0; i<invalidChars.length; i++) {
		badChar = invalidChars.charAt(i);
		if (email.indexOf(badChar,0) > -1) {isValid = false;}
	}

	if(atPos == -1) {isValid = false;}
	if(email.indexOf("@", atPos+1) !=-1) {isValid = false;}
	if(periodPos==-1) {isValid = false;}
	if(periodPos+3>email.length) {isValid = false;}
	if(atPos2 != -1) {isValid = false;}

	error = (isValid) ? "" : " " + translateFieldName("emailInvalid") + "\n";

	return error;

}
// check that phone fields and postcode are numerical
function validateNumbers(f) {

	var error = "";
	var compFieldNames = new Array();

	if(f.elements["unsubscribe"]){
		if(f.elements["mobile"]){

			compFieldNames[0] = "mobile";
			compFieldNames[1] = "countryCode";
		}
	}else{

//		compFieldNames[2] = "postCode";

		if(f.elements["jetTxt"].checked){

			compFieldNames[0] = "mobile";
			compFieldNames[1] = "countryCode";
		}
	}

	for(i=0; i<compFieldNames.length; i++){
		// which field
		var val;
		var field = f.elements[compFieldNames[i]];

		// which type of element is it?
		if(field.type == "text"){
  			val = field.value;
   	}

		// does it contain a value
   	if(val==""){
			error += " " + translateFieldName(compFieldNames[i]) + "\n";
   	}else{
			for (j=0; j<val.length; j++) {
				if (val.charAt(j) < "0" || val.charAt(j) > "9") {
					error += " " + translateFieldName(compFieldNames[i]) + "\n";
					return error;
				}
			}
   	}
	}

	return error;

}
// This sub routine translates inline field names to intelligible equivalents
function translateFieldName(which){

		var fieldNames = new Array(18);
		fieldNames["firstName"] 	= "Your first name";
		fieldNames["lastName"] 		= "Your surname";
		fieldNames["address"] 		= "Your address";
		fieldNames["city"] 		= "Your city";
		fieldNames["country"] 		= "Your country";
		fieldNames["state"] 		= "Your state";
		//fieldNames["postCode"] 		= "Your post code (numerical)";
		fieldNames["email"] 		= "Your email address";
		fieldNames["emailInvalid"] 	= "Your email address is invalid";
		fieldNames["countryCode"] 	= "Your mobile country code (numerical)";
		fieldNames["mobile"] 		= "Your mobile number (numerical)";

		// check boxes
		fieldNames["carrier"] 		= "Would you like updates from Jetstar or Jetstar Asia?";
		fieldNames["type"] 		= "Would you like updates via JetMail or JetTxt?";
		fieldNames["confirm"] 		= "Please read and accept terms and conditions";
		fieldNames["sms3k"] 		= "Jetstar Asia does not provide the JetTxt service,\n please selecte Jetmail instead";

		//unsubscribe
		fieldNames["unsub"] 		= "Please provide either your email address or mobile number and country code?";
		fieldNames["mobileCountry"] 	= "Please provide the country code for your mobile number?";


		return fieldNames[which];

}

// are any form characters of a foreign character set?
function isEnglish(f)
{
	var str = "";
 	var error = ""; 
 
 	// loop through all elements of f of type text
 	for(i=0; i < f.elements.length; i++){

		if(error != "") break;

 		if(f.elements[i].type == "text" && f.elements[i].value != ""){

//			alert(f.elements[i].name);

 			str=f.elements[i].value;

//			alert(str);

			for(j=0;j<str.length;j++){

//				alert(str.charCodeAt(j));				
				if(str.charCodeAt(j)>256){ 
			 		error = "Please remove all non-english characters \n";
				}
			} 			
			
		}
		
	}
	
	return error;
}
