<!--
/*
'-------------------------------------------------------
' DESCRIPTION:	Checks strData contains only alpha-numeric characters and displays an alert if not
' 
' INPUTS:		strData		string
'			strField	string field name for the alert
'			charType	char - 	a=alpha 
'						n=numeric 
'						ah=surname(a + '-') 
'						pc=postcode(a+n+\/-)
'						anything else=alphanumeric(a+n) 
'
' RETURN:		false		if check failed
'			true		if check passed
'-------------------------------------------------------
*/
function ChkAlphaNumeric(strData,strField, charType, bDisplay) {
	strValidAlpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ \n\r";
	strValidNum = "1234567890";
	strExtra = "\\\"/'-,.&?:;)(#$£";
	intFieldLen = strData.length;
	intCount = 0;
	charChkChar = "";
	strType = "";

	//select list of allowable characters
	charType = charType.toUpperCase();
	switch (charType) {
		case "A":
			strValidChars = strValidAlpha;
			strType = "letters.";
			break;
		case "N":
			strValidChars = strValidNum;
			strType = "numbers.";
			break;
		case "AN":
			strValidChars = strValidAlpha + strValidNum;
			strType = "letters and numbers.";
			break;
		case "AH":
			strValidChars = strValidAlpha + "-" + "'";
			strType = "letters, single quotes and hyphens.";
			break;
		case "PC":
			strValidChars = strValidAlpha + strValidNum + "-" + "/" + "\\";
			strType = "letters, numbers, forward and backward slashes and hyphens.";
			break;
		default:
			strValidChars = strValidAlpha + strValidNum + strExtra;
			strType = "a";
			break;
	}

	//Convert to upper case - don't worry about case then
	strData = strData.toUpperCase();
	while (intCount < intFieldLen) {
		charChkChar = strData.charAt(intCount);
		if (strValidChars.indexOf(charChkChar) != -1)
			intCount++
		else {
			if (bDisplay) {
				if (strType == "a") {
					alert(strField + " contains invalid characters.");
				} else { 
					alert(strField + " must only contain " + strType);
				}
			}
			return false;
		}
	}
	return true;	
}

/*
'-------------------------------------------------------
' DESCRIPTION:	Checks string contains only numeric characters or "." and displays an alert if not
' 
' INPUTS:		strData		string
'			strField	string	field name for the alert
'
' RETURN:		true		if check passed
'			false		if check failed
'-------------------------------------------------------
*/
function ChkDecimal(strData,strField) {
	strValidChars = "1234567890.,";
	iFieldLen = strData.length;
	i = 0;
	
	while (i < iFieldLen)
	{
		chChkChar = strData.charAt(i);
		if (strValidChars.indexOf(chChkChar) != -1) {
			i++
		} else {
			alert(strField + " is invalid.");
			return false;
		}
	};

	return ChkDecimalPlaces(2,strData,strField);
}


/*
'-------------------------------------------------------
' DESCRIPTION:	Checks string contains only numeric characters or "." and displays an alert if not
' 		allows a supplied number of decimal places
'
' INPUTS:		iDecPlaces	number of decimal places allowed
'			strData		string
'			strField	string	field name for the alert
'
' RETURN:		true		if check passed
'			false		if check failed
'-------------------------------------------------------
*/
function ChkDecimal2(iDecPlaces,strData,strField) {
	strValidChars = "1234567890.,";
	iFieldLen = strData.length;
	i = 0;
	
	while (i < iFieldLen)
	{
		chChkChar = strData.charAt(i);
		if (strValidChars.indexOf(chChkChar) != -1) {
			i++
		} else {
			alert(strField + " is invalid.");
			return false;
		}
	};
	return ChkDecimalPlaces(iDecPlaces,strData,strField);
}

