/*
var required_fields = new Array(
	new FormField('name', 'Name', 'text'),
	new FormField('email', 'Email Address', 'text'),
	new FormField('complaint', 'Type of Issue', 'select'),
	new FormField('location', 'Location', 'text'),
);
*/

function FormField(name, desc, type, additional_params) {
	this.name = name;
	this.desc = desc;
	this.type = type;
	this.additional_params = additional_params; // multi-use

	this.isValid = function(f) {
		switch (this.type) {
			case "text" :
				return (f.elements[this.name].value != "");
				break;

			case "email" :
				var email_regex = /^([a-z0-9_-]+\.)*[a-z0-9_-]+@([a-z0-9_-]+\.)+[a-z]{2,3}$/i;
				return (email_regex.test(f.elements[this.name].value));
				break;

			case "select" :
				return (f.elements[this.name].options[f.elements[this.name].selectedIndex].value != "");
				break;

			case "number" :
				var number_regex = /^[0-9]+$/;
				return ( number_regex.test(f.elements[this.name].value) && (f.elements[this.name].value.length == this.additional_params) );
				break;

			case "confirm" :
 				return ( (f.elements[this.name].value != "") && (f.elements[this.additional_params].value == f.elements[this.name].value) );
				break;

			case "checkbox" :
				return (f.elements[this.name].checked == true);
				break;

			default : return false;
		};
	};
}


function validateForm(f) {
	var fields_with_errors = new Array();

	for (var i in required_fields) {
		if (!required_fields[i].isValid(f)) {
			fields_with_errors[fields_with_errors.length] = required_fields[i].desc;
		}
	}

	if (fields_with_errors.length > 0) {
		alert("Please make sure the following fields are complete:\n\n - " + fields_with_errors.join("\n - "));
		return false;
	} else {
		return true;
	}
}

