<!--//
/*
->	strElemList holds details for each form element to be validated, seperated by semi-colons:
	'details of 1st element to validate;details of 2nd element to validate;details.....'
->	Values in these details are seperated by colons and, in general, are as follows:
	'...;validation code:position of element in the form:text to display;...'
->	Values when checking Date Intervals (d_i) are as follows:
	'...;validation code:position of From date element in the form:position of To date element in the form:text to display (OPTIONAL);...'
->	Values when validating for a Checked element (c) are as follows:
	'...;validation code:position of 1st 'check' element in the form:name of element:text to display;...'
->  Values when checking that one of a list of elements has been given a value (or)
	'....;or:\'strContactTitle\'*\'strContactName\':Please enter NAME or TITLE;....'
->	For each form element to be checked, the values in these details get stored in an array 'arrElemDetails()'
->	These are the validation codes:
	i - integer number (no decimal places)
	o_i - optional integer number
	f - floating number (possible decimal places)
	o_f - optional floating number
	t - text
	e - email
	o_e - optional email
	s - select
	d - date
	o_d - optional date
	d_i - date interval
	c - validate that one of a radio group is checked OR validate that at least one of a checkbox group has been checked 
	tt - search for a specific string
	cc - multiple emails seperated by semi-colons
	u - file upload
	v2 - call additional validation routine
	'...;validation code:position of element in the form:text to check for:text to display;...'
*/
// global variables, accessed by multiple functions
var bolShowMessage = true;
var strPromptMsg; // string used to display error messages in the alert box
var arrElemDetails;
var flgValid = false;
var flgElemFocus = false;
var strElemValue; // depending on the form element, used to store the value of the form element to be checked
var bolWinLded = false;

