function checkForm(f, highLight){
	var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
	var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
	var reg3str = "[0-9]";
	var reg1 = new RegExp(reg1str);
	var reg2 = new RegExp(reg2str);
	var reg3 = new RegExp(reg3str);
	var msg = "Please fill in the following fields:\n\n";
	var reqFields = "";

	//style information for valid and invalid form elements
	var defStyle = "";
	var altStyle = "formError";
	
	//array to style elements
	var labelStyle = new Array(fields.length);
	
	//itterate through each of the form fields to be validated
	for(i=0;i<fields.length;i++) {
		//for text and textarea form types perform the following validation 
		if(f[fields[i]].type == "text" || f[fields[i]].type == "textarea") {
			//if email, compare against regular expressions
			if(fields[i] == "email") {
				//retain the value of the email in a variable
				var strEmail = f[fields[i]].value;
				//checks to make sure the email address is valid and sets appropriate style.
				if (!reg1.test(strEmail) && reg2.test(strEmail)) {
					labelStyle[i] = defStyle;
				} else {
					labelStyle[i] = altStyle;
					reqFields += fieldInfo[i]+"\n"
				}
			} else { //general form fields, just looking for a length greater than 0
				if (f[fields[i]].value.length == 0) {
					labelStyle[i] = altStyle;
					reqFields += fieldInfo[i]+"\n";
				} else {
					labelStyle[i] = defStyle;
				}
			}
		}  else if (f[fields[i]].type == "select-one") { //check select boxes, again length greater than 0
			if(f[fields[i]].options[f[fields[i]].selectedIndex].value.length == 0) {
				labelStyle[i] = altStyle;
				reqFields += fieldInfo[i]+"\n";
			} else {
				labelStyle[i] = defStyle;
			}
		}
	}
	//Handle required fields and display as appropriate
	if(reqFields.length > 0) {
		//two types of display either highLight or alert
		if(highLight == 1) {
			for(var i=0;i<fields.length;i++){
				f[fields[i]].className = labelStyle[i];
			}
		}
		alert(msg+reqFields);
		return false;
	} else {
		return true;
	}
}

