// Version 2.0
// 8/12/2003
//
// ** requires styles.js for browser detection **
//

var required = new Array();




function getElement(formRef, elementName) {
	if (is_nav && !is_nav6up) {
		return document.forms[formRef.name].elements[elementName];
	//} else if (is_ie) {
	//	return document.all[elementName];
	} else {
		
		return document[formRef.id][elementName];
		
	}
}

function isBlank(s) {
	for(var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if((c != ' ') && (c != '\n') && (c != '\t')) return false;
	}
	return true;
}

function require(fieldName, msg) {
	if(required[fieldName]) {
		required[fieldName].isRequired = true;
		required[fieldName].msg = msg;
	} else {
		required[fieldName] = {isRequired : true, msg : msg};
	}
}


function numericField(fieldName) {
	if(required[fieldName]) {
		required[fieldName].isNumeric = true;
	} else {
		required[fieldName] = {isNumeric : true};
	}
}

function dateField(fieldName) {
	if(required[fieldName]) {
		required[fieldName].isDate = true;
	} else {
		required[fieldName] = {isDate : true};
	}
}

function timeField(fieldName) {
	if(required[fieldName]) {
		required[fieldName].isTime = true;
	} else {
		required[fieldName] = {isTime : true};
	}
}

function emailField(fieldName) {
	if(required[fieldName]) {
		required[fieldName].isEmail = true;
	} else {
		required[fieldName] = {isEmail : true};
	}
}

function fileType(fieldName, ftype) {
	if(required[fieldName]) {
		required[fieldName].ftype = ftype;
	} else {
		required[fieldName] = {ftype : ftype};
	}
}



function setParent(fieldName, parentName) {
	if(required[fieldName]) {
		required[fieldName].parent = parentName;
		required[fieldName].parentPos = 0;
		required[fieldName].parentRadio = false;
	}
}

function setParentRadio(fieldName, parentName, radioPos) {
	if(required[fieldName]) {
		required[fieldName].parent = parentName;
		required[fieldName].parentPos = radioPos;
		required[fieldName].parentRadio = true;
	}
}



function checkForValue(e, checkSelect, radioPos) {
	switch(e.type) {
		case 'text':
		case 'textarea':
		case 'file':
		case 'hidden':
			if ((e.value == null) || (e.value == "") || isBlank(e.value)) {
				return false;
			}
			break;
		case 'select-one':
			if ((e.options[e.selectedIndex].value == null) || 
					(e.options[e.selectedIndex].value == "") || 
					isBlank(e.options[e.selectedIndex].value)) {
						return false;
			}
			break;
		case 'checkbox':
			if (!e.checked) {
				return false;
			}
			break;
		default:
			var isChecked = false;
			if (e[0].type == "radio") {
				if(checkSelect) {
					if(e[parseInt(radioPos)].checked) {
						isChecked = true;
					}
				} else {
					for(var i = 0; i<e.length; i++) {
						if (e[i].checked) {
							isChecked = true;
						}
					}
				}
			}
			if (!isChecked) {
				return false;
			}
			
			break;
	}
	
	return true;
}

/**
 * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
 * http://javascript.internet.com
 */
function checkEmail(emailStr) {
   if (emailStr.length == 0) {
       return true;
   }
   var emailPat=/^(.+)@(.+)$/;
   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
   var validChars="\[^\\s" + specialChars + "\]";
   var quotedUser="(\"[^\"]*\")";
   var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
   var atom=validChars + '+';
   var word="(" + atom + "|" + quotedUser + ")";
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
   var matchArray=emailStr.match(emailPat);
   if (matchArray == null) {
       return false;
   }
   var user=matchArray[1];
   var domain=matchArray[2];
   if (user.match(userPat) == null) {
       return false;
   }
   var IPArray = domain.match(ipDomainPat);
   if (IPArray != null) {
       for (var i = 1; i <= 4; i++) {
          if (IPArray[i] > 255) {
             return false;
          }
       }
       return true;
   }
   var domainArray=domain.match(domainPat);
   if (domainArray == null) {
       return false;
   }
   var atomPat=new RegExp(atom,"g");
   var domArr=domain.match(atomPat);
   var len=domArr.length;
   if ((domArr[domArr.length-1].length < 2) ||
       (domArr[domArr.length-1].length > 3)) {
       return false;
   }
   if (len < 2) {
       return false;
   }
   return true;
}


function isValid(item, element, formRef) {
	if(item.parent) {
		var pElement = getElement(formRef, item.parent);
		if(checkForValue(pElement, true, item.parentPos)) {
			return checkForValue(element, false, 0);
		}
		return true;
	} else {
		return checkForValue(element, false, 0);
	}	
}



function verifySubmit(formRef) {
	return verify(formRef);
	//if (verify(formRef)) {
	//	formRef.submit();
	//	return false;
	//} else {
	//	return false;
	//}
}



//=====
//=== Form field verification function
//=====

function verify(formRef) {
	var msg;
	var errors = "";
	var focusElement = null;
	
	//alert("verify-- id:" + formRef.id + " name: " + formRef.name);
	
	for(var item in required) {
		
		var r = required[item];
		var e = getElement(formRef, item);
		
		if(r.isRequired) {
			if(!isValid(r, e, formRef)){
				errors += "\n - " + r.msg;
				continue;
			}
		}
		
		
		if(!(e.value == null) && !(e.value == "") && !isBlank(e.value)) {
			if (r.isNumeric) {
				var v = parseFloat(e.value);
				if (isNaN(v)) {
					errors += "\n - " + item + " must be numeric.";
				}
			}
			else if(r.isDate) {
				var dateExp = /^\s*[0-1]?\d(\/|-)[0-3]?\d(\/|-)\d{2,4}\s*$/;
				if(!dateExp.test(e.value)) {
					errors += "\n - " + item + " must be in MM/DD/YYYY or MM-DD-YYYY format.";
				}
				
			}
			else if(r.isTime) {
				var timeExp = /^\s*[0-1]?\d(:[0-5]\d)?\s*((AM)|(PM))\s*$/i
				if(!timeExp.test(e.value)) {
					errors += "\n - " + item + " must be in HH:MM AM/PM format.";
				}
			}
			else if(r.ftype) {
				var extString;
				var ftypeExp = /\.[^\.]*$/;   // regular expression used to split the filename string
				extString = e.value.match(ftypeExp);			 // grab the extension
				if(r.ftype != extString) {
					errors += "\n - File must be type: " + r.ftype;
				}
			} else if(r.isEmail) {
				if(!checkEmail(e.value)) {
					errors += "\n - " + item + " must be a valid email address.";
				}
			}
		}
		if (errors != "") {
			if (focusElement == null) {
				focusElement = e;
			}
		}	
	}
		
		//errors += "\n end of errors";
	
	
	if (!errors) return true;
	else {
		msg = "The form was cannot be submitted without the following\n";
		msg += "changes. Please correct these and re-submit.\n";
		
		msg += errors;
		
		alert(msg);
		e.focus();
		return false;
	}
}
