function validate_form(form_id,form_action,back_color,err_back_color)
{
	/* ----- FORM VALIDATION FUNCTION -----
	CALL FUNCTION WITH:
	 - form_id: ID of form
	 - form_action: Action of form on submit (e.g. submit.php)
	 - back_color: Normal background color of form fields
	 - err_back_color: Color to change background of field to on validation error
	*/

	// DECLARE VARIABLE FOR STORING ERROR MESSAGE
	var validate_error = "";

	// DECLARE STANDARD ERROR MESSAGES
	var email_err_msg = "Please enter a valid email address";
	var numonly_err_msg = "This field can only contain numbers";
	var cost_err_msg = "Please enter a valid cost";
	
	// DECLARE REGULAR EXPRESSIONS
	var regexp_numonly=/[^0-9]/gi;

	// DECLARE ARRAYS TO STORE FIELDS TO VALIDATE
	var required_fields=new Array();
	var required_errors=new Array();
	var email_fields=new Array();
	var cost_fields=new Array();
	var numonly_fields=new Array();       
	var required_radios=new Array();
	var required_radio_errors=new Array();

	// SET VALIDATION FIELDS BASED ON FORM_ID - NEW CASE FOR EACH FORM
	switch(form_id){
		case "frmFormID":
			break;
	}
	
	// RESET FIELD BACKGROUNDS
	for (i=0;i<required_fields.length;i++){
		document.getElementById(required_fields[i]).style.background = back_color;}
	for (i=0;i<email_fields.length;i++){
		document.getElementById(email_fields[i]).style.background = back_color;}
	for (i=0;i<numonly_fields.length;i++){
		document.getElementById(numonly_fields[i]).style.background = back_color;}
	for (i=0;i<cost_fields.length;i++){
		document.getElementById(cost_fields[i]).style.background = back_color;}	
	
	// WHEN VALIDATING FIELDS, IT CHECKS IF IT HAS A VALUE BEFORE SENDING AN ERROR, AS IT MAY NOT BE A REQUIRED FIELD
	// VALIDATION IS ORDERED SO THAT REQUIRED FIELD ERRORS ARE DISPLAYED FIRST
	// VALIDATION CHECKS WHETHER FIELD IS ENABLED - THAT WAY REQUIRED FIELDS THAT ARE DISABLED WILL NOT BE VALIDATED AND CAN BE LEFT EMPTY
	
	var some_checked = 0;
	for (i=0;i<required_radios.length;i++){
		radio_len = eval("document." + form_id + "." + required_radios[i] + ".length");
		for (i = 0; i<radio_len; i++){
			if (eval("document." + form_id + "." + required_radios[i] + "["+ i +"].checked")){
				some_checked = 1;
			}
		}
		if (some_checked == 0){
			validate_error = required_radio_errors[i];			
			break;
		}
		some_checked = 0;
	}

	// VALIDATE COST FIELDS
	for (i=0;i<cost_fields.length;i++){
		if (document.getElementById(cost_fields[i]).disabled==false && document.getElementById(cost_fields[i]).value!="" && !validate_cost(cost_fields[i])){
			document.getElementById(cost_fields[i]).style.background=err_back_color;
			document.getElementById(cost_fields[i]).focus();
			validate_error=cost_err_msg;
			break;
		}
	}
	
	// VALIDATE NUMBER ONLY FIELDS
	for (i=0;i<numonly_fields.length;i++){
		if (document.getElementById(numonly_fields[i]).disabled==false && document.getElementById(numonly_fields[i]).value!="" && document.getElementById(numonly_fields[i]).value.match(regexp_numonly)){
			document.getElementById(numonly_fields[i]).style.background=err_back_color;
			document.getElementById(numonly_fields[i]).focus();
			validate_error=numonly_err_msg;
			break;
		}
	}
	
	// VALIDATE EMAIL FIELDS
	for (i=0;i<email_fields.length;i++){
		if (document.getElementById(email_fields[i]).disabled==false && document.getElementById(email_fields[i]).value!="" && !validate_email(email_fields[i])){
			document.getElementById(email_fields[i]).style.background=err_back_color;
			document.getElementById(email_fields[i]).focus();
			validate_error=email_err_msg;
			break;
		}
	}
	
	// VALIDATE REQUIRED FIELDS
	for (i=0;i<required_fields.length;i++){
		if (document.getElementById(required_fields[i]).disabled==false && document.getElementById(required_fields[i]).value==""){
			document.getElementById(required_fields[i]).style.background=err_back_color;
			document.getElementById(required_fields[i]).focus();
			validate_error=required_errors[i];
			break;
		}
	}

	// IF A VALIDATION ERROR HAS BEEN GENERATED, DISPLAY TO THE USER, OTHERWISE, SUBMIT THE FORM
	if (validate_error!=""){
		alert (validate_error);
	}
	else{
		document.getElementById(form_id).action = form_action;
		document.getElementById(form_id).submit();
	}
}

function validate_email(field)
{
	apos=document.getElementById(field).value.indexOf("@");
	dotpos=document.getElementById(field).value.lastIndexOf(".");
	if (apos<1||dotpos-apos<2){
		return false;}
	else{
		return true;
	}
}

function validate_cost(field)
{
	firstdotpos=document.getElementById(field).value.indexOf(".");
	seconddotpos=document.getElementById(field).value.lastIndexOf(".");
	if (firstdotpos != seconddotpos)  //More than one dot
		return false;
	if (firstdotpos==(document.getElementById(field).value.length-1))  //Dot is last character
		return false;
	if (firstdotpos==0) // Dot is first character
		return false;
	if (firstdotpos==-1)  //Dot is not present
		return false;
	if (document.getElementById(field).value.length-firstdotpos != 3)  //There are not two characters after dot
		return false;
	return true;
}