function validateForm(strFormName,strElemList){
 if(bolWinLded){
//alert(document.getElementById('WebWizRTE').contentWindow.document.body.innerHTML);
//return false;
	flgElemFocus = false; // when the 1st invalid form element is detected, this is set to true to show that keyboard focus has been allocated
	var arrElemList = strElemList.split(";"); // array with an entry for each form element to be validated
	flgValid = true;
	strPromptMsg = "";
	// loop through each form element to be validated
	for (var intArrElemListPos=0; intArrElemListPos<arrElemList.length; intArrElemListPos++){
		arrElemDetails = arrElemList[intArrElemListPos].split(":"); // array of validation details for the individual form element
		if (arrElemDetails[0]=="v2") {
			validateForm2();
		}
		if (arrElemDetails[0]=="rte") {
			strElemValue = fctRTEContents(arrElemDetails[1]);
			if (strElemValue == ""){
				strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[2] + ".\n\n";
			}else if(arrElemDetails[3] != 0){ // check length, 0 = unlimited
				if (strElemValue.length > arrElemDetails[3]){
					strPromptMsg = strPromptMsg + "The  " + arrElemDetails[2] + " textarea cannot contain more than " + arrElemDetails[3] + " characters.\nThis has been exceeded by " + (strElemValue.length - arrElemDetails[3]) + ".\nPlease delete some of the contents.\n\n";
				}else{
					
				}
			}
		}
		if (arrElemDetails[0]=="i") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[2] + ".\n\n";
				flgValid = false;
			}else{
				flgValid=validateInteger(strElemValue); // function call
			}
		}
		if (arrElemDetails[0]=="o_i") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				flgValid=validateInteger(strElemValue); // function call
			}
		}
		if (arrElemDetails[0]=="f") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[2] + ".\n\n";
				flgValid = false;
			}else{
				flgValid=validateFloating(strElemValue); // function call
			}
		}
		if (arrElemDetails[0]=="o_f") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				flgValid=validateFloating(strElemValue); // function call
			}
		}
		if (arrElemDetails[0]=="cn") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[2] + ".\n\n";
				flgValid = false;
			}else{
				flgValid=validateContactNum(strElemValue); // function call
			}
		}
		if (arrElemDetails[0]=="o_cn") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				flgValid=validateContactNum(strElemValue); // function call
			}
		}
		if (arrElemDetails[0]=="t" || arrElemDetails[0]=="dhtml_t"){
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[2] + ".\n\n";
				flgValid=false;
			}else{
				flgValid=true;
			}
		}
		if (arrElemDetails[0]=="tt") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[3] + ".\nThis must include the text - " + arrElemDetails[2] + "\n\n";
				flgValid=false;
			}else{
				if (strElemValue.search(/<CONTACT>/) == -1){
					strPromptMsg = strPromptMsg + arrElemDetails[3] + " must include the text - " + arrElemDetails[2] + "\n\n";
					flgValid=false;
				}else{
					flgValid=true;
				}
			}
		}
		if (arrElemDetails[0]=="e") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[2] + ".\n\n";
				flgValid=false;
			}else{
				flgValid=validateEmail(strElemValue); // function call
			}
		}
		if (arrElemDetails[0]=="cc") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				//strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[2] + ".\n\n";
				//flgValid=false;
			}else{
				arrCC = strElemValue.split(";");
				for (var intArrCCPos=0; intArrCCPos<arrCC.length; intArrCCPos++){
					flgValid=validateEmail(arrCC[intArrCCPos]); // function call
					if (flgValid == false){
						break;
					}
				}
			}
		}
		if (arrElemDetails[0]=="o_e") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				flgValid=validateEmail(strElemValue); // function call
			}
		}
		if (arrElemDetails[0]=="s") {
			if (eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value==""')){
				strPromptMsg = strPromptMsg + "Please select a value from " + arrElemDetails[2] + ".\n\n";
				flgValid=false;
			}
		}
		if (arrElemDetails[0]=="d") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[2] + ".\n\n";
				flgValid=false;
			}else{
				flgValid=validateDate(strElemValue); // function call
				if (!flgValid){
					strPromptMsg = strPromptMsg + arrElemDetails[2] + " is not a valid date.\n\n";
				}
			}
		}
		if (arrElemDetails[0]=="o_d") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				flgValid=validateDate(strElemValue); // function call
				if (!flgValid){
					strPromptMsg = strPromptMsg + arrElemDetails[2] + " is not a valid date.\n\n";
				}
			}
		}
		if (arrElemDetails[0]=="d_i") {
			if (validateDate(eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value')) && validateDate(eval('this.document.'+strFormName+'.elements['+arrElemDetails[2]+'].value')) && eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value!=""') && eval('this.document.'+strFormName+'.elements['+arrElemDetails[2]+'].value!=""')){
				//alert(Date.parse(eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value')) + "\n" + Date.parse(eval('this.document.'+strFormName+'.elements['+arrElemDetails[2]+'].value')))
				if (Date.parse(fctFormatCheckedDate (eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value'))) > Date.parse(fctFormatCheckedDate (eval('this.document.'+strFormName+'.elements['+arrElemDetails[2]+'].value')))) {
					if (arrElemDetails[3]){
						strPromptMsg = strPromptMsg + arrElemDetails[3] + "\n\n";
					}else{
						strPromptMsg = strPromptMsg + "The Date Interval specified is invalid.\n\n";
					}
					flgValid=false;
				}
			}
		}
		if (arrElemDetails[0]=="u") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value').toUpperCase();
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter your " + arrElemDetails[2] + ".\n\n";
				flgValid=false;
			}else{
				if (arrElemDetails[3]){
					// check for valid file upload
					strTemp = '.' + strElemValue.substring(strElemValue.lastIndexOf('.')+1,strElemValue.length)
					strTemp = strTemp.toUpperCase();
					strTemp2 = arrElemDetails[3].toUpperCase();
					if (strTemp2.lastIndexOf(strTemp) < 0 || strTemp == "."){
						strPromptMsg = strPromptMsg + arrElemDetails[2] + " FILE must be one of the following types:\n " + arrElemDetails[3] + "\n\n";
						flgValid=false;
					}else{
						flgValid=true;
					}
				}else{
					flgValid=true;
				}
			}
		}
		if (arrElemDetails[0]=="o_u") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				if (arrElemDetails[3]){
					// check for valid file upload
					strTemp = '.' + strElemValue.substring(strElemValue.lastIndexOf('.')+1,strElemValue.length)
					strTemp = strTemp.toUpperCase();
					strTemp2 = arrElemDetails[3].toUpperCase();
					if (strTemp2.lastIndexOf(strTemp) < 0 || strTemp == "."){
						strPromptMsg = strPromptMsg + arrElemDetails[2] + " FILE must be one of the following types:\n " + arrElemDetails[3] + "\n\n";
						flgValid=false;
					}else{
						flgValid=true;
					}
				}else{
					flgValid=true;
				}
			}
		}
		if (arrElemDetails[0]=="c") {
			cnt=0
			var flgChecked=false
			while (eval('this.document.'+strFormName+'.'+arrElemDetails[2]+'['+cnt+']')){
				if (eval('this.document.'+strFormName+'.'+arrElemDetails[2]+'['+cnt+'].checked')){
					flgChecked=true
					break;
				}
				cnt=cnt+1
			}
			if (flgChecked==false){
				strPromptMsg = strPromptMsg + arrElemDetails[3] + "\n\n";
				flgValid=false;
			}
		}
		if (arrElemDetails[0]=="or") {
			var arrChkList = arrElemDetails[1].split("*");
			var flgOK = false;
			// loop through each form element to be checked for existence off
			for (var intArrChkPos=0; intArrChkPos<arrChkList.length; intArrChkPos++){
				if (fctRTEContents(arrChkList[intArrChkPos])!=""){ //if new RTE being used
					flgOK = true;
					break;
				}
			}
			if (!flgOK){
				strPromptMsg = strPromptMsg + arrElemDetails[2] + "\n\n";
			}
		}
		
		if (arrElemDetails[0]=="txt") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter details for: " + arrElemDetails[2] + ".\n\n";
				flgValid=false;
			}else{
				
				flgValid=validateTxt(strElemValue); // function call
				if (!flgValid){
					strPromptMsg = strPromptMsg + arrElemDetails[2] + " can only contain plain text.\n<, > and all other formating tags cannot be used.\n\n";
				}
			}
		}
		if (arrElemDetails[0]=="o_txt") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				flgValid=validateTxt(strElemValue); // function call
				if (!flgValid){
					strPromptMsg = strPromptMsg + arrElemDetails[2] + "  can only contain plain text.\n<, > and all other formating tags cannot be used.\n\n";
				}
			}
		}
		
		
		if (!flgValid && flgElemFocus == false){ // gives keyboard focus to the 1st invalid form element found
			flgElemFocus = true;
			if (arrElemDetails[0]!="dhtml_t" && arrElemDetails[0]!="v2"){
				if (arrElemDetails[0]=="c"){
					eval('this.document.'+strFormName+'.'+arrElemDetails[2]+'[0].focus()');
				}else{
					eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].focus()');
				}
			}
		}
	}
 }else{
 	strPromptMsg = "Please wait for the webpage to finish loading."
 }
	if (strPromptMsg==""){
		return true; // submit the form
	}else{
		if (bolShowMessage == true){
			strPromptMsg = "BEFORE YOU CAN CONTINUE:\n\n" + strPromptMsg;
			alert(strPromptMsg); // show errors/invalid form elements
		}
		return false; // cancel form submission
	}
	
}

