// nameAndAddressValidation.js

function validateBasicField(field, fieldname) {
	sendForm=true;
	var nameStr = trimOutsideSpaces(""+field.value);
	var nameField = trimOutsideSpaces(fieldname);
	field.value=nameStr;
	if(nameStr=="") {
		alert("Please enter your " + fieldname);
		highlightField(field);
		sendForm=false;
	}
}

function validateOrderTrackingSurname(field) {
	sendForm=true;
	var nameStr = trimOutsideSpaces(""+field.value);
	field.value=nameStr;
	if(nameStr=="") {
		alert("Please enter your surname");
		highlightField(field);
		sendForm=false;
	}
	else if(nameStr.length < 2) {
		alert("Your surname must be at least 2 characters");
		highlightField(field);
		sendForm=false;
	} 
	else if(!isValidSequenceAndAlpha(nameStr,"'"," ","-")) {
		alert("The surname can only contain alphabetic characters and the following special characters: spaces and - and '.");
		highlightField(field);
		sendForm=false;
	}
}

// It is assumed here that the field for this function is a combo box.
function validateTitle(field) {
	sendForm=true;
	var titleStr=trimOutsideSpaces(""+field.value);

	if (titleStr=="") {
		alert("Please select your title");
		field.focus();
		sendForm=false;
	}
}

function validateName(field) {
	sendForm=true;
	var nameStr = trimOutsideSpaces(""+field.value);
	field.value=nameStr;
	
	if(nameStr=="") {
		alert("Please enter your name");
		highlightField(field);
		sendForm=false;
	}
	else if(hasNumbers(trimSpaces(nameStr))) {
		alert("Please enter characters only");
		highlightField(field);
		sendForm=false;
	}
	else if(nameStr.indexOf("#") != -1){
		alert("Name contains an invalid character");
		highlightField(field);
		sendForm=false;
	}
}

function validateSurname(field) {
	sendForm=true;
	var nameStr = trimOutsideSpaces(""+field.value);
	field.value=nameStr;
	if(nameStr=="") {
		alert("Please enter your surname");
		highlightField(field);
		sendForm=false;
	}
	else if(nameStr.length < 2) {
		alert("Your surname must be at least 2 characters");
		highlightField(field);
		sendForm=false;
	} 
	//else if(!isValidSequenceAndAlpha(nameStr,"'"," ","-")) {
	//	alert("The surname can only contain alphabetic characters and the following special characters: spaces and - and '.");
	//	highlightField(field);
	//	sendForm=false;
	//}
}

function validateHouseNumber(field) {
	// This function checks houseNumber has been entered.
	sendForm=true;
	var houseNumber = trimOutsideSpaces(""+field.value);
	field.value = houseNumber;
	if(houseNumber == "") {
		alert("Please enter a House Name/Number");
		highlightField(field);
		sendForm=false;
		saveAddress=false;
	} else if (houseNumber.length > 15) {
		alert("Field can be a maximum of 15 characters");
		highlightField(field);
		sendForm=false;		
	} else if(!isValidChar(houseNumber, 'abcdefghijklmnopqrstuvwxyz1234567890 \'-,.')) {
	 	alert("Please enter letters and numbers only, which can include space or - or ' or , only");
	  	highlightField(field);
	  	sendForm=false;
  }
}

function validateAddress(field) {
// This function checks address 1 has been entered
// is a maximum of 34 characters
// and contains no invalid characters
	sendForm=true;
	var address = trimOutsideSpaces(""+field.value);
	field.value = address;
	if(address == "") {
		alert("Please enter your address");
		highlightField(field);
		sendForm=false;
	} else if (address.length > 34) {
		alert("Field can be a maximum of 34 characters");
		highlightField(field);
		sendForm=false;		
	} else if(!isValidChar(address, 'abcdefghijklmnopqrstuvwxyz1234567890 \'-,.')) {
		alert("Please enter letters and numbers only, which can include space or - or ' or , only");
	  	highlightField(field);
	  	sendForm=false;
	} else if(address.indexOf("#") != -1){
		alert("Address field 1 contains an invalid character");
		highlightField(field);
		sendForm=false;
	}
}

function validateAddress2(field) {
// This function checks address 2 has a maximum of 50 characters
// and contains no invalid characters
	sendForm=true;
	var address = trimOutsideSpaces(""+field.value);
	field.value = address;
	if (address.length > 50) {
		alert("Field can be a maximum of 50 characters");
		highlightField(field);
		sendForm=false;		
	} else if(!isValidChar(address, 'abcdefghijklmnopqrstuvwxyz1234567890 \'-,.')) {
		alert("Please enter letters and numbers only, which can include space or - or ' or , only");
	  	highlightField(field);
	  	sendForm=false;
	} else if(address.indexOf("#") != -1){
		alert("Address field 2 contains an invalid character");
		highlightField(field);
		sendForm=false;
	}
}

