function checkDate(sSelectMonthIn, sSelectDayIn, sSelectMonthOut, sSelectDayOut){
    var errDates = false;
    var monthOutValue = sSelectMonthOut.options[sSelectMonthOut.selectedIndex].value;
    var monthInValue  = sSelectMonthIn.options[sSelectMonthIn.selectedIndex].value;
    var dayInValue    = sSelectDayIn.options[sSelectDayIn.selectedIndex].value;
    var dayOutValue   = sSelectDayOut.options[sSelectDayOut.selectedIndex].value;
    if (dayInValue == "" || dayOutValue ==""){
        errDates = true;
    }
    monthInValue  = parseInt(monthInValue);
    monthOutValue = parseInt(monthOutValue);
    dayInValue    = parseInt(dayInValue);
    dayOutValue   = parseInt(dayOutValue);
    if ((monthInValue > monthOutValue) || (monthInValue == monthOutValue && dayInValue >= dayOutValue)){
        errDates = true;
    }
    return errDates;
}

function computeNights(sSelectMonthIn, sSelectDayIn,sSelectMonthOut, sSelectDayOut){
    var sMonthOut = sSelectMonthOut.options[sSelectMonthOut.selectedIndex].value;
    var sMonthIn  = sSelectMonthIn.options[sSelectMonthIn.selectedIndex].value;
    var sDayIn    = sSelectDayIn.options[sSelectDayIn.selectedIndex].value;
    var sDayOut   = sSelectDayOut.options[sSelectDayOut.selectedIndex].value;
    var dDateIn   = retrieveDate(sMonthIn, sDayIn);
    var dDateOut  = retrieveDate(sMonthOut, sDayOut);
    var nMillsec  = dDateOut.getTime(dDateOut) - dDateIn.getTime(dDateIn);
    var nNights   = Math.ceil(nMillsec /1000/60/60/24);
    if (nNights >= '99'){
        alert(" Die Anzahl der Übernachtungen darf nicht 99 übersteigen. \n Bitte passen Sie das Datum an.");
    } else {
        document.Fsearch.Prenottamenti.value = nNights;
    }

}

function retrieveDate(selectMonthValue, selectDayValue){
    var sYear  = selectMonthValue.toString().substr(0,4);
    var sMonth = selectMonthValue.toString().substr(4,6);
    sMonth = (sMonth.substr(0,1) == "0"? sMonth.substr(1,1): sMonth);
    var dDay= new Date(sYear,sMonth - 1, selectDayValue, 12, 0, 0);
    return dDay;
}

function computeDays(sSelectMonth, sSelectDay){
    var nMonthValue = sSelectMonth.options[sSelectMonth.selectedIndex].value;
    var sYear = nMonthValue.toString().substr(0,4);
    var sMonth = nMonthValue.toString().substr(4,6);
    var nDays = 31;
    switch (sMonth){
        case "04":
        case "06":
        case "09":
        case "11":
            nDays = 30;
            sSelectDay.options[31].value = "";
            sSelectDay.options[31].text = "";
            if(sSelectDay.selectedIndex == 31) sSelectDay.selectedIndex = 1;
        break;
	    case "02":
            nDays = (sYear%4 == 0 ? 29: 28);
		for (var less = 31; less >= nDays+1; less --){
            sSelectDay.options[less].value = "";
            sSelectDay.options[less].text = "";
            if(sSelectDay.selectedIndex == less) sSelectDay.selectedIndex = 1;
		}
	    break;
    }
    for ( var count =1; count <nDays+1; count ++){
        sSelectDay.options[count].value = count;
        sSelectDay.options[count].text = count;
    }
}

function displayNights(sSelectMonthIn, sSelectDayIn,sSelectMonthOut, sSelectDayOut ,sNoCheck){
    var errCheck = checkDate(sSelectMonthIn, sSelectDayIn,sSelectMonthOut, sSelectDayOut);
    if (errCheck == false){
        computeNights(sSelectMonthIn, sSelectDayIn,sSelectMonthOut, sSelectDayOut);
	} else {
		document.Fsearch.Prenottamenti.value = '';
//	    alert(" Check-out date is prior to check-in date. \n Please adjust your dates.");
	}
}

