﻿/*depends on navUrl-twStore*/
var twSearchConditions = {
    nav_search_results: '',
    init: function () {
        twSearchConditions.hList = new twStore(relativepath + 'Handlers/HotelSearchHandler.ashx');
        twSearchConditions.scc = initSearchConditionsControl(twState().getSearchScope());
    },
    hList: null,
    scc: null,
    launchSearchRequest: function (ext) {
        if (typeof(rdpopup) != 'undefined') rdpopup.hide();
        twState().save();
        var _scope = twSearchConditions.scc.scope(ext);
        twState().setSearchScope(_scope);
        twSearchConditions.hList.reset().getData(null, function (data, flags) {
            navUrl(twSearchConditions.nav_search_results
                        .replace('{0}', data.paging.qhash));
        }, null, _scope);
    }
};
initSearchConditionsControl = function (sc) {
    var l = this;
    l.sc = sc;
    if (l.sc) applyCities(l.sc.cityId); //came from server
    $('[name="allocChooser"]', $('#guestCount')).val(1);
    if (l.sc && l.sc.hotel) $('#scHotel').val(l.sc.hotel);
    if (l.sc && l.sc.allocations) applyAllocations(l.sc.allocations);
    if (l.sc && l.sc.searchOptions) applySearchOptions(l.sc.searchOptions);
    $('#searchLauncherBtn')
        .bind('click', function () { twSearchConditions.launchSearchRequest(); })
        .bind('mouseover', tw_commons.mOverDP)
        .bind('mouseout', tw_commons.mOutDP);
    $('.cbg1', $('#searchOptions')).twTouchCase({ togglable: true });
    var f = {
        scope: function (ext) {
            var _scope = {
                cityId: $('#citySelector').val(),
                dateIn: $('#arrivalDate').val(),
                dateOut: $('#departureDate').val(),
                searchOptions: getSearchOptions(),
                allocations: getAllocations(),
                hotel: $('#scHotel').val()
            };
            if (typeof (ext) == 'object') $.extend(_scope, ext);
            return _scope;
        },
        datesChooser: fillInDateRangeSelector(l.sc.dateIn, l.sc.dateOut),
        allSearchOptions: getAllSearchOptionsNames()
    };
    return f;
};
getAllSearchOptionsNames = function() {
    var retval = [];
    for (var i = 0, itm; itm = searchOpts[i]; i++) {/*came from server*/
        retval.push({ n: itm.code, c: itm.classname, d: itm.name });
    };
    return retval;
},
getSearchOptions = function() {
    var retval = '';
    $('.cbg1[checked]', $('#searchOptions')).each(function(i, item) {
        retval += (retval.isEmpty() ? '' : '-') + $(item).attr('name');
    });
    return retval;
};
applySearchOptions = function(vals) {
    for (var i = 0, vv = vals.split('-'), v; v = vv[i]; i++) {
        $('.cbg1[name="' + v + '"]').twTouchCase({}, true);
    }
};
getAllocations = function() {
    var retval = '';
    $('select[name="gn"]', $('#guestCount')).each(function(i, item) {
        retval += (retval.isEmpty() ? '' : '-') + $(item).val();
    });
    return retval;
};
applyAllocations = function(vals) {
    var vv = vals.split('-');
    var ac = $('[name="allocChooser"]', $('#guestCount'));
    ac.val(vv.length);
    redrawAllocation(ac, null, vv);
};

toggleAllOpts = function(tf) {
    $('#searchOptions>li.opt').toggleClass('itemTpl');
};
applyCities = function(cityId) {
    var cityList = $('#citySelector');
    cityList.val(cityId);
};
twDRSelector = function() {
    var drc = this;
    drc.PH = $('#datesSelector');
    drc.p = {
        arrival: function(p) {
            var arr = this;
            arr.p = p;
            arr.PH = $('#arrivalDate');
            arr.day = $('select[name="dateIn"]', drc.PH);
            arr.month = $('select[name="monthIn"]', drc.PH);
            arr.cal = $('.datePickerC[name="cIn"]', drc.PH);
            return arr;
        },
        departure: function(p) {
            var dep = this;
            dep.p = p;
            dep.PH = $('#departureDate');
            dep.day = $('select[name="dateOut"]', drc.PH);
            dep.month = $('select[name="monthOut"]', drc.PH);
            dep.cal = $('.datePickerC[name="cOut"]', drc.PH);
            return dep;
        }
    };
    var f = {/* common functions for both dates*/
        phToSelect: function() { var arr = this.PH.val().split('-'); if (arr.length < 3) return; this.day.val(arr[2]); this.month.val(arr[0] + '-' + arr[1]); },
        selectToPh: function() { this.PH.val(this.month.val() + '-' + this.day.val()); },
        selectToText: function() { return this.day.val() + '&nbsp;' + this.month.children('option[selected]').html(); },
        phToDate: function() { var a = new Date(); var aArr = this.PH.val().split('-'); a.setFullYear(aArr[0], aArr[1] - 1, aArr[2]); return a; },
        dateToPH: function(d) {
            var d1 = { y: d.getFullYear(), m: (d.getMonth() + 1), d: d.getDate() };
            this.PH.val(d1.y + '-' + (d1.m + '-' + d1.d)); this.phToSelect.call(this);
        },
        strToPH: function(s) { this.PH.val(s); this.phToSelect.call(this); }
    };
    for (var key in f) { /* injecting common functions to prototypes of both dates handlers */
        drc.p.arrival.prototype[key] = f[key];
        drc.p.departure.prototype[key] = f[key];
    }
    drc.sync = function(event) {
        drc.f.arrival.selectToPh();
        drc.f.departure.selectToPh();
        var arrD = drc.f.arrival.phToDate();
        if (arrD >= drc.f.departure.phToDate()) {
            drc.f.departure.dateToPH(arrD.increment(1));
        }
    };
    $('select', drc.PH).bind('change', drc.sync)
    drc.f = {
        departure: new drc.p.departure(drc),
        arrival: new drc.p.arrival(drc),
        sync: drc.sync
    };
    drc.arrivalDatePicked = function(day) {
        drc.f.arrival.phToSelect();
        drc.sync();
    };
    drc.departureDatePicked = function(day) {
        drc.f.departure.phToSelect();
        drc.sync();
    };
    drc.f.arrival.cal
            .twTouchCase({ shadClassName: 'datePickerS' })
            .twDatePicker({ backSelect: false, onDayClick: drc.arrivalDatePicked, bindedTo: drc.f.arrival.PH, evt: 'click' });
    drc.f.departure.cal
            .twTouchCase({ shadClassName: 'datePickerS' })
            .twDatePicker({ backSelect: false, onDayClick: drc.departureDatePicked, bindedTo: drc.f.departure.PH, evt: 'click' });
    return drc.f;
};
fillInDateRangeSelector = function(dateIn, dateOut) {
    var xxx = new twDRSelector();
    xxx.arrival.strToPH(dateIn);
    xxx.departure.strToPH(dateOut);
    return xxx;
};
redrawAllocation = function(s, e, arr) {
    var gk = $('#guestCount');
    $('tr.allocItem').each(function(i, item) {
        if (i > 0) $(item).remove();
    });
    var nk = arr ? arr.length : parseInt($(s).val());
    var fr = $('tr.allocItem:first');
    if (arr) $('select[name="gn"]', fr).val(arr[0]);
    for (var i = 2; i <= nk; i++) {
        var newG = fr.clone();
        gk.append(newG);
        $('[name="rn"]', newG).html(i);
        if (arr) $('select[name="gn"]', newG).val(arr[i - 1]);
    }

};
