<!--
// written by Ryan Schaeffer, gsk - 4/01/02

		var required = [], format = [], OrderError = [];
		var validateForm = null;

		// initialer helper function to build required array and parameters
		function addRequired(display, field) {
			var pos = required.length;
			required[pos] = new Object();
			required[pos].display = display;
			required[pos].field = field; 
			if (arguments.length > 2) {
				required[pos].trigger = arguments[2];
				required[pos].extra = [];
				for (var i=3; i < arguments.length; i+=2) {
					var extrapos = required[pos].extra.length;
					required[pos].extra[extrapos] = new Object();
					required[pos].extra[extrapos].display = arguments[i];
					required[pos].extra[extrapos].field = arguments[i+1];
				}
			}
		}
		
		function isDate(thedate, theformat) {
			var aDaysInMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

			// Fetch the date separator from the user's input
			var sSepDate = thedate.charAt(thedate.search(/\D/));
			// Fetch the date separator from the format
			var sSepFormat=theformat.charAt(theformat.search(/[^MDY]/i));
			// Compare separators
			if (sSepDate!=sSepFormat) return false;

			// Fetch the three pieces of the date from the user's input and the format
			var aValueMDY=thedate.split(sSepDate,3);
			var aFormatMDY=theformat.split(sSepFormat,3);

			// Assign day, month, year based on format
			var iMonth,iDay,iYear;
			iMonth = aValueMDY[0];
			iDay   = aValueMDY[1];
			iYear  = aValueMDY[2];

			// Validate that all pieces of the date are numbers
			if ( !/\d/.test( iMonth ) || !/\d/.test( iDay ) || !/\d/.test( iYear ) )
				return false;

			// Require format digit year
			if(iYear.length!=aFormatMDY[2].length)	return false;

			// Check for leap year
			var iDaysInMonth=(iMonth!=2)?aDaysInMonth[iMonth-1]:
			((iYear%4==0 && iYear%100!=0 || iYear % 400==0)?29:28);

			return (iDay!=null && iMonth!=null && iYear!=null && iMonth<13 && iMonth>0 && iDay>0 && iDay<=iDaysInMonth);		
		}
		
		function isTime(thetime, theformat) {
			// Fetch the date separator from the user's input
			var sSepDate = thetime.charAt(thetime.search(/\D/));
			// Fetch the date separator from the format
			var sSepFormat=theformat.charAt(theformat.search(/[^HM]/i));
			// Compare separators
			if (sSepDate!=sSepFormat) return false;

			// Fetch the three pieces of the date from the user's input and the format
			var aValueHM=thetime.split(sSepDate,2);
			var aFormatHM=theformat.split(sSepFormat,2);

			// Assign day, month, year based on format
			var iHour,iMinute;
			iHour 	= aValueHM[0];
			iMinute	= aValueHM[1];

			// Validate that all pieces of the date are numbers
			if ( !/\d/.test( iHour ) || !/\d/.test( iMinute ) )
				return false;

			return (iHour!=null && iMinute!=null && iHour<24 && iHour>=0 && iMinute>=0 && iMinute<60);		
		}		
		
		// initialer helper function to build format array and parameters
		function addFormat(display, field, fmt) {
			var pos = format.length;
			format[pos] = new Object();
			format[pos].display = display;
			format[pos].field = field;
			format[pos].format = fmt;
		}

		var formaterr = '';
		// checks specified format for each case - and builds error string
		function checkFormats() {
			for (var i=0; i < format.length; i++) {
				var elem = format[i];
				switch (elem.format) {
					case "number" :
						var done = false;
						for (var f=0; (f < elem.field.length && !done); f++) {
							var formvalue = eval("validateForm."+elem.field[f]+".value");
							if (formvalue!="" && /\D/.test(formvalue)) {
								addFormatError(elem.display);
								done = true;
							}
						}
						break;
					case "email" :
						var formvalue = eval("validateForm."+elem.field[0]+".value");
						if (formvalue!="" && !/^[\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)*\.\w{2,4}$/.test(formvalue)) {
							addFormatError(elem.display);
						}
						break
					case "zip" :
						var formvalue = eval("validateForm."+elem.field[0]+".value");
						if(formvalue!="" && !/^\d{5}(-?\d{4})?$/.test(formvalue)) {
							addFormatError(elem.display);
						}
						break;
					case "phone" :
						var formvalue = "";
						for (var f=0; (f < elem.field.length && !done); f++) {
							formvalue += eval("validateForm."+elem.field[f]+".value").replace(/\D/g,"");
						}
						var iDigits = formvalue.length;
						if( formvalue!="" && !(iDigits==10 || iDigits==11 && /^1/.test(formvalue)) ) {
							addFormatError(elem.display);
						}					
						break;
					case "date" :
						var formvalue = eval("formObj."+elem.field[0]+".value");
						var sFormat = "MM-DD-YYYY";
						if ( formvalue!="" && !isDate(formvalue, sFormat) ) {
							addFormatError(elem.display);
						}
						break;
					case "time" :
						var formvalue = eval("formObj."+elem.field[0]+".value");
						var sFormat = "HH:MM"
						if ( formvalue!="" && !isTime(formvalue, sFormat) ) {
							addFormatError(elem.display);
						}
						break;					
					case "ActivationCardNumber" :
						// match a very specific activation card number 15000001 - 190000000
						var formvalue = eval("validateForm."+elem.field[0]+".value");
						//if ((formvalue!="") && (!/^01$/.test(formvalue.substr(formvalue.length-2,formvalue.length)) || !/^(((15([1-9]\d{5}|\d{1}[1-9]\d{4}|\d{2}[1-9]\d{3}|\d{3}[1-9]\d{2}|\d{4}[1-9]\d{1}|\d{5}[1-9]))|(1[6-9]\d{6}|[2-9]\d{7}))|(1[1-8]\d{7}|190{7}))$/.test(formvalue.substr(0,formvalue.length-2)))) {
						//var testint = parseInt(formvalue.substr(0,formvalue.length-2));
						//if (formvalue!="" && testint && (!/^01$/.test(formvalue.substr(formvalue.length-2,formvalue.length)) || !(testint>150000000 && testint<190000001))) {
						if (formvalue!="" && (/\D/.test(formvalue) || formvalue.length!=11)) {
							addFormatError(elem.display);
						}					
						break;
				}
			}
		}
			
		var TextSelectErr = '', RadioCheckErr = '', othererr = '';
		// resets the error message for before each required check
		function resetErrorMessage() {
			TextSelectErr = '', RadioCheckErr = '', formaterr = '', othererr = '';
			OrderError = [];
		}

		function addFormatError( str ) {	formaterr += "\t"+str+"\n"; }
		
		var validateForm = null;
		function setValidateForm(_form) { validateForm = _form; }

		// runs through specified required array and checks validity for based on field type
		function checkRequired(reqarray) {
			for (var i=0; i < reqarray.length; i++) {
				var elem = reqarray[i];
				var formelem = eval("validateForm."+elem.field[0]);
				if (!formelem) alert("validateForm."+elem.field[0]);
				switch (formelem.type || formelem[0].type) {
					case "text" : case "textarea" : case "password" :
						var done = false;
						for (var f=0; (f < elem.field.length && !done); f++) {
							formelem = eval("validateForm."+elem.field[f]);
							if (formelem.value == "") {
								if (TextSelectErr=="") OrderError[OrderError.length] = "TextSelectErr";
								TextSelectErr += "\t"+elem.display + "\n";
								done = true;
							}
						}
						break;
					case "select-one" :
						if (formelem.options[formelem.selectedIndex].value == "") {
							if (TextSelectErr=="") OrderError[OrderError.length] = "TextSelectErr";
							TextSelectErr += "\t"+elem.display + "\n";
						}
						break;
					case "radio" :
						var done = null;
						for (var r=0; (r < formelem.length && !done); r++) {
							if (formelem[r].checked) done = formelem[r].value
						}
						if (done == null) {
							if (RadioCheckErr=="") OrderError[OrderError.length] = "RadioCheckErr";
							RadioCheckErr += "\t" + elem.display + "\n";
						} else if (elem.trigger == done) checkRequired(elem.extra);
						break;
					case "checkbox" :
						var done = false;
						for (var c=0; (c < elem.field.length && !done); c++) {
							var chbxelem = eval("validateForm."+elem.field[c])
							if (chbxelem.checked) done = true;
						}
						if (!done) {
							if (RadioCheckErr=="") OrderError[OrderError.length] = "RadioCheckErr";
							RadioCheckErr += "\t" + elem.display + "\n";
						}
						break;
				}
			}
		}

		function setOtherError(errmsg) {
			othererr = errmsg;		
		}
		// builds error message from the required array and alert the user
		function validateRequired() {
			checkRequired(required);
			checkFormats();
			var builderr = '';
			for (var i=0; i < OrderError.length; i++) {
				if (OrderError[i] == "TextSelectErr") builderr += "The following fields are missing:\n"+TextSelectErr+"\n";
				else if (OrderError[i] == "RadioCheckErr") builderr += "The following questions require a selection:\n"+RadioCheckErr+"\n";
			}
			if (formaterr != "") builderr += "The following fields had format input error(s):\n"+formaterr+"\n";
			if (othererr != "") builderr += "\n"+othererr+"\n";
			if (builderr != "") {
				alert(builderr);
				return false;
			} else return true;
			
		}

//-->