function validate_form(form_id,form_action,back_color,err_back_color,dont_submit)
{
	/* ----- 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 only digits for a credit limit (i.e. 250 with no commas or decimals etc)";
	
	// DECLARE REGULAR EXPRESSIONS
	var regexp_numonly=/[^0-9]/gi;
	//var regexp_cost=/^([0-9])+(\.[0-9]{1,2})?$/;

	// 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 "frmContact":
			required_fields[0] = "fmName";
			required_fields[1] = "fmEmail";
			required_fields[2] = "fmMessage";
			required_errors[0] = "Please enter a contact name";
			required_errors[1] = "Please enter an email address";
			required_errors[2] = "Please enter a message";
			email_fields[0] = "fmEmail";
			break;
		case "frmLogin":
			required_fields[0] = "fmUsername";
			required_fields[1] = "fmPassword";
			required_errors[0] = "Please enter your username";
			required_errors[1] = "Please enter your password";
			break;
		case "frmForgot":
			required_fields[0] = "fmEmail";
			required_errors[0] = "Please enter an email address";
			email_fields[0] = "fmEmail";
			break;
		case "frmRegister_ind":
			required_fields[0] = "fmFirstName";
			required_fields[1] = "fmLastName";
			required_fields[2] = "fmAddress1";
			required_fields[3] = "fmTown";
			required_fields[4] = "fmCounty";
			required_fields[5] = "fmPostcode";
			required_fields[6] = "fmCountry";
			required_fields[7] = "fmTelephone";
			required_fields[8] = "fmEmail";
			required_fields[9] = "fmConfirmEmail";
			required_fields[10] = "fmUsername";
			required_fields[11] = "fmPassword";
			required_fields[12] = "fmConfirmPassword";
			required_errors[0] = "Please enter a first name";
			required_errors[1] = "Please enter a last name";
			required_errors[2] = "Please enter an address";
			required_errors[3] = "Please enter a town";
			required_errors[4] = "Please enter a county";
			required_errors[5] = "Please enter a postcode";
			required_errors[6] = "Please enter a country";
			required_errors[7] = "Please enter a telephone number";
			required_errors[8] = "Please enter an email address";
			required_errors[9] = "Please confirm your email address";
			required_errors[10] = "Please enter a username";
			required_errors[11] = "Please enter a password";
			required_errors[12] = "Please confirm your password";
			email_fields[0] = "fmEmail";
			email_fields[1] = "fmConfirmEmail";
			break;
		case "frmRegister_comp":
			required_fields[0] = "fmFirstName";
			required_fields[1] = "fmLastName";
			required_fields[2] = "fmAddress1";
			required_fields[3] = "fmTown";
			required_fields[4] = "fmCounty";
			required_fields[5] = "fmPostcode";
			required_fields[6] = "fmCountry";
			required_fields[7] = "fmTelephone";
			required_fields[8] = "fmCompany";
			required_fields[9] = "fmPosition";
			required_fields[10] = "fmBusiness";
			required_fields[11] = "fmCompanyRegNum";
			required_fields[12] = "fmCompanyVATNum";
			required_fields[13] = "fmCredit";
			required_fields[14] = "fmEmail";
			required_fields[15] = "fmConfirmEmail";
			required_fields[16] = "fmUsername";
			required_fields[17] = "fmPassword";
			required_fields[18] = "fmConfirmPassword";
			required_errors[0] = "Please enter a first name";
			required_errors[1] = "Please enter a last name";
			required_errors[2] = "Please enter an address";
			required_errors[3] = "Please enter a town";
			required_errors[4] = "Please enter a county";
			required_errors[5] = "Please enter a postcode";
			required_errors[6] = "Please enter a country";
			required_errors[7] = "Please enter a telephone number";
			required_errors[8] = "Please enter a company name";
			required_errors[9] = "Please enter your position";
			required_errors[10] = "Please enter a business type";
			required_errors[11] = "Please enter a company registration number, or put N/A if sole trader and not applicable";
			required_errors[12] = "Please enter a VAT (tax) number, or put N/A if sole trader and not applicable";
			required_errors[13] = "Please enter a desired amount of credit to bid with";
			required_errors[14] = "Please enter an email address";
			required_errors[15] = "Please confirm your email address";
			required_errors[16] = "Please enter a username";
			required_errors[17] = "Please enter a password";
			required_errors[18] = "Please confirm your password";
			email_fields[0] = "fmEmail";
			email_fields[1] = "fmConfirmEmail";
			cost_fields[0] = "fmCredit";
			break;
		case "frmChangePassword":
			required_fields[0] = "fmPassword";
			required_fields[1] = "fmPassword2";
			required_errors[0] = "Please enter a new password";
			required_errors[1] = "Please repeat your new password";
			break;
		case "frmInfoEdit_ind":
			required_fields[0] = "fmFirstName";
			required_fields[1] = "fmLastName";
			required_fields[2] = "fmAddress1";
			required_fields[3] = "fmTown";
			required_fields[4] = "fmCounty";
			required_fields[5] = "fmPostcode";
			required_fields[6] = "fmCountry";
			required_fields[7] = "fmTelephone";
			required_fields[8] = "fmEmail";
			required_fields[9] = "fmConfirmEmail";
			required_errors[0] = "Please enter a first name";
			required_errors[1] = "Please enter a last name";
			required_errors[2] = "Please enter an address";
			required_errors[3] = "Please enter a town";
			required_errors[4] = "Please enter a county";
			required_errors[5] = "Please enter a postcode";
			required_errors[6] = "Please enter a country";
			required_errors[7] = "Please enter a telephone number";
			required_errors[8] = "Please enter an email address";
			required_errors[9] = "Please confirm your email address";
			email_fields[0] = "fmEmail";
			email_fields[1] = "fmConfirmEmail";
			break;
		case "frmInfoEdit_comp":
			required_fields[0] = "fmFirstName";
			required_fields[1] = "fmLastName";
			required_fields[2] = "fmAddress1";
			required_fields[3] = "fmTown";
			required_fields[4] = "fmCounty";
			required_fields[5] = "fmPostcode";
			required_fields[6] = "fmCountry";
			required_fields[7] = "fmTelephone";
			required_fields[8] = "fmCompany";
			required_fields[9] = "fmPosition";
			required_fields[10] = "fmBusiness";
			required_fields[11] = "fmCompanyRegNum";
			required_fields[12] = "fmCompanyVATNum";
			required_fields[13] = "fmEmail";
			required_fields[14] = "fmConfirmEmail";
			required_errors[0] = "Please enter a first name";
			required_errors[1] = "Please enter a last name";
			required_errors[2] = "Please enter an address";
			required_errors[3] = "Please enter a town";
			required_errors[4] = "Please enter a county";
			required_errors[5] = "Please enter a postcode";
			required_errors[6] = "Please enter a country";
			required_errors[7] = "Please enter a telephone number";
			required_errors[8] = "Please enter a company name";
			required_errors[9] = "Please enter your position";
			required_errors[10] = "Please enter a business type";
			required_errors[11] = "Please enter a company registration number";
			required_errors[12] = "Please enter a company VAT number";
			required_errors[13] = "Please enter an email address";
			required_errors[14] = "Please confirm your email address";
			email_fields[0] = "fmEmail";
			email_fields[1] = "fmConfirmEmail";
			break;
		case "frmControl":
			required_fields[0] = "fmControl_93";
			required_fields[1] = "fmControl_94";
			required_fields[2] = "fmControl_26";
			required_fields[3] = "fmControl_27";
			required_fields[4] = "fmControl_23";
			required_fields[5] = "fmControl_24";
			required_fields[6] = "fmControl_90";
			required_fields[7] = "fmControl_91";
			required_fields[8] = "fmControl_1";
			required_fields[9] = "fmControl_95";
			required_fields[10] = "fmControl_97";
			required_fields[11] = "fmControl_99";
			required_errors[0] = "Please enter an admin username";
			required_errors[1] = "Please enter an admin password";
			required_errors[2] = "Please enter a lot extend threshold";
			required_errors[3] = "Please enter a lot extend value";
			required_errors[4] = "Please enter a listings refresh value";
			required_errors[5] = "Please enter a lot details short refresh value";
			required_errors[6] = "Please enter a lot details longs refresh value";
			required_errors[7] = "Please enter a lot details refresh threshold";
			required_errors[8] = "Please enter an initial credit amount";
			required_errors[9] = "Please enter a user update details value";
			required_errors[10] = "Please enter an auction extra extend value";
			required_errors[11] = "Please enter a lot extra extend value";
			numonly_fields[0] = "fmControl_26";
			numonly_fields[1] = "fmControl_27";
			numonly_fields[2] = "fmControl_23";
			numonly_fields[3] = "fmControl_24";
			numonly_fields[4] = "fmControl_90";
			numonly_fields[5] = "fmControl_91";
			numonly_fields[6] = "fmControl_97";
			numonly_fields[7] = "fmControl_99";
			break;
		case "frmRequest":
			required_fields[0] = "fmName";
			required_errors[0] = "Please enter a contact name";
			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);
		return false;
	}
	else{
		if (form_id.indexOf("frmRegister") == -1 && form_id.indexOf("frmInfoEdit") == -1){
			document.getElementById(form_id).action = form_action;
		}
		if (dont_submit === undefined){
			document.getElementById(form_id).submit();
		}
		else{
			return true;
		}
	}
}

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)
{
	/*
	if (document.getElementById(field).value.match(regexp_cost)){
		return true;
	}
	else{
		return false;
	}
	*/
	
	var regexp_numonly=/[^0-9]/gi;
	
	if (!document.getElementById(field).value.match(regexp_numonly)){
		return true;
	}
	
	/*
	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;
	*/

}