function validateForm2(){
	// this will be overwritten in individual pages if needed
	// allows additional validation
}

function validateInteger(strElemValue) {
	if (strElemValue.length > 1){
		//alert(strElemValue.charAt(0))
		if (strElemValue.charAt(0) == "0"){
			//alert(strElemValue);
			strElemValue = strElemValue.substring(1,strElemValue.length);
			//alert(strElemValue);
		}
	}
	for (var intElemValuePos = 0; intElemValuePos < strElemValue.length; intElemValuePos++) {
		if (strElemValue.charAt(intElemValuePos) < "0" || strElemValue.charAt(intElemValuePos) > "9") {
			strPromptMsg = strPromptMsg + arrElemDetails[2] + " must be a valid whole number.\n\n";
			return false;
		}
	}
	return true;
}

function validateFloating(strElemValue) {
	var intDecimalCount=0
	for (var intElemValuePos = 0; intElemValuePos < strElemValue.length; intElemValuePos++) {
		if ((strElemValue.charAt(intElemValuePos) < "0" || strElemValue.charAt(intElemValuePos) > "9") && strElemValue.charAt(intElemValuePos)!="." ) {
			strPromptMsg = strPromptMsg + arrElemDetails[2] + " cannot contain non-numeric charachters.\n\n";
			return false;
		}
		if (strElemValue.charAt(intElemValuePos) == "."){
			intDecimalCount = intDecimalCount + 1
			if (intDecimalCount > 1){
				strPromptMsg = strPromptMsg + arrElemDetails[2] + " cannot contain more than 1 decimal point.\n\n";
				return false;
			}else if (intElemValuePos==0 && strElemValue.length==1){
				strPromptMsg = strPromptMsg + arrElemDetails[2] + " cannot contain the decimal point alone.\n\n";
				return false;
			}
		}
	}
	return true;
}