function updateCheckOut(sSelectMonthIn, sSelectDayIn,sSelectMonthOut, sSelectDayOut){
    var num = document.Fsearch.Prenottamenti.value;
	var now = new Date();
        if (num !=""){
            num = parseInt(num);
            var cin = sSelectMonthIn.options[sSelectMonthIn.selectedIndex].value;
            var din = sSelectDayIn.options[sSelectDayIn.selectedIndex].value;
            if (din == ""){
                sSelectDayIn.selectedIndex = 0;
            }
            var checkInDate = retrieveDate(cin, din);
	        var millsec = (num)*24*60*60*1000;
            var millsecIn = checkInDate.getTime();
            millsec = millsec + millsecIn;
            checkInDate.setTime(millsec);
            var day = checkInDate.getDate();
		    var month= checkInDate.getMonth();
		    var year = "";
            if ( (checkInDate.getMonth() == now.getMonth()) && (now.getFullYear() == checkInDate.getFullYear()) ){
                year = now.getFullYear();
            } else {
                year = checkInDate.getFullYear();
            }

            month = (month< 9?"0":"").toString() + (month + 1).toString();
            var selectValue = year.toString() + month;
            for (var count = 0; count < sSelectMonthIn.length; count ++){
		    	if (sSelectMonthOut.options[count].value == selectValue){
					sSelectMonthOut.options[count].selected = true;
		            }
		    }

 		day = day - 1;
		sSelectDayOut.selectedIndex = day + 1;
        computeDays(sSelectMonthOut, document.Fsearch.Partenzagiorno);
	}

}

function calcDays(){
        updateCheckOut(document.Fsearch.Arrivomese, document.Fsearch.Arrivogiorno,document.Fsearch.Partenzamese,document.Fsearch.Partenzagiorno);
        displayNights(document.Fsearch.Arrivomese, document.Fsearch.Arrivogiorno, document.Fsearch.Partenzamese, document.Fsearch.Partenzagiorno);
}  


function check4empty (sSelect){
        if (sSelect.selectedIndex == '0'){
                sSelect.selectedIndex = '1';
        }
}

function dateInThePast (monthYear, day){
	today = new Date();
	currDay = today.getDate();
    if((monthYear.selectedIndex == 1) && (day.options[day.selectedIndex].value < currDay)) alert(' Das Ankunftsdatum liegt in der Vergangenheit. \n Bitte wählen Sie einen zukünftigen Tag.');
}

function checkAll (sSelectMonthIn, sSelectDayIn,sSelectMonthOut, sSelectDayOut, iWhich){
        switch (iWhich) {
        case 1:
        	if (sSelectDayIn.selectedIndex == '0'){
                	resetDate(sSelectMonthIn,sSelectDayIn,sSelectMonthOut,sSelectDayOut);
                } else {
                	check4empty (sSelectMonthIn);check4empty (sSelectDayOut);check4empty (sSelectMonthOut);
                	updateCheckOut(sSelectMonthIn,sSelectDayIn,sSelectMonthOut,sSelectDayOut);
                	// dateInThePast(sSelectMonthIn,sSelectDayIn);
        	}
        	break;
        case 2:
        	if (sSelectMonthIn.selectedIndex == '0'){
                	resetDate(sSelectMonthIn,sSelectDayIn,sSelectMonthOut,sSelectDayOut);
        	} else {
                	check4empty (sSelectDayIn);check4empty (sSelectDayOut);check4empty (sSelectMonthOut);
                	computeDays(sSelectMonthIn,sSelectDayIn);
                	updateCheckOut(sSelectMonthIn,sSelectDayIn,sSelectMonthOut,sSelectDayOut);
                	// dateInThePast(sSelectMonthIn,sSelectDayIn);
        	}
        	break;
        case 3: 
        	if (sSelectDayOut.selectedIndex == '0'){
        		resetDate(sSelectMonthIn,sSelectDayIn,sSelectMonthOut,sSelectDayOut);
        	} else {
               		check4empty (sSelectMonthIn);check4empty (sSelectDayIn);check4empty (sSelectMonthOut);
               		displayNights(sSelectMonthIn,sSelectDayIn,sSelectMonthOut,sSelectDayOut);
        	}
        	break;
        case 4:
        	if (sSelectMonthOut.selectedIndex == '0'){
        		resetDate(sSelectMonthIn,sSelectDayIn,sSelectMonthOut,sSelectDayOut);
        	} else {
                	check4empty (sSelectMonthIn);check4empty (sSelectDayOut);check4empty (sSelectDayIn);
                	computeDays(sSelectMonthOut,sSelectDayOut);
                	displayNights(sSelectMonthIn,sSelectDayIn,sSelectMonthOut,sSelectDayOut);
        	}
        	break;
        }
}

function resetDate(sSelectMonthIn,sSelectDayIn,sSelectMonthOut,sSelectDayOut){
	sSelectDayIn.selectedIndex = '0';
	sSelectMonthIn.selectedIndex = '0';
	sSelectDayOut.selectedIndex = '0';
	sSelectMonthOut.selectedIndex = '0';
	document.Fsearch.Prenottamenti.value = 1;
	computeDays(sSelectMonthIn, sSelectDayIn);
	computeDays(sSelectMonthOut, sSelectDayOut);
}


