<!--

/*********************************
 * validateForm, v1.0
 *    send debug ? to Scribe@LaMancha.org
 *
 * validates specified form elements for any of the following
 *    a) existence (filled out or checked or selected)
 *    b) is of a specified length
 *    c) is a valid email address
 *    d) is a number
 *
 * call it with a fake submit button
 *    <input type="button" value="submit" onClick="validateForm(this.form);">
 * pass the names of the fields that are mandatory; passing none means all are mandatory
 * if the value needs to be of a specific format, pass that format after the name after a colon
 *    e.g., validateForm(this.form,'name','gender','password:4-8','age:number','addr:email');
 *    will require that
 *       the name field is complete,
 *       a gender option is selected (say, from a radio button),
 *       the password is 4 to 8 characters in length,
 *       the age field is a number,
 *       and the addr field is an email address
 */

function validateForm(B) {

	var Length = (validateForm.arguments.length > 1) ?
		validateForm.arguments.length -1 :
		B.elements.length;
	var El  = new Object;
	var Off = 0;
	for (var ii=0; ii<Length; ii++) {
		var It = validateForm.arguments[ii +1];
		if (It) {
			El[ii]      = (It.indexOf(':') +1) ?
				B.elements[It.substring(0,It.indexOf(':'))] :
				B.elements[It];
			El[ii].test = (It.indexOf(':') +1) ?
				It.substring(It.indexOf(':') +1) :
				null;
			if (El[ii].test && parseInt(El[ii].test.charAt(0))) {
				var Test    = El[ii].test;
				El[ii].min  = parseInt(Test);
				El[ii].max  = parseInt(Test.substring(Test.indexOf("-") +1));
				El[ii].test = "range";
			}
		} else {
			if (ii && El[ii -1 -Off].name == B.elements[ii].name) Off++;
			El[ii -Off]      = B.elements[ii];
			El[ii -Off].test = null;
		}
	}

	var FormOK  = true;
	var Message = "\nThe form is not ready to submit. Please check\nthat the following required fields are filled out properly:\n\n";
	for (var ii=0; ii<Length -Off; ii++) {
		if (El[ii].type == "text" ||
			 El[ii].type == "password" ||
			 El[ii].type == "textarea") {
			if (El[ii].value) {
				if (El[ii].test == "number" &&
					 (isNaN(parseFloat(El[ii].value)) ||
					 parseFloat(El[ii].value).toString() != El[ii].value)) {
					FormOK   = false;
					Message += "\t" + El[ii].name + " (must be a number)\n";
				} else if (El[ii].test == "range" &&
					 (El[ii].value.length < El[ii].min ||
					 El[ii].value.length > El[ii].max)) {
					FormOK   = false;
					Message += "\t" + El[ii].name + " (must be between " + El[ii].min + " and " + El[ii].max + " letters long)\n";
				} else if (El[ii].test == "email" &&
					 (El[ii].value.indexOf('@') < 1 ||
					 El[ii].value.lastIndexOf('.') < El[ii].value.indexOf('@') +2 ||
					 El[ii].value.lastIndexOf('.') > El[ii].value.length -3 ||
					 El[ii].value.indexOf('.') == -1)) {
					FormOK   = false;
					Message += "\t" + El[ii].name + " (must be in the format name@company.com)\n";
				}
				else continue;
			} else {
				FormOK   = false;
				Message += "\t" + El[ii].name + "\n";
			}
		} else if (El[ii].type.indexOf('select') +1) {
			var SelectCheck = false;
			for (var xx=0; xx<El[ii].length; xx++) {
				if (El[ii].options[xx].selected &&
					 El[ii].options[xx].value) SelectCheck = true;
			}
			if (SelectCheck) continue;
			else {
				FormOK   = false;
				Message += "\t" + El[ii].name + "\n";
			}
		} else if (El[ii].type == "radio") {
			El[ii] = B.elements[El[ii].name];
			var RadioCheck = false;
			for (var xx=0; xx<El[ii].length; xx++) {
				if (El[ii][xx].checked) RadioCheck = true;
			}
			if (RadioCheck) continue;
			else {
				FormOK   = false;
				Message += "\t" + El[ii].name + "\n";
			}
		} else if (El[ii].type == "checkbox") {
			El[ii] = B.elements[El[ii].name];
			if (El[ii].checked) continue;
			else {
				FormOK   = false;
				Message += "\t" + El[ii].name + "\n";
			}
		}
	}
	
	if (FormOK) return true;
	else {
		alert(Message);
		return false;
	}

}

validateFormReady = true;

// -->

