//Generic form validation functions : 04/04/2003 Leslie Lee

//definitions used for validation rules - sample input type 
//these validation rules requires that underscore _ is RESERVED !!
// vRequired  	- <input name="abc_vRequired">
// vDate 		- <input name="123_vDate">
// vNumeric 	- <input name="xyz_vNumeric">
// vMax 		- <input name="jkl_vMax_32">
// vMin 		- <input name="456_vMin_100">
// vYear	 	- <input name="mno_vYear">
// vLength		- <input name="qrs_vLength_6">
// vPassword	- <input name="bnv_vPassword">

function validateForm(frm){
var bRadioOK = false
var vrule = ""
var elName = ""
var elType = ""

	for (var i=0; i < frm.elements.length; i++){
		elName = frm.elements[i].name;
		elType = frm.elements[i].type;
		arRules = elName.split('_');

		for (var a=1; a < arRules.length; a++) {
			vrule = arRules[a];
			switch (vrule) {
				case "vRequired" :
					if((elType=="text" || elType=="textarea" || elType=="password") && frm.elements[i].value.length==0){
						alert("["+arRules[0]+"] This field cannot be left blank.");
						frm.elements[i].focus();
						return false;
					}
					if((elType=="hidden") && frm.elements[i].value.length==0){
						alert("["+arRules[0]+"] cannot be empty.");
						return false;
					}
					if (elType=="checkbox" && frm.elements[i].checked==false){
						alert("["+arRules[0]+"] This box must be checked.");
						frm.elements[i].click();
						return false;
					}
					if (elType=="select-one" || elType=="select-multiple"){
						if(frm.elements[i].selectedIndex < 1) {
							alert("["+arRules[0]+"] You must select an option.");
							frm.elements[i].focus();
							return false;
						}
					}
					if (elType=="radio"){
						if(eval("frm."+elName+".length")>0){
							for (var iRadio=0; iRadio < eval("frm."+elName+".length"); iRadio++){
								bChecked = eval("frm."+elName+"[iRadio].checked");
								if(bChecked) bRadioOK = true;
							}						
						}else{
							bChecked = frm.elements[i].checked;
							if(bChecked) bRadioOK = true;
						}
						if(!bRadioOK){
							alert("["+arRules[0]+"] You must select one option.");
							frm.elements[i].click();
							return false;
						}
					}
					break;
				case "vDate" :
					if(checkDate(frm.elements[i].value)){
						alert("["+arRules[0]+"] Please enter dates in the MM/DD/YYYY format. Year must be greater than 1753.")
						frm.elements[i].focus();
						frm.elements[i].select();
						return false;
					}			
					break;
				case "vNumeric" :
					if(isNaN(frm.elements[i].value)){
						alert("["+arRules[0]+"] Please enter a numeric value.")
						frm.elements[i].focus();
						frm.elements[i].select();
						return false;
					}
					break;
				case "vMax" :
					if ((a+1) < arRules.length){
					if(!isNaN(arRules[a+1])) maxValue = new Number(arRules[a+1]);
					if(!isNaN(frm.elements[i].value)) elValue = new Number(frm.elements[i].value);
						if(elValue > maxValue){
							alert("["+arRules[0]+"] Value cannot be > "+maxValue+".")
							frm.elements[i].focus();
							frm.elements[i].select();
							return false;
						}
					}
					break;
				case "vMin" :
					if ((a+1) < arRules.length){
					if(!isNaN(arRules[a+1])) minValue = new Number(arRules[a+1]);
					if(!isNaN(frm.elements[i].value)) elValue = new Number(frm.elements[i].value);
						if(elValue < minValue){
							alert("["+arRules[0]+"] Value cannot be < "+minValue+".")
							frm.elements[i].focus();
							frm.elements[i].select();
							return false;
						}
					}
					break;
				case "vYear" :
					if(isNaN(frm.elements[i].value) && frm.elements[i].value.length != 0){
						alert("["+arRules[0]+"] Please enter a valid 4 digit year.")
						frm.elements[i].focus();
						frm.elements[i].select();
						return false;
					}
					if(frm.elements[i].value.length < 4 && frm.elements[i].value.length != 0){
						alert("["+arRules[0]+"] Please enter a valid 4 digit year.")
						frm.elements[i].focus();
						frm.elements[i].select();
						return false;
					}
					if(frm.elements[i].value < 1753){
						alert("["+arRules[0]+"] Please enter a year greater than 1752.")
						frm.elements[i].focus();
						frm.elements[i].select();
						return false;
					}					
					break;
				case "vLength" :
					if ((a+1) < arRules.length){
					if(!isNaN(arRules[a+1])) lenValue = new Number(arRules[a+1]);
						if(frm.elements[i].value.length < lenValue && frm.elements[i].value.length != 0){
							alert("["+arRules[0]+"] Must be at least "+lenValue+" characters.")
							frm.elements[i].focus();
							frm.elements[i].select();
							return false;
						}
					}
					break;
				case "vPassword" :
					if(checkPassword(frm.elements[i].value)){
						alert("["+arRules[0]+"] Must contain at least one numeric value.")
						frm.elements[i].focus();
						frm.elements[i].select();
						return false;
					}
					break;
			}
		}		
	}
	return true;
}

