var iCalDateMaxDay  = 30;
	var iCalDateNextDay = 2;
	var iCalDateStay    = 2;
	var iDaysAdd    = (1000*60*60*24*(iCalDateStay-1)); // 2 Tage
	var iDaysNext   = (1000*60*60*24*(iCalDateNextDay-1)); // 2 Tage
	var iDaysMax    = (1000*60*60*24*(iCalDateMaxDay-1)); // 2 Tage
	var oOptionHelper = 0;
	var iDayDiff      = 7;
	var aDestinationCache 	= new Array();
	var sDestCache			= '';
	var aOriginCache 		= new Array();
	var sOrigCache			= '';
	var bBlockSearch        = 0;
	var aCarDest			= new Array();

/**************************************************************
 * Setzt den Monat und das Jahr
 **************************************************************/
    function setMonthYear() {
        var sMonthYear = getElem('name',sPrefix+'start_datum_monthyear',0).value;
        getElem('name',sPrefix+'start_datum_month',0).value = sMonthYear.substring(0,2);
        getElem('name',sPrefix+'start_datum_year',0).value  = sMonthYear.substring(2);
    }

/**************************************************************
 * Setzt die Dauer
 **************************************************************/
    function changeRd(iVal) {
        getElem('name',sPrefix+'rd_max',0).value = iVal;
    }

/**************************************************************
 * Setzt die Flexibilit�t
 **************************************************************/
    function changeFlex(iVal) {
        getElem('name',sPrefix+'flexr',0).value = iVal;
    }

    function MM_getErrorMsg(sKey) {
        var sFehler = '';
        try {
            sFehler = eval(sKey);
        } catch (e) {
            sFehler = '';
        }
        if (sFehler == '') {
            sFehler = 'Unbekannter Fehler!';
        }
        return sFehler;
    }

/**************************************************************
 * Setzt die Origins zu Destination
 **************************************************************/

    function MM_changeDestination() {
        if (bBlockSearch==1)
                return false;
        bBlockSearch = 1;
	var _iId = 0;
        var _sSa = getElem('name','sa',0).value;
        if (_sSa=='HTR') {
                _iId = 2;
        }
        if (_sSa=='FLR') {
                _iId = 1;
        }
        if (getElem('name',sPrefix+'sa',0).value == 'HTR' || bMMRit==1)
                return true;
        try {
                var oMMzo     = getElem('name',sPrefix+'rzo',0);
        } catch(e) {
                var oMMzo     = getElem('id','rzo',0);
        }
        try {
                if(oMMzo.value!='' && getElem('name',sPrefix+'sa',0).value == 'PAR')
        	        if (MM_isCarDest(oMMzo.value))
                                MM_showCar();
                        else
                                MM_hideCar()
        } catch (e) {alert(e)}
        var cFoah = "";
        var oMMfoah   = getElem('name',sPrefix+'rfoah',0);
        //oMMfoah.disabled = true;
        try {
                try { cZo = oMMzo.value; } catch(e) { }
                try { cFoah = oMMfoah.value; } catch(e) { }
                var outDest  = Object(); var i = 0; iiLand = -1;
                if (cZo=="")
		{
                        for (key in aOriginStruct)
                        {
                             outDest[key]= aOriginStruct[key];
                             i = i+1;

			}
		}
                else
                        for (key in aOriginStruct)
				if (typeof aDestOrigin[key][cZo] == 'string')
               		             outDest[key]= aOriginStruct[key];
                var sOut = '<select class="mmSelect" id="foah" name="'+sPrefix+'foah" onChange="this.blur();MM_changeOrigin();" style="margin-top:1px;display:block;width:100%;">';
                var sOut = '';
                sOut = sOut + '<option value="">Abflughafen w&auml;hlen...</option>';
                for (ikey in outDest)
		{
		    sOut = sOut + '<option value="'+ikey+'"';
		    if (ikey==cFoah)
	                sOut = sOut + ' selected="selected"';
		    sOut = sOut + '>'+outDest[ikey]+'</option>';
		}
                sOut = sOut; // + '</select>';
                MM_setOrigins(sOut);
                try {
                        getElem('name','mmSubmit',0).focus();
                        oMMzo.blur();
                        oMMfoah.blur();
                } catch (e) {
		}
        } catch (e) {
                bBlockSearch = 0;
	}
    }

    function MM_setOrigins(sHtml) {
    	bInitSelectOrigin   = 1;
	setHTML('id', 'foah', 0, sHtml);
	bBlockSearch = 0;
	if (bInitSelectDest==0) {
//		MM_changeOrigin();
	}
    }

/**************************************************************
 * Blendet den Mietwagen aus
 **************************************************************/
	function MM_hideCar() {
		try{getElem('id','mmIconCar',0).style.visibility        = "hidden";} catch (e) {}
		try{getElem('name',sPrefix+'car',0).style.display       = "none";} catch (e) {}
		try{getElem('id','mmCarTitle',0).style.display          = "none";} catch (e) {}
		try{getElem('name',sPrefix+'car',0).checked = false;} catch (e) {}
	}

