// JavaScript Document

/* Indicates the valid date rangein the check-in and check-out */
var checkInRangeLow = currentDate;
var checkInRangeHigh   = new Date(currentDate.getFullYear() + 1, currentDate.getMonth(), currentDate.getDate());
var checkOutRangeLow = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()+1);
var checkOutRangeHigh   = new Date(currentDate.getFullYear() + 1, currentDate.getMonth(), currentDate.getDate()+1);
/* Calculates how many days will be removed from check in and check out combos */
var removeDaysCheckIn = (checkInRangeLow - currentDate)/86400000;
var removeDaysCheckOut = (checkOutRangeLow - currentDate)/86400000;
/* Sets how many days will check in be moved when check out overlaps or how many days will check out 
 be moved when check in overlaps check out */
var moveDaysForward = 2;
var moveDaysBackward = 2;

function disallowStartDate(oDate) {
    return (oDate.getTime() < checkInRangeLow.getTime() || oDate.getTime() >= checkInRangeHigh.getTime());
}
function disallowEndDate(oDate) {
    return (oDate.getTime() < checkOutRangeLow.getTime() || oDate.getTime() >= checkOutRangeHigh.getTime());
}
function setupCalendar(idInput, idButton, strIfFormat, fnOnUpdate, fnDateStatusFunc) {
    var today = currentDate;
    var year = today.getFullYear();
    Calendar.setup({
        inputField     : idInput,
        button         : idButton,
        ifFormat       : strIfFormat,
        onUpdate       : fnOnUpdate,
        dateStatusFunc : fnDateStatusFunc,
        range          : [year, year + 1],
        weekNumbers    : false,
        disableNavYear : true,
        //showOthers   : true,
        electric       : false
    });
}
function updateStartDate(cal) {
    var idHtb = cal.params.inputField.id.match(/\d+$/);
    if (idHtb == null) {
        updateCombo('arrivalDateMonth', 'arrivalDateDay', cal.date, 0);
    } else {
        updateCombo('arrivalDateMonth' + idHtb, 'arrivalDateDay' + idHtb, cal.date, 0, idHtb);
    }
    return true;
}
function updateEndDate(cal) {
    var idHtb = cal.params.inputField.id.match(/\d+$/);
    if (idHtb == null) {
        updateCombo('departureDateMonth', 'departureDateDay', cal.date, 1);
    } else {
        updateCombo('departureDateMonth' + idHtb, 'departureDateDay' + idHtb, cal.date, 1, idHtb);
    }
    return true;
}
function updateCombo(monthId, dayId, newDate, changed, idHtb) {
    if (idHtb == undefined) {
        idHtb = "";
    }
    jQuery('#' + monthId).val(newDate.getFullYear() + '-' + get00(newDate.getMonth() + 1));
    updateDays(idHtb);
    jQuery('#' + dayId).val(newDate.getDate());
    fixCombos(changed, idHtb);
}



function fixCombos(changed, idHtb) {
    if (idHtb == undefined) {
        idHtb = "";
    }
    if (changed == 1) {
        updateDayField('departureDateMonth' + idHtb, 'departureDateDay' + idHtb, removeDaysCheckOut);
    } else {
        updateDayField('arrivalDateMonth' + idHtb, 'arrivalDateDay' + idHtb, removeDaysCheckIn);
    }
    startDateSelect = jQuery('#arrivalDateMonth' + idHtb);
    endDateSelect = jQuery('#departureDateMonth' + idHtb);
    startDaySelect = jQuery('#arrivalDateDay' + idHtb);
    endDaySelect = jQuery('#departureDateDay' + idHtb);
    startMY = jQuery('#arrivalDateMonth' + idHtb).val().split('-');
    endMY = jQuery('#departureDateMonth' + idHtb).val().split('-');
    startDate = new Date(parseInt(startMY[0]), parseInt(parseFloat(startMY[1])) - 1, parseInt(parseFloat(jQuery('#arrivalDateDay' + idHtb).val())));
    endDate = new Date(parseInt(endMY[0]), parseInt(parseFloat(endMY[1])) - 1, parseInt(parseFloat(jQuery('#departureDateDay' + idHtb).val())));
    //get max and min valid dates
    maxStartDate = new Date(parseInt(endMY[0]), parseInt(parseFloat(endMY[1])) - 1, parseInt(parseFloat(jQuery('#departureDateDay' + idHtb).val()))-1);
    minEndDate =  new Date(parseInt(startMY[0]), parseInt(parseFloat(startMY[1])) - 1, parseInt(parseFloat(jQuery('#arrivalDateDay' + idHtb).val()))+1);
    //adjust combos
    if (changed == 1 && startDate.getTime() > maxStartDate.getTime()) {
        startDate = new Date(parseInt(endMY[0]), parseInt(parseFloat(endMY[1])) - 1, parseInt(parseFloat(jQuery('#departureDateDay' + idHtb).val()))-moveDaysBackward);
        startDateSelect.val(startDate.getFullYear() + '-' + get00(startDate.getMonth() + 1));
        //update days in month
        updateDayField('arrivalDateMonth' + idHtb, 'arrivalDateDay' + idHtb, removeDaysCheckIn);
        startDaySelect.val(startDate.getDate());
    }
    if (changed == 0 && endDate.getTime() < minEndDate.getTime()) {
        endDate = new Date(parseInt(startMY[0]), parseInt(parseFloat(startMY[1])) - 1, parseInt(parseFloat(jQuery('#arrivalDateDay' + idHtb).val()))+moveDaysForward);
        endDateSelect.val(endDate.getFullYear() + '-' + get00(endDate.getMonth() + 1));
        //update days in month
        updateDayField('departureDateMonth' + idHtb, 'departureDateDay' + idHtb, removeDaysCheckOut);
        endDaySelect.val(endDate.getDate());
    }
    //adjust internal calendar values
    jQuery('#Inputin' + idHtb).val(get00(startDate.getMonth() + 1) + ' ' + startDate.getDate() + ' ' + startDate.getFullYear());
    jQuery('#Inputout' + idHtb).val(get00(endDate.getMonth() + 1) + ' ' + endDate.getDate() + ' ' + endDate.getFullYear());
    return true;
}