//checks for valid dates
function checkDate(thedate){
	if (!thedate) return false
	var err=false
	a=thedate
	if (a.length < 8 || a.length > 10) return true
	if (a.length == 10) {
		mm  = a.substring(0,2)
		b	= a.substring(2,3)
		dd  = a.substring(3,5)
		c	= a.substring(5,6)
		yy  = a.substring(6,10)
	}
	else {
		if (a.length == 8) {
			if (a.charAt(1) == '/' || a.charAt(1) == '-') {
				mm  = a.substring(0,1)
				b	= a.substring(1,2)
				dd  = a.substring(2,3)
				c	= a.substring(3,4)
				yy  = a.substring(4,8)
			}
			else {return true}
		}
		else if (a.length == 9) {
			if (a.charAt(1) == '/' || a.charAt(1) == '-') {
				mm  = a.substring(0,1)
				b	= a.substring(1,2)
				dd  = a.substring(2,4)
				c	= a.substring(4,5)
				yy  = a.substring(5,9)
			}
			else {
				mm  = a.substring(0,2)
				b	= a.substring(2,3)
				dd  = a.substring(3,4)
				c	= a.substring(4,5)
				yy  = a.substring(5,9)
			}
		}
	}
	//basic error checking
	if (mm<1 || mm>12) err=true
	if (!(b == '/' || b == '-')) err=true
	if (dd<1 || dd>31) err=true
	if (!(c == '/' || c == '-')) err=true
	if (yy<1753) err=true
	
	// months with 30 days
	if (mm==4 || mm==6 || mm==9 || mm==11){
		if (dd==31) err=true
	}

	// february, leap year
	if (mm==2){
		var g=parseInt(yy/4)
		if (isNaN(g)) {
			err=true
		}
		if (dd>29) err=true
		if (dd==29 && ((yy/4)!=parseInt(yy/4))) err=true
	}
	return err
}

//checks for at least 1 numeric character
function checkPassword(thevalue){
	if(!thevalue) return false;
	
	for(i=0;i<thevalue.length;i++){
		if(!isNaN(thevalue.charAt(i))){return false}
	}
	return true
}

// limits the amount of data that can be entered in a textarea box
function maxlength(element, maxvalue)
     {
     var q = eval("document.frmOnlineApp."+element+".value.length");
     var r = q - maxvalue;
     var msg = "Sorry, you have input "+q+" characters into the "+
       "text area box you just completed. It can return no more than "+
       maxvalue+" characters to be processed. Please abbreviate "+
       "your text by at least "+r+" characters";
     if (q > maxvalue) alert(msg);
	 element.focus();
	 return false;
     }


//if length of textArea field is greater than maxLength field is truncated
function checkTextAreaLength(textArea, maxLength){
	if(textArea.value.length > maxLength){
		textArea.value = textArea.value.substring(0, maxLength);
		alert('Field limited to ' + maxLength + ' characters.');
		textArea.focus();
		textArea.select();
		return false;
	}
}

