<!--//
	/*
	All script ing on this page is copyright of Adrian Folan. 
	This code must not be used or in any way reproduced without the express permission of Adrian Folan.
	Contact : adrian_folan@hotmail.com
	*/
var strPromptMsg; 
var arrElemDetails;
var flgValid = false;
var flgElemFocus = false;
var strElemValue; 
function validateForm(strFormName,strElemList){
	flgElemFocus = false; 
	var arrElemList = strElemList.split(";"); 
	flgValid = true;
	strPromptMsg = "";
	for (var intArrElemListPos=0; intArrElemListPos<arrElemList.length; intArrElemListPos++){
		arrElemDetails = arrElemList[intArrElemListPos].split(":"); 
		if (arrElemDetails[0]=="v2") {
			validateForm2();
		}
		if (arrElemDetails[0]=="i") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter a value for " + arrElemDetails[2] + ".\n\n";
				flgValid = false;
			}else{
				flgValid=validateInteger(strElemValue); 
			}
		}
		if (arrElemDetails[0]=="o_i") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				flgValid=validateInteger(strElemValue); 
			}
		}
		if (arrElemDetails[0]=="f") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter a value for " + arrElemDetails[2] + ".\n\n";
				flgValid = false;
			}else{
				flgValid=validateFloating(strElemValue); 
			}
		}
		if (arrElemDetails[0]=="o_f") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				flgValid=validateFloating(strElemValue); 
			}
		}
		if (arrElemDetails[0]=="cn") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter a value for " + arrElemDetails[2] + ".\n\n";
				flgValid = false;
			}else{
				flgValid=validateContactNum(strElemValue); 
			}
		}
		if (arrElemDetails[0]=="o_cn") {
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue!=""){
				flgValid=validateContactNum(strElemValue); 
			}
		}
		if (arrElemDetails[0]=="t" || arrElemDetails[0]=="dhtml_t"){
			strElemValue=eval('this.document.'+strFormName+'.elements['+arrElemDetails[1]+'].value');
			if (strElemValue==""){
				strPromptMsg = strPromptMsg + "Please enter a value for " + 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 a value for " + 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 a value for " + 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==""){
				
			}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 a value for " + 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!=""')){
				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 a value for " + arrElemDetails[2] + ".\n\n";
				flgValid=false;
			}else{
				if (arrElemDetails[3]){
					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]){
					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;
			for (var intArrChkPos=0; intArrChkPos<arrChkList.length; intArrChkPos++){
				if (eval('this.document.'+strFormName+'.elements['+arrChkList[intArrChkPos]+']')){
					if (eval('this.document.'+strFormName+'.elements['+arrChkList[intArrChkPos]+'].value!=""')){
						flgOK = true;
						break;
					}
				}
			}
			if (!flgOK){
				strPromptMsg = strPromptMsg + arrElemDetails[2] + "\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()');
				}
			}
		}
	}
	if (strPromptMsg==""){
		return true; 
	}else{
		strPromptMsg = "BEFORE YOU CAN CONTINUE:\n\n" + strPromptMsg;
		alert(strPromptMsg); 
		return false; 
	}
	
}

function validateForm2(){
	
}

function validateInteger(strElemValue) {
	if (strElemValue.length > 1){
		if (strElemValue.charAt(0) == "0"){
			strElemValue = strElemValue.substring(1,strElemValue.length);
		}
	}
	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 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 = "EU";  
	var strDate = strElemValue;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var strSeparatorArray = new Array("/"); 
	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;
	}
	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;
			}
		}
	}
	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){
	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;
	
	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;
}		

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()
		}
	}
}


function validRequired(formField,fieldLabel)
{
	var result = true;
	
	if (formField.value == "")
	{
		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); 
 		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)
 		{
 			
		}
		else if (expired)
		{
 			result = false;
 			
		}
	} 
	
	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))
 		{
 			
			result = false;
		}	

		if (result)
 		{ 
 			
 			if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum))
 			{
 				
				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 "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 "DISCOVER":
			result = (cardLen == 16) && (first4digs == "6011");
			break;
		case "DINERS":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			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;
}

function fctCheckFocus(strElem){
		if (!flgValid && flgElemFocus == false){ 
			flgElemFocus = true;
			eval('this.document.frm.elements["'+strElem+'"].focus()');
		}
	}
//-->
