var monthName = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

$(function () {
    SelectSearchMode($('#hdn_SearchMode').val());
    SetValues();
    SetDatePicker();
});



function setDays(date) {

    var searchMode = ($('#hdn_SearchMode').val());
    if (searchMode != 'hotels') {

        var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();


        // disabled dates
        var str_Days = $('.div_disabledDates input').val().split(',');
        if ($('.div_disabledDates input').val().length > 0) {
            for (var i = 0; i < str_Days.length; i++) {
                if ($.inArray(d + '-' + monthName[(m)] + '-' + y, str_Days) != -1 || new Date() > date) {
                    return [false];
                }
            }
        }


        // disabled days
        var str_Days = $('.div_disabledDays input').val().split(',');
        if ($('.div_disabledDays input').val().length > 0) {
            for (var i = 0; i < str_Days.length; i++) {
                if (str_Days[i] == date.getDay()) {
                    return [false];
                }
            }
        }

        // highlight dates
        var str_hDays = $('.div_HighLightedDates input').val().split(',');
        if ($('.div_HighLightedDates input').val().length > 0) {
            for (var i = 0; i < str_hDays.length; i++) {
                if ($.inArray(d + '-' + monthName[(m)] + '-' + y, str_hDays) != -1 || new Date() > date) {
                    return [true, 'date_HighLigthed', 'Best Offer of the week!']; // return [ boolean: disable the day, string: td class, string: tooltip on the day]
                }
            }
        }

        // highlight days
        var str_hDays = $('.div_HighLightedDays input').val().split(',');
        if ($('.div_HighLightedDays input').val().length > 0) {
            for (var i = 0; i < str_hDays.length; i++) {
                if (str_hDays[i] == date.getDay()) {
                    return [true, 'date_HighLigthed', 'Best Offer of the week!']; // return [ boolean: disable the day, string: td class, string: tooltip on the day]
                }
            }
        }

        return [true];
    }
    else {
        return [true];
    }
} 

