//For an example look at register2_f.jsp
//
//function validate form
//1.check for "" in elements provided in the nullElements Array
//2.check email address of elements in the emailElements Array
//3.check if alpha - elements in the alphaElements Array
//4.check if numeric - elements in the numericElements Array
//5.provide an alert to the user of the invalid fields
//6.highlight elements that are invalid
//7.set the focus to the first element with an error
//
//
//currently the main function validate form will need to be
//modified for each form to provide the correct checks.


var disallowChars = "\n\r{}<>";
var extraAlpha = " \',.-#&";
var extraNumber = " ";
var extraZip = " -";
var extraPhone = " -()";

function validateForm(form){
  errorObject = new Object();
  errorObject.thisForm = form;
  errorObject.firstBadElement = new Object();
  errorObject.firstBadElementFound = false;
  errorObject.isFormValid = true;
  errorObject.errorNum = 0;
  errorObject.errorMessage = new Array();
  errorObject.errorElementName = new Array();

  clearHighLight(errorObject.thisForm);


  //all the elements in this array are checked for null or ""

  nullElements = new Array(form.firstName,
                           form.lastName,
                           form.listAddressLine1,
                           form.listCity
                          );
  checkForNulls(errorObject,nullElements);

  //all elements in this array are checked for valid email
  emailElements = new Array(form.email);
  checkEmailFormat(errorObject,emailElements,disallowChars);

  //all elements in this array are checked to be alpha
  textElements = new Array(form.firstName,
                           form.lastName,
                           form.title,
                           form.department,
                           form.organization,
                           form.listAddressLine1,
                           form.listAddressLine2,
                           form.listCity,
                           form.otherState
                          );
                       
  checkTextElements(errorObject,textElements,disallowChars);

  alphaElements = new Array(form.USZip,
                            form.otherZip
                           );
  checkAlphaElements(errorObject,alphaElements,extraZip);

  //all elements in this arry are checked to be numeric
  numericElements = new Array(form.phone,form.fax);
  checkNumericElements(errorObject,numericElements,extraPhone);

  //check phone type selection
  if(getListboxSelection(form.phoneType) == "select") {
    setError(errorObject,form.phoneType);
  }

  // check country - U.S. or other
  switch(getCheckedRadioButton(form.country)) {
    case "US":
      if (getListboxSelection(form.USState) == "select") {
        setError(errorObject,form.USState);
      }
      nullElements = new Array(form.USZip);
      checkForNulls(errorObject,nullElements);
      form.otherState.value = "";
      form.otherZip.value = "";
      form.otherCountry[0].selected = true;
      break;
    case "other":
      if (getListboxSelection(form.otherCountry) == "select") {
        setError(errorObject,form.otherCountry);
      }
      form.USState[0].selected = true;
      form.USZip.value = "";
      break;
    default:
      setError(errorObject,form.country[0]);
  }

  //check organization type
  if (getListboxSelection(form.orgTypeCd) == "select") {
      setError(errorObject,form.orgTypeCd);
  }

  //check disciplines
  var discSelected = false;
  for (var i=0; i < form.elements.length; i++) {
    var field = form.elements[i];
    if( field.type == "checkbox" &&
        field.name.indexOf("disciplineCode") != -1  && field.checked) {
      discSelected = true;
      break;
    }
  }
  if (!discSelected) {
    setError(errorObject, form.disciplineCode0);
  }

  //check max size for comments
  //if(form.comments.value.length > 500) {
   // setError(errorObject, form.comments,
    //  "The comments exceed the maximum of 500 characters.\n");
  //}

  if(errorObject.isFormValid == false){
    displayAlert(errorObject);
    highLightElements(errorObject);
    errorObject.firstBadElement.focus();
    return false;
  }else{
    // set correct country/state/zip value
    //list address
    switch(getCheckedRadioButton(form.country)){
      case "US":
        form.listCountry.value = "United States";
        form.listState.value = getListboxSelection(form.USState);
        form.listZip.value = form.USZip.value;
        break;
      case "other":
        form.listCountry.value =  getListboxSelection(form.otherCountry);
        form.listState.value = form.otherState.value;
        form.listZip.value = form.otherZip.value;
        break;
      default:
        ;
    }
    //set newsType generic parameters
    form.newsSubscrFlag.checked   ? form.genericParameter0.value = "Y" : 
                                    form.genericParameter0.value = "N";
    form.ebulletinFlag.checked    ? form.genericParameter1.value = "Y" :
                                    form.genericParameter1.value = "N";
    form.emailExecSumFlag.checked ? form.genericParameter2.value = "Y" :
                                    form.genericParameter2.value = "N";
    return true;
  }

}

function displayAlert(errorObject){
  var message = "Please correct the following errors:\n\n";
  for(var i=0;i<errorObject.errorNum;i++){
    message = message + errorObject.errorMessage[i];
  }
  alert(message);
}

function highLightElements(errorObject){
  for(var i=0;i<errorObject.errorElementName.length;i++){
    var element = errorObject.thisForm.elements[
                  errorObject.errorElementName[i]];
    element.className='hilight';
  }
}

function clearHighLight(thisForm){
  for(var i=0;i<thisForm.elements.length;i++){
    if((thisForm.elements[i].type != 'submit')&&
       (thisForm.elements[i].type != 'reset')&&
       (thisForm.elements[i].type != 'radio'))     
    {
      thisForm.elements[i].className='ebebd2';
    }
  }
}

function checkForNulls(errorObject,nullElements){
  for(var i=0;i<nullElements.length;i++){
    if(trim(nullElements[i].value) == ""){
      setError(errorObject, nullElements[i]);
    }
  }
}

function checkEmailFormat(errorObject,emailElements,disallow){
  for(var i=0;i<emailElements.length;i++){
    var element = emailElements[i];
    element.value = trim(element.value);
    var atSymbol = element.value.indexOf('@');
    var period   = element.value.lastIndexOf('.');
    var space    = element.value.indexOf(' ');
    var length   = element.value.length - 1;
    if ((atSymbol < 1)||(period <= atSymbol+1)||
        (period == length )||(space  != -1)){
      setError(errorObject, element);
    }
    else {
      checkTextElements(errorObject,emailElements,disallow);
    }
  }
}

function checkTextElements(errorObject,textElements,disallowChar){
  for(var i=0;i<textElements.length;i++){
    if(isTextc(textElements[i].value,disallowChar) == false){
      setError(errorObject, textElements[i]);
    }
  }
}

function checkAlphaElements(errorObject,alphaElements,xAlpha){
  for(var i=0;i<alphaElements.length;i++){
    if(isAlphac(alphaElements[i].value,extraAlpha) == false){
      setError(errorObject, alphaElements[i]);
    }
  }
}

function checkNumericElements(errorObject,numericElements,xNumeric){
  for(var i=0;i<numericElements.length;i++){
    if(isNumberc(numericElements[i].value, xNumeric) == false){
      setError(errorObject, numericElements[i]);
    }
  }
}

function setError(errorObject, element, errMsg){
  if (errMsg) {
    errorObject.errorMessage[errorObject.errorNum] = errMsg;
  }
  else {
    errorObject.errorMessage[errorObject.errorNum] =
      getErrorMessage(element.name);
  }
  errorObject.errorElementName[errorObject.errorNum] = element.name;
  errorObject.errorNum++;
  errorObject.isFormValid = false;
  if(errorObject.firstBadElementFound == false){
    errorObject.firstBadElement = element;
    errorObject.firstBadElementFound = true;
  }
}