function validateTown(field) {
	sendForm=true;
	var townStr = trimOutsideSpaces(""+field.value);
	field.value=townStr;
	if(townStr=="") {
		alert("Please enter your town");
		highlightField(field);
		sendForm=false;
	}
	//else if(!isValidSequenceAndAlpha(townStr,"'"," ","-",",",".")) {
	//	alert("Please enter a valid town name");
	//	highlightField(field);
	//	sendForm=false;
	//}
	else if(townStr.length < 3) {
		alert("Please enter a valid town name");
		highlightField(field);
		sendForm=false;
	}
}

function validateCounty(field) {
	sendForm=true;
	var countyStr = trimOutsideSpaces(""+field.value);
	field.value=countyStr;
	if(countyStr.length > 0 && !isAlpha(trimSpaces(countyStr))) {
		alert("Please enter characters only");
		highlightField(field);
		sendForm=false;
	}
}

function validateHouseNoAndPostcode(field1,field2) {
	sendForm=true;
	if (! ("undefined" == typeof(field1)) ) { //Undefined unless user entering a contract address

		var houseNoStr = trimOutsideSpaces(""+field1.value);
		field1.value=houseNoStr;

		var postcodeStr = trimSpaces(""+field2.value);
		field2.value=postcodeStr;

		if(houseNoStr=="" && postcodeStr=="") {
			alert("Please enter a house number or name and your postcode");
			highlightField(field1);
			sendForm=false;
	
		} else if(houseNoStr=="") {
			alert("Please enter a house number or name");
			highlightField(field1);
			sendForm=false;
		} else if(postcodeStr=="") {
			alert("Please enter your postcode");
			highlightField(field2);
			sendForm=false;
		}
		else if(!isAlphaAndNumeric(postcodeStr) && postcodeStr!="") {
			alert("Please enter a valid postcode (letters and numbers only)");
		 	highlightField(field2);
		 	sendForm=false;
		}
		else if(postcodeStr.length < 5 || postcodeStr.length > 7) {
			alert("Please enter a postcode of length between 5 - 7 characters");
			highlightField(field2);
			sendForm=false;
		}
		else validatePostcode(field2,false);
	}
}

function isValidPartialPostcode(field) {
	var outwardPass = false;
	var postcodeStr = trimSpaces(""+field.value);
	//Check for partial postcode 
	//AN
	if((postcodeStr.length == 2 || postcodeStr.length == 5) && (isAlpha(postcodeStr.charAt(0)) && isNumeric(postcodeStr.charAt(1)))) outwardPass=true;
	//ANN & AAN & ANA
	if((postcodeStr.length == 3 || postcodeStr.length == 6) && (isAlpha(postcodeStr.charAt(0)) && isNumeric(postcodeStr.charAt(1)) && isNumeric(postcodeStr.charAt(2)) || isAlpha(postcodeStr.charAt(0)) && isAlpha(postcodeStr.charAt(1)) && isNumeric(postcodeStr.charAt(2)) || isAlpha(postcodeStr.charAt(0)) && isNumeric(postcodeStr.charAt(1)) && isAlpha(postcodeStr.charAt(2)))) outwardPass=true;
	//AANN & AANA
	if((postcodeStr.length == 4 || postcodeStr.length == 7) && (isAlpha(postcodeStr.charAt(0)) && isAlpha(postcodeStr.charAt(1)) && isNumeric(postcodeStr.charAt(2)) && isNumeric(postcodeStr.charAt(3)) || isAlpha(postcodeStr.charAt(0)) && isAlpha(postcodeStr.charAt(1)) && isNumeric(postcodeStr.charAt(2)) && isAlpha(postcodeStr.charAt(3)))) outwardPass=true;
	return outwardPass;
}

function hasCIKMOV(refStr) {
	var seqError = false;
	for (var i=0; i<refStr.length; i++) {
		if (arrayContainsElement(hasCIKMOV.arguments,hasCIKMOV.arguments[0].charAt(i))) seqError = true;
	}
	return seqError;
}

function validatePostcode(field,combo) {
	if(((combo) && combo.options[combo.options.selectedIndex].value!="United Kingdom")) return;
	validateUkPostcode(field);
}

