//Common Functions V2.0
//Last Edited By: Roland Corbet, Cyber Media Solutions Ltd.
//Lasted Edited on: 13/03/2003


function doubleCheck(msg) {
	// Purpose:		To show an error mesasge ad an alert and eturn false to setop further processing.
	// Parameters:	form_object	: Name of form element
	//				msg			: The Error to display
	return confirm(msg);
		
}


function errorMsg(msg, form_object) {
	// Purpose:		To show an error mesasge ad an alert and eturn false to setop further processing.
	// Parameters:	form_object	: Name of form element
	//				msg			: The Error to display

	alert(msg);
	if(form_object.type=="undefined"){
		form_object[0].focus();
	}
	else{
		form_object.focus();
	}
	
	if(form_object.type == "text") {
		form_object.select();
	}
	return false;
}

function TextBox(form_object, errormsg) {
	// Purpose:		To check that a Text Box is not empty.
	// Parameters:	form_object	: Name of form element
	//				errormsg	: The Error to display
	
	if (form_object.value == "") {
		return(errorMsg(errormsg, form_object));
	}
	return true;
}

function CheckBoxes(form_object, errormsg) {
	// Purpose:		To check that at least one check box has been selected.
	// Parameters:	form_object	: Name of form element
	//				errormsg	: The Error to display

	var obj_len = form_object.length;
	 
	if (typeof(obj_len) == "undefined") {
		if (form_object.checked) {
			return true;
		}
		else {
			return(errorMsg(errormsg, form_object));
		}
	}
	else {
		for (i=1; i < obj_len +1; i++) {
			if (form_object[i-1].checked) {
				return true;
			}
		}
		return(errorMsg(errormsg, form_object[0]));
	}
}

function Radio(form_object, errormsg) {

	// Purpose:		To check that at radio button is selected in a group.
	// Parameters:	form_object	: Name of form element
	//				errormsg	: The Error to display

	var obj_len = form_object.length;
	 
	if (typeof(obj_len) == "undefined") {
		if (form_object.checked) {
			return true;
		}
		else {
			return(errorMsg(errormsg, form_object));
		}
	}
	else {
		for (i=1; i < obj_len +1; i++) {
			if (form_object[i-1].checked) {
				return true;
			}
		}
		return(errorMsg(errormsg, form_object));
	}
}

function Select(form_object, errormsg) {
	// Purpose:		To check that an entry has been selected in a single line drop-down field.
	// Parameters:	form_object	: Name of form element
	//				errormsg	: The Error to display
	if (form_object.selectedIndex == 0) {
		return(errorMsg(errormsg, form_object));
	}
	return true;
}

function PostCode(outcode, incode) {
	// Purpose:		To validate a postcode to E-Gof standards
	// Parameters:	outcode	: Form field containing left hand side of postcode
	//				incode	: Form field containing right hand side of postcode
	if (! PostCodeOutcode(outcode) ) {
		return(errorMsg("Please supply a valid left-hand section to the post code.", outcode));
	}
	else {
		if (! PostCodeIncode(incode) ) {
			return(errorMsg("Please supply a valid right-hand section to the post code.", incode));
		}
	}
	return true;
}

function PostCodeIncode(incode) {
	//E-Gif Compliant Validation
	
	//Capitalise chars
	incode.value = incode.value.toUpperCase();
	var s = incode.value;
	
	switch (s.length) {
	
		case 3:
			//Check Structure (3 Chars)
			//NAA
			re1 = /[0-9][A-Z][A-Z]/;
			if (!re1.test(s)) {
				return false;
			}
			break;
			
		default:
			return false;
			break;
	}
	
	//The second half of the Postcode is always consistent numeric, alpha, alpha format and the letters C, I, K, M, O and V are never used. 
	re1 = /C|I|K|M|O|V/;
	if (re1.test(s)) {
		return false;
	}
	return true;
}

