/**
*@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.");
      }
    }
  }
};

var TTREGS_654=["Mallorca, Ibiza, Menorca|10000|10000|10000",
"Balearen|10000|10000|10000",
"Ibiza|123|10000|32",
"Menorca|214|10000|630",
"Mallorca|205|10000|35",
"Formentera|93|10000|627",
"Kanaren|10001|10001|10001",
"Gran Canaria|106|10001|345",
"Teneriffa|351|10001|56",
"La Gomera|181|10001|50",
"Graciosa|105|10001|670",
"Lanzarote|185|10001|676",
"Fuerteventura|96|10001|832",
"La Palma|182|10001|675",
"Portugal|10002|10002|10002",
"Algarve|12|10002|637",
"Costa Verde|68|10002|494",
"Porto|281|10002|467",
"Costa do Estoril|65|10002|695",
"Costa de Prata|63|10002|457",
"Madeira|201|10002|639",
"Festland|89|10002|338",
"Costa da Caparica|61|10002|636",
"Lissabon & Umgebung|194|10002|674",
"Alentejo|11|10002|339",
"Azoren|25|10002|664",
"Spanisches Festland|10003|10003|10003",
"Costa de la Luz|62|10003|61",
"Zentral Spanien|388|10003|793",
"Costa Azahar|58|10003|2014",
"Costa Blanca|59|10003|64",
"Nordspanien - AtlantikkÃ¼ste|98|10003|505",
"Costa Dorada|66|10003|2054",
"Barcelona & Umgebung|32|10003|2068",
"Golf von Almeria|104|10003|63",
"Costa del Sol|64|10003|62",
"Costa Brava|60|10003|2013",
"Madrid & Umgebung|202|10003|794",
"TÃ¼rkei|10004|10004|10004",
"TÃ¼rkei Inland|126|10004|526",
"Istanbul & Umgebung|150|10004|373",
"Angebote rund um Istanbul|551|10004|2521",
"Dalaman - Fethiye - Oeludeniz|70|10004|646",
"Bodrum|112|10004|648",
"Side & Alanya|324|10004|643",
"Marmaris & Icmeler|207|10004|647",
"Kemer & Beldibi|168|10004|644",
"Antalya & Belek|17|10004|434",
"weitere Angebote TÃ¼rkei|414|10004|2511",
"Cesme & Izmir|53|10004|652",
"Mersin - Adana - Antakya|689|10004|542",
"Kusadasi & Didyma|178|10004|651",
"Griechische Inseln|10005|10005|10005",
"Korfu|172|10005|6",
"Skiathos & Skopelos|331|10005|13",
"Hydra, Spetses|122|10005|535",
"weitere Angebote Griechische Inseln|415|10005|2516",
"Syros|329|10005|390",
"Chios|56|10005|527",
"Paros|269|10005|392",
"Zakynthos|387|10005|14",
"Santorin|310|10005|12",
"Samos|308|10005|11",
"Ios|145|10005|552",
"Rhodos|295|10005|655",
"Mykonos|228|10005|9",
"Naxos|230|10005|393",
"Aegina|5|10005|558",
"EubÃ¶a (Evia)|672|10005|383",
"Lesbos|189|10005|8",
"Poros|280|10005|546",
"Leros|188|10005|402",
"Lefkas|187|10005|395",
"Patmos|270|10005|401",
"Kalymnos|161|10005|403",
"Karpathos|164|10005|15",
"Kefalonia|167|10005|396",
"Alonissos|14|10005|387",
"Symi|347|10005|404",
"Amorgos|15|10005|549",
"Tinos|362|10005|389",
"Andros|16|10005|391",
"Kreta|175|10005|616",
"Kos|174|10005|7",
"Tilos|361|10005|554",
"Thassos|357|10005|16",
"Ikaria|124|10005|399",
"Griechenland|10006|10006|10006",
"Epiros|87|10006|553",
"Thessaloniki|358|10006|625",
"Pilion (Festland Ost)|113|10006|734",
"Olympische Riviera (Festland)|673|10006|733",
"Chalkidiki|54|10006|534",
"Peleponnes|271|10006|382",
"Thrakien (Festland Nord-Ost)|674|10006|277",
"Athen & Umgebung|23|10006|18",
"Italien, Malta|10007|10007|10007",
"Aostatal & Piemont & Lombardei|276|10007|845",
"Marken|685|10007|296",
"Gardasee|100|10007|2048",
"SÃ¼dtirol & Norditalien|344|10007|844",
"Toscana|365|10007|537",
"Apulien|21|10007|464",
"Basilikata|683|10007|291",
"Elba|82|10007|80",
"Kalabrien|159|10007|536",
"Umbrien|369|10007|817",
"Venetien|374|10007|82",
"Neapel & Umgebung|231|10007|76",
"Emilia Romagna|85|10007|81",
"Ischia|147|10007|75",
"Rom & Umgebung|299|10007|560",
"Sardinien|311|10007|78",
"Malta|206|10007|595",
"Friaul - Julisch Venetien|686|10007|297",
"Abruzzen|0|10007|891",
"Sizilien|330|10007|77",
"Oberitalienische Seen|256|10007|2012",
"Capri|50|10007|79",
"Tunesien, Marokko|10008|10008|10008",
"Monastir|221|10008|614",
"Marokko Inland|127|10008|705",
"Marrakesch|208|10008|126",
"Hammamet|115|10008|132",
"Agadir|6|10008|125",
"Insel Djerba|133|10008|133",
"Tunesien Norden|246|10008|131",
"Oase Zarzis|254|10008|135",
"Aegypten|10010|10010|10010",
"Marsa Alam & Quseir|287|10010|330",
"Sharm el Sheikh / Nuweiba|327|10010|351",
"Hurghada & Safaga|121|10010|350",
"weitere Angebote Aegypten|420|10010|2500",
"Kairo & Gizeh & Memphis|158|10010|348",
"Luxor & Assuan|198|10010|349",
"Afrika|10011|10011|10011",
"Kenia SÃ¼dkÃ¼ste|342|10011|359",
"Northern Cape|504|10011|875",
"Kenia NordkÃ¼ste|248|10011|358",
"Free State|500|10011|878",
"Durban & Umgebung|77|10011|881",
"Namibia|229|10011|453",
"Tansania - Sansibar|349|10011|454",
"Johannesburg & Umgebung|156|10011|883",
"Santo Antao (Kap Verde)|445|10011|588",
"Kapstadt & Umgebung|163|10011|873",
"Gambia|99|10011|137",
"Santiago (Kap Verde)|309|10011|586",
"KrÃ¼ger Park|517|10011|882",
"Sal (Kap Verde)|305|10011|585",
"Kuba|10012|10012|10012",
"weitere Angebote Kuba|422|10012|2522",
"Kuba (Holguin)|118|10012|371",
"Kuba - Varadero & Havanna|373|10012|369",
"Dom. Republik|10013|10013|10013",
"Dom. Republik - Osten (Punta Cana)|401|10013|367",
"Dom. Republik - Norden (Puerto Plata & Samana)|400|10013|366",
"Dom. Republik - SÃ¼den (Santo Domingo)|75|10013|368",
"Karibik|10014|10014|10014",
"Grenada|108|10014|377",
"Jamaika|153|10014|247",
"Guadeloupe|109|10014|572",
"Puerto Rico|284|10014|251",
"Martinique|209|10014|571",
"Tobago|363|10014|378",
"Isla Margarita|148|10014|440",
"Bahamas|27|10014|566",
"Virgin Islands & Anguilla|378|10014|680",
"Antigua & Barbuda|18|10014|250",
"Niederl. Antillen|240|10014|582",
"St. Martin (frz.) & St. Martin (niederl.)|741|10014|4098",
"Barbados|31|10014|245",
"St.Lucia|337|10014|249",
"Turks & Caicos Inseln|368|10014|574",
"Cayman Inseln|52|10014|581",
"Bermuda|38|10014|437",
"USA|10015|10015|10015",
"Florida SÃ¼dspitze|343|10015|523",
"Nevada|186|10015|692",
"Kalifornien|160|10015|688",
"Rundreise USA|640|10015|2560",
"New Jersey|235|10015|782",
"New York|237|10015|697",
"Alaska|9|10015|781",
"Florida OstkÃ¼ste|263|10015|521",
"Hawaii - Insel Maui|139|10015|428",
"Orlando (Florida)|260|10015|524",
"Florida WestkÃ¼ste|384|10015|522",
"Mexiko|10016|10016|10016",
"Inland|490|10016|438",
"Yucatan / Cancun|386|10016|282",
"Mexiko|215|10016|704",
"Acapulco / Oaxaca|2|10016|701",
"Asien|10017|10017|10017",
"Thailand|356|10017|323",
"ThailÃ¤ndische Inseln|355|10017|327",
"Vietnam|376|10017|448",
"Region Cebu & Borocay|488|10017|683",
"China|55|10017|439",
"Luzon & Manila|487|10017|681",
"Usbekistan|496|10017|862",
"Goa|102|10017|360",
"Sunda-Inseln|345|10017|528",
"Insel Phuket|142|10017|322",
"Khao Lak|169|10017|846",
"Insel Ko Samui|136|10017|325",
"Philippinen|274|10017|314",
"Malaysia|203|10017|425",
"Singapur|328|10017|473",
"Taipeh & Umgebung|480|10017|489",
"Myanmar|227|10017|645",
"Region Neu Delhi & Bombay|479|10017|488",
"Insel Bintan|131|10017|871",
"Sri Lanka|334|10017|361",
"weitere Angebote Thailand|437|10017|2535",
"Indien|679|10017|197",
"Hongkong & Umgebung|119|10017|474",
"Bangkok & Umgebung|30|10017|321",
"Bali|29|10017|311",
"Zypern|10019|10019|10019",
"Zypern SÃ¼d (griech. Teil)|390|10019|620",
"Zypern Nord (tÃ¼rk. Teil)|736|10019|99",
"weitere Angebote Griechenland, Zypern|416|10019|2152",
"Dubai, Arabische Halbinsel|10020|10020|10020",
"Sharjah / Khorfakkan|323|10020|352",
"Fujairah|97|10020|722",
"Ajman|7|10020|724",
"Ras Al-Khaimah|288|10020|723",
"Umm Al Quwain|449|10020|725",
"Bahrain|28|10020|721",
"Al Ain|8|10020|884",
"Abu Dhabi|1|10020|354",
"Dubai|76|10020|353",
"Oman|258|10020|532",
"Katar|166|10020|720",
"Frankreich|10021|10021|10021",
"CÃ´te d'Azur|69|10021|2055",
"Paris & Umgebung|268|10021|495",
"Nordeuropa|10022|10022|10022",
"DÃ¤nemark|72|10022|902",
"Island|149|10022|449",
"Norwegen|251|10022|813",
"Schweden|456|10022|851",
"Finnland|91|10022|490",
"SÃ¼damerika|10023|10023|10023",
"Brasilien|660|10023|286",
"Ecuador|469|10023|783",
"KÃ¼ste & Inland|179|10023|293",
"Rio de Janeiro & Umgebung|298|10023|375",
"Argentinien|443|10023|450",
"Peru|470|10023|787",
"Recife|289|10023|374",
"Kanada|10024|10024|10024",
"Nova Scotia|252|10024|790",
"Yukon|505|10024|810",
"Alberta|10|10024|767",
"British Columbia|46|10024|768",
"Saskatchewan|312|10024|791",
"SÃ¼dsee|10025|10025|10025",
"Tahiti|511|10025|335",
"Polynesien|279|10025|336",
"Naher Osten|10026|10026|10026",
"Tel Aviv & Umgebung|350|10026|510",
"Eilat|80|10026|225",
"Totes Meer|366|10026|727",
"Jerusalem & Umgebung|155|10026|509",
"Jordanien|157|10026|515",
"Mitteleuropa|10028|10028|10028",
"London & SÃ¼dengland|391|10028|178",
"ZÃ¼rich|394|10028|936",
"Wien & Umgebung|395|10028|958",
"NiederÃ¶sterreich|406|10028|952",
"Mittel- & Nordengland|498|10028|179",
"Deutschland|10029|10029|10029",
"Bayerischer Wald|34|10029|2025",
"Rheinland-Pfalz|294|10029|118",
"Oberbayern|255|10029|2008",
"Baden-WÃ¼rttemberg|26|10029|104",
"Niedersachsen|242|10029|116",
"Hamburg|114|10029|113",
"Nordrhein-Westfalen|249|10029|117",
"Rheingau|292|10029|2022",
"Sachsen|303|10029|121",
"Harz|116|10029|2031",
"Franken|94|10029|2060",
"Berlin|37|10029|106",
"Hessen|117|10029|114",
"Erzgebirge|88|10029|2050",
"HunsrÃ¼ck / Taunus|120|10029|2061",
"Brandenburg|43|10029|107",
"Bayerische Alpen|33|10029|2058",
"Bremen|44|10029|112",
"Elbsandsteingebirge|83|10029|2051",
"Schwarzwald|317|10029|2002",
"MÃ¼nchen|656|10029|264",
"DÃ¼sseldorf & Umgebung|78|10029|2019",
"LÃ¼neburger Heide|196|10029|2024",
"KÃ¶ln & Umgebung|171|10029|2020",
"ThÃ¼ringer Wald|360|10029|2067",
"ThÃ¼ringen|359|10029|128",
"Kroatien, Bulgarien, Osteuropa|10030|10030|10030",
"Tschechien|367|10030|853",
"Ungarn|370|10030|849",
"Istrien|151|10030|483",
"Sankt Petersburg & Umgebung|499|10030|821",
"Kroatische Inseln|177|10030|504",
"Kvarner Bucht|180|10030|480",
"Bulgarien (Landesinnere)|183|10030|539",
"SÃ¼ddalmatien|339|10030|635",
"Bulgarien (Sonnenstrand)|333|10030|102",
"Norddalmatien|244|10030|2011",
"Insel Krk|137|10030|507",
"Insel Hvar|134|10030|500",
"Insel Brac|132|10030|501",
"Plattensee / Balaton|277|10030|2016",
"RumÃ¤nien|301|10030|110",
"Serbien, Montenegro|223|10030|455",
"Moskau & Umgebung|225|10030|820",
"Bulgarien (Goldstrand)|103|10030|103",
"Slowenien Inland|128|10030|497",
"Mitteldalmatien|218|10030|877",
"GlÃ¼ckshotels|10032|10032|10032",
"GlÃ¼ckshotel Kuba|419|10032|2087",
"GlÃ¼ckshotel Gardasee|290|10032|506",
"GlÃ¼ckshotel Mexiko|630|10032|2239",
"GlÃ¼ckshotel TÃ¼rkei|546|10032|947",
"GlÃ¼ckshotel Mallorca|411|10032|2107",
"GlÃ¼ckshotel TÃ¼rkische Riviera|548|10032|2153",
"GlÃ¼ckshotel Fuerteventura|553|10032|2095",
"GlÃ¼ckshotel Gran Canaria|554|10032|2098",
"GlÃ¼ckshotel Lanzarote|557|10032|2106",
"GlÃ¼ckshotel Ibiza|558|10032|2118",
"GlÃ¼ckshotel Costa del Sol|561|10032|2108",
"GlÃ¼ckshotel Costa de la Luz|563|10032|2156",
"GlÃ¼ckshotel Kalabrien|623|10032|2102",
"GlÃ¼ckshotel Tunesien|579|10032|2099",
"GlÃ¼ckshotel Aegypten|581|10032|4002",
"GlÃ¼ckshotel Italien|621|10032|2140",
"GlÃ¼ckshotel Istanbul|547|10032|2119",
"Rundreisen|10033|10033|10033",
"Rundreise China|601|10033|2128",
"Rundreise Kanada|599|10033|2548",
"Rundreise Azoren|595|10033|2246",
"Rundreise Madeira|592|10033|2244",
"Rundreise Indien|590|10033|2551",
"Rundreise Griechenland|612|10033|2214",
"Rundreise Thailand|588|10033|2257",
"Rundreise Jordanien|587|10033|2136",
"Rundreise Sizilien|615|10033|2222",
"Rundreise Malta|616|10033|2235",
"Rundreise Sardinien|617|10033|2278",
"Rundreise Italien|618|10033|2513",
"Rundreise Tansania|586|10033|2549",
"Rundreise Kalabrien|620|10033|2133",
"Rundreise Kenia|585|10033|2229",
"Rundreise SÃ¼dafrika|583|10033|2115",
"Rundreise Kreta|567|10033|2215",
"Rundreise Andalusien|564|10033|2253",
"Rundreise Mexiko|629|10033|2242",
"Rundreise TÃ¼rkei|545|10033|946",
"Rundreise Tunesien|542|10033|959",
"Rundreise Aegypten|540|10033|2204",
"Rundreise Brasilien|523|10033|2546",
"Rundreise Costa Rica|641|10033|2208",
"Rundreise Marokko|642|10033|2237",
"Rundreise Namibia|644|10033|2541",
"Rundreise Djerba|653|10033|4021",
"Rundreise Island|326|10033|2167",
"Rundreise Portugal|412|10033|2529",
"Rundreise Kuba|413|10033|2234",
"Rundreise Naher Osten|740|10033|2080",
"Rundreise Oman|455|10033|2164",
"Rundreise Syrien|454|10033|2163",
"Rundreise Sri Lanka|453|10033|948",
"Rundreise Zypern|429|10033|2276",
"Rundreise Arabische Halbinsel|430|10033|2273",
"Rundreise Russland|600|10033|2150",
"Kreuzfahrten|10034|10034|10034",
"Kreuzfahrt Region Mittelmeer|669|10034|4005",
"Kreuzfahrt & Hotel TÃ¼rkei|550|10034|2281",
"Kreuzfahrt TÃ¼rkei|544|10034|2280",
"Nilkreuzfahrten|539|10034|2202",
"weitere Kreuzfahrten|524|10034|4006",
"Kreuzfahrt Kroatien|130|10034|4010",
"Fly & Drive|10035|10035|10035",
"Fly & Drive Algarve|694|10035|4057",
"Fly & Drive Costa Blanca|697|10035|4060",
"Fly & Drive Costa de la Luz|698|10035|4061",
"Fly & Drive Costa del Sol|699|10035|4062",
"Fly & Drive Florida|700|10035|4063",
"Fly & Drive Fuerteventura|701|10035|4064",
"Fly & Drive Gran Canaria|704|10035|4067",
"Fly & Drive Kapstadt & Umgebung|706|10035|4069",
"Fly & Drive Kreta|707|10035|4070",
"Fly & Drive Lanzarote|709|10035|4072",
"Fly & Drive Lissabon & Umgebung|710|10035|4073",
"Fly & Drive Madeira|711|10035|4074",
"Fly & Drive Mallorca|712|10035|4075",
"Fly & Drive Kanada|715|10035|4078",
"Fly & Drive Namibia|716|10035|4079",
"Fly & Drive Norwegen|717|10035|4080",
"Fly & Drive Italien|721|10035|4084",
"Fly & Drive Lesbos|722|10035|4085",
"Fly & Drive USA|724|10035|4087",
"Fly & Drive Teneriffa|726|10035|4089",
"Fly & Drive Frankreich|727|10035|4090",
"Fly & Drive Kuba|730|10035|4094",
"Fly & Drive Island|732|10035|4096",
"Fly & Drive Spanien|733|10035|4093",
"Indischer Ozean|10036|10036|10036",
"Mauritius|210|10036|143",
"Malediven|204|10036|342",
"RÃ©union|291|10036|163",
"Seychellen|322|10036|719",
"Mittelamerika|10037|10037|10037",
"Costa Rica|67|10037|563",
"Panama|267|10037|446",
"Honduras|486|10037|443"];TTREGS_654.sort();
//var IBE = new Interface("IBE",port,"bengine");
var IBE = new Interface("IBE","654","bengine");
var countInitReq = 0;
IBE.jsFiles = [
	HOME_URL+'js/travel/libtt/form/formbase.js',HOME_URL+'js/travel/libtt/form/dateselector.js',
	HOME_URL+'js/travel/libtt/core/datehelper.js', HOME_URL+'js/travel/libtt/data/area_'+this.port+'.js'];
IBE.InitOnLoad = function(){
	if ( countInitReq == 100 ) return;
			
    var mustHave = ['FormBase', 'DateSelector', 'DEPARR', 'Target', 'TTREGS_'+this.port ];
    var injObj   = { IbeSearch:[], DateSelector:[] };

   	for(i=0; i < mustHave.length; i++) {
        if(typeof(window[mustHave[i]])=='undefined'){
        	countInitReq++;
        	window.setTimeout("IBE.InitOnLoad()",20); return;
        }
    }

    this.Inject(injObj); this.Init();
};

/**
*@constructor
*@extends FormBase
*@requires Terminauswahl
*@requires Zielauswahl
*@requires Reisende
*@requires Kalender
*/