/**************************************************************
 * Blendet den Mietwagen aus
 **************************************************************/
	function MM_showCar() {
		try{getElem('id','mmIconCar',0).style.visibility        = "visible";} catch (e) {}
		try{getElem('name',sPrefix+'car',0).style.display       = "block";} catch (e) {}
		try{getElem('id','mmCarTitle',0).style.display          = "block";} catch (e) {}
	}

	function MM_isCarDest(sVal) {
		for (var i=0;i<aCarDest.length;i++) {
			if (aCarDest[i]==sVal) {
				return true;
			}
		}
		return false;
	}

/**************************************************************
 * Setzen der Geburtsdaten
 **************************************************************/
	function MM_setKidsBirthFromRequest() {
	    var aData = new Array();
	    //alert(aKidsBirth);
	    for(var i=0;i<aKidsBirth.length;i++) {
	        aData = aKidsBirth[i].split('-');
	        getElem('name','mmKid'+(i+1)+'Day',0).value    = aData[0];
	        getElem('name','mmKid'+(i+1)+'Month',0).value  = aData[1];
	        getElem('name','mmKid'+(i+1)+'Year',0).value   = aData[2];
	    }
	}

/**************************************************************
 * Setzt die Destinations zu Origin
 **************************************************************/
	function MM_changeCarOrigin() {
		MM_changeOrigin();
	}
    function MM_changeOrigin() {
        if (bBlockSearch==1)
                return false;
        bBlockSearch = 1;
        var sOut = '';
        try {
                var oMMzo     = getElem('name',sPrefix+'rzo',0);
//                oMMzo.disabled = true;
        } catch(e) {
                var oMMzo     = getElem('id','rzo',0);
  //              oMMzo.disabled = true;
        }
        var _iId = 0;
        var _sSa = getElem('name','sa',0).value;
        if (_sSa=='HTR') {
                _iId = 2;
        }
        if (_sSa=='FLR') {
                _iId = 1;
        }

	var cFoah = "";
        var oMMfoah   = getElem('name',sPrefix+'rfoah',0);
        try {
	    try { cZo = oMMzo.value; } catch(e) { }
	    try { cFoah = oMMfoah.value; } catch(e) { }
	    var outDest  = Array(); var optGroup = Array(); var i = 0; iiLand = -1;
	    if (_iId!=2)
	    {
        	if (cFoah=="")
		{
                        aOutput = Object();
                        for (key in aDestOrigin)
			{
                            for (val in aDestOrigin[key])
			    {
				if (typeof aOutput[val]  == 'string')
				{
				}
				else
				{
					aOutput[val] = "1";
				}
			    }
			}
		}
		else
		{
	                aOutput = aDestOrigin[cFoah];
		}

		if (_iId==1) {
			var aOutput2 = Object();
			for (ii=0; ii<aCarDest.length; ii++)
                //                if (typeof aOutput[aCarDest[ii]] == 'string')  
					aOutput2[aCarDest[ii]] = "1";
			aOutput = aOutput2;
		}

	        for(ii=0; ii<aDestStruct.length; ii++) 
		{
          	        for (key in aDestStruct[ii])
			{
		  	        var found = aOutput[key];
		    		if ((typeof found == 'object')||(typeof found == 'string')) 
				{
					optGroup[i] = 0;
					if (iiLand>=0)
					{
			    			outDest[i]= aDestStruct[iiLand];
	                                        if (iiLand>0) 
							optGroup[i] = 1;
			    			i = i+1;
                            			iiLand = -1;
					}
		  	  	        outDest[i]  = aDestStruct[ii];
				        i = i+1;
				}
				else
				{
	               			for (ikey in aDestStruct[ii])
					{
						tmp_ziel = aDestStruct[ii][ikey]+"";
						if ((tmp_ziel.substr(0,2)!="--")&&(tmp_ziel.substr(0,2)!="++"))
//						if ((tmp_ziel[0]!="-" && tmp_ziel[1]!="-")&&(tmp_ziel[0]!="+" && tmp_ziel[1]!="+"))
			 				iiLand = ii;
						if (tmp_ziel.substr(0,2)=="++" && (ikey=="ZZZ" || ikey=="123"))
						{
							outDest[i]  = aDestStruct[ii];
							i = i+1;
						}
		       			}
		    		}
              		}
        	}
		var bfound_optgroup = 0;
	        var sOut = '<select class="mmSelect" id="zo" name="'+sPrefix+'zo" onChange="this.blur(); if (this.options[this.selectedIndex].disabled) this.selectedIndex=this.selectedIndex+1; this.blur(); MM_changeDestination();" style="margin-top:1px;display:block;width:100%;">';
              var sOut = '';
        	sOut = sOut + '<option value="">Reiseziel w&auml;hlen...</option>';
        	for(ii=0; ii<outDest.length; ii++)
    	  		for (ikey in outDest[ii])
			{
			    zoStr = outDest[ii][ikey];
			    if (zoStr.substr(0,2)=="++")
			        zoStr = zoStr.substring(3,zoStr.length);
			    if (optGroup[ii]==1)
			    {
//				if (bfound_optgroup==1)
//				    sOut = sOut + '</optgroup>';
//				sOut = sOut + '<optgroup label="'+zoStr+'">';
sOut = sOut + '<option disabled>'+zoStr+'</option>';
				bfound_optgroup = 1;
			    }
			    else
			    {
				    if (ikey=="123")
				    {
//	                                    sOut = sOut + '<optgroup label="'+zoStr+'">';
sOut = sOut + '<option disabled>'+zoStr+'</option>';
	                                    bfound_optgroup = 1;
				    }
				    else
				    {
		                	    sOut = sOut + '<option value="'+ikey+'"';
		                    	    if (ikey==cZo)
        		                	sOut = sOut + ' selected="selected"';
	                		    sOut = sOut + '>'+zoStr+'</option>';
				    }
			    }
			}
//		if (bfound_optgroup==1)
//                    sOut = sOut + '</optgroup>';
        	sOut = sOut + '</select>';
	    } else {
		var sOut = '<select class="mmSelect" id="zo" name="'+sPrefix+'zo" style="margin-top:1px;display:block;width:100%;">';
                sOut = sOut + '<option value="">Reiseziel w&auml;hlen...</option>';
                for (ii_key in aRitDest)
		{
                        sOut = sOut + '<option value="'+ii_key+'"';
                        if (ii_key==cZo)
                             sOut = sOut + ' selected="selected"';
                        sOut = sOut + '>'+aRitDest[ii_key]+'</option>';
		}
                sOut = sOut; // + '</select>';
	    }
                MM_setDestinations(sOut);	
            try {
	        getElem('name','mmSubmit',0).focus();
                oMMzo.blur();
	        oMMfoah.blur();
	    } catch (e) {
	    }
	} catch (e) {
            bBlockSearch = 0;
//            oMMzo.disabled = false;
            oMMzo.innerHTML = getHTML('id','mmDestError',0);
        }
    }

    function MM_setDestinations(sHtml) {
    	bInitSelectDest   = 1;
		setHTML('id', 'zo', 0, sHtml);
		bBlockSearch = 0;
		if (bInitSelectOrigin==0) {
//			MM_changeDestination();
		}
    }

