/**
*@fileoverview In dieser Datei wird die TTIBE-Basisklasse definiert.
*Hier enthaltene Attribute und Methoden sind in den anderen Klassen ebenfalls
*verfgbar. Es wird beim Einbinden sieser Datei automatisch eine neue TTIBE-Instanz
*"IBE" erzeugt
*@author Guido Fnders, 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 verfgbar.
*@constructor
*@param {String} name Name der Instanz
*@param {Int} port Engine-Port
*@param {String} formname Name des Formulars
*/
function Interface(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 zugehrigen Formulars
  *@type String
  */
  this.formName = typeof(formName)!='undefined'?formName:"bengine";
}

Interface.prototype = {
  /**
  *bertrgt 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 in window["cacheFiles_"+this.port]){
      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/cache/"+KID+"/"+this.port+"/"+window["cacheFiles_"+this.port][i]);
    }
    
    for(var i in this.jsFiles) {
    	if ( typeof this.jsFiles[i] == "string" ) {
    		this.Include("script",this.jsFiles[i]);
    	}else {
    		
    	}
 	}
  },
  /**
  *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.");
      }
    }
  }
};