function IbeSearch(){
	FormBase.apply(this);
    Target.apply(this,[]);

    this.BookingAction = function(){
        var bform=document.forms[this.formName];

      	bform.elements["ibeInput[depDate]"].value=bform.elements["ibeInput[depDay]"].value+"."+bform.elements["ibeInput[depMonth]"].value;
       	bform.elements["ibeInput[retDate]"].value=bform.elements["ibeInput[retDay]"].value+"."+bform.elements["ibeInput[retMonth]"].value;

       	if( typeof ( bform.elements["ibeInput[area]"]) !='undefined') {
       		var area = bform.elements["ibeInput[area]"].options[bform.elements["ibeInput[area]"].selectedIndex].value.split("|");
       		bform.elements["ibeInput[area]"].options[bform.elements["ibeInput[area]"].selectedIndex].value = area[0];
       	}

       	return this.ChkFormular();
    };

    this.ChkFormular = function(){
        var bform=document.forms[this.formName];
        if(this.req['depDate']>this.req['retDate']){
            alert("Ihr RÃ¼ckreisedatum liegt vor dem Hinreisedatum");
            return false;
        }
        var tmpy=bform.zimmer2;
        if(typeof(tmpy)!='undefined'){
            if(bform.zimmer[6].checked==true && bform.zimmer2.selectedIndex==0){
                alert("Bitte wÃ¤hlen Sie ein Zimmertypen aus.");
                bform.zimmer2.focus()
                return false;
            }
        }

        return true;
    };

    /**
    *Wird nach dem Laden der Seite ausgef?hrt
    */

     this.Init = function(){
        if(!document.forms[this.formName]) {  return; }
        with( this ) {
        	this.req['ibeInput[depAirport]'] = this.req['depAirport'];
			FillSelFromArray( 'ibeInput[depAirport]', DEPARR );

			if ( this.req['target'] == 'TRUE' ) {
				valZiel = this.req['topArea'];
				if( this.req['targetArea'] ) {
					this.valReg = this.req['targetArea'].split("|")[0];
				}
        	}

			termin_hin = this.req['depDate'].split("-")[2]+'.'+this.req['depDate'].split("-")[1]+'.'+this.req['depDate'].split("-")[0];
			termin_rueck = this.req['retDate'].split("-")[2]+'.'+this.req['retDate'].split("-")[1]+'.'+this.req['retDate'].split("-")[0];

			InitDays(1);
            InitMonth(1);
            InitDays(0);
            InitMonth(0);
            UpdateDate('dep');
            UpdateDate('ret');

            if ( this.req['target'] == 'TRUE' ) {
				UpdateArea();
			}
			if( valZiel > 0 ) {
				SetToparea();
			}
			
			FillDuration();

			

           /*SetRadios(['verpflegung','zimmer','kategorie']);
            setChecks(['strand','wellness','familie_kinder']);
            if(this.req['formular']=='2'){
                fillSelFromArray('flugdauer',TTFDRZ);
                setRadios(['typ']);
                setChecks(['sportmoeglichkeiten']);
                setTexts(['shotel']);
            }
            else if(this.req['formular']=='4'){
                fillBitSels({"zimmer2":optZimmer2});
                setChecks(['typ']);
                setBitChecks(['meer','zfilter']);
                setTexts(['shotel','preis']);
                UpdateRegionen();
            }*/
        }
    };

}