//function validatePostcode(field,combo) {
function validateUkPostcode(field) {
	//if(((combo) && combo.options[combo.options.selectedIndex].value!="United Kingdom")) return;
	sendForm=true;
	var postcodeStr = trimSpaces(""+field.value);
	field.value=postcodeStr;
	if(postcodeStr=="") {
		alert("Please enter your postcode");
		highlightField(field);
		sendForm=false;
	}
	else if(!isAlphaAndNumeric(postcodeStr) && postcodeStr!="") {
 		alert("Please enter a valid postcode (letters and numbers only)");
 		highlightField(field);
	 	sendForm=false;
	}
	else if(postcodeStr.length < 5 || postcodeStr.length > 7) {
		alert("Please enter a postcode of length between 5 - 7 characters");
		highlightField(field);
		sendForm=false;
	}
	else if(hasCIKMOV(postcodeStr.substring(postcodeStr.length, postcodeStr.length-2).toLowerCase(),"c","i","k","m","o","v")) {
		alert("Please enter a valid postcode");
		highlightField(field);
		sendForm=false;
		return sendForm;
	}
	else if(!isValidPartialPostcode(field)) {
		alert("Please enter a valid postcode");
		highlightField(field);
		sendForm=false;
	}
	//Check for 1st char numeric and last three numeric,alpha,alpha
	else if(!isAlpha(postcodeStr.charAt(0)) || 
			!isAlpha(postcodeStr.charAt(postcodeStr.length-1)) || 
			!isAlpha(postcodeStr.charAt(postcodeStr.length-2)) || !isNumeric(postcodeStr.charAt(postcodeStr.length-3))) {
		alert("Please enter a valid postcode");
		highlightField(field);
		sendForm=false;
	}
}

function validatePhoneNumber(field, blnMandatory) {
	sendForm=true;
	var phoneNoStr = trimSpaces(""+field.value);
	var numCountInt = 0;
	field.value=phoneNoStr;
	//Count numbers only
	for(var i=0;i<phoneNoStr.length;i++) {
		if(isNumeric(phoneNoStr.charAt(i))) numCountInt++;
	}
	if(phoneNoStr=="" && blnMandatory == true) {
		alert("Please enter your phone number");
		highlightField(field);
		sendForm=false;
	}
	else if (phoneNoStr=="" && blnMandatory == false) {
		sendform=true;
	}
	else if((numCountInt > 9 || numCountInt < 21) && (!isValidSequence(phoneNoStr,"0","1","2","3","4","5","6","7","8","9"," ","-","+"))) {
		alert("Phone number can only contain numbers and the following characters: +, - and spaces.");
		highlightField(field);
		sendForm=false;
	}
	else if((numCountInt < 10 || numCountInt > 20) && phoneNoStr != "100") {
		alert("The phone number must contain between 10 and 20 numeric characters.");
		highlightField(field);
		sendForm=false;
	}
}

function isValidEmail(field) {
	sendForm=true;
	var strEmail = ""+field.value;
	var errorStr = "";
	var atCount = 0;
	var domain = strEmail.substring(strEmail.lastIndexOf(".")+1,strEmail.length);
	for (var i=0;i<strEmail.length;i++) {
		if (strEmail.charAt(i) == "@") atCount++;
	}
	var emailFilter=/^.+@.+\..{2,6}$/;
	var illegalChars= /[\(\)\ \{\}\!\¬\%\£\€\\`\'\?\$\^\&\*\|\¦\#\=\+\<\>\,\;\:\\\/\"\[\]]/;
	//'
	if(strEmail=="") {
		alert("Please enter your email address");
		highlightField(field);
		sendForm=false;
	}
	//Check Domain
	else if ((strEmail.lastIndexOf(".") == strEmail.length-1) || !isAlpha(domain)) {	
		errorStr = "The email address contains illegal characters.\n";
		alert(errorStr);
		highlightField(field);
		sendForm=false;
	}
	else if (strEmail !="" && !(emailFilter.test(strEmail)) || atCount > 1 || strEmail.indexOf("..")!=-1 || strEmail.indexOf(".") == 0 || strEmail.indexOf(".@") != -1 || strEmail.indexOf("@.") != -1) { 
		errorStr = "Please enter a valid email address.\n";
		alert(errorStr);
		highlightField(field);
		sendForm=false;
	}
	else if (strEmail.match(illegalChars)) {
		errorStr = "The email address contains illegal characters.\n";
		alert(errorStr);
		highlightField(field);
		sendForm=false;
	}

}

