function checkForm(form,submitForm) {
// form = string containing the fully qualified DOM reference to the form object [ i.e. 'document.email' ]
// submitForm = set to 1 if you want this function to submit the form
//              default will return true or false [ i.e. called from onSubmit="return checkForm()" ]
	var failed = "";
	var firstFailed = "";	
/* /----------------------/
	this is a somewhat ugly implementation of new functionality.
	in emailus_owners.jsp, if user clicks that they can be notified by phone, we make EveArea, EvePrefix, and EveSuffix required
	fields. if they don't want to be notified by home, we are sure to set them as not required.	-- dtw 12/7/05
   /---------------------- */
	if (typeof contingencyObjs != "undefined") {
		var callRadioBtn = eval(form + "." + contingencyObjs[0][0]);
		if (callRadioBtn[0].checked) {
			var requirePhone = 1;
		} else {
			var requirePhone = 0;
		}
		for (var i = 0; i < validateObjs.length; i++) {
			if (validateObjs[i].name == contingencyObjs[0][1] || validateObjs[i].name == contingencyObjs[0][2] || validateObjs[i].name == contingencyObjs[0][3]) { 
				validateObjs[i].required = requirePhone;
			}
		}
	}
	if (validateObjs != null) {
		for (var i = 0; i < validateObjs.length; i++) {
			if (validateObjs[i] != null) { // sanity check
				failed += validateElement(form,validateObjs[i]);
				// set the first element that failed to focus later
				if (failed != "" && firstFailed == "") { firstFailed = validateObjs[i].name; }
			}
		}
	}
	if (dependencyObjs != null) {
		for (var i = 0; i < dependencyObjs.length; i++) {
			if (dependencyObjs[i] != null) { // sanity check
				var populated = 0;
				for (var x = 0; x < dependencyObjs[i].length; x++) {
					if (getData(form,dependencyObjs[i][x].name).length > 0) {
						populated++;
					}
				}
				if (populated != 0 && populated < dependencyObjs[i].length) {
					failed += "You must answer all of these fields: ";
					for (var x = 0; x < dependencyObjs[i].length; x++) { 
						failed += dependencyObjs[i][x].alias;
						if (x < dependencyObjs[i].length - 1) { failed += ", "; } else { failed += "\n"; }
					}
				}
				// set the first element that failed to focus later
				if (failed != "" && firstFailed == "") { firstFailed = dependencyObjs[i][0].name; }
			}
		}
	}
	if (failed != "") {
		alert(failed);
		var domEle = eval(form + "." + firstFailed);
		// if the dom element's type was not found, assume it's a radio button
		if (!domEle.type) { domEle = eval(form + "." + firstFailed + "[0]"); }
		domEle.focus();
		if (!submitForm) { return false; }
	} else {
		if (submitForm) {
			eval(form + ".submit()");
		} else {
			return true;
		}
	}
}

function validateObj(eleName, eleAlias, required, eleFormat, maxLength) {
// eleName = HTML name
// eleAlias = alias to use for errors
// required = 1 -> yes, 0 -> no
// eleFormat = required format (ALPHA | NUMERIC | ALPHANUMERIC | Regular Expression ie '.+\\@.+\\.\\w+' for e-mail address)
//             because we are passing the format as a string, we have to escape the escape character '\'
// eleLength = max length
	this.name = eleName;
	this.alias = eleAlias;
	this.required = required;
	this.format = eleFormat;
	this.maxLength = maxLength;
}

function validateElement(form,element) {
	var domEle = eval(form + "." + element.name);
	var data = getData(form,element.name);
	//alert ("Validating: " + form + "." + element.name + " --- type: " + domEle.type); // TESTING!
	if ((!data || data.length <= 0) && element.required) {
		return "Please fill in the " + element.alias + " field.\n";
	}
	if (data.length > element.maxLength) {
		return "Please limit your entry to less than " + element.maxLength + " characters in the " + element.alias + " field.\n";	
	}
	if (element.format && data) {
		var regExp;
		if (element.format.toUpperCase() == "ALPHA") {
			regExp = new RegExp("^[ a-zA-Z]*$");
		} else if (element.format.toUpperCase() == "NUMERIC") {
			regExp = new RegExp("^[0-9]*$");
		} else if (element.format.toUpperCase() == "ALPHANUMERIC") {
			regExp = new RegExp("^[ a-zA-Z0-9_]*$");
		} else {
			regExp = new RegExp(element.format);
		}
		if (!regExp.test(data)) {
			return "Please enter a valid " + element.alias + ".\n";
		}
	}
	return "";
}

function getData(form,elementName) {
	var data;
	var domEle = eval(form + "." + elementName);
	// if the dom element's type was not found, assume it's a radio button
	if (!domEle.type) { domEle = eval(form + "." + elementName + "[0]"); }
	// get the data to vaildate
	if (domEle.type == "checkbox" || domEle.type == "radio") {
		// evaluate the form string into the actual form object
		form = eval(form);
		for (var i = 0; i < form.elements.length; i++) {
			if (form.elements[i].name == elementName && form.elements[i].checked) {
				data = form.elements[i].value;
			}
		}
	} else if (domEle.type.indexOf("select") != -1) {
		data = domEle[domEle.selectedIndex].value;
	} else {
		data = domEle.value;
	}
	return data;
}