//Written by Steve Pera, 3/7/2005.  University of Nebraska Medical Center
//Modified: 5/11/05.
//Place in function call: 	if(!validateField())return; 
// If desired, put user-defined field definitions  in validate___.js
// include validateField.js and validate___.js (if exists) on page containing form(s) to be validated.
var phonePlusArea = /^\d{3}-\d{3}-\d{4}$|^\d{3}-\d{4}$/; // (###) ###-####
var phonePlusAreaPattern = "[###-]###-####"
var phonePlusParens = /^\(\d{3}\) \d{3}-\d{4}$/; // (###) ###-####
var phonePlusParensPattern = "(###) ###-####"
var phoneLabelPlusParens = /(^[{\w, }]+: \(\d{3}\) \d{3}-\d{4}$)|(^\(\d{3}\) \d{3}-\d{4}$)/; // (###) ###-####
var phoneLabelPlusParensPattern = "[label: ](###) ###-####"
//var phone1800PlusParens = /(^\(\d{3}\) \d{3}-\d{4}$)|(^1-\(\d{3}\) \d{3}-\d{4}$)/; // [1](800) ###-####
//var phone1800PlusParensPattern = "[1-](800) ###-####"
//var phone1800LabelPlusParens = /(^[{\w, }]+: \(\d{3}\) \d{3}-\d{4}$)|(^\(\d{3}\) \d{3}-\d{4}$)|(^[{\w, }]+: 1-\(\d{3}\) \d{3}-\d{4}$)|(^1-\(\d{3}\) \d{3}-\d{4}$)/; // (###) ###-####
//var phone1800LabelPlusParensPattern = "[label: ][1-](800) ###-####"
var phoneNoAreaCode = /^\d{3}-\d{4}$/; // ###-####
var phoneNoAreaCodePattern = "###-####"
var digitsFour = /^\d\d\d\d$/; // ####
var digitsFourPattern = "####"
var alphaTwo = /^[a-zA-Z]{2}$/; //  AA
var alphaTwoPattern = "AA"
var zipOrPlus = /(^\d{5})$|(^\d{5}-\d{4}$)/; // #####[-####]
var zipOrPlusPattern = "#####[-####]"
var eMail = /[\w.]+@[\w.]+\.\w+/ // xxx@xxx.xxx
var eMailPattern = "[XXX.]XXX@XXX.XXX[.XXX]"
var digitsTwo = /^\d\d$/; // ####
var digitsTwoPattern = "Two Digits"
var digitsOneOrTwo = /^\d{1,2}$/;
var digitsOneOrTwoPattern = "One or two digits"
var digitsNullToTwo = /^\d{0,2}$/;
var digitsNullToTwoPattern = "One or two digits or leave blank"
var digitsOneToThree = /^\d{1,3}$/;
var digitsOneToThreePattern = "One to three digits"
var digits50to100 = /^100$|^[5-9]\d$/;
var digits50to100Pattern = "A number from 50 to 100"
var digitsOneOrTwoAndOrDot = /^\d{1,2}\.{0,1}$|^\d{0,2}\.\d{1,2}$/;
var digitsOneOrTwoAndOrDotPattern = "##.##"
// ^ = start string, $ = end string
var myForm = "form1";

function nameForm(formName){
	// needed if form is other than "form1"
	myForm = formName;
}
function validateField(thisFieldDef){
	//if(!document[myForm][thisField][0])alert("not");
	//if(document[myForm][thisField][0])alert("is"), ie is array, eg is radio;
	var valParams = thisFieldDef.split(",");
	var thisField = valParams[0];
	var thisFieldValue = this.document[myForm][thisField].value;
	var thisCaption = valParams[1];
	if((document[myForm][thisField].type == "text") || (document[myForm][thisField].type == "textarea")){
		var thisRequiredYN = valParams[2];
		var thisPattern = eval(valParams[3]);
		if((thisRequiredYN == "y") && (thisFieldValue == '')){
			alert("Please provide a response for '" + thisCaption + "'.");
			this.document[myForm][thisField].focus();
			return 0;
		}else if(thisPattern != 0){
			if(thisFieldValue.match(thisPattern) == null){
				var thisPatternName = valParams[3] + "Pattern";
				var mssg = "Please follow this pattern for '" + thisCaption + "':" +
					"\n " + eval(thisPatternName) + "." +
					"\n\n\n[ ] = optional item" +
					"\nA  = alpha character" +
					"\n#  = numeral" +
					"\nX   = alpha-numerical character" +
					"\n?   = any character";
				alert(mssg);
				this.document[myForm][thisField].focus();
				return 0;
			}
		}
	}else if(document[myForm][thisField].type == "select-one"){
		var thisFLength = document[myForm][thisField].length;
		var isChecked = 'No';
		for (var i2 = 1; i2 < thisFLength; i2++){
			if(document[myForm][thisField][i2].selected == true){isChecked = 'Yes';}
		}
		if(isChecked == 'No'){
			alert("Please provide a response for " + thisCaption + ".");
			this.document[myForm][thisField].focus();
			return 0;
		}
	}else{//radio buttons
		var thisFLength = document[myForm][thisField].length;
		var isChecked = 'No';
		for (var i2 = 0; i2 < thisFLength; i2++){
			if(document[myForm][thisField][i2].checked == true){isChecked = 'Yes';}
		}
		if(isChecked == 'No'){
			alert("Please provide a response for " + thisCaption + ".");
			this.document[myForm][thisField][0].focus();//focus on first radio button;
			return 0;
		}
	}
	return 1; 
}
//(series of checkboxes.)
function checkCheckBoxSeries(minNum,thisCaption,hiddenFieldsYN){
	var thisTotal = 0;
	var firstField = arrFields[0]
	for (var i = 0; i < arrFields.length; i++){
		var thisField = arrFields[i]
		if(hiddenFieldsYN == "y"){
			if(document[myForm][thisField][0].checked == true){thisTotal++;}
		}else{
			if(document[myForm][thisField].checked == true){thisTotal++;}
		}
	}
	if(thisTotal < minNum){
		if(minNum > 1){var ess = "s"}else{var ess = ""}
		var thisMssg = "Please make at least " + minNum + " selection" + ess + " for " + thisCaption + ".";
		alert(thisMssg);
		if(hiddenFieldsYN == "y"){
			this.document[myForm][firstField][0].focus();
		}else{
			this.document[myForm][firstField].focus();
		}
		return 0;
	}else{return 1}
}
function countChecks(mssg,currentField,focusField){
	var numChecked = 0;
	for(var i=0;i<arrDepts.length;i++){
		var thisField = arrDepts[i];
		if(document[myForm][thisField].checked == true){
			numChecked += 1;
		}
	}
	if(numChecked > 8){
		alert(mssg);
		document[myForm][currentField].checked = false;
		this.document[myForm][focusField].focus();
		return 0;
	}
	return 1;
}
function sumFields(desiredValue,thisCaption,percentYN){
//arrFields = new Array("field1","field2","field3");
	var thisSum = 0;
	var firstField = arrFields[0];
	for (var i = 0; i < arrFields.length; i++){
		var thisField = arrFields[i]; 
		thisSum = thisSum + Number(document[myForm][thisField].value);
	}
	if(thisSum != desiredValue){
		if(percentYN == "y"){ var isPercent = "%"}else{var isPercent = ""}
		alert("Your total for " + thisCaption + " does not equal " + desiredValue + isPercent + ".");
		this.document[myForm][firstField].focus();
		return 0;
	}else{return 1;}
}