/**************************************************************
 * Initialisierung mit Standartwerten
 **************************************************************/
	var bInitSelectOrigin = 0;
	var bInitSelectDest   = 0;

    function MM_initSelect() {
        MM_changeOrigin();
    }

/**************************************************************
 * Nach getaner Arbeit aufr?umen
 **************************************************************/
	function MM_destructor(oEvent) {
		if (!oEvent) {
    		oEvent = window.event;
    	}
    	MM_hideWaiting();
        getElem('id','mmContent',0).style.display = 'block';
        getElem('id','mmKids',0).style.display    = 'none';
        if (bExpert==1) {
        	getElem('id','mmExt',0).style.display     = 'block';
        } else {
        	getElem('id','mmExt',0).style.display     = 'none';
        }
	}

/**************************************************************
 * Nach getaner Arbeit aufr?umen
 **************************************************************/
	function MM_hideCals(oEvent) {
		if (!oEvent) {
    		oEvent = window.event;
    	}
    	var oSrc;
    	try {
	    	if (MS == 1) oSrc = oEvent.srcElement;
			else oSrc = oEvent.target;
			var sId = getAttrObj(oSrc,'id');
	        if (sId!='mmCalHin' && sId!='mmCalRueck' && sId!=sPrefix+'start_datum' && sId!=sPrefix+'end_datum') {
		        MM_hideCal(0,'0');
		        MM_hideCal(1,'0');
	        } else {
	        	return;
	        }
    	} catch (e) {
    		return;
    	}
    	return;
	}

/**************************************************************
 * Leert die Fehlermeldungen
 **************************************************************/
    function MM_clearError(oEvent) {
    	if (!oEvent) {
    		oEvent = window.event;
    	}
    	MM_hideCals(oEvent);
    	try {
	        var oMain = getElem('id','mmMain',0);
	        for (var i=0;i<aErrorIds.length;i++) {
	            try { oMain.removeChild(getElem('id',aErrorIds[i],0)); } catch (e) {}
	        }
    	} catch(e) {}
        return;
    }

/**************************************************************
 * Kalender anzeigen
 * iId = welcher Kalender
 **************************************************************/
     function MM_showCal(iId) {
         try {
             MM_hideCal(iCalType,'0');
             var aValue = new Array();
             if (iId==0) {
                 var oCal   = getElem('id','mmCalHin',0);
                 var oDate  = getElem('id',sPrefix+'start_datum',0);
                 aValue = getElem('name',sPrefix+'start_datum',0).value.split('.');
                 iCalType = 0;
             } else {
                 var oCal   = getElem('id','mmCalRueck',0);
                 var oDate  = getElem('id',sPrefix+'end_datum',0);
                 aValue 	= getElem('name',sPrefix+'end_datum',0).value.split('.');
                 iCalType 	= 1;
             }
             try {
             	//if (MS==0) {
             		getElem('id','mmLtrFlashObj',0).style.display = 'none';
             		getElem('id','mmLtrFlashImg',0).style.display = 'inline';
             	//}
         	 } catch (e) {}
             MM_initCal(aValue[0],aValue[1],aValue[2]);
             oCal.innerHTML = sCalHTML;
             if (navigator.userAgent.indexOf('MSIE')==-1) {
               oCal.style.marginTop = '-65px';
               oCal.style.marginLeft = '82px';
             }
             oCal.style.display = 'inline';
             oDate.focus();
         } catch(e) {
            alert(e);
        }
     }

