function IsEmpty(obj) {
  if (! obj.value || obj.value == '') {
    return true;
  }
  return false;
}

function isValidEmail(strEmail){
  var validRegExp = /(^[^@]+@[^@]+\.[a-z]{2,}$)|(^$)/i;
  // search email text for regular exp matches
  return (strEmail.search(validRegExp) != -1);
}

function isValidPhoneNumber(strPhone){
  var validRegExp = /(^([2-9][0-9]{2}-?){1,2}[0-9]{4}(X[0-9]{2,})?$)|(^$)/i;
  // search phone number text for regular exp matches
  return (strPhone.search(validRegExp) != -1);
}

function formatPhoneNumber(strPhone){
  var str = strPhone.value;
  str = str.replace(/^([2-9][0-9]{2})([^-])/i, "$1-$2");
  str = str.replace(/^([2-9][0-9]{2})-([2-9][0-9]{2})([0-9]{4})/i, "$1-$2-$3");
  strPhone.value = str;
}

function isValidZipCode(strZip){
  var validRegExp = /(^[0-9]{5}(-[0-9]{4})?$)|(^$)/i;
  // search phone number text for regular exp matches
  return (strZip.search(validRegExp) != -1);
}

function isObjectSet(obj){
  var j, set = false;
  if (! obj.type && obj.length) {
	for (j=0; j < obj.length; j++) {
	  set |= isObjectSet(obj[j]);
    }
  } else if (obj.type =='text' || obj.type == 'select-one') {
    set = ! IsEmpty(obj);
  } else if (obj.type == 'checkbox' || obj.type == 'radio') {
    set = obj.checked;
  }
  return set;
}

function processForm(formvar){
  var error_list, missing_obj;
  var oname, i, obj, rlist;
  
  if (formvar.required == null) return true;
  rlist = formvar.required.value.split(",");
  missing_obj = null;
  error_list = '';
  for (i=0; i < rlist.length; i++) {
    if (! isObjectSet(obj=formvar[rlist[i]])) {
	  if (obj.title) {
        error_list += '     ' + obj.title + '\n';
	  } else {
        error_list += '     ' + rlist[i] + '\n';
	  }
      if (! missing_obj) {
	    if (obj.name) missing_obj = obj;
		else missing_obj = obj[0];
	  }
	}
  }
  if (error_list) {
    alert('The following required fields are empty\n' + error_list + 'Please enter valid values');
	if (missing_obj) missing_obj.focus();
    return false;
  }

  for (i=0; i < formvar.elements.length; i++) {
    obj = formvar.elements[i];
    if (obj.title) {
	  oname = obj.title;
	} else {
	  oname = obj.name;
	}
	if (obj.id == 'isPhoneNumber') {
	  if (! isValidPhoneNumber(obj.value)) {
        alert('The phone number in ' + oname + ' is not valid\n  >' + obj.value + '<\nPlease enter a valid phone number of the form\n  nnn-nnnn or nnn-nnn-nnnn\nYou may include an extension at the end of the phone number of the form\n  Xnnn\nPhone numbers cannot start with a 0 or 1');
	    obj.focus();
        return false;
	  } else if (obj.value) {
        formatPhoneNumber(obj);
	  }
	} else if (obj.id == 'isEMail') {
      if (! isValidEmail(obj.value)) {
        alert('The email address in ' + oname + ' is not valid\n  >' + obj.value + '<\nPlease enter valid address');
    	obj.focus();
        return false;
      }
	} else if (obj.id == 'isZipCode') {
      if (! isValidZipCode(obj.value)) {
        alert('The zipcode in ' + oname + ' is not valid\n  >' + obj.value + '<\nPlease enter valid zip code');
    	obj.focus();
        return false;
      }
	}
  }

  if (formvar.email && formvar.Email) {
    if (formvar.email.value != formvar.Email.value) {
      alert('The EMail address and confirmation do not match\n  >' + formvar.email.value + '<\n  >' 
	        + formvar.Email.value + '<\nPlease correct');
      formvar.email.focus();
      return false;
    }
  }
  return true;
}