/**
*@fileoverview Erweiterungen des JavaScript "Date" Objekts
*@author Guido Fï¿½nders, fuenders@traveltainment.de
*/

var monNames = new Array("Jan.","Feb.","Mï¿½rz","April","Mai","Juni","Juli","Aug.","Sep.","Okt.","Nov.","Dez.");

function twoDigit(val){
  return parseInt(val,10)<10?"0"+parseInt(val,10):parseInt(val,10);
}
/**
*@param {int} month Anzahl der Monate, um die das Datum erhï¿½ht werden soll
* (optional, default=1)
*@addon
*/
Date.prototype.addMonth=function(month){
  if(typeof(month)=='undefined') month=1;
  month = parseInt(month);
  var years=Math.floor(month/12);
  this.addYear(years);
  month = month%12;
  if((this.getMonth()+month)>11){
    this.addYear();
    this.setMonth((this.getMonth()+month)%12);
  }else{
    this.setMonth(this.getMonth()+month);
  }
};
/**
*@param {int} years Anzahl der Jahre, um die das Datum erhï¿½ht werden soll
* (optional, default=1)
*@addon
*/
Date.prototype.addYear=function(years){
  if(typeof(years)=='undefined') years=1;
  years = parseInt(years);
  var aktYear = this.getFullYear();
  this.setYear(aktYear+years);
  return this;
};
/**
*@param {int} days Anzahl der Tage, um die das Datum erhï¿½ht werden soll
* (optional, default=1)
*@addon
*/
Date.prototype.addDay=function(days){
  if(typeof(days)=='undefined') days=1;
  days = parseInt(days);
  var aktTs = this.getTime();
  var addTs = days*86400000;
  this.setTime(aktTs+addTs);
  return this;
};
/**
*Setzt Die Uhrzeit eines Dateobjekts auf 00:00:00:00 (HH:MM:SS:MS)
*@addon
*/
Date.prototype.resetTime = function(){
  this.setHours(0,0,0,0);
  return this;
};
/**
*@fileoverview Definiert die Methoden zur Datumsauswahl und zur Anzeige des Kalenders
*/