/**************************************************************
 * Kalender anzeigen
 * iId = welcher Kalender
 **************************************************************/
     function MM_showCalTime(sDay,sMonth,sYear) {
         var aValue = new Array();
         if (iCalType==0) {
             var oCal   = getElem('id','mmCalHin',0);
         } else {
             var oCal   = getElem('id','mmCalRueck',0);
         }
         sCalHTML = '';
         MM_initCal(sDay,sMonth,sYear);
         oCal.innerHTML = sCalHTML;
         oCal.style.display = 'inline';
     }

/**************************************************************
 * Kalender ausblenden
 **************************************************************/
     function MM_hideCal(iType,sFocus) {
         if (iType==1) {
             var oCal = getElem('id','mmCalRueck',0);
             var oDate  = getElem('id',sPrefix+'end_datum',0);
         } else {
             var oCal = getElem('id','mmCalHin',0);
             var oDate  = getElem('id',sPrefix+'start_datum',0);
         }
         try {
         	//if (MS==0) {
         		getElem('id','mmLtrFlashObj',0).style.display = 'block';
         		getElem('id','mmLtrFlashImg',0).style.display = 'none';
         	//}
         } catch (e) {}
         oCal.style.display = 'none';
         sCalHTML = '';
         if (sFocus!='0') {
         	oDate.focus();
         }
     }

/**************************************************************
 * Kalender initialisieren
 * sDay - ausgew�hlter Tag
 * sMonth - ausgew�hlter Monat
 * sYear - ausgew�hltes Jahr
 **************************************************************/
     function MM_initCal(sDay,sMonth,sYear) {
        if (iCalType==0) {
			iChgMonthStart = sMonth*1;
			iChgYearStart  = sYear*1;
			iChgDayStart   = sDay*1;
        } else {
    		iChgMonthEnd   = sMonth*1;
			iChgYearEnd    = sYear*1;
			iChgDayEnd     = sDay*1;
        }
        MM_setDate(iCalType,new Date(sYear,sMonth*1-1,sDay*1));
        Kalender(sMonth,sYear);
     }

     var sCalHTML = '';
     var iCalType = 0;

/**************************************************************
 * Kalender ausgabe schreiben und beenden
 * sDay - ausgew�hlter Tag
 * sMonth - ausgew�hlter Monat
 * sYear - ausgew�hltes Jahr
 **************************************************************/
    function MM_CalWriteDate(sDay) {
        if (iCalType==0) {
			var sMonth = iChgMonthStart;
        	var sYear  = iChgYearStart;
        	iChgDayStart = sDay*1;
        } else {
    		var sMonth = iChgMonthEnd;
			var sYear  = iChgYearEnd;
			iChgDayEnd = sDay*1;
        }
        if(MM_compareCal(iCalType)) {
            MM_setDate(iCalType,new Date(sYear*1,sMonth*1-1,sDay*1));
            MM_hideCal(iCalType,'1');
        }
    }

/**************************************************************
 * Setzt ein Datum
 * iId = Typ
 **************************************************************/
    function MM_setDate(iId,oDate) {
        var sYear    = oDate.getYear()*1;
        if(sYear < 999) sYear+=1900;
        var sDay     = oDate.getDate()*1;
        var sMonth   = (oDate.getMonth())*1+1;

        if (iId==0) {   var sPre = sPrefix+'start';
        } else {        var sPre = sPrefix+'end'; }

        getElem('name',sPre+'_datum',0).value = MM_CalFormatDateFromString(sDay,sMonth,sYear);
        getElem('name',sPre+'_datum_day',0).value   = sDay;
        getElem('name',sPre+'_datum_month',0).value = sMonth;
        getElem('name',sPre+'_datum_year',0).value  = sYear;
        return true;
    }


/**************************************************************
 * Kalender pr�fen
 * iId = Typ
 **************************************************************/
    function MM_compareCal(iId) {
    	if (iId==0) {
    		return MM_compareCalHin();
    	} else {
    		return MM_compareCalRueck();
    	}
    }