function PostCodeOutcode(outcode) {
	//E-Gif Compliant Validation
	var s = outcode.value;
	
	//Capitalise chars
	outcode.value = outcode.value.toUpperCase();
	var s = outcode.value;
	
	switch (s.length) {
			
		case 2:
			//Check Structure (2 Chars)
			//AN 
			re1 = /[A-Z][0-9]/;
			if (!re1.test(s)) {
				return false;
			}
			break;
			
		case 3:
			//Check Structure (3 Chars)
			//ANA
			//ANN 
			//AAN 
			re1 = /[A-Z][0-9][A-Z]|[A-Z][0-9][0-9]|[A-Z][A-Z][0-9]/;
			if (!re1.test(s)) {
				return false;
			}
			break;
			
		case 4:
			//Check Structure (4 chars)
			//AANN
			//AANA 
			re1 = /[A-Z][A-Z][0-9][0-9]|[A-Z][A-Z][0-9][A-Z]/;
			if (!re1.test(s)) {
				return false;
			}
			break;
			
		default:
			return false;
			break;
	}
	
	//The letters Q, V and X are not used in the first position.
	re1 = /Q|V|X|[0-9]/;
	c = s.charAt(0);
	if (re1.test(c)) {
		return false;
	}
	
	//The letters I, J and Z are not used in the second position.
	re1 = /I|J|Z/;
	c = s.charAt(1);
	if (re1.test(c)) {
		return false;
	}
	
	//The only letters to appear in the third position are A, B, C, D, E, F, G, H, J, K, S, T, U and W. 
	if (s.length == 3) {
		re1 = /A|B|C|D|E|F|G|H|J|K|S|T|U|W|[0-9]/;
		c = s.charAt(2);
		if (! re1.test(c)) {
			return false;
		}
	}
	
	//The only letters to appear in the fourth position are A, B, E, H, M, N, P, R, V, W, X and Y.
	if (s.length == 4) { 
		re1 = /A|B|E|H|M|N|P|R|V|W|X|Y|[0-9]/;
		c = s.charAt(3);
		if (! re1.test(c)) {
			return false;
		}
	}
	return true;		 
}



function Email(form_object, errormsg) {
	// Purpose:		To check that a field contains a valid e-mail address.
	// Parameters:	form_object	: Name of form element
	//				errormsg	: The Error to display
	
	var supported = 0;
	
	if (window.RegExp) {
		var tempStr = "a";
		var tempReg = new RegExp(tempStr);
		if (tempReg.test(tempStr)) {
			supported = 1;
		}
	}

	if (!supported) {
    		return (form_object.indexOf(".") > 2) && (form_object.indexOf("@") > 0);
    }

	var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
	var r3 = new RegExp("\'|\"");
	
	if ((!r1.test(form_object.value) && r2.test(form_object.value) && !r3.test(form_object.value))){
		return true;
	}
	else{
		return(errorMsg(errormsg, form_object));
	}
}


function ChkType(form_object, type, errormsg) {

	// Purpose:		To check that a field only contains characters of a given type.
	// Parameters:	form_object	: Name of form element
	//				type		: Type of test to perform (A = Alpha, N = Numeric)
	//				errormsg	: The Error to display

	re1 = /[A-Z]|[a-z]/;
	re2 = /[0-9]/;
	
	switch (type) {
			
		case "A":
			//String must be numbersonly
			if ((!re2.test(form_object.value)) && (re1.test(form_object.value)) ) {
				return true;
			}
			else {
				return(errorMsg(errormsg, form_object));
			}
			break;
			
		case "N":
			//String must be numbersonly
			if ((re2.test(form_object.value)) && (!re1.test(form_object.value)) ) {
				return true;
			}
			else {
				return(errorMsg(errormsg, form_object));
			}
			break;
	}
	return true;
}


function checkNumeric(objName,minval, maxval,comma,period,hyphen)
{
	var numberfield = objName;
	if (chkNumeric(objName,minval,maxval,comma,period,hyphen) == false)
	{
		numberfield.select();
		numberfield.focus();
		return false;
	}
	else
	{
		return true;
	}
}

function chkNumeric(objName,minval,maxval,comma,period,hyphen)
{
// only allow 0-9 be entered, plus any values passed
// (can be in any order, and don't have to be comma, period, or hyphen)
// if all numbers allow commas, periods, hyphens or whatever,
// just hard code it here and take out the passed parameters
var checkOK = "0123456789" + comma + period + hyphen;
var checkStr = objName;
var allValid = true;
var decPoints = 0;
var allNum = "";

for (i = 0;  i < checkStr.value.length;  i++)
{
ch = checkStr.value.charAt(i);
for (j = 0;  j < checkOK.length;  j++)
if (ch == checkOK.charAt(j))
break;
if (j == checkOK.length)
{
allValid = false;
break;
}
if (ch != ",")
allNum += ch;
}
if (!allValid)
{	
alertsay = "Please enter only these values \""
alertsay = alertsay + checkOK + "\" in the \"" + checkStr.name + "\" field."
alert(alertsay);
return (false);
}

// set the minimum and maximum
var chkVal = allNum;
var prsVal = parseInt(allNum);
if (chkVal != "" && !(prsVal >= minval && prsVal <= maxval))
{
alertsay = "Please enter a value greater than or "
alertsay = alertsay + "equal to \"" + minval + "\" and less than or "
alertsay = alertsay + "equal to \"" + maxval + "\" in the \"" + checkStr.name + "\" field."
alert(alertsay);
return (false);
}
}