/**
*@constructor
*@extends TTIBE
*@requires Date
*@requires Zeitraum
*/
function DateSelector(){
  /* default values for date initialization */
  var currDate = new Date();
  var firstDate = new Date();
  var dateOffset = 3;
  firstDate.addDay( dateOffset );
  var depDate = new Date();
  depDate.addDay( 20 );
  var retDate = new Date();
  retDate.addMonth( 1 );
  var lastDepDate = new Date();
  lastDepDate.addYear( 1 );
  var lastRetDate = new Date();
  lastRetDate.addYear( 1 );

  this.erster_termin = firstDate.getDate()+'.'+firstDate.getMonth()+'.'+firstDate.getFullYear();
  this.termin_hin = depDate.getDate()+'.'+depDate.getMonth()+'.'+depDate.getFullYear();
  this.termin_rueck = retDate.getDate()+'.'+retDate.getMonth()+'.'+retDate.getFullYear();
  this.letzter_termin_hin = lastDepDate.getDate()+'.'+lastDepDate.getMonth()+'.'+lastDepDate.getFullYear();
  this.letzter_termin_rueck = lastRetDate.getDate()+'.'+lastRetDate.getMonth()+'.'+lastRetDate.getFullYear();

  this.fieldDepDayDate = "ibeInput[depDay]";
  this.fieldDepMonthDate = "ibeInput[depMonth]";
  
  this.fieldRetDayDate = "ibeInput[retDay]";
  this.fieldRetMonthDate = "ibeInput[retMonth]";
  /**
  *Liefert die anzahl der Tage eines Monats zu einem bergebenen Datum.
  *Liegt der maximale Termin vor dem letzten Tag im Monat, wird der maximale Termin zurckgegeben
  *@param {String} strDate Datum im Format DD.MM.YYYY
  *@param {Bool} hin Kenner ob es sich um das Hin- oder Rckdatum handelt (hin=1)
  *@return {int} Anzahl Tage
  */
  this.GetTage = function(strDate,hin){
    var myDate = new Date(strDate.split(".")[2],parseInt(strDate.split(".")[1],10),1);
    myDate.setDate(0);
    var nTage = myDate.getDate();
    lts=(hin)?(this.letzter_termin_hin.split(".")):(this.letzter_termin_rueck.split("."));
    if(twoDigit(lts[1])==twoDigit(myDate.getMonth()+1) && lts[2]==myDate.getFullYear()){
      nTage=parseInt(lts[0],10);
    }
    return nTage;
  };

  /**
  *Wird aufgerufen, wenn sich der Hintermin gendert hat und ndert entsprechend
  *den Rcktermin
  */
  this.ChangeRueck = function(){
    var lts=this.letzter_termin_rueck.split(".");
    var lDate = new Date(lts[2],parseInt(lts[1]-1,10),parseInt(lts[0]),10);
    var d=this.getValue(this.fieldDepDayDate);
    var lMon=this.getValue(this.fieldDepMonthDate).split(".");
    d = new Date(lMon[1],lMon[0]-1,d);
    var nTime = d.getTime()+(22*86400000);
    if(nTime>lDate.getTime())
      d.setTime(lDate.getTime());
    else
      d.setTime(nTime);
    var nMon=twoDigit(parseInt(d.getMonth(),10)+1);
    var nDay=twoDigit(parseInt(d.getDate(),10));
    this.SetDatum(nDay+"."+nMon+"."+d.getFullYear(),"",2);
  };

  /**
  *Liest den Wert aus einer Selectbox
  *@return {Selectboxvalue}
  */
  this.getValue = function(name){
  	return document.forms[this.formName].elements[name].value;
  };

  /**
  *Setzt die RequestParameter "termin" bzw. "ruecktermin" und das Hiddenfeld
  *"termin"
  */
  this.UpdateTermine = function(kenner,y,m,d){
    var date=new Date(y,m-1,d);
    var bform = document.forms[this.formName];
    dn=date.getTime()/1000;
    if(kenner=="dep"){
      this.req['termin']=dn;
      //bform.termin.value=dn;
    }else{
      this.req['ruecktermin']=dn;
    }
  };
  
  /**
  *Selektiert ein Datum
  *@param {String} strDate das zu setzende Datum
  *@param {Bool} strKenner Kenenr  Hin- oder Rcktermin
  *@param {Int} noMon Kenner ob Monatsselectbox auch aktualisiert werden soll
  *@param {Int} noMon Kenner ob Monatsselectbox auch aktualisiert werden soll
  *@param form Unbekannte Funktion
  */
  this.SetDatum = function(strDate, strRKenner, noMon, form){
    var myDate = new Date(strDate.split(".")[2],parseInt(strDate.split(".")[1],10)-1,parseInt(strDate.split(".")[0],10));
    var nTage=this.GetTage(strDate,strRKenner!="");
    var com=(strRKenner)?document.forms[this.formName].elements[this.fieldDepDayDate]:document.forms[this.formName].elements[this.fieldRetDayDate];
    var comMon=(strRKenner)?document.forms[this.formName].elements[this.fieldDepMonthDate]:document.forms[this.formName].elements[this.fieldRetMonthDate];
    var len=com.length;
    var nMax=(len>nTage)?len:nTage;

    for(i=0;i<nMax;i++){
      if(i<nTage){
        if(i>=len){
          com.options[i]=new Option();
        }
        com.options[i].text=i+1;
        com.options[i].value=i+1;
      }else{
        com[nTage] = null;
      }
    }
    var nSel=myDate.getDate();
    if(nSel>nTage)
      nSel = nTage;

    com.value = nSel;
    this.UpdateTermine(((strRKenner!="")?"dep":""),strDate.split(".")[2],strDate.split(".")[1],nSel);

    if(noMon != 1){
      comMon.value = twoDigit(myDate.getMonth()+1)+"."+myDate.getFullYear();
    }
    if(noMon!=2 && strRKenner!="") this.ChangeRueck();

  };

  /**
  *Initiiert die Aktualisierung einer Auswahlbox
  *@param {String} Typ "k" oder "rueck"
  */
  this.UpdateDate = function(strKenner){
    var nTag = this.getValue((strKenner=="ret")?this.fieldRetDayDate:this.fieldDepDayDate);
    var strMon = this.getValue((strKenner=="ret")?this.fieldRetMonthDate:this.fieldDepMonthDate);
    this.SetDatum(nTag+"."+strMon,(strKenner=="ret")?"":"dummy",2);
  };

  /**
  *Initiiert die Aktualisierung einer "Tag"-Auswahlbox
  *@param {String} strKenner Typ "k" oder "rueck"
  */
  this.SetDay = function( strKenner ){
    var nTag=this.getValue((strKenner=="ret")?this.fieldRetDayDate:this.fieldDepDayDate);
    var cMon=document.forms[this.formName][(strKenner=="ret")?this.fieldRetMonthDate:this.fieldDepMonthDate];
    var strMon=this.getValue((strKenner=="ret")?this.fieldRetMonthDate:this.fieldDepMonthDate);
    var ets=this.erster_termin.split(".");

    if(ets[1]+"."+ets[2]==strMon && nTag < parseInt(ets[0],10)){
      cMon.selectedIndex=1;
      strMon=this.getValue((strKenner=="ret")?this.fieldRetMonthDate:this.fieldDepMonthDate);
      this.SetDatum(nTag+"."+strMon,(strKenner=="ret")?"":"dummy",1);
      nTag=this.getValue((strKenner=="ret")?this.fieldRetDayDate:this.fieldDepDayDate);
    }
    if(strKenner=="dep"){
      this.ChangeRueck();
    }
    this.UpdateTermine(strKenner,strMon.split(".")[1],strMon.split(".")[0],nTag);
  };

  /**
  *Initiiert die Aktualisierung einer "Monat"-Auswahlbox
  *@param {String} strKenner Typ "k" oder "rueck"
  */
  this.SetMonth = function(strKenner){
    var nTag=this.getValue((strKenner=="ret")?this.fieldRetDayDate:this.fieldDepDayDate);
    var strMonat=this.getValue((strKenner=="ret")?this.fieldRetMonthDate:this.fieldDepMonthDate);
    var ets=this.erster_termin.split(".");
    if(ets[1]+"."+ets[2]==strMonat && nTag<parseInt(ets[0],10)){
      nTag=ets[0];
    }
    var strDate=nTag+"."+strMonat;
    this.SetDatum(strDate,(strKenner=="ret")?"":"dummy",1);
  };

  /**
  *Fllen der "Tag" Selectbox (beim erstmaligen Laden der Seite)
  *@param {Bool} Hinkenner (hin=true)
  */
  this.InitDays = function(hin){
    if(typeof(document.forms[this.formName].elements[(hin)?this.fieldDepDayDate:this.fieldRetDayDate]) != 'undefined'){
        var nTage=this.GetTage((hin)?this.termin_hin:this.termin_rueck,hin);
        
        var SelTag=(hin)?this.termin_hin.split(".")[0]:this.termin_rueck.split(".")[0];
        
        
        var selBox = document.forms[this.formName].elements[(hin)?this.fieldDepDayDate:this.fieldRetDayDate];
        for(i=1;i<=nTage;i++){
          selBox.options[i-1] = new Option(i,i);
          if(i==SelTag) selBox.options[i-1].selected=true;
        }
    }
  };

  /**
  *Fllen der "Monat" Selectbox (beim erstmaligen Laden der Seite)
  *@param {Bool} Hinkenner (hin=true)
  */
  this.InitMonth = function(hin){
    if(typeof(document.forms[this.formName].elements[(hin)?this.fieldDepMonthDate:this.fieldRetMonthDate]) != 'undefined'){
        if (typeof(this.monNames) != 'undefined') {
          var m = this.monNames;
        } else {
          var m = ["Jan.","Feb.","M\xE4rz","April","Mai","Juni","Juli","Aug.","Sep.","Okt.","Nov.","Dez."];
        }
        var ets  = this.erster_termin.split(".");
        var lts  = (hin)?(this.letzter_termin_hin.split(".")):(this.letzter_termin_rueck.split("."));
        var sels = (hin)?(this.termin_hin.split(".")):(this.termin_rueck.split("."));
        var selBox  = document.forms[this.formName].elements[(hin)?this.fieldDepMonthDate:this.fieldRetMonthDate];
        var aktDate = new Date(ets[2],parseInt(ets[1],10)-1,1);
        var selDate = new Date(sels[2],parseInt(sels[1],10)-1,1);
        var maxDate = new Date(lts[2],parseInt(lts[1],10)-1,1);
        while(aktDate.getTime()<=maxDate.getTime()){
          var sel = aktDate.getTime()==selDate.getTime()?" selected":"";
          var val = (aktDate.getMonth()+1)<10?"0"+(aktDate.getMonth()+1):(aktDate.getMonth()+1);
          var optVal = val+'.'+aktDate.getFullYear();
          var optLbl = m[aktDate.getMonth()]+' '+String(aktDate.getFullYear()).substr(2,2);
          selBox.options[selBox.options.length] = new Option(optLbl,optVal);
          if(aktDate.getTime()==selDate.getTime())
            selBox.options[selBox.options.length-1].selected = true;
          aktDate.addMonth();
        }
    }
  };
  
  /**
  *ffnet den Kalender
  *@param {String} Typ "hin" oder "rueck"
  */
  this.showKalender = function(strTyp){
    if(strTyp=='hin' && typeof(kalender_rueck)!='undefined') kalender_rueck.close();
    else if(strTyp=='rueck' && typeof(kalender_hin)!='undefined') kalender_hin.close();
    var top=screen.height;
    var left=screen.width;
    var posx=((left/2)-100);
    var posy=((top/2)-180);
    var wndName = 'kalender_'+strTyp+'__'+this.formName+'__'+this.name;
    /* TYPO3-Strecke? */
    if(typeof(t3url)!='undefined'){
        var infowin = window.open(url+'booking/'+ordner_name+'/kalender.html',wndName,'width=200,height=230,scrollbars=no,screenX='+posx+',screenY='+posy+',left='+posx+',top='+posy);
    }
    else{
        var infowin = window.open('kalender.html',wndName,'width=200,height=230,scrollbars=no,screenX='+posx+',screenY='+posy+',left='+posx+',top='+posy);
    }
    infowin.focus();
  }
}