function validateContactNum(strElemValue) {
	var intDecimalCount=0
	for (var intElemValuePos = 0; intElemValuePos < strElemValue.length; intElemValuePos++) {
		if ((strElemValue.charAt(intElemValuePos) < "0" || strElemValue.charAt(intElemValuePos) > "9") && strElemValue.charAt(intElemValuePos)!="." && strElemValue.charAt(intElemValuePos)!="(" && strElemValue.charAt(intElemValuePos)!=")" && strElemValue.charAt(intElemValuePos)!=" " && strElemValue.charAt(intElemValuePos)!="-" && strElemValue.charAt(intElemValuePos)!="+" ) {
			strPromptMsg = strPromptMsg + "The " + arrElemDetails[2] + " Number contains invalid charachters.\nValid list: space,0-9,(,),.,-,+\n\n";
			return false;
		}
		if (strElemValue.charAt(intElemValuePos) == "."){
			intDecimalCount = intDecimalCount + 1
			if (intDecimalCount > 1){
				strPromptMsg = strPromptMsg + arrElemDetails[2] + " cannot contain more than 1 decimal point.\n\n";
				return false;
			}else if (intElemValuePos==0 && strElemValue.length==1){
				strPromptMsg = strPromptMsg + arrElemDetails[2] + " cannot contain the decimal point alone.\n\n";
				return false;
			}
		}
	}
	return true;
}

function validateTxt(strElemValue){
	if (strElemValue.lastIndexOf('<') >= 0){
		return false;
	}else if(strElemValue.lastIndexOf('>') >= 0){
		return false;
	}else if(strElemValue.lastIndexOf('<') >= 0){
		return false;
	}else if(strElemValue.lastIndexOf('&lt;') >= 0){
		return false;
	}else if(strElemValue.lastIndexOf('&gt;') >= 0){
		return false;
	}else{
		return true;
	}
}

function fctRTEContents(strElemName){
	strElemName = strElemName.replace(/'/g,"")
	var strRTE;
	if (document.getElementById('WebWizRTE')){
		strRTE = document.getElementById('WebWizRTE').contentWindow.document.body.innerHTML;
	}else if(document.getElementById(strElemName)) {
		strRTE = document.getElementById(strElemName).value
	}else if(this.document.frm.elements[strElemName]) {
		strRTE = this.document.frm.elements[strElemName].value
	}
	
	if (strRTE.toUpperCase()=="<P>&NBSP;</P>" || strRTE.toUpperCase()=="<BR>" || strRTE == null || strRTE.length == 0 ){
		strRTE = ""
	}
	strRTE = "" + strRTE; //converts a null or empty string into a blank one.
	
	return strRTE;
	//alert(document.getElementById('WebWizRTE').contentWindow.document.body.innerHTML);
}

function validateEmail(strElemValue){
	if (strElemValue.indexOf('@', 1) == -1 || strElemValue.indexOf('.', 0) == -1 || (strElemValue.lastIndexOf('.')-strElemValue.indexOf('@'))<2 || strElemValue.length<5 || strElemValue.lastIndexOf('.')==(strElemValue.length-1)){ 
		strPromptMsg = strPromptMsg + arrElemDetails[2] + " contains a non-valid email address.\n\n";
		return false;
	}
	return true;
}

function validateDate(strElemValue) {
	//var strDatestyle = "US"; //United States date style
	var strDatestyle = "EU";  //European date style
	var strDate = strElemValue;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var strSeparatorArray = new Array("/"); // array can hold all the following: Array("-"," ","/","."). Keep in mind what happens to the info when the form is submitted.
	var intElementNr;
	var err = 0;
	var strMonthArray = new Array(12);
	strMonthArray[0] = "Jan";
	strMonthArray[1] = "Feb";
	strMonthArray[2] = "Mar";
	strMonthArray[3] = "Apr";
	strMonthArray[4] = "May";
	strMonthArray[5] = "Jun";
	strMonthArray[6] = "Jul";
	strMonthArray[7] = "Aug";
	strMonthArray[8] = "Sep";
	strMonthArray[9] = "Oct";
	strMonthArray[10] = "Nov";
	strMonthArray[11] = "Dec";
	if (strDate.length < 1) {
		return true;
	}
	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if (strDateArray.length != 3) {
				err = 1;
				return false;
			}else {
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
		}
	}
	if (booFound == false) {
		if (strDate.length>5) {
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4);
		}else{
	   		return false
		}
	}
	if (strYear.length == 1) {
		strYear = '200' + strYear;
	}else if (strYear.length == 2) {
		strYear = '20' + strYear;
	}
	//alert(strYear)
	// US style
	if (strDatestyle == "US") {
		strTemp = strDay;
		strDay = strMonth;
		strMonth = strTemp;
	}
	intday = parseInt(strDay, 10);
	if (isNaN(intday)) {
		err = 2;
		return false;
	}
	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) {
		for (i = 0;i<12;i++) {
			if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
				intMonth = i+1;
				strMonth = strMonthArray[i];
				i = 12;
			}
		}
		if (isNaN(intMonth)) {
			err = 3;
			return false;
		}
	}
	intYear = parseInt(strYear, 10);
	if (isNaN(intYear)) {
		err = 4;
		return false;
	}
	if (intMonth>12 || intMonth<1) {
		err = 5;
		return false;
	}
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
		err = 6;
		return false;
	}
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
		err = 7;
		return false;
	}
	if (intMonth == 2) {
		if (intday < 1) {
			err = 8;
			return false;
		}
		if (LeapYear(intYear) == true) {
			if (intday > 29) {
				err = 9;
				return false;
			}
		}else {
			if (intday > 28) {
				err = 10;
				return false;
			}
		}
	}
	/* 
	// use this if there is a need for the formatting it offers.
	if (strDatestyle == "US") {
		strReturnDateValue = strMonthArray[intMonth-1] + " " + intday+" " + strYear;
	}else {
		strReturnDateValue = intday + " " + strMonthArray[intMonth-1] + " " + strYear;
	}
	*/
	return true;
}

