﻿(function(){
if (typeof window.$5 == 'undefined') window.$5 = {};
var search = window.$5.search = {};
var form = $5('formMainSearch');
var hForm = $5('formHiddenSearch');
search.isMapSearch = true;

var MIN_PRICE = $5.config('hotel.minPrice');
var MAX_PRICE = $5.config('hotel.maxPrice');
var MIN_STAR = $5.config('hotel.minStar');
var MAX_STAR = $5.config('hotel.maxStar');;

search.init = function(){
    var filterMap = {
        date:false,
        price:false,
        star:false
    };
    $5('formMainSearch').onsubmit = search.withCheck;
    //初始化原始选项
    this.oldOptions = {
        city:$.trim(form.city.value)
        //checkInDate:form.checkInDate.value,
        //checkOutDate:form.checkOutDate.value
    };
    $('#priceSlider').slider({ min:MIN_PRICE, max:MAX_PRICE, stepping: 10, range: true, change: function(e,ui) { 
        if(!filterMap.price) {
            $('#searchCauseDiv').show();            
            $('#liSearchPrice').show();
        }
        if (ui.handle.attr('id') == 'priceSliderHandle1') {
            $('#priceMin').html('' + ui.value);
            $('#filterMinPrice').html(ui.value);
        } else {
            $('#priceMax').html(ui.value);
            $('#filterMaxPrice').html(ui.value);
        }
        if(!filterMap.price) search.withoutCheck();
    } });
    // 为了消除price slider不能点击的问题，需要让它先显示出来
    $('#filterStarPanel').show();
    $('#starSlider').slider({ min:MIN_STAR, max:MAX_STAR, stepping: 0.5, range: true, change: function(e,ui) { 
        if(!filterMap.star) {
            $('#searchCauseDiv').show();
            $('#liSearchStar').show();
        }
        if (ui.handle.attr('id') == 'starSliderHandle1') {
            $('#starMin').html('' + ui.value);
            $('#filterMinStar').html('' + ui.value);
        } else {
            $('#starMax').html(ui.value);
            $('#filterMaxStar').html(ui.value);
        }
        if(!filterMap.star) search.withoutCheck();
    } });
    // 解决ie下第一次打开价格面板时，显示范围的绿条没有的bug
    if ($.browser.msie)$('#starSlider .ui-slider-range')[0].click();
    $('#filterStarPanel').hide().find('ul').hide();

    $('#filterPriceClose').click(function(){
        filterMap.price = true;
        $('#liSearchPrice').hide();
        $('#priceSlider').slider('moveTo', MIN_PRICE, 0);
        $('#priceSlider').slider('moveTo', MAX_PRICE, 1);
        filterMap.price = false;
        search.withoutCheck();
    });
    $('#filterStarClose').click(function(){
        filterMap.star = true;
        $('#liSearchStar').hide();
        $('#starSlider').slider('moveTo', "'" + MIN_STAR + "'", 0);
        $('#starSlider').slider('moveTo', MAX_STAR, 1);
        filterMap.star = false;
        search.withoutCheck();
    });
    
    $('#orderTypeSel').change(function(){
        search.withoutCheck();
    });
    $('#videoFirstChk').click(function(){
        search.withoutCheck();
    });
    search.initFilterPanels();
    $('#cancelAllFilterLink').click(function(){
        filterMap.price = true;
        $('#liSearchPrice').hide();
        $('#priceSlider').slider('moveTo', MIN_PRICE, 0);
        $('#priceSlider').slider('moveTo', MAX_PRICE, 1);
        filterMap.price = false;
        filterMap.star = true;
        $('#liSearchStar').hide();
        $('#starSlider').slider('moveTo', "'" + MIN_STAR + "'", 0);
        $('#starSlider').slider('moveTo', MAX_STAR, 1);
        filterMap.star = false;
        $.each(search.hiddenFilters, function(i, s){
            $('#liSearch_' + s).hide().find('span').empty();
            hForm[s].value = '';
        });
        $.each(search.selectedInput, function(){
            this.checked = false;
        });
        search.selectedInput = [];
        $('#searchCauseDiv').hide();
//        if (search.isMapSearch) search.showWorldMap();
        search.withoutCheck();
    });
    
    $('#advanceFilterLink').click(function(){
        $('#filterStarPanel').toggle();
        var el = $('#filterPanels').toggle();
        if (el.css('display') == 'none') {
            this.innerHTML = '+高级筛选';
        } else {
            this.innerHTML = '-简单筛选';
        }
    });
};
search.hiddenFilters = ['scenic', 'brand', 'area', 'facility'];
search.lastPage = -1;
search.initFilterPanels = function(){
    var fps = $('.filterPanel');
    var lastToggle = null;
    fps.each(function(){
        var _s = $(this);
        var _ul = _s.find('ul');
        var _chks = _ul.find('input');
        var _a = _chks.next();
        var _mlt = _ul.find('.filterPanelMultiple');
        var _btn = _mlt.next();
        _chks.hide();
        _s.find('.filterPanelToggle')[0].onclick = function(){
            _ul.toggle();
            if (_ul.css('display') != 'none') {
                $(this).removeClass('linkOpen');
                $(this).addClass('linkClose');
                if (search.isMapSearch) {
                    fps.find('ul').not(_ul).hide();
                    fps.find('.filterPanelToggle').not(this).removeClass('linkClose').addClass('linkOpen');
                }
            } else {
                $(this).removeClass('linkClose');
                $(this).addClass('linkOpen');
            }
        };
        // 查询
        _btn.click(function(){
            var cause = [];
            _chks.each(function(){
                if (this.checked) {
                    cause.push(this.value);
                    search.selectedInput.push(this);
                }
            });
            if (cause.length >= 1) {
                $('#searchCauseDiv').show();
                search.setHiddenOptions(_chks.get(0).name, cause);                
                search.withoutCheck();
            }
        });
        _mlt.find('a').click(function(){
            if (_btn.css('display') == 'none') {
                _chks.css('display', '');
                this.innerHTML = '-单选';
                _mlt.next().show();
            } else {
                _chks.hide();
                this.innerHTML = '+多选';
                _mlt.next().hide();
            }
        });
        _a.each(function(i) {
            $(this).click(function(){
                var key = this.previousSibling.name;
                if (key == 'scenic') {
                    if (search.isMapSearch) $5.gmap.clickScenic(i);
                    else {
                        search.setHiddenOption('scenic', this.innerHTML);
                        search.withoutCheck();
                    }
                    return;
                }
                search.setHiddenOption(key,this.innerHTML);
                search.withoutCheck();
            });
        });
    });
};
search.checkFilters=function(){
    var o = this.loadOptions();
    if (o.minPrice == MIN_PRICE && o.maxPrice == MAX_PRICE && o.minStar == MIN_STAR && o.maxStar == MAX_STAR && "" == o.scenic && "" == o.brand && "" == o.area && "" == o.facility) $('#searchCauseDiv').hide();
    else $('#searchCauseDiv').show();
};

//有检查的搜索
var lastCity;
search.withCheck = function(){
    var city;
    if (!(city = $.trim(form.city.value))) {
        form.city.focus();
        return false;
    }
    if (city != lastCity) {
        hForm.scenic.value = hForm.brand.varlue = hForm.area.value = hForm.facility.value = "";
    }
    lastCity = city;
    if (!$5.city.check(city)) return false;
    
    search.oldOption = {
        city:city
        //checkInDate:form.checkInDate.value,
        //checkOutDate:form.checkOutDate.value
    };
    $('#liSearchDate').show();
    search.withoutCheck();
    return false;
};
search.withoutCheck = function(func){
    var options = search.loadOptions();
    if (!$.trim(options.city)) return;
    if (!search.needSearch(options)) {
        if (search.lastPage != hForm.page.value) {
            search.lastPage = options.page = hForm.page.value;
            options.getFilter = false;
        } else return;
    } else {
        search.lastPage = options.page = hForm.page.value = 1;
        options.getFilter = true;
    }   
    $5.openLoadingPanel();
    $5.ajax("Hotel.Search",options, function(ret){
        $5.hideLoadingPanel();
        if(ret.Status == 1) alert(ret.Error);
        else {
            var d = ret.Data;
            $('#totalHotelSpan').html(d.total + '');
            $('#cityNameSpan').html(options.city);
            search.updateHotelList(d.list);
            options.getFilter &&   search.initFilter(d.filter);
            //$('#filterPanels').html(d.filter);
            
            search.initPage(d.page);
            
            if (search.isMapSearch) {
                var pos = $5.city.getCity(options.city);
                $5.gmap($5('googleMap'), pos.lo, pos.la, 10);
                $5.gmap.initHotels(d.list);
            }
            else {
                $5.hotel.initHotelImage2();
                search.initHotelLabels();
            }            
            
           
            // 载入城市景点
            $5.city.loadScenics(options.city, function(scenics){
                $('#filterPanels ul')[0].innerHTML = search.getFilterHtml('scenic', scenics, false);
                // 在地图上标识出景点
                if (search.isMapSearch) {
                    $5.gmap.initScenics(scenics);
                    var scenic = hForm.scenic.value;
                    if ($.trim(scenic)) {
                        var s = $5.city.getScenic(options.city, scenic);
                        $5.gmap.drawCircle(s);
                    }
                }
                
                // 初始化景点的点击事件
                options.getFilter && search.initFilterPanels();
            });
            
            //初始化用来比较的checkbox            
            $5.hotel.initCompareCheck();
            
            if (typeof func == 'function')func();
        }
        search.checkFilters();
    });
};
// 初始化过滤器
var filterNames=[/*'brand',*/'area','facility'];
search.initFilter = function(filters) {
    var uls = $('#filterPanels .filterPanel ul');
    
    $.each(filters, function(i){
        uls[i+1].innerHTML = search.getFilterHtml(filterNames[i], this, true);
    });
};
// 得到过滤面板的html代码
search.getFilterHtml = function(name,filter,multiSelect) {
    var c = [];
    $.each(filter,function(){
        c.push('<li><input type="checkbox" name="' + name + '" value="' + this.name + '" style="display:none;"/><a href="javascript:void(0);">' + this.name + '</a>' + (this.num > 0 ? "(" + this.num + ")" : "") + '</li>');
    });
    if (multiSelect) {
        c.push('<li class="filterPanelMultiple"><a href="javascript:void(0);" class="green">+多选</a></li>');
        c.push('<li class="fr none"><button type="button">查询</button></li>');
    }
    return c.join('');
};
search.initHotelLabels = function(){
    $('.hotelLabel').click(function(){
        search.setHiddenOption("area", this.innerHTML);
        search.withoutCheck();
    });
};
//search.goSimpleSearch = function(){
////    var price = $('#filterPricePanel');
////    price.show().find('ul').show();
////    //$('#filterStarPanel').hide();
////    var panels = $('.filterPanel').not(price);
////    panels.removeClass('linkClose').addClass('linkOpen').find('ul').hide();
////    //$('#filterPanels').hide();
////    //$('#advanceFilterLink').html('+高级筛选');
//};
search.goCity = function(city) {
//    $('#worldMap').hide();
//    $('#googleMap').show();
    var c = $5.city.getCity(city);
    if (this.isMapSearch)$5.gmap($5('googleMap'), c.lo, c.la, 10);
    form.city.value = city;    
    $5.search.withCheck();
};
search.goPage = function(page) {
    this.lastPage = hForm.page.value;
    hForm.page.value = page;
    this.withoutCheck();
};
search.setOptions = function(form, options){
    for(var k in options) {
        if (typeof form[k] != 'undefined') {
            form[k].value = options[k];
        }
    }
};
// 初始化分页代码
search.initPage = function(pageInfo) {
    $('.pageNav').html(pageInfo);
    //search.lastPage = hForm.page.value = 1;
};
// 检查是否需要查询
search.needSearch = function(options){
    if (typeof this._oldOptions != 'undefined') {
        for (var k in options) {
            if (this._oldOptions[k] != options[k]) {
                this._oldOptions = options;
                return true;
            }
        }
        return false;
    }
    this._oldOptions = options;
    return true;
};
// 显示世界地图
search.showWorldMap = function(){
    $('#googleMap').hide();
    $('#worldMap').show();    
};
// 设置隐藏选项 单选
search.setHiddenOption = function(key, value) {
    $('#searchCauseDiv').show();
    if (key == 'scenic') {
        hForm[key].value = value;
    } else {
    var oldValue = $.trim(hForm[key].value);
        if (oldValue != '') {
            var tmp = oldValue.split(',');
            if ($.inArray(value, tmp) == -1) hForm[key].value = oldValue + ',' + value; // 表示对两个条件进行叠加
        } else hForm[key].value = value;
    }
    this.updateOptionUI(key);    
};
// 设置隐藏选项 多选
search.setHiddenOptions = function(key, array) {
    hForm[key].value = array.join(',');
    this.updateOptionUI(key);
};
// 更新搜索选项的UI
search.updateOptionUI = function(key) {
    var vs = hForm[key].value.split(',');
    var li = $('#liSearch_' + key);
    li.show();
    var span = li.find('span');
    var html = '';
    $.each(vs, function(i, s){
        html += '<span><span>' + s + '</span>(<img src="images/filterClose.gif" alt="取消" align="absmiddle" class="hand"/>)</span>';
    });
    span.html(html);
    var imgs = span.find('img');
    imgs.click(function(){
        search.deleteHiddenOption(key, this.parentNode.firstChild.innerHTML);
        $(this.parentNode).remove();
        if (span.html() == '') li.hide();
    });
};
// 删除选项
search.deleteHiddenOption = function(key, value) {
    var tmp = $.trim(hForm[key].value).split(',');
    var newArr = [];
    $.each(tmp, function(i, s){
        if (s != value) newArr.push(s);
    });
    hForm[key].value = newArr.join(',');
    
    $.each(search.selectedInput, function(i){
        if (this.name == key && this.value == value) {
            this.checked = false;
            search.selectedInput.splice(i, 1);
        }
    });
    
    search.withoutCheck();
};
search.selectedInput = [];
// 载入选项
search.loadOptions = function(){
    var o = {
        minPrice:parseInt($('#priceMin').html(), 10),
        maxPrice:parseInt($('#priceMax').html(), 10),
        minStar:parseInt($('#starMin').html(), 10),
        maxStar:parseInt($('#starMax').html(), 10),
        order:$('#orderTypeSel').val(),
        videoFirst:$('#videoFirstChk').attr('checked')
    };
    if (typeof search.oldOption == 'undefined') {
        this.oldOption = {
            city:$.trim(form.city.value)
            //checkInDate:form.checkInDate.value,
            //checkOutDate:form.checkOutDate.value
        };
    }
    for (var k in this.oldOption) {
        o[k] = this.oldOption[k];
    }
    
    $.each(this.hiddenFilters, function(i, s){
        o[s] = hForm[s].value;
    });
    o.isMapSearch = this.isMapSearch;
    return o;
};

search.updateHotelList = function(hotelList) {
    this.setHotelList(hotelList);
    
};
// 设置酒店列表
search.setHotelList = function(list) {
    var self = this;
    if (search.isMapSearch) {
        var ul = $('#simpleHotelList');
        ul.empty();
        $.each(list,function(i, s){
            ul.append(search.getHotelHtml(this, new Number(i + 1)));            
        });
        ul.pngFix();
    } else {
        $('#hotelListDiv').html(list);
        window.maskPanel.resize();
    }
    $5.hotel.initBookLinks();
};
// 得到酒店的html代码
search.getHotelHtml = function(h, i) {
   return '<li id="_hotel_' + h.id + '">\
    <div class="floatl" style="width:200px;overflow:hidden;">\
        <img src="/images/mapicon/m-' + i + '-s[1].png" alt="' + i + '" align="absmiddle" id="_hotel_icon_' + i + '" width="14" height="14"/>&nbsp;\
        <a href="javascript:void(0)" class="b f14 hotelName" id="_hotel_name_' + h.id + '">' + (h.name || '') + '</a>&nbsp;\
        <img src="/images/star0' + (h.star || 0) + '.gif" alt="' + (h.star || 0)  + '星" height="12"/>\
    </div>\
    <input type="checkbox" class="floatr" class="floatr" name="hotelId" value="' + h.id + '" ' + (h.checked ? 'checked="checked"' : '') + '/>\
    <div class="clear"></div>\
    <div class="fr floatl" style="width:80px;">\
        <span class="red b">￥</span><span class="red f24">' + (h.minPrice || 0) + '</span>起<br />\
        <span class="gray">' + (h.priceNum || 1) + '家报价</span>\
    </div>\
    <div class="r floatl" style="padding-left:6px;width:120px;">\
        <div class="hLine" title="' + h.address + '">' + (h.address || '') + '</div>\
        <div>\
            <img src="/images/facility/tv' + (h.tv?'':'g') + '.gif" alt="卫星电视"/>&nbsp;<img \
            src="/images/facility/net' + (h.net?'':'g') + '.gif" alt="免费宽带"/>&nbsp;<img \
            src="/images/facility/swim' + (h.swim?'':'g') + '.gif" alt="游泳池"/>&nbsp;<img \
            src="/images/facility/gym' + (h.gym?'':'g') + '.gif" alt="健身房"/>&nbsp;<img \
            src="/images/facility/dine' + (h.dine?'':'g') + '.gif" alt="餐厅"/>\
        </div>\
        <div>\
            <a href="/hotel/' + h.id + '.aspx#Comments" target="_blank">更多点评</a>\
            <img src="/images/book2.gif" alt="预定" id="_hotel_book_' + h.id + '" width="54" height="20" class="bookHotelImage"/>\
        </div>\
    </div>\
    <div class="clear"></div>\
</li>';
};

})()