﻿/*
#Region "History"
'20100205 - RH - Script file added
'20100211 - RH - Pass search parameters onto SearchBox
'20100212 - RH - Set default date of calendar using hidden field
#End Region
*/

Event.observe(window, 'load', function() {
    searchBox.startUp($F('sbMode'), $F('sbAccommodationID'), $F('sbDestinationLocationID'), $F('sbDepartureLocationID'), $F('sbStartDate'), $F('sbDuration'), $F('sbOccupancy_'), $F('sbPromoCode'), $F('sbAtype'));
});

var SearchBox = Class.create({
    mode: '',
    accommodationID: 0,
    destinationLocationID: 0,
    departureLocationID: 0,
    departureDate: '',
    duration: 0,
    occupancy: '',
    promoCode: '',
    aType: '',
    floating: false,
    firstTime: true,
    startUp: function (mode, accommodationID, destinationLocationID, departureLocationID, departureDate, duration, occupancy, promoCode, aType) {
        this.mode = mode || 'Holiday';
        this.accommodationID = accommodationID || 0;
        this.destinationLocationID = destinationLocationID || 0;
        this.departureLocationID = departureLocationID || 0;
        this.departureDate = departureDate || new Date();
        this.duration = duration || 7;
        this.occupancy = occupancy || '2,0,0';
        this.promoCode = promoCode || '';
        this.aType = aType || 'Villas';

        if (this.firstTime) {
            $('SearchBox').update('<img src="/gfx/loader_small.gif" alt="Loading..." />');
            this.firstTime = false;
        };

        new Ajax.Request('/ajax/SearchBox.aspx?mode=' + this.mode + '&accommodationid=' + this.accommodationID + '&floating=' + (this.floating ? '1' : '0') + '&' + main.getTicks(), {
            method: 'get',
            onSuccess: function (transport) {
                $('SearchBox').update(main.getContent(transport.responseText));

                searchBox.select();

                $('SearchBox').show();

                if (searchBox.floating) {
                    $('SearchBoxClose').show();

                };

                if (searchBox.mode == 'Holiday') {
                    searchBox.populateDestinations(searchBox.departureLocationID);
                    searchBox.populateDepartures(searchBox.destinationLocationID, searchBox.accommodationID);
                }
                else {
                    searchBox.populateDestinations(0);
                };

                calendar.init();
            }
        });
    },
    setMode: function (mode) {
        if (mode != this.mode) {
            this.startUp(mode, this.accommodationID, ($('dd_destination') ? $F('dd_destination') : this.destinationLocationID), ($('dd_departs') ? $F('dd_departs') : this.departureLocationID), $F('txt_startdate'), $F('dd_duration'), this.getOccupancyString(), $F('txt_promoCode'), $F('dd_accomtype'));
        };
    },
    useAccommodation: function (AccommodationID) {
        this.floatMe();
        this.startUp(this.mode, AccommodationID, ($('dd_destination') ? $F('dd_destination') : this.destinationLocationID), ($('dd_departs') ? $F('dd_departs') : this.departureLocationID), $F('txt_startdate'), $F('dd_duration'), this.getOccupancyString(), $F('txt_promoCode'), $F('dd_accomtype'));
    },
    select: function () {

        $('txt_startdate').value = this.departureDate;
        $('dd_duration').value = this.duration;
        $('txt_promoCode').value = this.promoCode;
        $('dd_accomtype').value = this.aType;


        if ($('dd_destination')) {
            if ($('dd_destination').options.length == 0) {
                $('dd_destination').options.add(new Option('Loading...', this.destinationLocationID));
            };
            $('dd_destination').value = this.destinationLocationID;
        };

        if ($('hid_accommodationID')) {
            $('hid_accommodationID').value = this.accommodationID;
        };

        if ($('dd_departs')) {
            if ($('dd_departs').options.length == 0) {
                $('dd_departs').options.add(new Option('Loading...', this.departureLocationID));
            };

            $('dd_departs').value = this.departureLocationID;
        };

        var occupancyArray = this.occupancy.split('|');

        $('dd_rooms').value = occupancyArray.size();

        this.setRooms($F('dd_rooms'));
        this.setType($F('dd_accomtype'));

        occupancyArray.each(function (s, index) {
            $('dd_ad_' + index).value = occupancyArray[index].split(',')[0];
            $('dd_ch_' + index).value = occupancyArray[index].split(',')[1];
            $('dd_in_' + index).value = occupancyArray[index].split(',')[2];
        });

        $('hid_occ').value = this.occupancy;
    },
    floatMe: function () {
        this.floating = true;
        $('SearchBox').writeAttribute('class', 'FloatingSearchbox');
        $('SearchBoxClose').show();
        main.lightsOff();
    },
    embedMe: function () {
        main.lightsOn();
        this.floating = false;
        $('SearchBox').writeAttribute('class', '');
        $('SearchBoxClose').hide();
        this.startUp(this.mode, 0, ($('dd_destination') ? $F('dd_destination') : this.destinationLocationID), ($('dd_departs') ? $F('dd_departs') : this.departureLocationID), $F('txt_startdate'), $F('dd_duration'), this.getOccupancyString());

    },
    search: function () {
        if ($('dd_destination')) {
            if ($F('dd_destination') == '0') {
                main.warning('Error', 'Please select a destination.');
                return;
            };
        };

        if ($('dd_departs')) {
            if ($F('dd_departs') == '0') {
                main.warning('Error', 'Please select a departure point.');
                return;
            };
        };

        if (Date.parseDate($F('txt_startdate'), "d/m/Y") < Date.parseDate($F('Today'), "d/m/Y")) {
            main.warning('Error', 'Departure date is in the past.');
            return;
        };

        var s = '/Search.aspx?';
        s += 'Mode=';
        s += this.mode;
        if (this.accommodationID > 0 && this.floating) {
            s += '&AccommodationID=';
            s += this.accommodationID;
        };
        if ($('dd_departs')) {
            s += '&DepartureLocationID=';
            s += $F('dd_departs');
        };

        if ($('dd_destination')) {
            s += '&DestinationLocationID=';
            s += $F('dd_destination');
        };

        s += '&startDate=';
        s += $F('txt_startdate');
        s += '&duration=';
        s += $F('dd_duration');
        s += '&occupancy=';
        s += this.getOccupancyString();
        s += '&rooms=';
        s += $F('dd_rooms');
        s += '&promoCode=';
        s += $F('txt_promoCode');
        s += '&atype=';
        s += $F('dd_accomtype');

        document.location.href = s;
    },
    setRooms: function (n) {
        for (var i = 0; i < 6; i++) {
            var ca = $F('dd_ad_' + i);
            var cc = $F('dd_ch_' + i);
            var ci = $F('dd_in_' + i);

            if (n == 1) {
                $('lbl_rm_1').innerHTML = 'Room';
            } else {
                $('lbl_rm_1').innerHTML = 'Room 1';
            }

            if (i < n) {
                $('tr_rm_' + i).show();


            } else {
                $('tr_rm_' + i).hide();

            };

            $('dd_ad_' + i).options.length = 0;
            $('dd_ch_' + i).options.length = 0;
            $('dd_in_' + i).options.length = 0;

            for (var j = 0; j < 10; j++) {
                $('dd_ad_' + i).options.add(new Option(j, j));
                $('dd_ch_' + i).options.add(new Option(j, j));
                $('dd_in_' + i).options.add(new Option(j, j));
            };

            $('dd_ad_' + i).value = ca;
            $('dd_ch_' + i).value = cc;
            $('dd_in_' + i).value = ci;
        };
    },

    setType: function (n) {
        if ($('dd_accomtype').value == 'Hotels') {
            $('dd_rooms').value = 1;
            $('dv_rooms').show();
        } else {
            $('dv_rooms').hide();

            for (var i = 1; i < 6; i++) {
                $('dd_ad_' + i).options.length = 0;
                $('dd_ch_' + i).options.length = 0;
                $('dd_in_' + i).options.length = 0;
                $('tr_rm_' + i).hide();
            };


        };

    },

    populateDestinations: function (airportID) {
        if ($('dd_destination')) {
            var currval = $F('dd_destination');

            $('dd_destination').options.length = 0;
            $('dd_destination').options.add(new Option('Loading...', 0));

            new Ajax.Request('/ajax/routes.ashx?mode=destinations&airportid=' + airportID + '&' + main.getTicks(), {
                method: 'get',
                onSuccess: function (transport) {
                    try {
                        $('dd_destination').options.length = 0;
                        $('dd_destination').options.add(new Option('Select Destination...', 0));
                        transport.responseText.evalJSON().each(function (item) {
                            $('dd_destination').options.add(new Option(item.label, item.id));
                            item.children.each(function (item2) {
                                $('dd_destination').options.add(new Option('\xA0\xA0\xA0\xA0' + item2.label, item2.id));
                            });
                        });
                        $('dd_destination').value = currval;
                    } catch (e) {
                        alert('Error populating');
                    };
                },
                onFailure: function () {
                    alert('Error populating');
                }
            });
        };
    },
    populateDepartures: function (locationID, accommodationID) {
        if ($('dd_departs')) {
            var currval = $F('dd_departs');

            $('dd_departs').options.length = 0;
            $('dd_departs').options.add(new Option('Loading...', 0));

            new Ajax.Request('/ajax/routes.ashx?mode=departures&destinationid=' + locationID + '&accommodationID=' + accommodationID + '&' + main.getTicks(), {
                method: 'get',
                onSuccess: function (transport) {
                    try {
                        $('dd_departs').options.length = 0;
                        $('dd_departs').options.add(new Option('Select Departure...', 0));
                        transport.responseText.evalJSON().each(function (item) {
                            $('dd_departs').options.add(new Option(item.label, item.id));
                        });
                        $('dd_departs').value = currval;
                    } catch (e) {
                        alert('Error populating');
                    };
                },
                onFailure: function () {
                    alert('Error populating');
                }
            });
        };
    },
    getOccupancyString: function () {
        var occ = '';

        for (var i = 0; i < $F('dd_rooms'); i++) {
            if (occ != '') {
                occ += '|';
            };
            occ += $F('dd_ad_' + i) + ',' + $F('dd_ch_' + i) + ',' + $F('dd_in_' + i);
        };

        return occ;
    }
});

var searchBox = new SearchBox(); 