function SetDatePicker() {
    $.datepicker.regional['en-GB'] = {
        closeText: 'Done',
        prevText: 'Prev',
        nextText: 'Next',
        currentText: 'Today',
        monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
		'July', 'August', 'September', 'October', 'November', 'December'],
        monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
        dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
        weekHeader: 'Wk',
        dateFormat: 'dd/mm/yy',
        firstDay: 0, // start sunday
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: ''
    };

    $.datepicker.setDefaults($.datepicker.regional['en-GB']);

    $("#txt_departureDate").datepicker({
        changeMonth: true,
        changeYear: true,
        minDate: new Date(),
        beforeShowDay: setDays,
        onSelect: function (dateText) {
            var d = $(this).datepicker('getDate');
            var duration = $('#ddl_duration').val();
            if (d) {
                d.setDate(d.getDate() + parseInt(duration));
                $('.checkoutDate').html($.datepicker.formatDate('dd/mm/yy', d));
                $("#txt_returningDate").val($.datepicker.formatDate('dd/mm/yy', d));
            }
        }
    });

    $("#txt_returningDate").datepicker({
        changeMonth: true,
        changeYear: true,
        minDate: new Date(),
        onSelect: function (dateText) {
            var d = $(this).datepicker('getDate');
            if (d) {
                d.setDate(d.getDate());
                setCheckoutDate('flights');
            }
        }
    });


}

  function SetValues() {
      var searchMode = ($('#hdn_SearchMode').val());
      var countryID = 0;
      
        dd = document.getElementById('ddl_departureAirport');
        currentValue = $(dd).val();
        dd.options.length = 0;
        dd.options.add(new Option('Select an airport', 0));

        $(setup.locations).each(function (index, item) {
            if (item.type == 1) {
                if (item.parentID == countryID || countryID == 0) {
                    dd.options.add(new Option(item.name, item.ID));
                };
            };
        });

        $(setup.locations).each(function (index, item) {
            if (item.ID == currentValue) {            
                $('.div_HighLightedDates input').val(item.calendardates);
                $('.div_HighLightedDays input').val(item.calendardays);
                $('.div_disabledDates input').val(item.disableddates);
                $('.div_disabledDays input').val(item.disableddays);
            };
        });


        dd.value = currentValue;

        dd = document.getElementById('ddl_arrivalAirport');
        currentValue = $(dd).val();
        dd.options.length = 0;
        dd.options.add(new Option('Select an airport -', 0));

        $(setup.locations).each(function (index, item) {
            if (item.type == 2) {
                if (item.parentID == countryID || countryID == 0) {
                    dd.options.add(new Option(item.name, item.ID));
                };
            };
        });
        dd.value = currentValue;

        var dd = document.getElementById('ddl_resort');
        var ResortID = $(dd).val();    
        dd.options.length = 0;
        dd.options.add(new Option('Select a resort', 0));

        $(setup.locations).each(function (index, item) {
            if (item.type == 3) {
                dd.options.add(new Option(item.name, item.ID));
            };
        });
        dd.value = ResortID;

        dd = document.getElementById('ddl_hotelName');
        var HotelID = $(dd).val();
        dd.options.length = 0;
        dd.options.add(new Option('Any hotel', 0));
        $.each(setup.accommodations, function (i, item) {
            if (item.locationID == ResortID || ResortID == 0) {
                dd.options.add(new Option(item.name, item.ID));
            }
        });
        dd.value = HotelID;

        dd = document.getElementById('ddl_plusMinusDay');
        dd.value = $(dd).val();

        setupOccupancyDropdown(searchMode);
        setupPlusMinusDayDropdown();
        setDuration();
        clearWarning();

    }



    function onSelectHotel() {


        dd = document.getElementById('ddl_hotelName');
        var HotelID = $(dd).val();
        $.each(setup.accommodations, function (i, item) {
            if (item.ID == HotelID ) {
                var ddr = document.getElementById('ddl_resort');
                ddr.value = item.locationID
            }
        });

    }


    function onDurationChange() {

        searchMode = $('#hdn_SearchMode').val();

        setCheckoutDate(searchMode);

    }

    function setCheckoutDate(searchMode) {
        switch (searchMode) {
            case 'packages':
                var departureDate = $("#txt_departureDate").datepicker("getDate");
                //alert(departureDate);
                var duration = $('#ddl_duration').val();
                //alert(duration);
                var checkoutDate = new Date($("#txt_departureDate").datepicker("getDate").getFullYear(), $("#txt_departureDate").datepicker("getDate").getMonth(), $("#txt_departureDate").datepicker("getDate").getDate());
                checkoutDate.setDate(checkoutDate.getDate() + parseInt(duration));
                //alert(checkoutDate);
                var day = checkoutDate.getDate();
                if (day < 10) day = "0" + day;
                var month = checkoutDate.getMonth() + 1;
                if (month < 10) month = "0" + month;
                var year = checkoutDate.getFullYear();
                $('.checkoutDate').html(day + "/" + month + "/" + year);
                $("#txt_returningDate").val(day + "/" + month + "/" + year);
                break;

            case 'flights':
                var departureDate = $('#txt_departureDate').datepicker('getDate');
                var returningDate = $('#txt_returningDate').datepicker('getDate');
                //alert(departureDate);
                var duration = (returningDate - departureDate) / 1000 / 60 / 60 / 24;
                if ((duration >= 0) && (duration <= 21)) {
                    $('#ddl_duration').val(duration);
                }
                else {
                    if (duration < 0) $('#ddl_duration').val(1);
                    if (duration > 21) $('#ddl_duration').val(21);
                }
                //alert("flight" + $('#ddl_duration').val());
                //alert(returningDate);
                break;


            case 'hotels':
                var arrivalDate = $("#txt_departureDate").datepicker("getDate");
                var duration = $('#ddl_duration').val();
                //alert(duration);
                var checkoutDate = new Date($("#txt_departureDate").datepicker("getDate").getFullYear(), $("#txt_departureDate").datepicker("getDate").getMonth(), $("#txt_departureDate").datepicker("getDate").getDate());
                checkoutDate.setDate(checkoutDate.getDate() + parseInt(duration));
                //alert(checkoutDate);
                var day = checkoutDate.getDate();
                if (day < 10) day = "0" + day;
                var month = checkoutDate.getMonth() + 1;
                if (month < 10) month = "0" + month;
                var year = checkoutDate.getFullYear();
                $('.checkoutDate').html(day + "/" + month + "/" + year);
                $("#txt_returningDate").val(day + "/" + month + "/" + year);
                break;
        }
    };


    function setDuration() {
        searchMode = $('#hdn_SearchMode').val();
 
        switch (searchMode) {
            case 'packages':
                dd = document.getElementById('ddl_duration');
                var duration = $(dd).val();
                dd.options.length = 0;
                dd.options.add(new Option("7 Nights", 7));
                var departureDate = $("#txt_departureDate").datepicker("getDate");
                var weekday = departureDate.getDay();

                if ($('#ddl_departureAirport').val() != 309) { // don't offer 10 nights from MAN                
                    if (($('#ddl_departureAirport').val() == 307 && weekday != 6) || ($('#ddl_departureAirport').val() != 307)) { // don't offer 10 nights from STN on Saturday   
                        dd.options.add(new Option("10 Nights", 10));
                    }
                }

                dd.options.add(new Option("14 Nights", 14));
                dd.value = duration;
                break;
            case 'flights':                
                break;
            case 'hotels': 
                dd = document.getElementById('ddl_duration');
                var duration = $(dd).val();
                dd.options.length = 0;
                for (var i = 1; i < 22; i++) {
                    if (i == 1) {
                        dd.options.add(new Option("1 Night", 1));
                    } else {
                        dd.options.add(new Option(i + " Nights", i));
                    };
                };
                dd.value = duration;
                break;
        }       

    };



    function SelectSearchMode(Mode) {
        searchMode = Mode;
        $('#hdn_SearchMode').val(Mode);
        SetDatePicker();
        setDuration();
        setCheckoutDate(searchMode);

        switch (searchMode) {
            case 'packages':
                $('.packages').addClass('active');
                $('.flights').removeClass('active');
                $('.hotels').removeClass('active');

                $('#div_control_searchBox_box_departureAirport').slideDown();
                $('#div_control_searchBox_box_arrivalAirport').slideUp();
                $('#div_control_searchBox_box_resort').slideDown();
                $('#div_control_searchBox_box_departureDate').slideDown();
                $('.lbl_departureDate').html('Departure Date');
                $('#div_control_searchBox_box_returningDate').slideUp();
                $('#div_control_searchBox_box_duration').slideDown();
                $('#div_control_searchBox_box_plusMinusDay').slideUp();
                $('#div_control_searchBox_box_checkoutDate').slideDown();
                $('#div_control_searchBox_box_noOfRooms').slideDown();
                $('#div_control_searchBox_box_noOfPassengers').slideUp();
                $('.div_control_searchBox_box_hotel').slideDown();
                break;
            case 'flights':
                $('.packages').removeClass('active');
                $('.flights').addClass('active');
                $('.hotels').removeClass('active');

                $('#div_control_searchBox_box_departureAirport').slideDown();
                $('#div_control_searchBox_box_arrivalAirport').slideDown();
                $('#div_control_searchBox_box_resort').slideUp();
                $('#div_control_searchBox_box_departureDate').slideDown();
                $('#div_control_searchBox_box_returningDate').slideDown();
                $('#div_control_searchBox_box_duration').slideUp();
                $('#div_control_searchBox_box_plusMinusDay').slideDown();
                $('#div_control_searchBox_box_checkoutDate').slideUp();
                $('#div_control_searchBox_box_noOfRooms').slideUp();
                $('#div_control_searchBox_box_noOfPassengers').slideDown();
                $('.div_control_searchBox_box_hotel').hide();
                break;
            case 'hotels':
                $('.packages').removeClass('active');
                $('.flights').removeClass('active');
                $('.hotels').addClass('active');

                $('#div_control_searchBox_box_departureAirport').slideUp();
                $('#div_control_searchBox_box_arrivalAirport').slideUp();
                $('#div_control_searchBox_box_resort').slideDown();
                $('#div_control_searchBox_box_departureDate').slideDown();
                $('.lbl_departureDate').html('Arrival Date');
                $('#div_control_searchBox_box_returningDate').slideUp();
                $('#div_control_searchBox_box_duration').slideDown();
                $('#div_control_searchBox_box_plusMinusDay').slideUp();
                $('#div_control_searchBox_box_checkoutDate').slideDown();
                $('#div_control_searchBox_box_noOfRooms').slideDown();
                $('#div_control_searchBox_box_noOfPassengers').slideUp();
                $('.div_control_searchBox_box_hotel').slideDown();
                break;
        }

        clearWarning();
    };

    function SelectNumberOFRooms(n) {
        for (var i = 1; i < 7; i++) {
            if (i <= n) {
                $(document.getElementById('pan_searchbox_room_' + i)).slideDown();
            } else {
                $(document.getElementById('pan_searchbox_room_' + i)).slideUp();
            };
        };
    };
   

    function searchBoxflightPassenger() {
        var s = '';
        s += document.getElementById('dd_searchbox_flight_adults').value;
        s += ',';
        s += document.getElementById('dd_searchbox_flight_children').value;
        return s;
    };

    function setupPlusMinusDayDropdown() {
        var plusMinusDay = $('#hid_plusMinusDay').val();
        $('#ddl_plusMinusDay').val(plusMinusDay);        
    }

    function setupOccupancyDropdown(Mode) {
        var occ = $('#hid_occ').val();
        var subOcc = occ.split('|');
        var v;
        //alert(subOcc.length);
        //alert(occ);
        switch (searchMode) {
            case 'packages':
                $('#ddl_numberOFRooms').val(subOcc.length);
                SelectNumberOFRooms(subOcc.length);
                for (var i = 0; i < subOcc.length; i++) {
                    v = subOcc[i];
                    setupOccupancyRoomDropdown(i + 1, v); //index start from 1
                }

                break;
            case 'flights':
                setupOccupancyFlightDropdown(subOcc[0]);
                break;
            case 'hotels':
                $('#ddl_numberOFRooms').val(subOcc.length);
                SelectNumberOFRooms(subOcc.length);
                for (rm = 0; rm < subOcc.length; rm++) {
                    v = subOcc[rm];
                    setupOccupancyRoomDropdown(rm + 1, v); //index start from 1
                }
                break;
        }
    }

    function setupOccupancyRoomDropdown(index, value) {
        var subValue = value.split(',');
        $('#dd_searchbox_room_' + index + '_adults').val(subValue[0]);
        $('#dd_searchbox_room_' + index + '_children').val(subValue[1]);

        setupShowChildAges(index, subValue[1]);

    }

    function setupShowChildAges(room, nokids) {
        var roomages = $('#hid_ages').val();
        var subroomages = '';
        if (roomages != '') {
            var subroomages = roomages.split('|');
        }

     for (var i = 0; i < 10; i++) {
            $(document.getElementById('div_searchbox_room_' + room + '_childage_' + i)).slideUp();
        }
        nokids = parseInt(nokids) + parseInt(1);
        for (var i = 0; i < nokids; i++) {
            $(document.getElementById('div_searchbox_room_' + room + '_childage_' + i)).slideDown();

            if (subroomages != '') {
                var ages = subroomages[room - 1].split(',')
                $('#dd_searchbox_room_' + room + '_childage_' + (parseInt(i) + 1)).val(ages[i]);
            }

          }
    }

    function setupOccupancyFlightDropdown(value) {
        var subValue = value.split(',');
        $('#dd_searchbox_flight_adults').val(subValue[0]);
        $('#dd_searchbox_flight_children').val(subValue[1]);
    }

    function search() {
        var s = '';
        var warning = '';

        s += '/booking/search.aspx?searchMode=' + searchMode;

        warning = validInput(searchMode);

        if (warning.length == 0) {
            switch (searchMode) {
                case 'packages':
                    s += '&departureAirport='; s += $('#ddl_departureAirport').val();
                    s += '&resort='; s += $('#ddl_resort').val();
                    s += '&departureDate='; s += $('#txt_departureDate').val();
                    s += '&duration='; s += $('#ddl_duration').val();
                    s += '&numberOFRooms='; s += $('#ddl_numberOFRooms').val();
                    s += '&occupancy='; s += searchBoxOccupancy();
                    s += '&childages='; s += searchBoxChildages();
                    s += '&AccommodationID='; s += $('#ddl_hotelName').val();
                    s += '&StarRating='; s += $('#ddl_starRating').val();
                    break;
                case 'flights':
                    s += '&departureAirport='; s += $('#ddl_departureAirport').val();
                    s += '&arrivalAirport='; s += $('#ddl_arrivalAirport').val();
                    s += '&departureDate='; s += $('#txt_departureDate').val();
                    s += '&returningDate='; s += $('#txt_returningDate').val();
                    s += '&plusMinusDay='; s += $('#ddl_plusMinusDay').val();
                    s += '&occupancy='; s += searchBoxflightPassenger();
                    break;
                case 'hotels':
                    s += '&resort='; s += $('#ddl_resort').val();
                    s += '&arrivalDate='; s += $('#txt_departureDate').val();
                    s += '&duration='; s += $('#ddl_duration').val();
                    s += '&numberOFRooms='; s += $('#ddl_numberOFRooms').val();
                    s += '&occupancy='; s += searchBoxOccupancy();
                    s += '&childages='; s += searchBoxChildages();
                    s += '&AccommodationID='; s += $('#ddl_hotelName').val();
                    s += '&StarRating='; s += $('#ddl_starRating').val();
                    break;
            }

            //alert(s);
            document.location.href = s;

        }
        else {
            $('.div_control_searchBox_box_warning').html(warning);
        }

    };


    function searchBoxOccupancy() {
        var s = '';

        for (var i = 1; i <= document.getElementById('ddl_numberOFRooms').value; i++) {
            if (s.length > 0) {
                s += '|';
            };
            s += document.getElementById('dd_searchbox_room_' + i + '_adults').value;
            s += ',';
            s += document.getElementById('dd_searchbox_room_' + i + '_children').value;

        };

        return s;
    };

    function searchBoxChildages() {
        var s = '';
        for (var i = 1; i <= document.getElementById('ddl_numberOFRooms').value; i++) {
            if (s.length > 0) {
                s += '|';
            };
            var nokids = document.getElementById('dd_searchbox_room_' + i + '_children').value;
            nokids = parseInt(nokids);
            var skids = '';
            for (var ch = 1; ch <= nokids; ch++) {
                if (skids.length > 0) {
                    skids += ',';
                };
                skids += document.getElementById('dd_searchbox_room_' + i + '_childage_' + ch).value;
            };

            s += skids;
        };
        return s;
    };

    function validInput(searchMode) {
        var warning = '';

        switch (searchMode) {
            case 'packages':
                if ($('#ddl_departureAirport').val() == 0) {
                    warning += 'Please select a departure airport.<br/>';
                }

                if ($('#ddl_resort').val() == 0) {
                    warning += 'Please select a resort.<br/>';
                }

                if (isDate($('#txt_departureDate').val()) == false){
                    warning += 'Please select a departure date.<br/>';
                }
                break;
            case 'flights':
                if ($('#ddl_departureAirport').val() == 0) {
                    warning += 'Please select a departure airport.<br/>';
                }


                if ($('#ddl_arrivalAirport').val() == 0) {
                    warning += 'Please select an arrival airport.<br/>';
                }

                if (isDate($('#txt_departureDate').val()) == false) {
                    warning += 'Please select a departure date.<br/>';
                }

                if (isDate($('#txt_returningDate').val()) == false) {
                    warning += 'Please select a returning date.<br/>';
                }
                break;
            case 'hotels':
                if ($('#ddl_resort').val() == 0) {
                    warning += 'Please select a resort.<br/>';
                }
                if (isDate($('#txt_departureDate').val()) == false) {
                    warning += 'Please select a departure date.<br/>';
                }
                break;
        }

        if (warning.length > 0) {
            return '<strong>Warning</strong><br/>' + warning;
        }
        else
        {
            return '';
        }
    };

    function isDate(value) {
        try {
            var DayIndex = 0;
            var MonthIndex = 1;
            var YearIndex = 2;

            value = value.replace("-", "/").replace(".", "/");
            var SplitValue = value.split("/");
            var OK = true;
            if (!(SplitValue[DayIndex].length == 1 || SplitValue[DayIndex].length == 2)) {
                OK = false;
            }
            if (OK && !(SplitValue[MonthIndex].length == 1 || SplitValue[MonthIndex].length == 2)) {
                OK = false;
            }
            if (OK && SplitValue[YearIndex].length != 4) {
                OK = false;
            }
            if (OK) {
                var Day = parseInt(SplitValue[DayIndex], 10);
                var Month = parseInt(SplitValue[MonthIndex], 10);
                var Year = parseInt(SplitValue[YearIndex], 10);

                if (OK = (Year > 1900) ) {
                    if (OK = (Month <= 12 && Month > 0)) {
                        var LeapYear = (((Year % 4) == 0) && ((Year % 100) != 0) || ((Year % 400) == 0));

                        if (Month == 2) {
                            OK = LeapYear ? Day <= 29 : Day <= 28;
                        }
                        else {
                            if ((Month == 4) || (Month == 6) || (Month == 9) || (Month == 11)) {
                                OK = (Day > 0 && Day <= 30);
                            }
                            else {
                                OK = (Day > 0 && Day <= 31);
                            }
                        }
                    }
                }
            }
            return OK;
        }
        catch (e) {
            return false;
        }
    };

    function clearWarning() {
        $('.div_control_searchBox_box_warning').html('');
    }
