/**
*@fileoverview In dieser Datei wird die TTIBE-Basisklasse definiert.
*Hier enthaltene Attribute und Methoden sind in den anderen Klassen ebenfalls
*verfügbar. Es wird beim Einbinden sieser Datei automatisch eine neue TTIBE-Instanz
*"IBE" erzeugt
*@author Guido Fünders, fuenders@traveltainment.de
*/
function twoDigit(val){
  return parseInt(val,10)<10?"0"+parseInt(val,10):parseInt(val,10);
}

/**
*Dient als Basisklasse. Hier enthaltene Attribute und Methoden
*sind in den anderen Klassen ebenfalls verfügbar.
*@constructor
*@param {String} name Name der Instanz
*@param {Int} port Engine-Port
*@param {String} formname Name des Formulars
*/
function TTIBE(name,port,formname){
  /**
  *Name der TTIBE Instanz
  *@type String
  */
  this.name     = typeof(name)!='undefined'?name:"IBE";
  /**
  *Engine-Port
  *@type Int
  */
  this.port     = typeof(port)!='undefined'?port:654;
  /**
  *Name des zugehörigen Formulars
  *@type String
  */
  this.formname = typeof(formname)!='undefined'?formname:"bengine";
}

TTIBE.prototype = {
  /**
  *Überträgt Objektattributen eines Quellobjekts auf ein Zielobjekt
  *@param {Object} dest Zielobjekt
  *@param {Object} src Quellobjekt
  *@return Zielobjekt
  *@type Object
  */
  extend: function(dest,src){
    for(attr in src) dest[attr]=src[attr];
    return dest;
  },

  /**
  *Dynamisches Einbinden einer JavaScript/CSS-Datei
  *@param {String} tag Der Tagname des Includes ('script' oder 'link')
  *@param {String} pfad Der Pfad zu der einzubindenden Datei
  */
  include: function(tag,pfad){
    var attrs = {
      link:   {rel:"stylesheet",type:"text/css",href:pfad},
      script: {type:"text/javascript",src:pfad}
    };
    document.getElementsByTagName("head")[0].appendChild(
      this.extend(document.createElement(tag),attrs[tag])
    );
  },

  /**
  *Dynamisches Einbinden mehrer JavaScript/CSS-Dateien
  */
  includeFiles: function(){
    for(var i=0;i<window["cacheFiles_"+this.port].length;++i){
      if(this.req['nurflug']=='1' && (window["cacheFiles_"+this.port][i].search(/regionen.*/)!=-1)) continue;
      else if(this.req['engine']=='erde' && this.req['formular']=='2' && (window["cacheFiles_"+this.port][i].search(/regionen.*/)!=-1)) continue;
      this.include("script",cacheurl+"booking_pl/cache/"+KID+"/"+this.port+"/"+window["cacheFiles_"+this.port][i]);
    }
    for(var i=0;i<this.jsFiles.length;++i) this.include("script",this.jsFiles[i]);
  },

  /**
  *Übertragen von Attributen und Methoden von einer oder mehreren Klassen (Mehrfachvererbung)
  *@param {Object} Objekt mit den Klassennamen und entsprechenden Konstruktorargumenten
  */
  inject: function(obj){
    for(var ClassName in obj){
      //window[ClassName].apply(this,obj[ClassName]);
      try{
        window[ClassName].apply(this,obj[ClassName]);
      }catch(e){
        var strError = ClassName+" - type: "+typeof(window[ClassName])+"\n";
        strError += "typeof Args = "+typeof(obj[ClassName])+"\n";
        for(i=0;i<obj[ClassName].length;i++){
          strError += "arg["+i+"]="+obj[ClassName][i]+", type="+typeof(obj[ClassName][i])+"\n\n";
        }

        for(var i in e){
          if(i=='number'){
            strError += "number: "+(e[i] & 0xFFFF)+"\n";
          //  strError += "facility: "+translate_facility((e[i] & 0xFFF0000)>>16)+"\n";
          }else{
            strError += i+": "+e[i]+"\n";
          }
        }
        
        alert("Beim Laden der Seite ist ein Fehler aufgetreten ('"+ClassName+"')\n\nBitte laden Sie die Seite neu.");
      }
    }
  },

  /**
  *Schreibt für die Elemente im "hidf" Objekt entsprechende Hiddenfelder
  */
  writeHF: function(){
    for(hfname in this.hidf){
      document.write('<input type="hidden" name="'+hfname+'" value="'+this.hidf[hfname]+'">'+"\n");
    }
  }
};