/*
'-------------------------------------------------------
' DESCRIPTION:	Checks for the specified number of decimal places
' 
' INPUTS:		iPlaces		No. of decimal places
'			strAmount	Amount to check
'			strFieldName	Name of field to display in error message
'
' RETURN:		true		if check passed
'			false		if check failed
'-------------------------------------------------------
*/
function ChkDecimalPlaces(iPlaces,strAmount,strFieldName) {
	var bStop		// Flag to indicate stop searching for "."
	var chChkChar		// current char being checked
	var iDecCount		// position of "."
	var iPlaceCount		// number of chars after "."
	var iCount		// used as a counter
	var strValidChars	// string of integers to check against
	var iLength		// length of amount
	var bAllInts		// flag to indicate amount has a decimal point or not
	
	iLength = strAmount.length;
	strValidChars = "1234567890,";
	iCount = 0;
	bAllInts = true;
	//check for a decimal point
	while (iCount < iLength)
	{
		chChkChar = strAmount.charAt(iCount);
		if (strValidChars.indexOf(chChkChar) != -1)
			iCount++;
		else
		{
			bAllInts = false;
			//set exit condition
			iCount = iLength;
		}
	}

	// if no decimal points check if this is OK	
	if(iPlaces == 0)
	{
		if(bAllInts == false)
		{
			alert(strFieldName + " must not contain a decimal point");
			return false;
		}
	}
	else	//decimal point so check is in the right place
	{
		if (bAllInts == false)
		{
			iDecCount = 1;
			bStop = false
			for(x=0; bStop == false; x++)
			{
				chChkChar = strAmount.charAt(x);
				if(chChkChar == ".")
				{
					iDecCount = x + 1;
					bStop = true;
				}
			}
			iPlaceCount = 0;
			for(x=iDecCount; x < iLength; x++)
			{
				chChkChar = strAmount.charAt(x);
				if(chChkChar == ".")
				{
					alert(strFieldName + " contains too many decimal points");
					return false;
				}
				else
				{
					iPlaceCount = iPlaceCount + 1;
				}
			}
			if(iPlaceCount > iPlaces)
			{
				alert(strFieldName + " must not contain more than " + iPlaces + " decimal places");
				return false;
			}
		}
	}
	return true;
}


/*
'-------------------------------------------------------
' DESCRIPTION:	Checks string is within specified length and displays an alert if not
' 
' INPUTS:		strData		string
'			iMin		integer	min length for s_data
'			iMax		integer max length for s_data
'			strFieldName	string	field name for the alert
'
' RETURN:		true		if check passed
'			false		if check failed
'-------------------------------------------------------
*/
function chkLength(strData, iMin, iMax, strFieldName) {
	iFieldLen = strData.length
	if (iFieldLen<i_min)
	{
		alert(strFieldName + " minimum length is " + iMin);
		return false;
	};
	if (iFieldLen>iMax)
	{
		alert(sFieldName + " maximum length is " + iMax);
		return false;
	};
	return true;
}


/*
'-------------------------------------------------------
' DESCRIPTION:	Checks date defined by input fields is a real date
' 
' INPUTS:		strMonth	string	month in 3 char mixed case format
'			strDay		string	day (1 - 31)
'			strYear		string	year (4 digits)
'
' RETURN:		true		if check passed
'			false		if check failed
'-------------------------------------------------------
*/
function ChkDateExists(strDay, strMonth, strYear) {
	if (((strMonth=="Apr")|(strMonth=="Jun")|(strMonth=="Sep")|(strMonth=="Nov"))&(strDay=="31")) {
		alert(strDay + " " + strMonth + " " + strYear + " is not a valid date");
		return false;
	} else {
		if (strMonth=="Feb") {
		iDay = parseFloat(strDay);
		iYear = parseFloat(strYear);
		fFourYearChk = (iYear/4) - (Math.floor(iYear/4));
		fCenturyChk = (iYear/100) - (Math.floor(iYear/100));
		fFourKChk = (iYear/400) - (Math.floor(iYear/400));
		bleapYear = 0
		if (fFourKChk==0) {
			bleapyear = 1;
		} else {
			if ((fCenturyChk!=0)&(fFourYearChk==0))
				bleapYear = 1;
		};
		if ((iDay>29)|((iDay==29)&(bleapYear!=1))) {
			alert(strDay + " " + strMonth + " " + strYear + " is not a valid date");
			return false;
		};
		};
	};
return true;
}