function getIndex(htmlSelectObject, value) {
    for (var i = 0; i < htmlSelectObject.options.length; i++) {
        if (htmlSelectObject.options[i].value == value || htmlSelectObject.options[i].text == value) {
            return i;
        }
    }
    return 0;
}
function get00(number) {
    if (number < 10) {
        return '0' + number;
    }
    return number;
}
function updateDays(idHtb) {
    if (idHtb == undefined) {
        idHtb = "";
    }
    updateDayField('arrivalDateMonth' + idHtb, 'arrivalDateDay' + idHtb, removeDaysCheckIn);
    updateDayField('departureDateMonth' + idHtb, 'departureDateDay' + idHtb, removeDaysCheckOut);
}
function updateDayField(monthFieldId, dayFieldId, removeDaysAtBegining) {
    if (removeDaysAtBegining == undefined) {
        removeDaysAtBegining = 0;
    }
    // Get month and day objects
    monthYear = jQuery('#' + monthFieldId).val().split('-');
    $daySelect = jQuery('#' + dayFieldId);
    year  = parseInt(parseFloat(monthYear[0]));
    month = parseInt(parseFloat(monthYear[1]));
    day   = parseInt(parseFloat($daySelect.val()));
    // Get days in month accordingly to the Date function
    daysInMonth = (new Date(year, month, 0)).getDate();
    // Set to true if in current month
    isCurrentMonth = (currentDate.getFullYear() == year) && (currentDate.getMonth()+1 == month);
    // Clean days combo
    $daySelect.find('option').remove();
    // Fill combo 
    for (i = 0; i < daysInMonth; i++) {
        cDay = i+1;
        //Check if we're going to use current day
        if (isCurrentMonth && cDay < currentDate.getDate() + removeDaysAtBegining) {
            continue;
        }
        //Add day to combo
        $daySelect.append('<option>' + cDay + '</option>');
    }
    $daySelect.val(day);
}
function initHotelsBot(idHtb) {
    if (idHtb == undefined) {
        idHtb = "";
    }
    setupCalendar('Inputin' + idHtb, 'checkInButton' + idHtb, '%m %d %Y', updateStartDate, disallowStartDate);
    setupCalendar('Inputout' + idHtb, 'checkOutButton' + idHtb, '%m %d %Y', updateEndDate, disallowEndDate);
    updateDays(idHtb);
}

// Code to show or hide guests per room when changing Rooms field

var roomsShown = 0;

function enableDisableRooms() {
    roomsText = jQuery('#rooms').val();
    if (roomsText == '8+') {
        roomsToShow = 1;
    } else {
        roomsToShow = parseInt(roomsText);
    }
    while (++roomsShown <= roomsToShow) {
        jQuery('#adults' + roomsShown).attr('disabled', '');
        jQuery('#children' + roomsShown).attr('disabled', '');
        jQuery('#room' + roomsShown).css('display', '');
    }
    while (--roomsShown > roomsToShow) {
        jQuery('#adults' + roomsShown).attr('disabled', 'disabled');
        jQuery('#children' + roomsShown).attr('disabled', 'disabled');
        jQuery('#room' + roomsShown).css('display', 'none');
    }
    if (roomsText == '8+') {
        jQuery('#adults1').attr('disabled', 'disabled');
        jQuery('#children1').attr('disabled', 'disabled');
    } else {
        jQuery('#adults1').attr('disabled', '');
        jQuery('#children1').attr('disabled', '');
    }
}

function enableDisableGuests(idHtb) {
    if (idHtb == undefined) {
        idHtb = "";
    }
    roomsText = jQuery('#rooms' + idHtb).val();
    if (roomsText == "8+") {
        jQuery('#adults' + idHtb).attr('disabled', "disabled");
        jQuery('#children' + idHtb).attr('disabled', "disabled");
    } else {
        jQuery('#adults' + idHtb).attr('disabled', "");
        jQuery('#children' + idHtb).attr('disabled', "");
    }
}
