/**
*@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",
"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");
Calendar=function(a,b,c,d){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=c||null;this.onClose=d||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=Calendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof a=="number"?a:Calendar._FD;this.showsOtherMonths=false;this.dateStr=b;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined")Calendar._SDN_len=3;var e=new Array();for(var i=8;i>0;){e[--i]=Calendar._DN[i].substr(0,Calendar._SDN_len)}Calendar._SDN=e;if(typeof Calendar._SMN_len=="undefined")Calendar._SMN_len=3;e=new Array();for(var i=12;i>0;){e[--i]=Calendar._MN[i].substr(0,Calendar._SMN_len)}Calendar._SMN=e}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(a){var b=0,ST=0;var c=/^div$/i.test(a.tagName);if(c&&a.scrollLeft)b=a.scrollLeft;if(c&&a.scrollTop)ST=a.scrollTop;var r={x:a.offsetLeft-b,y:a.offsetTop-ST};if(a.offsetParent){var d=this.getAbsolutePos(a.offsetParent);r.x+=d.x;r.y+=d.y}return r};Calendar.isRelated=function(a,b){var c=b.relatedTarget;if(!c){var d=b.type;if(d=="mouseover"){c=b.fromElement}else if(d=="mouseout"){c=b.toElement}}while(c){if(c==a){return true}c=c.parentNode}return false};Calendar.removeClass=function(a,b){if(!(a&&a.className)){return}var c=a.className.split(" ");var d=new Array();for(var i=c.length;i>0;){if(c[--i]!=b){d[d.length]=c[i]}}a.className=d.join(" ")};Calendar.addClass=function(a,b){Calendar.removeClass(a,b);a.className+=" "+b};Calendar.getElement=function(a){var f=Calendar.is_ie?window.event.srcElement:a.currentTarget;while(f.nodeType!=1||/^div$/i.test(f.tagName))f=f.parentNode;return f};Calendar.getTargetElement=function(a){var f=Calendar.is_ie?window.event.srcElement:a.target;while(f.nodeType!=1)f=f.parentNode;return f};Calendar.stopEvent=function(a){a||(a=window.event);if(Calendar.is_ie){a.cancelBubble=true;a.returnValue=false}else{a.preventDefault();a.stopPropagation()}return false};Calendar.addEvent=function(a,b,c){if(a.attachEvent){a.attachEvent("on"+b,c)}else if(a.addEventListener){a.addEventListener(b,c,true)}else{a["on"+b]=c}};Calendar.removeEvent=function(a,b,c){if(a.detachEvent){a.detachEvent("on"+b,c)}else if(a.removeEventListener){a.removeEventListener(b,c,true)}else{a["on"+b]=null}};Calendar.createElement=function(a,b){var c=null;if(document.createElementNS){c=document.createElementNS("http://www.w3.org/1999/xhtml",a)}else{c=document.createElement(a)}if(typeof b!="undefined"){b.appendChild(c)}return c};Calendar._add_evs=function(a){with(Calendar){addEvent(a,"mouseover",dayMouseOver);addEvent(a,"mousedown",dayMouseDown);addEvent(a,"mouseout",dayMouseOut);if(is_ie){addEvent(a,"dblclick",dayMouseDblClick);a.setAttribute("unselectable",true)}}};Calendar.findMonth=function(a){if(typeof a.month!="undefined"){return a}else if(typeof a.parentNode.month!="undefined"){return a.parentNode}return null};Calendar.findYear=function(a){if(typeof a.year!="undefined"){return a}else if(typeof a.parentNode.year!="undefined"){return a.parentNode}return null};Calendar.showMonthsCombo=function(){var a=Calendar._C;if(!a){return false}var a=a;var b=a.activeDiv;var c=a.monthsCombo;if(a.hilitedMonth){Calendar.removeClass(a.hilitedMonth,"hilite")}if(a.activeMonth){Calendar.removeClass(a.activeMonth,"active")}var d=a.monthsCombo.getElementsByTagName("div")[a.date.getMonth()];Calendar.addClass(d,"active");a.activeMonth=d;var s=c.style;s.display="block";if(b.navtype<0)s.left=b.offsetLeft+"px";else{var e=c.offsetWidth;if(typeof e=="undefined")e=50;s.left=(b.offsetLeft+b.offsetWidth-e)+"px"}s.top=(b.offsetTop+b.offsetHeight)+"px"};Calendar.showYearsCombo=function(a){var b=Calendar._C;if(!b){return false}var b=b;var c=b.activeDiv;var d=b.yearsCombo;if(b.hilitedYear){Calendar.removeClass(b.hilitedYear,"hilite")}if(b.activeYear){Calendar.removeClass(b.activeYear,"active")}b.activeYear=null;var Y=b.date.getFullYear()+(a?1:-1);var e=d.firstChild;var f=false;for(var i=12;i>0;--i){if(Y>=b.minYear&&Y<=b.maxYear){e.innerHTML=Y;e.year=Y;e.style.display="block";f=true}else{e.style.display="none"}e=e.nextSibling;Y+=a?b.yearStep:-b.yearStep}if(f){var s=d.style;s.display="block";if(c.navtype<0)s.left=c.offsetLeft+"px";else{var g=d.offsetWidth;if(typeof g=="undefined")g=50;s.left=(c.offsetLeft+c.offsetWidth-g)+"px"}s.top=(c.offsetTop+c.offsetHeight)+"px"}};Calendar.tableMouseUp=function(a){var b=Calendar._C;if(!b){return false}if(b.timeout){clearTimeout(b.timeout)}var c=b.activeDiv;if(!c){return false}var d=Calendar.getTargetElement(a);a||(a=window.event);Calendar.removeClass(c,"active");if(d==c||d.parentNode==c){Calendar.cellClick(c,a)}var e=Calendar.findMonth(d);var f=null;if(e){f=new Date(b.date);if(e.month!=f.getMonth()){f.setMonth(e.month);b.setDate(f);b.dateClicked=false;b.callHandler()}}else{var g=Calendar.findYear(d);if(g){f=new Date(b.date);if(g.year!=f.getFullYear()){f.setFullYear(g.year);b.setDate(f);b.dateClicked=false;b.callHandler()}}}with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);b._hideCombos();_C=null;return stopEvent(a)}};Calendar.tableMouseOver=function(a){var b=Calendar._C;if(!b){return}var c=b.activeDiv;var d=Calendar.getTargetElement(a);if(d==c||d.parentNode==c){Calendar.addClass(c,"hilite active");Calendar.addClass(c.parentNode,"rowhilite")}else{if(typeof c.navtype=="undefined"||(c.navtype!=50&&(c.navtype==0||Math.abs(c.navtype)>2)))Calendar.removeClass(c,"active");Calendar.removeClass(c,"hilite");Calendar.removeClass(c.parentNode,"rowhilite")}a||(a=window.event);if(c.navtype==50&&d!=c){var e=Calendar.getAbsolutePos(c);var w=c.offsetWidth;var x=a.clientX;var f;var g=true;if(x>e.x+w){f=x-e.x-w;g=false}else f=e.x-x;if(f<0)f=0;var h=c._range;var j=c._current;var k=Math.floor(f/10)%h.length;for(var i=h.length;--i>=0;)if(h[i]==j)break;while(k-->0)if(g){if(--i<0)i=h.length-1}else if(++i>=h.length)i=0;var l=h[i];c.innerHTML=l;b.onUpdateTime()}var m=Calendar.findMonth(d);if(m){if(m.month!=b.date.getMonth()){if(b.hilitedMonth){Calendar.removeClass(b.hilitedMonth,"hilite")}Calendar.addClass(m,"hilite");b.hilitedMonth=m}else if(b.hilitedMonth){Calendar.removeClass(b.hilitedMonth,"hilite")}}else{if(b.hilitedMonth){Calendar.removeClass(b.hilitedMonth,"hilite")}var n=Calendar.findYear(d);if(n){if(n.year!=b.date.getFullYear()){if(b.hilitedYear){Calendar.removeClass(b.hilitedYear,"hilite")}Calendar.addClass(n,"hilite");b.hilitedYear=n}else if(b.hilitedYear){Calendar.removeClass(b.hilitedYear,"hilite")}}else if(b.hilitedYear){Calendar.removeClass(b.hilitedYear,"hilite")}}return Calendar.stopEvent(a)};Calendar.tableMouseDown=function(a){if(Calendar.getTargetElement(a)==Calendar.getElement(a)){return Calendar.stopEvent(a)}};Calendar.calDragIt=function(a){var b=Calendar._C;if(!(b&&b.dragging)){return false}var c;var d;if(Calendar.is_ie){d=window.event.clientY+document.body.scrollTop;c=window.event.clientX+document.body.scrollLeft}else{c=a.pageX;d=a.pageY}b.hideShowCovered();var e=b.element.style;e.left=(c-b.xOffs)+"px";e.top=(d-b.yOffs)+"px";return Calendar.stopEvent(a)};Calendar.calDragEnd=function(a){var b=Calendar._C;if(!b){return false}b.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(a)}b.hideShowCovered()};Calendar.dayMouseDown=function(a){var b=Calendar.getElement(a);if(b.disabled){return false}var c=b.calendar;c.activeDiv=b;Calendar._C=c;if(b.navtype!=300)with(Calendar){if(b.navtype==50){b._current=b.innerHTML;addEvent(document,"mousemove",tableMouseOver)}else addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",tableMouseOver);addClass(b,"hilite active");addEvent(document,"mouseup",tableMouseUp)}else if(c.isPopup){c._dragStart(a)}if(b.navtype==-1||b.navtype==1){if(c.timeout)clearTimeout(c.timeout);c.timeout=setTimeout("Calendar.showMonthsCombo()",250)}else if(b.navtype==-2||b.navtype==2){if(c.timeout)clearTimeout(c.timeout);c.timeout=setTimeout((b.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250)}else{c.timeout=null}return Calendar.stopEvent(a)};Calendar.dayMouseDblClick=function(a){Calendar.cellClick(Calendar.getElement(a),a||window.event);if(Calendar.is_ie){document.selection.empty()}};Calendar.dayMouseOver=function(a){var b=Calendar.getElement(a);if(Calendar.isRelated(b,a)||Calendar._C||b.disabled){return false}if(b.ttip){if(b.ttip.substr(0,1)=="_"){b.ttip=b.caldate.print(b.calendar.ttDateFormat)+b.ttip.substr(1)}b.calendar.tooltips.innerHTML=b.ttip}if(b.navtype!=300){Calendar.addClass(b,"hilite");if(b.caldate){Calendar.addClass(b.parentNode,"rowhilite")}}return Calendar.stopEvent(a)};Calendar.dayMouseOut=function(a){with(Calendar){var b=getElement(a);if(isRelated(b,a)||_C||b.disabled)return false;removeClass(b,"hilite");if(b.caldate)removeClass(b.parentNode,"rowhilite");if(b.calendar)b.calendar.tooltips.innerHTML=_TT["SEL_DATE"];return stopEvent(a)}};Calendar.cellClick=function(c,d){var e=c.calendar;var f=false;var g=false;var h=null;if(typeof c.navtype=="undefined"){if(e.currentDateEl){Calendar.removeClass(e.currentDateEl,"selected");Calendar.addClass(c,"selected");f=(e.currentDateEl==c);if(!f){e.currentDateEl=c}}e.date.setDateOnly(c.caldate);h=e.date;var j=!(e.dateClicked=!c.otherMonth);if(!j&&!e.currentDateEl)e._toggleMultipleDate(new Date(h));else g=!c.disabled;if(j)e._init(e.firstDayOfWeek,h)}else{if(c.navtype==200){Calendar.removeClass(c,"hilite");e.callCloseHandler();return}h=new Date(e.date);if(c.navtype==0)h.setDateOnly(new Date());e.dateClicked=false;var k=h.getFullYear();var l=h.getMonth();function setMonth(m){var a=h.getDate();var b=h.getMonthDays(m);if(a>b){h.setDate(b)}h.setMonth(m)};switch(c.navtype){case 400:Calendar.removeClass(c,"hilite");var n=Calendar._TT["ABOUT"];if(typeof n!="undefined"){n+=e.showsTime?Calendar._TT["ABOUT_TIME"]:""}else{n="Help and about box text is not translated into this language.\n"+"If you know this language and you feel generous please update\n"+"the corresponding file in \"lang\" subdir to match calendar-en.js\n"+"and send it back to <mihai_bazon@yahoo.com> to get it into the distribution  ;-)\n\n"+"Thank you!\n"+"http://dynarch.com/mishoo/calendar.epl\n"}alert(n);return;case-2:if(k>e.minYear){h.setFullYear(k-1)}break;case-1:if(l>0){setMonth(l-1)}else if(k-->e.minYear){h.setFullYear(k);setMonth(11)}break;case 1:if(l<11){setMonth(l+1)}else if(k<e.maxYear){h.setFullYear(k+1);setMonth(0)}break;case 2:if(k<e.maxYear){h.setFullYear(k+1)}break;case 100:e.setFirstDayOfWeek(c.fdow);return;case 50:var o=c._range;var p=c.innerHTML;for(var i=o.length;--i>=0;)if(o[i]==p)break;if(d&&d.shiftKey){if(--i<0)i=o.length-1}else if(++i>=o.length)i=0;var q=o[i];c.innerHTML=q;e.onUpdateTime();return;case 0:if((typeof e.getDateStatus=="function")&&e.getDateStatus(h,h.getFullYear(),h.getMonth(),h.getDate())){return false}break}if(!h.equalsTo(e.date)){e.setDate(h);g=true}else if(c.navtype==0)g=f=true}if(g){d&&e.callHandler()}if(f){Calendar.removeClass(c,"hilite");d&&e.callCloseHandler()}};Calendar.prototype.create=function(p){var q=null;if(!p){q=document.getElementsByTagName("body")[0];this.isPopup=true}else{q=p;this.isPopup=false}this.date=this.dateStr?new Date(this.dateStr):new Date();var r=Calendar.createElement("table");this.table=r;r.cellSpacing=0;r.cellPadding=0;r.calendar=this;Calendar.addEvent(r,"mousedown",Calendar.tableMouseDown);var s=Calendar.createElement("div");this.element=s;s.className="calendar";if(this.isPopup){s.style.position="absolute";s.style.display="none"}s.appendChild(r);var t=Calendar.createElement("thead",r);var u=null;var v=null;var w=this;var x=function(a,b,c){u=Calendar.createElement("td",v);u.colSpan=b;u.className="button";if(c!=0&&Math.abs(c)<=2)u.className+=" nav";Calendar._add_evs(u);u.calendar=w;u.navtype=c;u.innerHTML="<div unselectable='on'>"+a+"</div>";return u};v=Calendar.createElement("tr",t);var z=6;(this.isPopup)&&--z;(this.weekNumbers)&&++z;x("?",1,400).ttip=Calendar._TT["INFO"];this.title=x("",z,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";x("&#x00d7;",1,200).ttip=Calendar._TT["CLOSE"]}v=Calendar.createElement("tr",t);v.className="headrow";this._nav_py=x("&#x00ab;",1,-2);this._nav_py.ttip=Calendar._TT["PREV_YEAR"];this._nav_pm=x("&#x2039;",1,-1);this._nav_pm.ttip=Calendar._TT["PREV_MONTH"];this._nav_now=x(Calendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT["GO_TODAY"];this._nav_nm=x("&#x203a;",1,1);this._nav_nm.ttip=Calendar._TT["NEXT_MONTH"];this._nav_ny=x("&#x00bb;",1,2);this._nav_ny.ttip=Calendar._TT["NEXT_YEAR"];v=Calendar.createElement("tr",t);v.className="daynames";if(this.weekNumbers){u=Calendar.createElement("td",v);u.className="name wn";u.innerHTML=Calendar._TT["WK"]}for(var i=7;i>0;--i){u=Calendar.createElement("td",v);if(!i){u.navtype=100;u.calendar=this;Calendar._add_evs(u)}}this.firstdayname=(this.weekNumbers)?v.firstChild.nextSibling:v.firstChild;this._displayWeekdays();var A=Calendar.createElement("tbody",r);this.tbody=A;for(i=6;i>0;--i){v=Calendar.createElement("tr",A);if(this.weekNumbers){u=Calendar.createElement("td",v)}for(var j=7;j>0;--j){u=Calendar.createElement("td",v);u.calendar=this;Calendar._add_evs(u)}}if(this.showsTime){v=Calendar.createElement("tr",A);v.className="time";u=Calendar.createElement("td",v);u.className="time";u.colSpan=2;u.innerHTML=Calendar._TT["TIME"]||"&nbsp;";u=Calendar.createElement("td",v);u.className="time";u.colSpan=this.weekNumbers?4:3;(function(){function makeTimePart(a,b,c,d){var e=Calendar.createElement("span",u);e.className=a;e.innerHTML=b;e.calendar=w;e.ttip=Calendar._TT["TIME_PART"];e.navtype=50;e._range=[];if(typeof c!="number")e._range=c;else{for(var i=c;i<=d;++i){var f;if(i<10&&d>=10)f='0'+i;else f=''+i;e._range[e._range.length]=f}}Calendar._add_evs(e);return e};var g=w.date.getHours();var j=w.date.getMinutes();var k=!w.time24;var l=(g>12);if(k&&l)g-=12;var H=makeTimePart("hour",g,k?1:0,k?12:23);var n=Calendar.createElement("span",u);n.innerHTML=":";n.className="colon";var M=makeTimePart("minute",j,0,59);var o=null;u=Calendar.createElement("td",v);u.className="time";u.colSpan=2;if(k)o=makeTimePart("ampm",l?"pm":"am",["am","pm"]);else u.innerHTML="&nbsp;";w.onSetTime=function(){var a,g=this.date.getHours(),j=this.date.getMinutes();if(k){a=(g>=12);if(a)g-=12;if(g==0)g=12;o.innerHTML=a?"pm":"am"}H.innerHTML=(g<10)?("0"+g):g;M.innerHTML=(j<10)?("0"+j):j};w.onUpdateTime=function(){var a=this.date;var h=parseInt(H.innerHTML,10);if(k){if(/pm/i.test(o.innerHTML)&&h<12)h+=12;else if(/am/i.test(o.innerHTML)&&h==12)h=0}var d=a.getDate();var m=a.getMonth();var y=a.getFullYear();a.setHours(h);a.setMinutes(parseInt(M.innerHTML,10));a.setFullYear(y);a.setMonth(m);a.setDate(d);this.dateClicked=false;this.callHandler()}})()}else{this.onSetTime=this.onUpdateTime=function(){}}var B=Calendar.createElement("tfoot",r);v=Calendar.createElement("tr",B);v.className="footrow";u=x(Calendar._TT["SEL_DATE"],this.weekNumbers?8:7,300);u.className="ttip";if(this.isPopup){u.ttip=Calendar._TT["DRAG_TO_MOVE"];u.style.cursor="move"}this.tooltips=u;s=Calendar.createElement("div",this.element);this.monthsCombo=s;s.className="combo";for(i=0;i<Calendar._MN.length;++i){var C=Calendar.createElement("div");C.className=Calendar.is_ie?"label-IEfix":"label";C.month=i;C.innerHTML=Calendar._SMN[i];s.appendChild(C)}s=Calendar.createElement("div",this.element);this.yearsCombo=s;s.className="combo";for(i=12;i>0;--i){var D=Calendar.createElement("div");D.className=Calendar.is_ie?"label-IEfix":"label";s.appendChild(D)}this._init(this.firstDayOfWeek,this.date);q.appendChild(this.element)};Calendar._keyEvent=function(b){var c=window._dynarch_popupCalendar;if(!c||c.multiple)return false;(Calendar.is_ie)&&(b=window.event);var d=(Calendar.is_ie||b.type=="keypress"),K=b.keyCode;if(b.ctrlKey){switch(K){case 37:d&&Calendar.cellClick(c._nav_pm);break;case 38:d&&Calendar.cellClick(c._nav_py);break;case 39:d&&Calendar.cellClick(c._nav_nm);break;case 40:d&&Calendar.cellClick(c._nav_ny);break;default:return false}}else switch(K){case 32:Calendar.cellClick(c._nav_now);break;case 27:d&&c.callCloseHandler();break;case 37:case 38:case 39:case 40:if(d){var e,x,y,ne,el,step;e=K==37||K==38;step=(K==37||K==39)?1:7;function setVars(){el=c.currentDateEl;var p=el.pos;x=p&15;y=p>>4;ne=c.ar_days[y][x]};setVars();function prevMonth(){var a=new Date(c.date);a.setDate(a.getDate()-step);c.setDate(a)};function nextMonth(){var a=new Date(c.date);a.setDate(a.getDate()+step);c.setDate(a)};while(1){switch(K){case 37:if(--x>=0)ne=c.ar_days[y][x];else{x=6;K=38;continue}break;case 38:if(--y>=0)ne=c.ar_days[y][x];else{prevMonth();setVars()}break;case 39:if(++x<7)ne=c.ar_days[y][x];else{x=0;K=40;continue}break;case 40:if(++y<c.ar_days.length)ne=c.ar_days[y][x];else{nextMonth();setVars()}break}break}if(ne){if(!ne.disabled)Calendar.cellClick(ne);else if(e)prevMonth();else nextMonth()}}break;case 13:if(d)Calendar.cellClick(c.currentDateEl,b);break;default:return false}return Calendar.stopEvent(b)};Calendar.prototype._init=function(a,b){var c=new Date(),TY=c.getFullYear(),TM=c.getMonth(),TD=c.getDate();this.table.style.visibility="hidden";var d=b.getFullYear();if(d<this.minYear){d=this.minYear;b.setFullYear(d)}else if(d>this.maxYear){d=this.maxYear;b.setFullYear(d)}this.firstDayOfWeek=a;this.date=new Date(b);var e=b.getMonth();var f=b.getDate();var g=b.getMonthDays();b.setDate(1);var h=(b.getDay()-this.firstDayOfWeek)%7;if(h<0)h+=7;b.setDate(-h);b.setDate(b.getDate()+1);var k=this.tbody.firstChild;var l=Calendar._SMN[e];var m=this.ar_days=new Array();var n=Calendar._TT["WEEKEND"];var o=this.multiple?(this.datesCells={}):null;for(var i=0;i<6;++i,k=k.nextSibling){var p=k.firstChild;if(this.weekNumbers){p.className="day wn";p.innerHTML=b.getWeekNumber();p=p.nextSibling}k.className="daysrow";var q=false,iday,dpos=m[i]=[];for(var j=0;j<7;++j,p=p.nextSibling,b.setDate(iday+1)){iday=b.getDate();var r=b.getDay();p.className="day";p.pos=i<<4|j;dpos[j]=p;var s=(b.getMonth()==e);if(!s){if(this.showsOtherMonths){p.className+=" othermonth";p.otherMonth=true}else{p.className="emptycell";p.innerHTML="&nbsp;";p.disabled=true;continue}}else{p.otherMonth=false;q=true}p.disabled=false;p.innerHTML=this.getDateText?this.getDateText(b,iday):iday;if(o)o[b.print("%Y%m%d")]=p;if(this.getDateStatus){var t=this.getDateStatus(b,d,e,iday);if(this.getDateToolTip){var u=this.getDateToolTip(b,d,e,iday);if(u)p.title=u}if(t===true){p.className+=" disabled";p.disabled=true}else{if(/disabled/i.test(t))p.disabled=true;p.className+=" "+t}}if(!p.disabled){p.caldate=new Date(b);p.ttip="_";if(!this.multiple&&s&&iday==f&&this.hiliteToday){p.className+=" selected";this.currentDateEl=p}if(b.getFullYear()==TY&&b.getMonth()==TM&&iday==TD){p.className+=" today";p.ttip+=Calendar._TT["PART_TODAY"]}if(n.indexOf(r.toString())!=-1)p.className+=p.otherMonth?" oweekend":" weekend"}}if(!(q||this.showsOtherMonths))k.className="emptyrow"}this.title.innerHTML=Calendar._MN[e]+", "+d;this.onSetTime();this.table.style.visibility="visible";this._initMultipleDates()};Calendar.prototype._initMultipleDates=function(){if(this.multiple){for(var i in this.multiple){var a=this.datesCells[i];var d=this.multiple[i];if(!d)continue;if(a)a.className+=" selected"}}};Calendar.prototype._toggleMultipleDate=function(a){if(this.multiple){var b=a.print("%Y%m%d");var c=this.datesCells[b];if(c){var d=this.multiple[b];if(!d){Calendar.addClass(c,"selected");this.multiple[b]=a}else{Calendar.removeClass(c,"selected");delete this.multiple[b]}}}};Calendar.prototype.setDateToolTipHandler=function(a){this.getDateToolTip=a};Calendar.prototype.setDate=function(a){if(!a.equalsTo(this.date)){this._init(this.firstDayOfWeek,a)}};Calendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date)};Calendar.prototype.setFirstDayOfWeek=function(a){this._init(a,this.date);this._displayWeekdays()};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(a){this.getDateStatus=a};Calendar.prototype.setRange=function(a,z){this.minYear=a;this.maxYear=z};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat))}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this)}this.hideShowCovered()};Calendar.prototype.destroy=function(){var a=this.element.parentNode;a.removeChild(this.element);Calendar._C=null;window._dynarch_popupCalendar=null};Calendar.prototype.reparent=function(a){var b=this.element;b.parentNode.removeChild(b);a.appendChild(b)};Calendar._checkCalendar=function(a){var b=window._dynarch_popupCalendar;if(!b){return false}var c=Calendar.is_ie?Calendar.getElement(a):Calendar.getTargetElement(a);for(;c!=null&&c!=b.element;c=c.parentNode);if(c==null){window._dynarch_popupCalendar.callCloseHandler();return Calendar.stopEvent(a)}};Calendar.prototype.show=function(){var a=this.table.getElementsByTagName("tr");for(var i=a.length;i>0;){var b=a[--i];Calendar.removeClass(b,"rowhilite");var c=b.getElementsByTagName("td");for(var j=c.length;j>0;){var d=c[--j];Calendar.removeClass(d,"hilite");Calendar.removeClass(d,"active")}}this.element.style.display="block";this.hidden=false;if(this.isPopup){window._dynarch_popupCalendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar)}this.hideShowCovered()};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar)}this.element.style.display="none";this.hidden=true;this.hideShowCovered()};Calendar.prototype.showAt=function(x,y){var s=this.element.style;s.left=x+"px";s.top=y+"px";this.show()};Calendar.prototype.showAtElement=function(e,f){var g=this;var p=Calendar.getAbsolutePos(e);if(!f||typeof f!="string"){this.showAt(p.x,p.y+e.offsetHeight);return true}function fixPosition(a){if(a.x<0)a.x=0;if(a.y<0)a.y=0;var b=document.createElement("div");var s=b.style;s.position="absolute";s.right=s.bottom=s.width=s.height="0px";document.body.appendChild(b);var c=Calendar.getAbsolutePos(b);document.body.removeChild(b);if(Calendar.is_ie){c.y+=document.body.scrollTop;c.x+=document.body.scrollLeft}else{c.y+=window.scrollY;c.x+=window.scrollX}var d=a.x+a.width-c.x;if(d>0)a.x-=d;d=a.y+a.height-c.y;if(d>0)a.y-=d};this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var w=g.element.offsetWidth;var h=g.element.offsetHeight;g.element.style.display="none";var a=f.substr(0,1);var b="l";if(f.length>1){b=f.substr(1,1)}switch(a){case"T":p.y-=h;break;case"B":p.y+=e.offsetHeight;break;case"C":p.y+=(e.offsetHeight-h)/2;break;case"t":p.y+=e.offsetHeight-h;break;case"b":break}switch(b){case"L":p.x-=w;break;case"R":p.x+=e.offsetWidth;break;case"C":p.x+=(e.offsetWidth-w)/2;break;case"l":p.x+=e.offsetWidth-w;break;case"r":break}p.width=w;p.height=h+40;g.monthsCombo.style.display="none";fixPosition(p);g.showAt(p.x,p.y)};if(Calendar.is_khtml)setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else Calendar.continuation_for_the_fucking_khtml_browser()};Calendar.prototype.setDateFormat=function(a){this.dateFormat=a};Calendar.prototype.setTtDateFormat=function(a){this.ttDateFormat=a};Calendar.prototype.parseDate=function(a,b){if(!b)b=this.dateFormat;this.setDate(Date.parseDate(a,b))};Calendar.prototype.hideShowCovered=function(){if(!Calendar.is_ie&&!Calendar.is_opera)return;function getVisib(a){var b=a.style.visibility;if(!b){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml)b=document.defaultView.getComputedStyle(a,"").getPropertyValue("visibility");else b=''}else if(a.currentStyle){b=a.currentStyle.visibility}else b=''}return b};var c=new Array("applet","iframe","select");var d=this.element;var p=Calendar.getAbsolutePos(d);var e=p.x;var f=d.offsetWidth+e;var g=p.y;var h=d.offsetHeight+g;for(var k=c.length;k>0;){var j=document.getElementsByTagName(c[--k]);var l=null;for(var i=j.length;i>0;){l=j[--i];p=Calendar.getAbsolutePos(l);var m=p.x;var n=l.offsetWidth+m;var o=p.y;var q=l.offsetHeight+o;if(this.hidden||(m>f)||(n<e)||(o>h)||(q<g)){if(!l.__msh_save_visibility){l.__msh_save_visibility=getVisib(l)}l.style.visibility=l.__msh_save_visibility}else{if(!l.__msh_save_visibility){l.__msh_save_visibility=getVisib(l)}l.style.visibility="hidden"}}}};Calendar.prototype._displayWeekdays=function(){var a=this.firstDayOfWeek;var b=this.firstdayname;var c=Calendar._TT["WEEKEND"];for(var i=0;i<7;++i){b.className="day name";var d=(i+a)%7;if(i){b.ttip=Calendar._TT["DAY_FIRST"].replace("%s",Calendar._DN[d]);b.navtype=100;b.calendar=this;b.fdow=d;Calendar._add_evs(b)}if(c.indexOf(d.toString())!=-1){Calendar.addClass(b,"weekend")}b.innerHTML=Calendar._SDN[(i+a)%7];b=b.nextSibling}};Calendar.prototype._hideCombos=function(){this.monthsCombo.style.display="none";this.yearsCombo.style.display="none"};Calendar.prototype._dragStart=function(a){if(this.dragging){return}this.dragging=true;var b;var c;if(Calendar.is_ie){c=window.event.clientY+document.body.scrollTop;b=window.event.clientX+document.body.scrollLeft}else{c=a.clientY+window.scrollY;b=a.clientX+window.scrollX}var d=this.element.style;this.xOffs=b-parseInt(d.left);this.yOffs=c-parseInt(d.top);with(Calendar){addEvent(document,"mousemove",calDragIt);addEvent(document,"mouseup",calDragEnd)}};Date._MD=new Array(31,28,31,30,31,30,31,31,30,31,30,31);Date.SECOND=1000;Date.MINUTE=60*Date.SECOND;Date.HOUR=60*Date.MINUTE;Date.DAY=24*Date.HOUR;Date.WEEK=7*Date.DAY;Date.parseDate=function(c,e){var f=new Date();var y=0;var m=-1;var d=0;var a=c.split(/\W+/);var b=e.match(/%./g);var i=0,j=0;var g=0;var h=0;for(i=0;i<a.length;++i){if(!a[i])continue;switch(b[i]){case"%d":case"%e":d=parseInt(a[i],10);break;case"%m":m=parseInt(a[i],10)-1;break;case"%Y":case"%y":y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);break;case"%b":case"%B":for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break}}break;case"%H":case"%I":case"%k":case"%l":g=parseInt(a[i],10);break;case"%P":case"%p":if(/pm/i.test(a[i])&&g<12)g+=12;else if(/am/i.test(a[i])&&g>=12)g-=12;break;case"%M":h=parseInt(a[i],10);break}}if(isNaN(y))y=f.getFullYear();if(isNaN(m))m=f.getMonth();if(isNaN(d))d=f.getDate();if(isNaN(g))g=f.getHours();if(isNaN(h))h=f.getMinutes();if(y!=0&&m!=-1&&d!=0)return new Date(y,m,d,g,h,0);y=0;m=-1;d=0;for(i=0;i<a.length;++i){if(a[i].search(/[a-zA-Z]+/)!=-1){var t=-1;for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){t=j;break}}if(t!=-1){if(m!=-1){d=m+1}m=t}}else if(parseInt(a[i],10)<=12&&m==-1){m=a[i]-1}else if(parseInt(a[i],10)>31&&y==0){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000)}else if(d==0){d=a[i]}}if(y==0)y=f.getFullYear();if(m!=-1&&d!=0)return new Date(y,m,d,g,h,0);return f};Date.prototype.getMonthDays=function(a){var b=this.getFullYear();if(typeof a=="undefined"){a=this.getMonth()}if(((0==(b%4))&&((0!=(b%100))||(0==(b%400))))&&a==1){return 29}else{return Date._MD[a]}};Date.prototype.getDayOfYear=function(){var a=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var b=new Date(this.getFullYear(),0,0,0,0,0);var c=a-b;return Math.floor(c/Date.DAY)};Date.prototype.getWeekNumber=function(){var d=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var a=d.getDay();d.setDate(d.getDate()-(a+6)%7+3);var b=d.valueOf();d.setMonth(0);d.setDate(4);return Math.round((b-d.valueOf())/(7*864e5))+1};Date.prototype.equalsTo=function(a){return((this.getFullYear()==a.getFullYear())&&(this.getMonth()==a.getMonth())&&(this.getDate()==a.getDate())&&(this.getHours()==a.getHours())&&(this.getMinutes()==a.getMinutes()))};Date.prototype.setDateOnly=function(a){var b=new Date(a);this.setDate(1);this.setFullYear(b.getFullYear());this.setMonth(b.getMonth());this.setDate(b.getDate())};Date.prototype.print=function(b){var m=this.getMonth();var d=this.getDate();var y=this.getFullYear();var c=this.getWeekNumber();var w=this.getDay();var s={};var e=this.getHours();var f=(e>=12);var g=(f)?(e-12):e;var h=this.getDayOfYear();if(g==0)g=12;var j=this.getMinutes();var k=this.getSeconds();s["%a"]=Calendar._SDN[w];s["%A"]=Calendar._DN[w];s["%b"]=Calendar._SMN[m];s["%B"]=Calendar._MN[m];s["%C"]=1+Math.floor(y/100);s["%d"]=(d<10)?("0"+d):d;s["%e"]=d;s["%H"]=(e<10)?("0"+e):e;s["%I"]=(g<10)?("0"+g):g;s["%j"]=(h<100)?((h<10)?("00"+h):("0"+h)):h;s["%k"]=e;s["%l"]=g;s["%m"]=(m<9)?("0"+(1+m)):(1+m);s["%M"]=(j<10)?("0"+j):j;s["%n"]="\n";s["%p"]=f?"PM":"AM";s["%P"]=f?"pm":"am";s["%s"]=Math.floor(this.getTime()/1000);s["%S"]=(k<10)?("0"+k):k;s["%t"]="\t";s["%U"]=s["%W"]=s["%V"]=(c<10)?("0"+c):c;s["%u"]=w+1;s["%w"]=w;s["%y"]=(''+y).substr(2,2);s["%Y"]=y;s["%%"]="%";var l=/%./g;if(!Calendar.is_ie5&&!Calendar.is_khtml)return b.replace(l,function(a){return s[a]||a});var a=b.match(l);for(var i=0;i<a.length;i++){var n=s[a[i]];if(n){l=new RegExp(a[i],'g');b=b.replace(l,n)}}return b};if(!Date.prototype.__msh_oldSetFullYear){Date.prototype.__msh_oldSetFullYear=Date.prototype.setFullYear;Date.prototype.setFullYear=function(y){var d=new Date(this);d.__msh_oldSetFullYear(y);if(d.getMonth()!=this.getMonth())this.setDate(28);this.__msh_oldSetFullYear(y)}}window._dynarch_popupCalendar=null;
Calendar._DN=new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");Calendar._SDN=new Array("So","Mo","Die","Mi","Do","Fr","Sa","So");Calendar._FD=1;Calendar._MN=new Array("Januar","Februar","Maerz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");Calendar._SMN=new Array("Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez");Calendar._TT={};Calendar._TT["INFO"]="\u00DCber dieses Kalendarmodul";Calendar._TT["ABOUT"]="Datum ausw\u00e4hlen:\n"+"- Benutzen Sie die \xab, \xbb Buttons um das Jahr zu w\u00e4hlen\n"+"- Benutzen Sie die "+String.fromCharCode(0x2039)+", "+String.fromCharCode(0x203a)+" Buttons um den Monat zu w\u00e4hlen\n"+"- F\u00fcr eine Schnellauswahl halten Sie die Maustaste \u00fcber diesen Buttons fest.";Calendar._TT["ABOUT_TIME"]="\n\n"+"Zeit ausw\u00e4hlen:\n"+"- Klicken Sie auf die Teile der Uhrzeit, um diese zu erh\u00F6hen\n"+"- oder klicken Sie mit festgehaltener Shift-Taste um diese zu verringern\n"+"- oder klicken und festhalten f\u00fcr Schnellauswahl.";Calendar._TT["TOGGLE"]="Ersten Tag der Woche w\u00e4hlen";Calendar._TT["PREV_YEAR"]="Voriges Jahr (Festhalten f\u00fcr Schnellauswahl)";Calendar._TT["PREV_MONTH"]="Voriger Monat (Festhalten f\u00fcr Schnellauswahl)";Calendar._TT["GO_TODAY"]="Heute ausw\u00e4hlen";Calendar._TT["NEXT_MONTH"]="N\u00e4chst. Monat (Festhalten f\u00fcr Schnellauswahl)";Calendar._TT["NEXT_YEAR"]="N\u00e4chst. Jahr (Festhalten f\u00fcr Schnellauswahl)";Calendar._TT["SEL_DATE"]="Datum ausw\u00e4hlen";Calendar._TT["DRAG_TO_MOVE"]="Zum Bewegen festhalten";Calendar._TT["PART_TODAY"]=" (Heute)";Calendar._TT["DAY_FIRST"]="Woche beginnt mit %s ";Calendar._TT["WEEKEND"]="0,6";Calendar._TT["CLOSE"]="Schlie\u00dfen";Calendar._TT["TODAY"]="Heute";Calendar._TT["TIME_PART"]="(Shift-)Klick oder Festhalten und Ziehen um den Wert zu \u00e4ndern";Calendar._TT["DEF_DATE_FORMAT"]="%d.%m.%Y";Calendar._TT["TT_DATE_FORMAT"]="%a, %b %e";Calendar._TT["WK"]="wk";Calendar._TT["TIME"]="Zeit:";
Calendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def;}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code");return false;}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange();}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal);}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("Calendar.setup:\n  Flat specified but can't find parent.");return false;}var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value);}cal.create(params.flat);cal.show();return false;}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&&params.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true;}else{if(params.date)cal.setDate(params.date);cal.hide();}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d;}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false;};return cal;};