function LeapYear(intYear) { // called by validateDate()
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
	}else {
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}

function fctFormatCheckedDate (dtTemp){
	//Date has already been validated. Now put in a format that can be parsed properly.
	// Ex. '31 Nov 2003' will parse properly but '31/11/2003' won't
	//"new Date("30/11/01")" returns => "Thu Jun 11 00:00:00 UTC+0100 1903"
	//"new Date("30/11/2001")" returns => "Wed Jun 11 00:00:00 UTC+0100 2003"
	//"new Date("30 Nov 2001")" returns => "Fri Nov 30 00:00:00 UTC 2001 "
	var strDateArray;
	strDateArray = dtTemp.split("/");
	
	var strMonthArray = new Array(12);
	strMonthArray[0] = "Jan";
	strMonthArray[1] = "Feb";
	strMonthArray[2] = "Mar";
	strMonthArray[3] = "Apr";
	strMonthArray[4] = "May";
	strMonthArray[5] = "Jun";
	strMonthArray[6] = "Jul";
	strMonthArray[7] = "Aug";
	strMonthArray[8] = "Sep";
	strMonthArray[9] = "Oct";
	strMonthArray[10] = "Nov";
	strMonthArray[11] = "Dec";
	
	var strDay;
	var strMonth;
	var strYear;
	
	//US format
	//strDay = strDateArray[1];
	//strMonth = strMonthArray[parseInt(strDateArray[0], 10) - 1];
	
	//EU format
	strDay = strDateArray[0];
	strMonth = strMonthArray[parseInt(strDateArray[1], 10) - 1];
	
	strYear = strDateArray[2];
	if (strYear.length == 1) {
		strYear = '200' + strYear;
	}else if (strYear.length == 2) {
		strYear = '20' + strYear;
	}
	
	return strDay + " " + strMonth + " " + strYear;
}		

// EX: onClick="return validateForm('frm','t:4:Name;o_e:6:Email;t:7:Username;t:8:Password;c:9:strAccess:You must specify at least one Access Level.')"
//		onClick="return validateForm('frm','t:\'strName\':Name;o_e:6:Email;t:7:Username;t:8:Password;c:9:strAccess:You must specify at least one Access Level.')"

function chkContentLength(txtarea,num){
	if (txtarea.value.length>num){
		msg=confirm('This field cannot exceed '+num+' characters :\n\nClick OK to automatically shorten the input.\nClick CANCEL to edit the input yourself.')
		if (msg){
			txtarea.value=txtarea.value.substring(0,num)
		}else{
			txtarea.focus()
		}
	}
}
// EX: <textarea name=strAddress rows=4 cols=35 onBlur="chkContentLength(this,100)"></textarea>



