// e-mail validation
function validEmail(sEmail) {
	var invalidChars = " /:,;";
	if (sEmail == "") {
		return false;
	}
	for (i=0; i<invalidChars.length; i++) {
		var badChar = invalidChars.charAt(i);
		if (sEmail.indexOf(badChar,0) != -1) {
			return false;
		}
	}
	var atPos = sEmail.indexOf("@",1)
	if (atPos == -1) {
		return false;
	}
	if (sEmail.indexOf("@",atPos+1) != -1) {
		return false;
	}
	var periodPos = sEmail.indexOf(".",atPos)
	if (periodPos == -1) {
		return false;
	}
	if (periodPos+3 > sEmail.length) {
		return false;
	}
	return true;
}

//	use the isNum function to check if value submitted is a number
function isNum(number) {
	for (var i=0; i<number.length; i++) {
		if (number.charAt(i) < "0") {
			return false;
		} 
		if (number.charAt(i) > "9") {
			return false;
		}
	}
	return true;
}	 


/* each form field has these properties:
	required - true or false
	type -	string (s),
			boolean (b),
			integer (i),
			floating point (f),
			object (o),
			array (a)
	validation - what function to validate the form field against
*/

// Create an array to hold the objects	
var aFields = new Array();

// object constructor for the form field objects	
function formField( required, type, validation, name ) {
	this.required = required;
	this.type = type;
	this.validation = validation;
	this.name = name;
	aFields.push(this);
}

// validate form function
function validateForm(form) {
	// Text message listing empty fields
	var fieldList = "";
	// boolean flag for errors
	var hasErrors = false;
	// Text for errors
	var errorText = "";
	// compare form elements to the array of field requirements
	for (var i=0; i<aFields.length; ++i) {
		if ((aFields[i].required == true && form.elements[i].value == "") || (aFields[i].required == true && form.elements[i].name.charAt(0) == "b" && form.elements[i].checked == false)) {
			hasErrors = true;
			fieldList = fieldList + aFields[i].name + "\n";
		}
		// if validation "email" test for valid e-mail
		if (aFields[i].validation == "email") {
			if (! validEmail(form.elements[i].value)) {
				errorText = errorText + "E-mail Address invalid\n";
			}
		}
		// if type is "i" (integer), verify as number
		if (aFields[i].type =="i" && form.elements[i].name.charAt(0) == "i" && aFields[i].required == true) {
			if(! isNum(form.elements[i].value)) {
				errorText = errorText + aFields[i].name + " not a number\n";
			}
		}


		// test for occurance of two password type form fields in a row
		// if found, ensure that they match
		if (form.elements[i].type == "password" && form.elements[i+1].type == "password") {
			if (form.elements[i].value !== form.elements[i+1].value) {
				errorText = errorText + aFields[i].name + " does not match " + aFields[i+1].name;
			}
		}
	}
	if (hasErrors == true) {
		alert ("Required fields are empty!:\n\n" + fieldList + "\nOther Errors:\n\n" + errorText);
		return false;
	}
	else {
		return true;
	}
}

