// create ladwp object to hold all children objects;
var ladwp = ladwp || null;
if(ladwp == null) ladwp = new Object;

Forms = function(){
  this.ladwp = ladwp;
}

Forms.prototype.reset = function(f){
     f.reset();

    var l; // number of elements
    var o; // number of options if elements is select
    var c; // count of elements.
    var i; // count of options.


    // Have to traverse select fields that can be selected by default.
    l = f.elements.length;


    for(c = 0; c < l; c++){
        if(f.elements[ c ].type == "select-multiple" || f.elements[ c ].type == "select"){
            o = f.elements[ c ].options.length;
            for(i = 0; i < o; i++){
                f.elements[ c ].options[ i ].selected = ""; 
            }
        }
    }
}

Forms.prototype.copySAData = function(f,str,n){
    var line1  = eval("f." + str + "Line1");
    var line2  = eval("f." + str + "Line2");
    var apt    = eval("f." + str + "Apt");
    var city   = eval("f." + str + "City");
    var state  = eval("f." + str + "State");
    var zip    = eval("f." + str + "Zip"); 
    var zipExt = eval("f." + str + "ZipExt");
    line1.value=f.SALine1.value,line2.value=f.SALine2.value,city.value=f.SACity.value,apt.value=f.SAApt.value;
    state.value=f.SAState.value,zip.value=f.SAZip.value,zipExt.value=f.SAZipExt.value;

    if(arguments.length == 3) return n.focus();
}

Forms.prototype.copyRegistrationData = function(f){
    var line1  = eval("f." + "attendeeLastName1");
    var line2  = eval("f." + "attendeeFirstName1");
    var line3  = eval("f." + "attendeeEmail1");

    line1.value=f.lastname.value;
    line2.value=f.firstname.value;
    line3.value=f.youremail2.value;

}

Forms.prototype.clearRegistrationData = function(f){
    var line1  = eval("f." + "attendeeLastName1");
    var line2  = eval("f." + "attendeeFirstName1");
    var line3  = eval("f." + "attendeeEmail1");

    line1.value="";
    line2.value="";
    line3.value="";
}




Forms.prototype.forwardField = function(el,n){
  if(el.value.length == el.maxlength) n.focus();
}

Forms.prototype.startField = function(el,len){
  el.maxlength = len;
  if(el.value=="MM" || el.value=="DD" || el.value=="YYYY" || el.value=="XX:XX") el.value="";
}


Forms.prototype.stripInputInvalidFloat = function(el,n){
  // Checks if individual chars are in float class
  // Then checks if entire string is a float. 
  // If not strip last char because this test is done on char at a time unless NS less then netscape 5
  // then strip entire str.
  
  // Check and strip individual chars;
  var tempStr = this.ladwp.global.stripUnmatchingChars(this.ladwp.global.charClassFloat,el.value);

  if(tempStr == el.value){
    // Check entire string if last added char is valid against float char class;
    tempStr = "|" + tempStr + "|"
    if(!this.ladwp.global.regExFloat.test(tempStr)) {
        tempStr = tempStr.substr(1,tempStr.length-3);
    } else tempStr = tempStr.substr(1,tempStr.length-2);
  }
  
  if(tempStr != el.value){
    el.value = tempStr; // Only changes el.value if the value changed.
    return el.focus();
  } 
  
  if(el.value.length == el.maxLength && arguments.length == 3  && (!window.event || window.event.type != "blur")){
    return n.focus();
  }
  
}


Forms.prototype.stripInputInvalidChars = function(pattern,el,n){
  // This is used on imput fields instead of global.stripUnmatchingChars
  // so that no change is made to value of the input field if it isn't necessary
  // and to forward to next input field if desired. 
  
  var tempStr = this.ladwp.global.stripUnmatchingChars(pattern,el.value);

  if(tempStr != el.value){
    el.value = tempStr; // Only changes el.value if the value changed.
    return el.focus();
  } 

  if(arguments.length == 3 && el.value.length == el.maxLength && (!window.event || window.event.type != "blur")){
      // is ie and already leaving field.
      // forwarding doesn't work in netscape 4.7 anyway
      // so no need for test.
      return n.focus();
  }
}

Forms.prototype.validateInputNumericMonth = function(el,n){
  var months = new Array(1,2,3,4,5,6,7,8,9,10,11,12);
  var m;
  if(el.value.length > 0) m = new Number(el.value);
  this.stripInputInvalidChars(this.ladwp.global.charClassInt,el);

  if(el.value.length == el.maxLength){

    if(!this.ladwp.global.arrayContains(months,m)){
      el.value = "";
      return el.focus();
    }else{
      if(arguments.length == 2  && (!window.event || window.event.type != "blur")){
        return n.focus();
      }
    }
  }
}

Forms.prototype.validateInputNumericDay = function(dField,mField,n){
  if(mField.value == ""){ // If nothing entered into Month enter now.
    dField.value = "";
    return mField.focus();
  }
  
  this.stripInputInvalidChars(this.ladwp.global.charClassInt,dField);
  
  if(dField.value.length == dField.maxLength){
    var days = new Array();
    days["1"]=31,days["2"]=29,days["3"]=31,days["4"]=30,days["5"]=31,days["6"]=30;
    days["7"]=31,days["8"]=31,days["9"]=30,days["10"]=31,days["11"]=30,days["12"]=31;

    if(dField.value < 1 || dField.value > days[parseInt(mField.value)]){
      dField.value="";
      return dField.focus();
    }
  
    if(arguments.length == 3  && (!window.event || window.event.type != "blur")){
      return n.focus();
    }
  }
}

Forms.prototype.validateInputYear = function(el,n){
  this.stripInputInvalidChars(this.ladwp.global.charClassInt,el);
  
  if(el.value.length == el.maxLength){
    var val = new Number(el.value);

    if(val < this.ladwp.global.currentYear){
      el.value = "";
      return el.focus();      
    }else if(arguments.length == 2  && (!window.event || window.event.type != "blur")){
      return n.focus();
    }
  }
}

Forms.prototype.validateInputPastYear = function(el,n){
  this.stripInputInvalidChars(this.ladwp.global.charClassInt,el);
  
  if(el.value.length == el.maxLength){
    var val = new Number(el.value);

    if(val > this.ladwp.global.currentYear){
      el.value = "";
      return el.focus();      
    }else if(arguments.length == 2  && (!window.event || window.event.type != "blur")){
      return n.focus();
    }
  }
}

ladwp.forms = new Forms();