/**************************************************************
 * Kalender Hin prüfen
 * iId = Typ
 **************************************************************/
    function MM_compareCalHin() {
    	var oDateNow    = new Date();
    	var oDateEnd    = new Date( getElem('name',sPrefix+'end_datum_year',0).value*1,
                                    getElem('name',sPrefix+'end_datum_month',0).value*1-1,
                                    getElem('name',sPrefix+'end_datum_day',0).value*1);
    	var oDateStart  = new Date(iChgYearStart,(iChgMonthStart*1-1),iChgDayStart);
        var iMonthNow   = oDateNow.getMonth()*1;
        var iYearNow    = oDateNow.getYear()*1;
        if(iYearNow < 999) iYearNow+=1900;
        var iDayNow     = oDateNow.getDate()*1+iCalDateNextDay;

    	if ((oDateStart.getTime()-iDaysNext)<oDateNow.getTime()) {
            MM_hideCal(iCalType,'1');
            MM_setDate(0,new Date(iYearNow,iMonthNow,iDayNow));
            //alert('Bitte g&uuml;ltiges Datum w&auml;hlen (Heute+2)!');
            //MM_raiseError('foah','Bitte g&uuml;ltiges Datum w&auml;hlen (Heute+2)!',395,100,150,30,4);
            return false;
        }   /*
        if ((oDateEnd.getTime()-oDateStart.getTime())>iDaysMax) {
        	MM_setDate(1,new Date(oDateStart.getFullYear(),oDateStart.getMonth(),oDateStart.getDate()+iCalDateMaxDay));
            MM_raiseError('foah','Bitte g&uuml;ltiges Datum w&auml;hlen (MAX30)!',395,100,150,30,4);
            return false;
        }     */
        if ((oDateStart.getTime()+iDaysAdd)>oDateEnd.getTime()) {
        	MM_hideCal(iCalType,'1');
        	var iY = oDateStart.getFullYear();
        	if(iY < 999) iY+=1900;
            MM_setDate(1,new Date(iY,oDateStart.getMonth(),oDateStart.getDate()+iCalDateStay));
            //alert('Bitte g&uuml;ltiges Datum w&auml;hlen (Min 2)!');
            //MM_raiseError('foah','Bitte g&uuml;ltiges Datum w&auml;hlen (Min 2)!',395,100,150,30,4);
            return true;
        }
        return true;
    }

/**************************************************************
 * Kalender Rueck prüfen
 * iId = Typ
 **************************************************************/
    function MM_compareCalRueck() {
    	var oDateNow    = new Date();
    	var oDateStart  = new Date( getElem('name',sPrefix+'start_datum_year',0).value*1,
                                    getElem('name',sPrefix+'start_datum_month',0).value*1-1,
                                    getElem('name',sPrefix+'start_datum_day',0).value*1);
    	var oDateEnd    = new Date(iChgYearEnd,(iChgMonthEnd*1-1),iChgDayEnd);
        var iMonthNow   = oDateNow.getMonth()*1;
        var iYearNow    = oDateNow.getYear()*1;
        if(iYearNow < 999) iYearNow+=1900;
        var iDayNow     = oDateNow.getDate()*1+iCalDateNextDay;

    	if ((oDateEnd.getTime()-iDaysNext)<oDateNow.getTime()) {
            MM_hideCal(iCalType,'1');
            MM_setDate(1,new Date(iYearNow,iMonthNow,iDayNow+iCalDateStay));
            //alert('Bitte g&uuml;ltiges Datum w&auml;hlen (Heute+2)!');
            MM_raiseError('foah',MM_getErrorMsg('sErrorDateMin2DaysDiff'),395,150,150,30,4);
            return false;
        }   /*
        if ((oDateEnd.getTime()-oDateStart.getTime())>iDaysMax) {
        	MM_setDate(0,new Date(oDateEnd.getFullYear(),oDateEnd.getMonth(),oDateEnd.getDate()+iCalDateMaxDay));
            MM_raiseError('foah','Bitte g&uuml;ltiges Datum w&auml;hlen (MAX30)!',395,100,150,30,4);
            return false;
        }     */
        if ((oDateStart.getTime()+iDaysAdd)>oDateEnd.getTime()) {
        	MM_hideCal(iCalType,'1');
        	var iY = oDateEnd.getFullYear();
        	if(iY < 999) iY+=1900;
            MM_setDate(0,new Date(iY,oDateEnd.getMonth(),oDateEnd.getDate()-iCalDateStay));
            //alert('Bitte g&uuml;ltiges Datum w&auml;hlen (Min 2)!');
            MM_raiseError('foah',MM_getErrorMsg('sErrorDateMin2Days'),395,150,150,30,4);
            return true;
        }
        return true;
    }