/*
'-------------------------------------------------------
' DESCRIPTION:	Checks date b is not before date a
' 
' INPUTS:		strDateA, strDateB	string	date in a suitable format
'
' RETURN:		true		if check passed
'			false		if check failed
'-------------------------------------------------------
*/
function ChkDateRange(strDateA,strDateB) {
	dDateA = new Date(strDateA);
	dDateB = new Date(strDateB);
	if (dDateA.getTime() > dDateB.getTime()) {
		return false;
	};
return true;
}

/*
'-------------------------------------------------------
' DESCRIPTION:	Checks that a text field contains data and that it is valid
' 
' INPUTS:		strField	field to check 
'			strErrText	text to display if error
'			strCheckCode	A=alpha N=Numeric AH=alpha + hyphen AN=alphanumeric
'			bErrNotExist	true=error if eq ""  false=do not error if value = ""
'
' RETURN:		true		if check passed
'			false		if check failed
'-------------------------------------------------------
*/
function chkText(strField,strErrText,strCheckCode,bErrNotExist) {
	if (strField.value == "") {
		if (bErrNotExist) {
			alert("Please enter your \"" + strErrText + "\".");
			strField.focus();
			return false;
		}
	} else {
		if (ChkAlphaNumeric(strField.value, strErrText, strCheckCode, true) == false) {
			strField.focus();
			return false;
		}
	}
	return true;
}


/*
'-------------------------------------------------------
' DESCRIPTION:	Checks National Insurance number is of format AA NN NN NN A
' 
' INPUTS:		strData		string
'		
'
' RETURN:		true		if check passed
'			false		if check failed
'-------------------------------------------------------
*/
function chkNationalIns(strData)	{

	var err = false;
	strValidAlpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	strValidNum = "1234567890";
	iLength = strData.length

	strData = strData.toUpperCase();

	for (x=0; x < iLength; x++)
	{
		switch (x) {
			case 0:
			case 1:
			case 8:
				if (strValidAlpha.indexOf(strData.charAt(x)) == -1) {
					err = true;
				}
				break;
			default:
				if (strValidNum.indexOf(strData.charAt(x)) == -1) {
					err = true;
				}
				break;	
		}
		if (err == true) {
			x = iLength;
		}
	}
	if (err == true) {
		alert("Your National Insurance Number must be\nof the format 'AA999999A'.");
		return false;
	}
	return true;
}

/*
'-------------------------------------------------------
' DESCRIPTION:	Checks Date Of Birth
' 
' INPUTS:		strDate		date string
'		
'
' RETURN:		true		if check passed
'			false		if check failed
'-------------------------------------------------------
*/
function getMonthNum(strMonth) {
	var iMonth;
	var iDay, iMon, iYear;

	switch(strMonth.toUpperCase()) {
		case "JAN":
			iMonth = 1;
		break;  
		case "FEB":
			iMonth = 2;
		break;  
		case "MAR":
			iMonth = 3;
		break;  
		case "APR":
			iMonth = 4;
		break;  
		case "MAY":
			iMonth = 5;
		break;  
		case "JUN":
			iMonth = 6;
		break;  
		case "JUL":
			iMonth = 7;
		break;  
		case "AUG":
			iMonth = 8;
		break;  
		case "SEP":
			iMonth = 9;
		break;  
		case "OCT":
			iMonth = 10;
		break;  
		case "NOV":
			iMonth = 11;
		break;  
		case "DEC":
			iMonth = 12;
		break; 
		default :
			iMonth = -1;
	} 
	return iMonth;
}

