/**
*@fileoverview In dieser Datei werden Hilfsfunktionen für Formulare definiert
*@author Guido Fünders, fuenders@traveltainment.de
*/

/**
*Enthält Methoden für den einfacheren Umgang mit Formularen
*@constructor
*@extends TTIBE
*/
function FormBase(){
  /**
  *Füllt eine Selectbox mit den Daten eines Arrays.
  *Die Arrayelemente müssen dafür wie folgt aussehen: "label;value"
  *@param {String} selname Name der zu füllenden Selectbox
  *@param {Array} arrdata Array der die Daten enthält
  */
  this.fillSelFromArray = function(selname,arrdata){    
    var sb = document.forms[this.formname].elements[selname] || 0; 
    if(!sb || sb.type!='select-one') return;
    var sel = this.req[selname]!='undefined'?this.req[selname]:'';
    
    for(var i=0;i<arrdata.length;i++){
      var lbl = arrdata[i].split(';')[0];
      var val = arrdata[i].split(';')[1];
      sb.options[sb.options.length] = new Option(lbl,val);
      if(val==sel) sb.options[sb.options.length-1].selected=true;
    }
  };

  /**
  *Füllt eine Selectbox mit den Daten eines Objekts.
  *Die Attributnamen entsprechen den Values, Die Attributwerte den Labels
  *@param {Object} boxobject Objekt mit den zu füllenden Selectbox.
  */
  this.fillSels = function(boxobject){
    for(var boxname in boxobject){ 
      this.fillSelFromArray(boxname,boxobject[boxname]);
    }
  };

  /**
  *Füllt eine Selectbox mit den Daten eiens Objekts anhand von Bitwerten.
  *Die Attributnamen entsprechen den Values, Die Attributwerte den Labels
  *(wird z.B. bei den erweierten Zimmertypen in LMPS benutzt)
  *@param {Object} boxobject Objekt mit den zu füllenden Selectbox.
  */
  this.fillBitSels = function(boxobject){
    for(var boxname in boxobject){
      var sb = document.forms[this.formname].elements[boxname] || 0;
      if(!sb || sb.type!='select-one') continue;
      var arrdata = boxobject[boxname];
      var sel = this.req[boxname]!='undefined'?parseInt(this.req[boxname]):0;
      sel = sel<0?0:sel;
      for(var i=0;i<arrdata.length;i++){
        var lbl = arrdata[i].split(';')[0];
        var val = arrdata[i].split(';')[1];
        sb.options[sb.options.length] = new Option(lbl,val);
        if((parseInt(val,10)&sel)!=0){
            sb.options[sb.options.length-1].selected=true;
        }
      }
    }
  };

  /**
  *Setzt Radiovalues
  *@param {Array} rnames Array mit den zu Namen der Radiobuttons
  */
  this.setRadios = function(rnames){
    for(var i=0;i<rnames.length;++i){
      var rb = document.forms[this.formname].elements[rnames[i]] || 0;
      if(!rb) continue;
      var val = this.req[rnames[i]]!='undefined'?this.req[rnames[i]]:'';
      for(var j=0;j<rb.length;j++)
        if(rb[j].value==val) rb[j].checked=true;
    }
  };

  /**
  *Setzt Checkboxen
  *@param {Array} cknames Array mit den zu Namen der Checkboxen
  */
  this.setChecks = function(cknames){
    for(var i=0;i<cknames.length;++i){
      var cb = document.forms[this.formname].elements[cknames[i]] || 0;
      if(!cb) continue;
      var val = typeof(this.req[cknames[i]])!='undefined'?this.req[cknames[i]]:'';
      if(cb && cb.value==val) cb.checked=true;
    }
  };

  /**
  *Setzt Checkboxen anhand von Bitwerten (z.B. "meer" oder "zfilter" bei LMPS)
  *@param {Array} cknames Array mit den zu Namen der Checkboxen
  */
  this.setBitChecks = function(cknames){
    for(var i=0;i<cknames.length;++i){
      var cb = document.forms[this.formname].elements[cknames[i]] || 0;
      if(!cb) continue;
      var val = typeof(this.req[cknames[i]])!='undefined'?parseInt(this.req[cknames[i]],10):0;
      val = val<0?0:val;
      if(cb && (parseInt(cb.value,10)&val)!=0) cb.checked=true;
    }
  };

  /**
  *Füllt Textfelder
  *@param {Array} txtnames Array mit den Namen der zu füllenden Textfelder
  */
  this.setTexts = function(txtnames){
    for(var i=0;i<txtnames.length;++i){
      var tb = document.forms[this.formname].elements[txtnames[i]] || 0;
      if(!tb) continue;
      var val = typeof(this.req[txtnames[i]])!='undefined'?this.req[txtnames[i]]:'';
      if(tb) tb.value=val;
    }
  };

  /**
  *C(hange)Rad(io): setzt einen Radiowert (erweiterte Zimmertypen)
  *@param {INT} val Kenner
  */
  this.CRad = function(val){
    if(val==1) document.forms[this.formname].zimmer[6].checked=true;
    else document.forms[this.formname].zimmer2.selectedIndex=0;
  };

  /**
  *Füllt die Selectboxen für die Reisenden (Erwachsene + 3x Kinderalter)
  */
  this.fillReisende = function(optUsrPersLbl){
    var defPersLbl = {
      erw:["Erwachsener","Erwachsene"],  // "normal"
      erw_short:["Erw.","Erw."],         // Formular 2 / Nur Flug
      pers:["Person","Personen"],        // Fewo
      kinder:["Jah.","Jahre"]
    };
    var optPersLbl= optUsrPersLbl || defPersLbl;
    var strPers = this.Personen;
    var bform = document.forms[this.formname];
    var elems = ['alter1', 'alter2','alter3'];
    var erwSel = bform.erwachsene;
    var strErw = "25";
    var erwMax = this.req['engine']=='fewo'?8:4;
    if (typeof(bform.erwachsene) != 'undefined'){
        for(var i=1;i<=erwMax;i++){
          if(this.req['engine']=='fewo')
            var lbl = i==1?optPersLbl['pers'][0]:optPersLbl['pers'][1];
          else if(this.req['formular']=='2' || this.req['formular']=='3' ||
                  typeof(window['SucheERDEKlein'])!='undefined' ||
                  typeof(window['SucheLMPSKlein'])!='undefined')
            var lbl = i==1?optPersLbl['erw_short'][0]:optPersLbl['erw_short'][1];        
          else
            var lbl = i==1?optPersLbl['erw'][0]:optPersLbl['erw'][1];
          erwSel.options[erwSel.options.length] = new Option(i+" "+lbl,strErw);
          strErw += ";25";
        }
        erwSel.options.selectedIndex = this.AnzErwachsene-1;
    
        for(var i=0;i<elems.length;++i){
          if(bform[elems[i]]){
            bform[elems[i]].options[0] = new Option(" --- ","-1");
            bform[elems[i]].options[1] = new Option("< 2 "+optPersLbl['kinder'][0],"1");
            for(var j=2;j<=16;j++)
              bform[elems[i]].options[j] = new Option(j+" "+optPersLbl['kinder'][1],j);
            if(this.AlterKinder[i] && this.AlterKinder[i]!="-1")
              bform[elems[i]].value=this.AlterKinder[i];
          }
        }
    }
  };

  /**
  *Füllt die "Dauer"-Selectbox mit Tagen (Erde/Flug)
  */
  this.dauert = function(){
    var sb = document.getElementsByName('dauer')[0] || 0;
    if(!sb || sb.type!='select-one') return;
    sb.options[sb.options.length] = new Option("beliebig","-1");
    sb.options[sb.options.length] = new Option("1 Tag","6_1");
    for(i=2;i<=21;i++){
      sb.options[sb.options.length] = new Option(i+" Tage","6_"+i);
    }
    sb.options[sb.options.length] = new Option("> 22 Tage","13");
    try{
      if(this.req['dauer']!='' && this.req['dauer']!='-1')
        sb.value=this.req['dauer'];
    }catch(e){}
  };
}