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 = "";
	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);
		eval(form + "." + firstFailed + ".focus()");
		if (!submitForm) { return false; }
	} else {
		if (submitForm) {
			eval(form + ".submit()");
		} else {
			return true;
		}
	}
}

function validateObj(eleName, eleAlias, required, eleFormat) {
// 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 '\'
	this.name = eleName;
	this.alias = eleAlias;
	this.required = required;
	this.format = eleFormat;
}

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.length <= 0 && element.required) {
		return "Please fill 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);

	// get the data to vaildate
	if (domEle.type == "checkbox" || domEle.type == "radio") {
		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;
}