/*
'-------------------------------------------------------
' DESCRIPTION:	Checks if they are older than a specified age
' 
' INPUTS:		iAge					- date to check older than
'					strDOBDay			- string of day of DOB (1-31)
'					strDOBMonth			- string month of DOB (Jan - Dec)
'					strYear				- string year of DOB (YYYY)
'					bFailifBDayToday	- flag to see if fail if birthday is today i.e are age today
'		
' RETURN:		true		if older than date passed
'					false		if younger than date passed
'-------------------------------------------------------
*/
function checkOlderThan(iAge, strDOBDay, strDOBMonth, strDOBYear) {
	var dt = new Date();
	var iTodayYear = parseInt(dt.getFullYear());
	var iTodayMonth = dt.getUTCMonth() + 1;
	var iTodayDay = dt.getUTCDate(); 
	var iDOBMonth = getMonthNum(strDOBMonth);

	if ((parseInt(strDOBYear) + iAge) < iTodayYear) {
		return true;
	}
	if ((parseInt(strDOBYear) + iAge) == iTodayYear) {
		if (iDOBMonth < iTodayMonth) {
			return true;
		}
		
		if (iDOBMonth == iTodayMonth) {
			if ((parseInt(strDOBDay)) <= iTodayDay) {
				return true;
			}
		}
	}
 	return false;
}

//Check email address
function checkEmail(objFormField) {
	var rex=new RegExp("^([0-9a-zA-Z]([-._\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$");
	if (rex.test(objFormField.value) == false) {
		alert("The e-mail address is invalid.\nPlease re-enter.");
		objFormField.focus();
		return false;
	}
}


function isValidDate(dateStr) {
var today = new Date();
// Checks for the following valid date formats:
// 	DD?MM?YYYY	DD-MM-YYYY
// Also separates date into month, day, and year variables

 var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;

var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert("Date is not in a valid format.")
return (today.getDay()+"/"+today.getMonth()+"/"+today.getYear());
}
month = matchArray[3]; // parse date into variables
day = matchArray[1];
year = matchArray[4];
if (month < 1 || month > 12) { // check month range
alert("Month must be between 1 and 12.");
return (today.getDay()+"/"+today.getMonth()+"/"+today.getYear());
}
if (day < 1 || day > 31) {
alert("Day must be between 1 and 31.");
return (today.getDay()+"/"+today.getMonth()+"/"+today.getYear());
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("Month "+month+" doesn't have 31 days!")
return (today.getDay()+"/"+today.getMonth()+"/"+today.getYear());
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day>29 || (day==29 && !isleap)) {
alert("February " + year + " doesn't have " + day + " days!");
return (today.getDay()+"/"+today.getMonth()+"/"+today.getYear());
   }
} 
return dateStr;  // date is valid
}

function checkMinAmount(objField, minValue, strFieldDesc) {
	fNum = readCurrencyFormat(objField.value);
	fNum = "" + Math.round( Number(fNum) * 100 ) / 100 
	if (parseFloat(fNum) < parseFloat(minValue)) {
		alert("The value for \'" + strFieldDesc + "\' cannot be less than " + minValue + "\n\nPlease enter a higher value.");
		objField.focus();
	}
}

function writeCurrencyFormat(field,dp,sepString,maxValue, strFieldDesc) {
num = readCurrencyFormat(field.value);
num = "" + Math.round( Number(num) * 100 ) / 100 
if (field.value=="") {
	return field.value="0.00"
}
if (num=="NaN") 
{
	alert("\'" + strFieldDesc + "\' must be a valid number. Please re-enter amount.");
	field.focus();
	return field.value;
}
if (num < 0)
{
	alert("\'" + strFieldDesc + "\' cannot be negative. Please re-enter amount.");
	field.focus();
	return field.value;
}
if ((num == 0) ||(num == 0.0))
{
	return field.value="0.00";
}
if (parseFloat(num) > parseFloat(maxValue)) {
	alert("The value for \'" + strFieldDesc + "\' cannot be greater than " + maxValue + "\n\nPlease enter a lower value.");
	field.focus();
	return field.value;
}
if (num < 1) {
	return(num);
}

 if (num.indexOf(",") != -1) return(num)
 if (!dp) dp=2
 if (!sepString) sepString=",."
 num=Math.round(num*Math.pow(10,dp))
 num=num.toString()
 str=sepString.charAt(1)+num.substr(num.length-dp)
 num=num.substr(0,num.length-dp)
 while (num.length>3) {
  str=sepString.charAt(0)+num.substr(num.length-3)+str
  num=num.substr(0,num.length-3)
 }
 str=num+str
 return str
}

