var frmBorder = 'solid 1px red';
var frmBgColor = 'yellow';	
var frmBorderOrig = 'solid 1px #cccccc';
var frmBgColorOrig = '#ffffff';
var textColorOrig = '#333333';
var textWarningColor = 'red';


function chkForm(list) {
	var errors = '';
	var fi = new Array();
	var errNull = ' is required';
	//var frmBorder = 'solid 1px red'; Currently set globally for other functions use
	//var frmBgColor = 'yellow';
	if (!list) {
		list = '1';
	}
	/*
	 List your form elements from the bottom up, this way the focus will return to the uppermost field
		
		fi[0] = new formItems('frm_name','message','type','upperVal','lowerVal','Equal','other','suffix');	

		Check types	

		1 = Email format check
		2 = Null value check (not a strict null check) and checks against Equal, can be used where a default value is specified.
		3 = IsNan, will return an error if the value is not a number.
		4 = Number of characters check, uses upper and lower vals to determine if the field length is within the expected range.
		5 = Remove default value, use Equal to store value to remove.
		6 = Must match field, use Equal to store the name of the field it is to check against.
		7 = Must be a number greater than lowerVal.
		8 = "OTHER" if equals this value (stored in other) then check against another field to see if it has content
		9 = "YES/NO" Is selected Check.
		10 = "OTHER" if suffix is checked then check against another field to see if it has content
	*/
	if (list=='1') {
		/*
			Billing address details
		*/
		fi[0] = new formItems('frm_telno','Telephone no' + errNull + '.','2','0','0','0','','');
		fi[1] = new formItems('frm_postcode1','Postcode first part' + errNull + '.','2','0','0','0','','');
		fi[2] = new formItems('frm_postcode2','Postcode second part' + errNull + '.','2','0','0','0','','');
		fi[3] = new formItems('frm_county','County' + errNull + '.','2','0','0','0','','');
		fi[4] = new formItems('frm_town','Town' + errNull + '.','2','0','0','0','','');
		fi[5] = new formItems('frm_address','Address' + errNull + '.','2','0','0','0','','');
		fi[6] = new formItems('frm_email','Email' + errNull + '.','2','0','0','0','','');
		fi[7] = new formItems('frm_email','Email address format is not correct.','1','0','0','0','','');
		fi[8] = new formItems('frm_lname','Last name' + errNull + '.','2','0','0','0','','');
		fi[9] = new formItems('frm_fname','First name' + errNull + '.','2','0','0','0','','');
		fi[10] = new formItems('frm_prefix','Salutation' + errNull + '.','2','0','0','0','','');
		fi[11] = new formItems('frm_enq_how','How you heard about us' + errNull + '.','2','0','0','0','','');
		fi[12] = new formItems('frm_customer_type_ref','Customer type' + errNull + '.','2','0','0','0','','');
	} else if (list=='2') {
		/*
			Delivery address details
		*/
		fi[0] = new formItems('frm_deliverydate','Delivery date' + errNull + '.','2','0','0','0','','');
		fi[1] = new formItems('frm_postcode1','Postcode first part' + errNull + '.','2','0','0','0','','');
		fi[2] = new formItems('frm_postcode2','Postcode second part' + errNull + '.','2','0','0','0','','');
		fi[3] = new formItems('frm_county','County' + errNull + '.','2','0','0','0','','');
		fi[4] = new formItems('frm_town','Town' + errNull + '.','2','0','0','0','','');
		fi[5] = new formItems('frm_address','Address' + errNull + '.','2','0','0','0','','');
		fi[6] = new formItems('frm_email','Email' + errNull + '.','2','0','0','0','','');
		fi[7] = new formItems('frm_email','Email address format is not correct.','1','0','0','0','','');
		fi[8] = new formItems('frm_lname','Last name' + errNull + '.','2','0','0','0','','');
		fi[9] = new formItems('frm_fname','First name' + errNull + '.','2','0','0','0','','');
		fi[10] = new formItems('frm_prefix','Salutation' + errNull + '.','2','0','0','0','','');
	} else if (list=='3') {
		/*
			Password form
		*/
		fi[0] = new formItems('frm_password','Password' + errNull + '.','2','0','0','0','','');
		fi[1] = new formItems('frm_password','Passwords do not match.','6','0','0','frm_password_confirm','','');
		fi[2] = new formItems('frm_email','Email' + errNull + '.','2','0','0','0','','');
		fi[3] = new formItems('frm_email','Email address format is not correct.','1','0','0','0','','');
	} else if (list=='4') {
		fi[0] = new formItems('confrm_telephone','Telephone' + errNull + '.','2','0','0','telephone','','');
		fi[1] = new formItems('confrm_email','Email' + errNull + '.','2','0','0','email','','');
		fi[2] = new formItems('confrm_email','Email must be of the correct format.','1','0','0','email','','');
		fi[3] = new formItems('confrm_name','Name' + errNull + '.','2','0','0','name','','');
		fi[4] = new formItems('confrm_msg','Message' + errNull + '.','2','0','0','msg','','');
		fi[5] = new formItems('confrm_enq_ref','Type' + errNull + '.','2','0','0','0','','');
	
	} else if (list=='5') {
			fi[0] = new formItems('frm_password','Passwords do not match.','6','0','0','frm_password2','','');
			fi[1] = new formItems('frm_password','Password' + errNull + '.','2','0','0','','','');
	} else if (list=='6') {
			fi[0] = new formItems('frm_email','Email' + errNull + '.','2','0','0','0','','');
			fi[1] = new formItems('frm_email','Email address format is not correct.','1','0','0','0','','');
	} else if (list=='7') {
			fi[0] = new formItems('frm_agreed','You must agree to the terms and conditions.','11','0','0','0','','');
	} else if (list=='8') {
		fi[0] = new formItems('frm_email','Email' + errNull + '.','2','0','0','0','','');
		fi[1] = new formItems('frm_email','Email address format is not correct.','1','0','0','0','','');
	}
	
	for (i=0;i<fi.length;i++) {
		var ob = $get(fi[i].name);
		if (ob) {
			ob.style.backgroundColor = frmBgColorOrig;
			if (fi[i].type!=9&&fi[i].type!=10) {							
				ob.style.border = frmBorderOrig;	
			} else {
				ob.style.border = 'solid 1px #ffffff';
			}
		}
	}	
	
	for (i=0;i<fi.length;i++) {
		var em = $get(fi[i].name);
		
		if (em!=null) {
			if (fi[i].type == '1') {
				if (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(em.value)) {
					errors = fi[i].msg + '\n' + errors;
					em.focus();
					em.style.border = frmBorder;
					em.style.backgroundColor = frmBgColor;
				}
			}
			if (fi[i].type == '2') {
				if (em.value==fi[i].Equal||em.value=='') {
					errors = fi[i].msg + '\n' + errors;
					em.focus();
					em.style.border = frmBorder;
					em.style.backgroundColor = frmBgColor;					
				}				
			}
			if (fi[i].type == '3') {
				if (isNaN(em.value)) {
					errors = fi[i].msg + '\n' + errors;
					em.focus();
					em.style.border = frmBorder;
					em.style.backgroundColor = frmBgColor;					
				}				
			}
			if (fi[i].type == '4') {
				if (em.value.toString().length<fi[i].lowerVal||em.value.toString().length>fi[i].upperVal) {
					errors = fi[i].msg + '\n' + errors;
					em.focus();
					em.style.border = frmBorder;
					em.style.backgroundColor = frmBgColor;					
				}				
			}
			if (fi[i].type == '5') {
				if (em.value==fi[i].Equal) {
					em.value = '';					
				}				
			}
			if (fi[i].type == '6') {
				var x = $get(fi[i].Equal);
				if (em.value!=x.value) {
					errors = fi[i].msg + '\n' + errors;
					em.focus();
					em.style.border = frmBorder;
					em.style.backgroundColor = frmBgColor;
					x.style.border = frmBorder;
					x.style.backgroundColor = frmBgColor;									
				}				
			}
			if (fi[i].type == '7') {
				if (isNaN(em.value)||Number(em.value)<=Number(fi[i].lowerVal)) {
					errors = fi[i].msg + '\n' + errors;
					em.focus();
					em.style.border = frmBorder;
					em.style.backgroundColor = frmBgColor;		
				}				
			}
			if (fi[i].type == '8') {
				var x = $get(fi[i].Equal);
				if (em.value==fi[i].other) {
					if (x.value==''||x.value==0) {
						errors = fi[i].msg + '\n' + errors;
						x.focus();
						x.style.border = frmBorder;
						x.style.backgroundColor = frmBgColor;
					}									
				}				
			}
			if (fi[i].type == '9') {
				var emY = $get(fi[i].name + "_Yes");
				var emN = $get(fi[i].name + "_No");
				//alert(fi[i].name);
				if (!emY.checked&&!emN.checked) {
					var lbl = fi[i].name;
					errors = fi[i].msg + '\n' + errors;
					emY.focus();
					em.style.border = frmBorder;
					em.style.backgroundColor = frmBgColor;					
				}					
			}
			if (fi[i].type == '10') {
				var x = $get(fi[i].Equal);
				var emX = $get(fi[i].name + fi[i].suffix);
				if (emX.checked) {
					if (x.value==''||x.value==0) {
						errors = fi[i].msg + '\n' + errors;
						x.focus();
						x.style.border = frmBorder;
						x.style.backgroundColor = frmBgColor;
					}									
				}				
			}
			if (fi[i].type == '11') {
				//alert(fi[i].name);
				if (!em.checked) {
					var lbl = fi[i].name;
					errors = fi[i].msg + '\n' + errors;
					em.focus();			
				}					
			}
		}
	}
	if (errors=='') {
		return true;
	} else {
		alert(errors + '\nPlease complete/ammend the listed field(s) before resubmitting the form');
		return false;
	}		
}
function formItems(n,m,t,u,l,e,o,s) {
	this.name = n; // Name of input field to be checked
	this.msg = m; // Message returned to user about the error
	this.type = t; // What is the type of check
	this.upperVal = u; // Numeric top line used for checking
	this.lowerVal = l; // Numeric bottom line used for checking
//	this.visibilityGroup = v; // Used when form elements are hidden;
	this.Equal = e; // A value used to check if the entered value matches
	this.other = o; // Other input id
	this.suffix = s; // A suffix used.
}


//alert('The validation is not complete at this point');