/**************************************************************
 * Eingabe prüfen
 **************************************************************/
    function MM_checkInputDate(iId) {
        try {
        	if (iId==0) {
        		var sPre = sPrefix+'start';
        	} else {
        		var sPre = sPrefix+'end';
        	}
        	var sValue = getElem('name',sPre+'_datum',0).value;
        	var sDay   = '';
        	var sMonth = '';
        	var sYear  = '';

        	var sRegEx1 = /^\d\d\d\d\d\d\d\d$/; // Prüfen auf TTMMYYYY
        	var sRegEx2 = /^\d\d\.\d\d\.\d\d\d\d$/; // Prüfen auf TT.MM.YYYY
        	var sRegEx3 = /^\d\d-\d\d-\d\d\d\d$/; // Prüfen auf TT-MM-YYYY
        	var sRegEx4 = /^\d\d\d\d\d\d$/; // Prüfen auf TTMMYY
        	var sRegEx5 = /^\d\d\.\d\d\.\d\d$/; // Prüfen auf TT.MM.YY
        	var sRegEx6 = /^\d\d-\d\d-\d\d$/; // Prüfen auf TT-MM-YY
        	var sRegEx7 = /^\d\d\d\d\.\d\d\.\d\d$/; // Prüfen auf YYYY.MM.TT
        	var sRegEx8 = /^\d\d\d\d\-\d\d\-\d\d$/; // Prüfen auf YYYY-MM-TT

        	var sRegEx9  = /^\d\d\d\d$/; // Prüfen auf TMYY
        	var sRegEx10 = /^\d\.\d\.\d\d$/; // Prüfen auf T.M.YY
        	var sRegEx11 = /^\d-\d-\d\d$/; // Prüfen auf T-M-YY
        	var sRegEx12 = /^\d\d\d\d\d\d$/; // Prüfen auf TMYYYY
        	var sRegEx13 = /^\d\.\d\.\d\d\d\d$/; // Prüfen auf T.M.YYYY
        	var sRegEx14 = /^\d-\d-\d\d\d\d$/; // Prüfen auf T-M-YYYY

        	if (sRegEx1.test(sValue)) {
        		var sDay   = sValue.substr(0,2);
        		var sMonth = sValue.substr(2,2);
        		var sYear  = sValue.substr(4,4);
        	} else if ( sRegEx2.test(sValue) ||
        				sRegEx3.test(sValue)) {
        		var sDay   = sValue.substr(0,2);
        		var sMonth = sValue.substr(3,2);
        		var sYear  = sValue.substr(6,4);
        	} else if (sRegEx4.test(sValue)) {
    			var sDay   = sValue.substr(0,2);
        		var sMonth = sValue.substr(2,2);
        		var sYear  = '20'+sValue.substr(4,2);
        	} else if ( sRegEx5.test(sValue) ||
        				sRegEx6.test(sValue)) {
    			var sDay   = sValue.substr(0,2);
        		var sMonth = sValue.substr(3,2);
        		var sYear  = '20'+sValue.substr(6,2);
        	} else if ( sRegEx7.test(sValue) ||
        				sRegEx8.test(sValue)) {
    			var sDay   = sValue.substr(6,2);
        		var sMonth = sValue.substr(4,2);
        		var sYear  = sValue.substr(0,4);
        	} else if (sRegEx9.test(sValue)) {
    			var sDay   = sValue.substr(0,1);
        		var sMonth = sValue.substr(1,1);
        		var sYear  = '20'+sValue.substr(2,2);
    		} else if ( sRegEx10.test(sValue) ||
        				sRegEx11.test(sValue)) {
    			var sDay   = sValue.substr(0,1);
        		var sMonth = sValue.substr(2,1);
        		var sYear  = '20'+sValue.substr(3,2);
        	} else if (sRegEx12.test(sValue)) {
    			var sDay   = sValue.substr(0,1);
        		var sMonth = sValue.substr(1,1);
        		var sYear  = sValue.substr(2,4);
    		} else if ( sRegEx13.test(sValue) ||
        				sRegEx14.test(sValue)) {
    			var sDay   = sValue.substr(0,1);
        		var sMonth = sValue.substr(2,1);
        		var sYear  = sValue.substr(3,4);
        	} else { // reset
    			MM_setDate(iId,new Date(getElem('name',sPre+'_datum_year',0).value*1,
    									getElem('name',sPre+'_datum_month',0).value*1-1,
    									getElem('name',sPre+'_datum_day',0).value*1));
        	}
        	if (iId==0) {
        		iChgYearStart = sYear*1;
    			iChgMonthStart = sMonth*1;
    			iChgDayStart = sDay*1;
    		} else {
    			iChgYearEnd = sYear*1;
    			iChgMonthEnd = sMonth*1;
    			iChgDayEnd = sDay*1;
    		}
        	if(MM_compareCal(iId)) {
        		MM_setDate(iId,new Date(sYear*1, sMonth*1-1, sDay*1));
        	}
        } catch(e) {
            alert(e);
        }
    }