function readCurrencyFormat(num,sepString) {
	reAlpha = /[a-z]/i

	if(reAlpha.test(num))
	{	
		return num;
	}else{	
		if (!sepString) sepString=",."
		while (num.indexOf(sepString.charAt(0))>-1) {

		num=num.substr(0,num.indexOf(sepString.charAt(0)))+num.substr(num.indexOf(sepString.charAt(0))+1)
		}
		if (num.indexOf(sepString.charAt(1))>-1)
		num=num.substr(0,num.indexOf(sepString.charAt(1)))+'.'+num.substr(num.indexOf(sepString.charAt(1))+1)
		return parseFloat(num)
	}
}

function chkTextField(objField, strValue,strText, strValType, bDisplay) {
	if (ChkAlphaNumeric(strValue,strText, strValType, bDisplay) == false) {
		objField.focus();
		objField.select();
	}
}
function acChkDateExists(strText, strDay, strMonth, strYear) {
	if (((strMonth=="4")|(strMonth=="6")|(strMonth=="9")|(strMonth=="11"))&(strDay=="31")) {
		alert(strText + " " + strDay + " " + strMonth + " " + strYear + " is not a valid date");
		return false;
	} else {
		if (strMonth=="2") {
		iDay = parseFloat(strDay);
		iYear = parseFloat(strYear);
		fFourYearChk = (iYear/4) - (Math.floor(iYear/4));
		fCenturyChk = (iYear/100) - (Math.floor(iYear/100));
		fFourKChk = (iYear/400) - (Math.floor(iYear/400));
		bleapYear = 0
		if (fFourKChk==0) {
			bleapyear = 1;
		} else {
			if ((fCenturyChk!=0)&(fFourYearChk==0))
				bleapYear = 1;
		};
		if ((iDay>29)|((iDay==29)&(bleapYear!=1))) {
			alert(strText + " " + strDay + " " + strMonth + " " + strYear + " is not a valid date");
			return false;
		};
		};
	};
return true;
}
function checkMaxValue(objItem, maxValue, strFieldDesc) {
	if (parseFloat(objItem.value) > parseFloat(maxValue)) {
		alert("The value for \'" + strFieldDesc + "\' cannot be greater than " + maxValue + "\n\nPlease enter a lower value.");
		objItem.focus();
		objItem.select();
		return false;
	}
	return true;
}
function checkTop() {
	if (self != top) {
		window.document.location.href = "/index.asp";
		return false;
	}
	return true;
}

function checkMsg(varMsg) {
	if (varMsg != "") {
		alert(varMsg);
	}
	return true;
}

function gfnUnformatCurr(strAmount) {
	var i;
	var strNewAmount = "";

	for (i = 0 ; i <= strAmount.length-1; i++) {
		if (strAmount.charAt(i) != ",") {
			strNewAmount = strNewAmount + strAmount.charAt(i);
		}
	}
	return strNewAmount;
}
//used on pages to hide/show div blocks of text
function displayBlock(objID, bDisplay) {	
//show or hide block
	if (bDisplay == true) {
		objID.style.display = "block";
	} else {
		objID.style.display = "none";
	}
}

	
//Disable right click script III- By Renigade (renigade@mediaone.net)
//For full source code, visit http://www.dynamicdrive.com <- Why oh why oh why
/*var message="";
function clickIE() {if (document.all) {return false;}}
function clickNS(e) {
	if (document.layers||(document.getElementById&&!document.all)) {
		if (e.which==2||e.which==3) {
			(message);return false;
		}
	} 
}
if (document.layers) {
	document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;
} else {
	document.onmouseup=clickNS;document.oncontextmenu=clickIE;
}*/
// -->