// Form Field Validation Functions:
//
// isValidExpDate(formField,fieldLabel,required)
//   -- checks for date in the format MM/YY or MM/YYYY against the current date
// isValidCreditCardNumber(formField,ccType,fieldLabel,required)
//   -- checks for valid credit card format using the Luhn check and known digits about various cards
//

function validRequired(formField,fieldLabel)
{
	var result = true;
	
	if (formField.value == "")
	{
		//#1# alert('Please enter a value for the "' + fieldLabel +'" field.');
		//#1# formField.focus();
		result = false;
	}
	
	return result;
}


function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
	var result = true;
	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	
	return result;
}

function isValidExpDate(formField,fieldLabel,required)
{
	var result = true;
	var formValue = formField.value;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result && (formField.value.length>0))
 	{
 		var elems = formValue.split("/");
 		
 		result = (elems.length == 2); // should be two components
 		var expired = false;
 		
 		if (result)
 		{
 			var month = parseInt(elems[0],10);
 			var year = parseInt(elems[1],10);
 			
 			if (elems[1].length == 2)
 				year += 2000;
 			
 			var now = new Date();
 			
 			var nowMonth = now.getMonth() + 1;
 			var nowYear = now.getFullYear();
 			
 			expired = (nowYear > year) || ((nowYear == year ) && (nowMonth > month));
 			
			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
					 allDigits(elems[1]) && ((elems[1].length == 2) || (elems[1].length == 4));
 		}
 		
  		if (!result)
 		{
 			//#1# alert('Please enter a date in the format MM/YY for the "' + fieldLabel +'" field.');
			//#1# formField.focus();
		}
		else if (expired)
		{
 			result = false;
 			//#1# alert('The date for "' + fieldLabel +'" has expired.');
			//#1# formField.focus();
		}
	} 
	
	return result;
}

function isValidCreditCardNumber(formField,ccType,fieldLabel,required)
{
	var result = true;
 	var ccNum = formField.value;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
 
  	if (result && (formField.value.length>0))
 	{ 
 		if (!allDigits(ccNum))
 		{
 			//#1# alert('Please enter only numbers (no dashes or spaces) for the "' + fieldLabel +'" field.');
			//#1# formField.focus();
			result = false;
		}	

		if (result)
 		{ 
 			
 			if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum))
 			{
 				//#1# alert('Please enter a valid card number for the "' + fieldLabel +'" field.');
				//#1# formField.focus();
				result = false;
			}	
		} 

	} 
	
	return result;
}

function LuhnCheck(str) 
{
  var result = true;

  var sum = 0; 
  var mul = 1; 
  var strLen = str.length;
  
  for (i = 0; i < strLen; i++) 
  {
    var digit = str.substring(strLen-i-1,strLen-i);
    var tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) != 0)
    result = false;
    
  return result;
}



function GetRadioValue(rArray)
{
	for (var i=0;i<rArray.length;i++)
	{
		if (rArray[i].checked)
			return rArray[i].value;
	}
	
	return null;
}


function validateCCNum(cardType,cardNum)
{
	var result = false;
	cardType = cardType.toUpperCase();
	
	var cardLen = cardNum.length;
	var firstdig = cardNum.substring(0,1);
	var seconddig = cardNum.substring(1,2);
	var first4digs = cardNum.substring(0,4);

	switch (cardType)
	{
		case "VISA":
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		case "VISA / DELTA":
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		case "VISA DELTA":
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		case "AMEX":
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
		case "MASTERCARD":
			var validNums = "12345";
			result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
			break;
		case "MASTERCARD MAESTRO":
			var validNums = "12345";
			result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
			break;
		case "DISCOVER":
			result = (cardLen == 16) && (first4digs == "6011");
			break;
		case "DINERS":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
		case "LASER":
			result = true;
			break;
	}
	return result;
}

function validCCForm(ccTypeField,ccNumField,ccExpField)
{
	
	var result = isValidCreditCardNumber(ccNumField,ccTypeField.value,"Credit Card Number",true) &&
		isValidExpDate(ccExpField,"Expiration Date",true);
	return result;
}
/*
#1# - these were commented out, as alerts and other validation handled by main script.
*/
function fctCheckFocus(strElem){
		if (!flgValid && flgElemFocus == false){ // gives keyboard focus to the 1st invalid form element found
			flgElemFocus = true;
			eval('this.document.frm.elements["'+strElem+'"].focus()');
		}
	}
	

	function fctChkSelected(elem){
		if (elem.value == ""){
		elem.selectedIndex = 0;
		}
	}
//-->