/**************************************************************
 * Kalender bl�ttern
 * sDay = Tag
 **************************************************************/

	var iChgMonthStart = 0;
	var iChgYearStart  = 0;
	var iChgDayStart   = 0;
	var iChgMonthEnd   = 0;
	var iChgYearEnd    = 0;
	var iChgDayEnd     = 0;

    function MM_CalchgDsp(iKind){
    	iChgMonthStart = iChgMonthStart*1;
    	iChgMonthEnd   = iChgMonthEnd*1;
    	iChgYearStart = iChgYearStart*1;
    	iChgYearEnd = iChgYearEnd*1;
        if (iKind==0 && iCalType==0) {
            if (iChgMonthStart==1) {
                iChgMonthStart = 12;
                iChgYearStart  = iChgYearStart - 1;
            } else {
                iChgMonthStart = iChgMonthStart - 1;
            }
        } else if (iCalType==0 && iKind == 1) {
        	if (iChgMonthStart==12) {
                iChgMonthStart = 1;
                iChgYearStart  = iChgYearStart + 1;
            } else {
                iChgMonthStart = iChgMonthStart + 1;
            }
        }

        if (iKind==0 && iCalType==1) {
            if (iChgMonthEnd==1) {
                iChgMonthEnd = 12;
                iChgYearEnd  = iChgYearEnd - 1;
            } else {
                iChgMonthEnd = iChgMonthEnd - 1;
            }
        } else if (iCalType==1 && iKind == 1) {
        	if (iChgMonthEnd==12) {
                iChgMonthEnd = 1;
                iChgYearEnd  = iChgYearEnd + 1;
            } else {
                iChgMonthEnd = iChgMonthEnd + 1;
            }
        }
        sCalHTML = '';
        if (iCalType==0) {
        	var oCal   = getElem('id','mmCalHin',0);
        	Kalender(iChgMonthStart,iChgYearStart);
        } else {
        	var oCal   = getElem('id','mmCalRueck',0);
        	Kalender(iChgMonthEnd,iChgYearEnd);
        }
        //alert(sCalHTML);
        oCal.innerHTML = sCalHTML;
        oCal.style.display = 'inline';
    }

/**************************************************************
 * Gibt den Integerwert eines Datums zur�ck
 * inDate = Datum (String)
 **************************************************************/
function MM_CalgetDateInt(inDate) {
	index1 = inDate.indexOf(".");
	index2 = inDate.lastIndexOf(".");
	if (index1 >= 0 && index2 >= 0)	{
		var year = inDate.substring(index2 + 1, inDate.length);
		var month;
		if (index1 == index2) {
			today = new Date();
			year = today.getYear();
			if (year < 2000)
				year = 1900 + year;
			month = inDate.substring(index1 + 1, inDate.length) - 1;
		} else {
			month = inDate.substring(index1 + 1, index2) - 1;
        }
		if (year.length == 2)
			year = "20" + year;
		var tempDate = new Date(year, month, inDate.substring(0, index1));
		var retDate = new Date(2000,01,01);
		if (isNaN(tempDate.getTime()))
			return retDate.getTime();
		else
			return tempDate.getTime();
	} else
		return 0;
}

/**************************************************************
 * vergleicht 2 Daten
 * oDateHin = Datum (String)
 * oDateRueck = Datum (String)
 **************************************************************/
function MM_CalCompareDate(oDateHin,oDateRueck) {
    var iTimeHin   = oDateHin.getTime()+(60*60*24*2);
    var iTimeRueck = oDateRueck.getTime();
    if (iTimeHin>iTimeRueck) {
        return false;
    }
    return true;
}

/**************************************************************
 * vergleicht 2 Daten
 * oDateHin = Datum (String)
 * oDateRueck = Datum (String)
 **************************************************************/
function MM_CalCompareValue(source,target,type) {
    var sourcedate =  MM_CalgetDateInt(source.value)
    var targetdate  =  MM_CalgetDateInt(target.value)
    d = new Date();
    if( sourcedate<d.getTime() ) {
        source.value = MM_CalFormatDate(d);
    }
    try {
        switch(type) {
            case "GreaterThan":
                if( sourcedate<targetdate ) {
                    source.value=target.value;
                }
                break;
            case "LessThan":
                if (sourcedate>targetdate) {
                    source.value=target.value;
                }
                break;
            case "CanNotBeLessThan":
                if( sourcedate>targetdate ) {
                    target.value=source.value;
                    target.onchange();
                }
                break;
            default:
        }
    } catch(e) {alert(e);}
}

/**************************************************************
 * formatiert ein Datum
 * oDateHin = Datum (String)
 * oDateRueck = Datum (String)
 **************************************************************/
function MM_CalFormatDateFromString(sDay,sMonth,sYear) {
    if (sDay<10) {
        sDay = '0'+sDay;
    }
    if (sMonth<10) {
        sMonth = '0'+sMonth;
    }
	return sDay + "." + sMonth + "." + sYear;
}

/**************************************************************
 * formatiert ein Datum
 * oDateHin = Datum (String)
 * oDateRueck = Datum (String)
 **************************************************************/
function MM_CalFormatDate(date) {
	var year = date.getYear();
	if (year < 2000) {
		year = 1900 + year;
    }
    var sDay = date.getDate()*1;
    var sMonth = (date.getMonth() + 1)*1;
    var sYear = year*1;
    if (sDay<10) {
        sDay = '0'+sDay;
    }
    if (sMonth<10) {
        sMonth = '0'+sMonth;
    }
	return sDay + "." + sMonth + "." + sYear;
}

/**************************************************************
 * Objekt fuer Select Felder
 **************************************************************/
	function MM_OptionObject(sKey) {
		this.sKey   	= sKey;
		this.sValue 	= eval('sMMFoah'+sKey);
		try {
			this.sCountry 	= eval('sMMCountry'+sKey);
		} catch(e) {
			this.sCountry 	= '';
		}
	}

	function MM_SelectObject() {
		this.options = new Array();
	}

    function MM_SelectObject_push(sKey,oOption) {
        this.options.push();
    }

