//Standard functions
function notEmpty(fieldName){
	if(!document.getElementById(fieldName)){
		alert("The field with id '" +fieldName +"' doesn't exist")
		return false;
	}
	if (!document.getElementById(fieldName).value){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else{
		clearError(fieldName);
	}
}

function notSelected(fieldName){
	var noneSelected = true;
	
	 if(document.getElementsByName(fieldName)) {
		//iterate through all fields with the passed name for radio buttons
		var formField = document.getElementsByName(fieldName);
		for (var i = 0; i < formField.length; i++) {
			if(formField[i].tagName == "SELECT" && formField[i].selectedIndex >= 0){
				noneSelected = false;
				break;
			}else if(formField[i].checked == true){
				noneSelected = false;
				break;
			}
		}
	}
	if(noneSelected){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else{
		clearError(fieldName);
	}
}


function checkEmail(fieldName, req){
	var	formField = document.getElementById(fieldName);
	//debugging
	if(!formField){
		alert("checkEmail: The field with id '" +fieldName +"' doesn't exist");
		return false;
	}
	var regexp =  /^[^ ]+@[^ ]{2,}\.[^ ]{2,}$/;  //matches thesse chars [- +()0-9] at least 9 chars long
	if (!formField.value && req != false){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else if(formField.value && !formField.value.match(regexp)) {
		writeError(fieldName, 'invalidError');
		fail(fieldName);
	}else{
		clearError(fieldName);
	}
}

function checkTelNo(fieldName, req){
	var	formField = document.getElementById(fieldName);
	//debugging
	if(!formField){
		alert("checkTelNo: The field with id '" +fieldName +"' doesn't exist");
		return false;
	}
	var regexp =  /^[- +()0-9]{9,}$/;  //matches thesse chars [- +()0-9] at least 9 chars long
	if (!formField.value && req != false){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else if(formField.value && !formField.value.match(regexp)) {
		writeError(fieldName, 'invalidError');
		fail(fieldName);
	}else{
		clearError(fieldName);
	}
}

function isSame(fieldName, refField){
	if(!document.getElementById(fieldName)){
		alert("isSame: The field with id '" +fieldName +"' doesn't exist")
		return false;
	}
	if (!document.getElementById(fieldName).value){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else if (document.getElementById(fieldName).value != document.getElementById(refField).value){
		writeError(fieldName, 'notSameError');
		fail(fieldName);
	}else{
		clearError(fieldName);
	}
}

function isNotSame(fieldName, refFields){
	if(!document.getElementById(fieldName)){
		alert("isSame: The field with id '" +fieldName +"' doesn't exist")
		return false;
	}
	if (!document.getElementById(fieldName).value){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else{
		var notSame = true;
		for(var i=0; i<refFields.length;i++){
			if (document.getElementById(fieldName).value.toLowerCase() == document.getElementById(refFields[i]).value.toLowerCase()){
				writeError(fieldName, 'sameError');
				notSame = false;
				fail(fieldName);
				break;
			}
		}
		if(notSame)clearError(fieldName);
	}
}

function checkName(fieldName, minChars){
	var	formField = document.getElementById(fieldName);
	//debugging
	if(!formField){
		alert("The field with id '" +fieldName +"' doesn't exist");
		return false;
	}
	minChars -= 1;
	if(minChars == 0){
		var regexpStr = "^[A-Z][^ ]{"+minChars+",}.*$";
	}else{
		var regexpStr = "^[A-Z][^ ]{"+minChars+",}.*$";
	}
	var regexp = new RegExp(regexpStr);
	//alert(regesp);
	if (!formField.value){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else if(!formField.value.match(regexp)) {
		writeError(fieldName, 'invalidError');
		fail(fieldName);
	}else{
		clearError(fieldName);
	}
}

function checkPostcode(fieldName){
	var	formField = document.getElementById(fieldName);
	//debugging
	if(!formField){
		alert("checkPostcode: The field with id '" +fieldName +"' doesn't exist");
		return false;
	}
	var regexp =  /^[A-Za-z][A-Za-z]?[0-9][0-9|A-Za-z]? *[0-9][A-Za-z]{2}$/; 
	//var regexp =  /^[a-zA-z]+$/; 
	if (!formField.value){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else if(!formField.value.match(regexp)) {
		writeError(fieldName, 'invalidError');
		fail(fieldName);
	}else{
		clearError(fieldName);
	}
}

function checkPassword(fieldName, minChars, sameFields){
	var	formField = document.getElementById(fieldName);
	//debugging
	if(!formField){
		alert("checkPassword: The field with id '" +fieldName +"' doesn't exist");
		return false;
	}
	var regexp =  /(\S)\1{2,}/; //checks for no more than two repeated characters
	if (!formField.value){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else if(formField.value.length < minChars) {
		writeError(fieldName, 'tooShortError');
		fail(fieldName);
	}else if(formField.value.match(regexp)) {
		writeError(fieldName, 'repeatLetterError');
		fail(fieldName);
	}else{
		isNotSame(fieldName, sameFields);
		//clearError(fieldName);
	}
}



function customRegExp(fieldName,regexp){
	var	formField = document.getElementById(fieldName);
	if (!formField.value){
		writeError(fieldName, 'emptyError');
		fail(fieldName);
	}else if(!formField.value.match(regexp)) {
		writeError(fieldName, 'invalidError');
		fail(fieldName);
	}else{
		clearError(fieldName);
	}

}

function dependant(func, fieldName, dependCond, dependField){
	newFunc = func+"('"+fieldName+"')";
	if(dependCond == "checked" && document.getElementById(dependField).checked == true){
		eval(newFunc);
	}else{
		clearError(fieldName)
	}
}

function fail(fieldName){
	//called when any formfield fails validation
	if(pass == true) setFocus(fieldName); //sets focus to the first field that has an error
	pass=false;
}

function failed(){
	if(validationSet['gen']['genError'])writeError('gen','genError');
}

function passed(){
	var submitButton = document.getElementById('submitButton');
	if(submitButton) {
		submitButton.value = "Please Wait...";
		submitButton.disabled = true;
	}
}

function writeError(fieldName, errorType){
	//change colour of field
	var formField = document.getElementById(fieldName);
	if(formField&&formField.name == formField.id)formField.className += " errorField";
	
	//write error
	var myDiv = document.getElementById(fieldName + 'Error');
	if(myDiv){
		myDiv.className="error";
		myDiv.style.display="block";
		myDiv.style.clear="both";
		myDiv.style.padding="3px 0";
		myDiv.style.fontWeight="bold";
		myDiv.innerHTML = validationSet[fieldName][errorType];
	}else{//debugging
		alert("The span with id '" +fieldName+ "Error doesn't exist")
	}
}

function clearError(fieldName){
	//Remove error colour from field
	var formField = document.getElementById(fieldName);
	if(formField)formField.className = formField.className.replace(/( ?errorField)*$/,"");

	//Remove error
	var myDiv = document.getElementById(fieldName + 'Error');
	if(myDiv){
		myDiv.className="";
		myDiv.style.display="inline";
		myDiv.style.padding="0";
		myDiv.innerHTML = "";
	}else{//debugging
		alert("The span with id '" +fieldName+ "Error doesn't exist")
	}
}

function setFocus(focusField){
	//Sets focus to an element.
	var myField = document.getElementById(focusField);
	if(myField){
		myField.focus();
	}else{//debugging
		alert("setFocus: The field '" +focusField+ "' doesn't exist")
	}
}

function initSetFocus(){
	//sets focus to field if initFocus variable has been defined in other js file
	try{if(initFocus)setFocus(initFocus)}
	catch(err){}
}

function addEvent(elm, evType, fn, useCapture){
	// cross-browser event handling for IE5+, NS6 and Mozilla 
	// By Scott Andrew 
	if(elm.addEventListener){
	elm.addEventListener(evType, fn, useCapture);
	return true;
	}else if (elm.attachEvent){
	var r = elm.attachEvent('on'+evType, fn);
	return r;
	}else{
	elm['on' + evType] = fn;
	}
}

addEvent(window, 'load', initSetFocus, false); //adds onload event to form