/**
*@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 {Object} rnames Objekt mit den zu Namen der Radiobuttons
  */
  this.SetRadios = function(rnames){
    for(var i in rnames){
      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 {Object} cknames Objekt mit den zu Namen der Checkboxen
  */
  this.SetChecks = function(cknames){
    for(var i in cknames){
      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 {Object} cknames Objekt mit den zu Namen der Checkboxen
  */
  this.SetBitChecks = function(cknames){
    for(var i in cknames){
      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 in txtnames){
      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.FillTravellers = 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 in elems){
          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){}
  };

  this.FillDuration = function( port ){
	if( typeof( port ) == 'undefined' ) {
		port = this.port;
	}
    var sb = document.getElementsByName('ibeInput[duration]')[0] || 0;
    if(!sb || sb.type!='select-one') return;
	while( sb.options.length != 0 ) {
		sb.options[sb.options.length-1] = null;
	}
    sb.options[sb.options.length] = new Option("beliebig","-1");
	sb.options[sb.options.length] = new Option("1 Tag","6_1");
	if( port == 653 || port == 652 ) {
		for( i=2; i<= 21; i++ ) {
		  sb.options[sb.options.length] = new Option(i+" Tage","6_"+i);
		}
	} else {
		sb.options[sb.options.length] = new Option("1 - 4 Tage","9");
		sb.options[sb.options.length] = new Option("5 - 8 Tage","10");
		sb.options[sb.options.length] = new Option("1 Woche","6_7");
		sb.options[sb.options.length] = new Option("9 - 12 Tage","7");
		sb.options[sb.options.length] = new Option("13 - 15 Tage","3");
		sb.options[sb.options.length] = new Option("2 Wochen","6_14");
		sb.options[sb.options.length] = new Option("16 - 22 Tage","12");
		sb.options[sb.options.length] = new Option("3 Wochen","6_21");
	}
	sb.options[sb.options.length] = new Option("> 22 Tage","13");
	try {
	  if(this.req['duration']!='' && this.req['duration']!='-1') {
		for( var j = 0; j < sb.options.length; j++ ) {
			if( sb.options[j].value == this.req['duration'] ) {
				sb.options.selectedIndex = j;
				break;
			}
		}
	  }
	} catch( e ) {}
  };

}

/**
*@fileoverview In dieser Datei werden Methoden fï¿½r Ziel-/Regionsauswahlboxen definiert
*@author Guido Fï¿½nders, fuenders@traveltainment.de
*/

/**
*Enthï¿½lt Methoden fï¿½r das dynamische Fï¿½llen und Updaten von Ziel-/Regionsauswahlboxen
*@params {Object} ttregs  Regionsarray
*@constructor
*@extends TTIBE
*/
function Target(optUserRegSelect){
  /**
  *Flag, ob ein Ziel(-Filter) ausgewï¿½hlt ist oder nicht
  *@type Bool
  */
  this.gfilt = false;
  /**
  *Regions-Array
  *@type Array
  */
  this.Regionen = [];
  if(typeof(window["TTREGS_"+this.port])!='undefined')
    this.Regionen = window["TTREGS_"+this.port];
  /**
  *Name des ausgewï¿½hlten Ziels
  *@type String
  */
  this.strZiel = "";//ttregs.g_strZiel;
  /**
  *Value des ausgewï¿½hlten Ziels
  *@type Int
  */
  this.valZiel = -1;//ttregs.g_nZiel;
  /**
  *Name der ausgewï¿½hlten Region
  *@type String
  */
  this.strReg = "";//ttregs.g_strRegion;
  /**
  *Value der ausgewï¿½hlten Region im Format('Zielgebietskenner'|'Regionskenner')
  *@type String
  */
  this.valReg = -1;//ttregs.g_nRegion;
  
  this.countReq = 0;
  //Feld definition
  this.fieldArea = "ibeInput[area]";
  this.fieldDest = "ibeInput[dest]";

  var defAuswahl = {
    ziel:"<Alle Reiseziele>",
    region:"<Alle Regionen>"
  };

  this.optFirstRegSelect= optUserRegSelect || defAuswahl;

  /**
  *fï¿½llt die "ziel"-Selectbox und ruft danach FixRSel auf, welche dann die Regionen fï¿½llt
  *@param {Array} rec Regionsarray
  *@return falls Kein Array ï¿½bergeben wurde "false", ansonsten nix
  *@type void
  */
  this.UpdateArea = function(){
  
  	if(typeof(window["TTREGS_"+this.port])!='undefined') {
    	this.Regionen = window["TTREGS_"+this.port];
  	}else if ( this.countReq < 50 ) {
  		if ( this.countReq == 0 ) {
  			this.Include("script",HOME_URL+'js/travel/libtt/data/area_'+this.port+'.js');
  		}
  		if(typeof(window["TTREGS_"+this.port])=='undefined'){
  			this.countReq++;
        	window.setTimeout("IBE.UpdateArea()",20); return;
        }else {
        	this.Regionen = window["TTREGS_"+this.port];
        }
  	}
  	
  	this.countReq = 0;
  	if ( this.req['fTargetArea'] != 'FALSE' ) {
	    // Erstes Element der Regionauswahlbox erstellen
		if( document.forms[this.formName].elements[this.fieldArea] ) {
		    document.forms[this.formName].elements[this.fieldArea].options[0] = new Option(this.optFirstRegSelect["ziel"],"-1");
		}
  	}

  	if ( this.req['fTargetArea'] == 'FALSE' ) {
  		this.optFirstRegSelect["region"] = "----- Alle Reiseziele -----";
  	}
  		
    // Erstes Element der Zielauswahl erstellen
	if( document.forms[this.formName].elements[this.fieldDest] ) {
		var opt=document.forms[this.formName].elements[this.fieldDest].options;
		
		if ( this.req['fTargetArea'] == 'FALSE' ) {
			if (opt.length==1) {
				 opt[0] = new Option(this.optFirstRegSelect["region"],"-1");
			}else {
	
				if (opt.length > 2) {
					if ((opt[1].value == "") && (opt[1].text == "")) {
						while (opt.length > 2)
							opt[opt.length - 1] = null;
					}
					else{
						while (opt.length)
							opt[opt.length - 1] = null;
					}
				}
	
				
				opt[opt.length] = new Option(this.optFirstRegSelect["region"], "-1");
			}
		}else {
			while(opt.length>0)
			  opt[opt.length-1] = null;
			opt[0] = new Option(this.optFirstRegSelect["region"],"-1");
		}
		
		for(i=0; i < this.Regionen.length; i++){
		  var sr=this.Regionen[i].split("|");
		  if( this.req['CustomRegion'] == undefined ) {
			if(sr[1]>=10000)
				opt[opt.length]=new Option(sr[0],sr[1]);
			else if ( this.req['fTargetArea'] == 'FALSE' )
				opt[opt.length]=new Option(sr[0],sr[1]);
		  } else {
			  var CustomRegion = ""+this.req['CustomRegion']+"";
			  regex = new RegExp( CustomRegion, "i" );
			  if( sr[1].match( regex ) )
				opt[opt.length]=new Option(sr[0],sr[1]);
		  }
		}
		
		if ( this.req['fTargetArea'] != 'FALSE' )
    		this.FixRSel();
	}
    
   
  };

  /**
  *RZC => ReiseZiel_onChange: Updated die Regionsauswahl
  *@param {int} ds Deselect (optional) wenn gesetzt wird die Auswahl aufgehoben
  */
  this.RZC = function(ds){
    var zielSel = document.forms[this.formName].elements[this.fieldDest];
    var kenner  = zielSel.value;
    this.valZiel = kenner;

    // globale Variable "g_strZiel" updaten
    if(zielSel.selectedIndex>0){
      this.strZiel=zielSel[zielSel.selectedIndex].text;
    }else this.strZiel="";

    // Filter auf true setzen wenn Ziel ausgewï¿½hlt ist
    this.gfilt = kenner!=-1;
    var opt = document.forms[this.formName].elements[this.fieldArea].options;

    while(opt.length>1)
      opt[opt.length-1] = null;
	
		for(i=0; i < this.Regionen.length; i++){
		  var sr = this.Regionen[i].split("|");
			if( this.req['CustomRegion'] == undefined ) {
			  	if(sr[1]<10000 && (kenner<0 || sr[2]==kenner)){
					//opt[opt.length]=new Option(sr[0],sr[1]+"|"+sr[2]);
					opt[opt.length]=new Option(sr[0],sr[3]+"|"+sr[2]);
				}
			} else {
			  var CustomRegion = ""+this.req['CustomRegion']+"";
			  regex = new RegExp( CustomRegion, "i" );
			  	if( sr[1]<10000 && sr[2].match( regex ) && (kenner<0 || sr[2]==kenner) ) {
					opt[opt.length]=new Option(sr[0],sr[3]+"|"+sr[2]);
				}
			}
		}
	
    if(ds){
      opt.selectedIndex=0;
      this.strReg="";
      this.valReg=-1;
    }
  };

  /**
  *REGC => Region_onChange: Updated die Zielauswahl
  */
  this.REGC=function(){
    var ropt=document.forms[this.formName].elements[this.fieldArea].options;
    var kenner=ropt[ropt.selectedIndex].value.split("|");

    // Globale Variable "g_nRegion" auf aktuellen Value setzen
    this.valReg=kenner[0];

    // Wenn eine Region ausgewï¿½hlt ist:
    if(ropt.selectedIndex>0){
      // evtl enthaltene Klammerausdrï¿½cke werden weggeschnitten
      this.strReg = ropt[ropt.selectedIndex].text.replace(/([^(]*)\((.*)/,"$1");
    }else this.strReg="";

    
    // Wenn kein Zielfilter gesetzt ist, aber eine Region selektiert ist,
    // setze Das Ziel entsprechend.
    if(this.gfilt==false && kenner[0]>=0){
      try{
        var selZiel = document.forms[this.formName].elements[this.fieldDest];
        
        selZiel.value = kenner[1];
        this.valZiel=kenner[1];
        this.strZiel=selZiel.options[selZiel.options.selectedIndex].text;
      }catch(e){}
    }
  };

  /**
  *Wird von der Funktion UpdateArea aufgerufen und selektiert das Ziel
  *anhand der Variablen "valZiel". Ist "valZiel" kein Value der Selectbox
  *wird ein entsprechendes Optionselement angehï¿½ngt (falls die Variable "strZiel"
  *gesetzt ist). Danach wird die Funktion RZC aufgerufen, die die
  *"region"-Selectbox fï¿½llt. Falls die Variable "valReg" gesetzt ist, wird
  *eine entsprechende Region selektiert
  */
  this.FixRSel = function(){
    var opt=document.forms[this.formName].elements[this.fieldDest].options;
    // ist das richtige Ziel ausgewï¿½hlt?
    if((opt.selectedIndex<0 || opt.value!=this.valZiel) && this.valZiel!=0){
      try{
        document.forms[this.formName].elements[this.fieldDest].value = this.valZiel;
      }catch(e){
        if(this.strZiel!="")
          opt[opt.length]=new Option(this.strZiel,this.valZiel,true,true);
        else{
          opt.selectedIndex=0;this.RZC();return;
        }
      }
    }
    this.RZC();

    opt=document.forms[this.formName].elements[this.fieldArea].options;
    if(opt.selectedIndex<0 || opt[opt.selectedIndex].value.split("|")[0]!=this.valReg){
      for(i=0;i<opt.length;i++)
        if(opt[i].value.split("|")[0]==this.valReg){
          opt.selectedIndex=i;break;  
        }

      if(i==opt.length){
        if(this.strReg!="")
          opt[opt.length]=new Option(this.strReg+" (keine Ang.)",this.valReg+"|"+this.valZiel,true,true);
        else{
          opt.selectedIndex=0;this.valReg=-1;this.strReg="";
        }
      }
    }
  };

  this.SetToparea = function() {
	 if( this.valZiel > 0 ) {
		var opt=document.forms[this.formName].elements[this.fieldDest].options;
		if( opt.selectedIndex == 0 ) {
			for( var i = 0; i < opt.length; i++ ) {
				if( opt[i].value == this.valZiel ) {
					opt.selectedindex = i;
					break;
				}
			}
		 }
	 }
  };
}

var DEPARR=new Array(
"Nord;5000",
"S\xFCd;5001",
"West;5002",
"Ost;5003",
"Amsterdam (NL);1",
"Basel-Mulhouse (CH);3",
"Berlin-Sch\xF6nefeld;4",
"Berlin-Tegel;5",
"Berlin-Tempelhof;6",
"Bremen;8",
"Br\xFCssel (B);9",
"Dortmund;10",
"Dresden;11",
"D\xFCsseldorf;12",
"Erfurt;14",
"Frankfurt;15",
"Frankfurt-Hahn;16",
"Friedrichshafen;17",
"Genf (CH);18",
"Graz (A);19",
"Hamburg;20",
"Hannover;21",
"Innsbruck (A);23",
"Karlsruhe;24",
"Klagenfurt (A);27",
"K\xF6ln-Bonn;28",
"Leipzig/Halle;29",
"Linz (A);30",
"L\xFCbeck;31",
"L\xFCttich (B);32",
"Luxemburg;33",
"Maastricht - Aachen (NL);34",
"Memmingen;90",
"M\xFCnchen;36",
"M\xFCnster-Osnabr\xFCck;37",
"Niederrhein (Weeze);49",
"N\xFCrnberg;38",
"Paderborn;39",
"Rostock;40",
"Saarbr\xFCcken;41",
"Salzburg (A);42",
"Schwerin;43",
"Strasbourg (F);44",
"Stuttgart;45",
"Warschau (PL);77",
"Wien (A);46",
"Z\xFCrich (CH);47",
"Zweibr\xFCcken;48");

