function validate(form_name, req_elts, req_err, addl_checks, addl_err, silent) {
  var oForm
  var oElt
  var req_elts_arr
  var req_err_arr
  var addl_checks_arr
  var addl_err_arr
  var value
  var is_valid
  var j
  
  oForm = document.forms[form_name]
  if (!oForm) {
    if (!silent) alert("Form '" + form_name + "' not found.")
    return false
  }

  req_elts_arr = req_elts.split("|")
  req_err_arr = req_err.split("|")
  addl_checks_arr = addl_checks.split("|")
  addl_err_arr = addl_err.split("|")
    
  for (j = 0; j < req_elts_arr.length; j++) {
    if (req_elts_arr[j] != "") { 
      oElt = oForm[req_elts_arr[j]]
	   if (!oElt) {
	     if (!silent) alert("Field '" + req_elts_arr[j] + "' not found.")
	     return false
	   } 
	 
	   value = ""
	 
	   // alert(j + ": "+ req_elts_arr[j] + "\n"  + oElt.type)
	 
	   if ( (oElt.type == "text") ||  (oElt.type == "password") || (oElt.type == "textarea") ) {
	     value = oElt.value
	     if (value == "") {
	       if (!silent) alert(req_err_arr[j])
	       oElt.focus() 
	       return false
	     }
	   }
	 
	   if (oElt.type == "select-one") {
	     if ( (oElt.selectedIndex == -1) ||  (oElt.selectedIndex == 0) ) {
	       if (!silent) alert(req_err_arr[j])
	       oElt.focus() 
	       return false
	     }
	   
	     value = oElt.options[oElt.selectedIndex].value
	   }
	 
	   is_valid = true
	 
	   if (addl_checks_arr[j] == 1) {
	     // run email validation
        is_valid = is_valid_email(value)
	   	   
	   } else {
	     if (addl_checks_arr[j] == 2) {
	       // run phone number validation
	       is_valid = is_valid_phone(value)
        } else {
	       if (addl_checks_arr[j] == 3) {
		      // run zipcode validation
            is_valid = is_valid_zip_code(value)			
		    }
	     }
	   }
	 
	   if (!is_valid) {
	     if (!silent) alert(addl_err_arr[j])
	     oElt.focus()
	     return false
      }	   
    }
  }

  return true 
}