/**************************************************************
 * Verstecken des Wartelayers
 **************************************************************/
    function MM_hideWaiting() {
        getElem('id','mmWaiting',0).style.display = "none";
    }

 /**************************************************************
 * Kinder
 **************************************************************/
    function MM_prepareKids(iNum) {
    	for(var x=1;x<=iNum;x++) {
			if(!MM_checkKidBirth(x)) {
				return false;
			}
    	}
    	var x = 0;
        for (var i=1;i<=iNum;i++) {
        	var iAlter = MM_getAlter(getElem('name','mmKid'+i+'Day',0).value, getElem('name','mmKid'+i+'Month',0).value, getElem('name','mmKid'+i+'Year',0).value);
            getElem('id','SEA_kids'+i,0).value = iAlter;
            getElem('id','SEA_kids_birth['+i+']',0).value = getElem('name','mmKid'+i+'Year',0).value+"-"+getElem('name','mmKid'+i+'Month',0).value+"-"+getElem('name','mmKid'+i+'Day',0).value;
            x++;
        }
        //alert(x);
        for (var j=(x+1);j<=4;j++) {
        	try { getElem('id','SEA_kids'+j,0).value = '';
        	getElem('id','SEA_kids_birth['+j+']',0).value = ''; } catch (e) {}
        }
        return true;
    }

    function MM_showKid(iNum) {
        MM_hideExpert(iTab);
        //var faktor1=(iNum*8)+10;
        try { getElem('id','mmContent',0).style.display   = 'none'; } catch(e) {}
        try { getElem('id','kids_layer_1',0).style.height = '46em'; } catch(e) {}
		try { getElem('id','kids_layer_2',0).style.height = '46em'; } catch(e) {}
		try { getElem('id','kids_layer_3',0).style.height = '46em'; } catch(e) {}
		try { getElem('id','mmKids',0).style.display      = 'block'; } catch(e) {}
        try { getElem('id','smobox1_1',0).style.display   = 'none'; } catch(e) {}
        for (var i=1;i<=iNum;i++) {
            getElem('id','mmKid'+i,0).style.visibility    = 'visible';
        }
        for (var i=6;i>iNum;i--) {
            try { getElem('id','mmKid'+i,0).style.visibility    = 'hidden'; } catch(e) {}
        }
    }

    function MM_updateKids() {
        var oKids   = getElem('name',sPrefix+'SEA_kids',0);
        var iKid    = oKids.value + 'Kinder';
        var iMax    = 6;
        if (getElem('name',sPrefix+'sa',0).value=='FLR') {
        	 iMax = 5;
        }
        var iValue  = iMax - (getElem('name',sPrefix+'SEA_adults',0).value*1);
        if (iValue>4) {
            iValue = 4;
        }
        oKids.options.length = 0;
        for (var i=0;i<=iValue;i++) {
            oKids.options[i] = new Option(i + ' Kinder',i);
        }
        if (iKid<=iValue) {
        	oKids.value = iKid + 'Kinder';
        } else {
        	oKids.value = iValue + 'Kinder';
        }
        return true;
    }

    function MM_getBack() {
        bKid = false;
        bKidView = false;
        getElem('id','mmContent',0).style.display = 'block';
        getElem('id','mmKids',0).style.display = 'none';
//				try { getElem('id','kids_layer_1',0).style.height = '25em'; } catch(e) {}
//				try { getElem('id','kids_layer_2',0).style.height = '25em'; } catch(e) {}
//				try { getElem('id','kids_layer_3',0).style.height = '27.8em'; } catch(e) {}
        for (var i=1;i<=4;i++) {
            getElem('id','mmKid'+i,0).style.visibility = 'hidden';
        }
        if (bExpert==0) {
            MM_hideExpert(iTab);
        } else {
            MM_openExpert(iTab);
        }
    }

    function MM_getAlter(sDay, sMonth, sYear) {

		var heute 		 = new Date();
		var heute_Tag	 = heute.getDate();
		var heute_Monat  = heute.getMonth();
		var heute_Jahr   = heute.getYear();
		if (MS==0) {
			heute_Jahr += 1900;
		}

		//alert(heute_Tag+"-"+heute_Monat+"-"+heute_Jahr);

		var Geburtsdatum_Tag   = sDay*1;
		var Geburtsdatum_Monat = sMonth*1;
		var Geburtsdatum_Jahr  = sYear*1;

		//alert(Geburtsdatum_Tag+"-"+Geburtsdatum_Monat+"-"+Geburtsdatum_Jahr);

		var Alter_Jahre  = 0;

		if (Geburtsdatum_Monat > heute_Monat || ((Geburtsdatum_Tag >= heute_Tag)&&(Geburtsdatum_Monat == heute_Monat))) {
			Alter_Jahre  = heute_Jahr - Geburtsdatum_Jahr -1;
		} else {
			Alter_Jahre = heute_Jahr - Geburtsdatum_Jahr;
		}
		return Alter_Jahre;
    }

/**************************************************************
 * ...
 **************************************************************/
