function sendForm(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 = "valid";
	var altStyle = "invalid";
	
	//array to style elements
	var labelStyle = new Array(fields.length);
	
	//BBT specific fix for underscore
	//for(var k=0; k < fields.length; k++) { fields[k].replace("_", ""); }
	
	//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" || f[fields[i]].type == "password") {
			//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 if(fields[i] == "emailConfirm") { //if emailConfirm box is included, verify against email
				//retain values of email and emailConfirm in a variable
				var strEmailConfirm = f[fields[i]].value;
				var strEmail = f["email"].value;
				
				//compare email against confirmEmail pass if the same
				if(strEmailConfirm == strEmail && (!reg1.test(strEmailConfirm) && reg2.test(strEmailConfirm))) {
					labelStyle[i] = defStyle;
				} else {
					labelStyle[i] = altStyle;
					reqFields += fieldInfo[i]+"\n"
				}
			} else if(fields[i] == 'password') {
				var password = f[fields[i]].value;
				var repeatPassword = f["password2"].value;
				
				if(password != repeatPassword || password.length < 1) {
					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) {
					if(f[fields[i]].type == "textarea") {
						document.getElementById(fields[i] + "_div").className = "editorInvalid";
					} else {
						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.length < 1 || 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);
		} else {
			alert(msg+reqFields);
		}
			
		return false;
	} else {
		return true;
	}
}

//check for valid numeric strings
function isNumeric(strString) {
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;

	if (strString.length == 0) return false;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
	  {
	  strChar = strString.charAt(i);
	  if (strValidChars.indexOf(strChar) == -1)
		 {
		 blnResult = false;
		 }
	  }
   return blnResult;
}
