﻿var sel_services = new Array();
var clearRayon=false;
var stateVisibleRayon = new Array();
var sel_spec_services = new Array();
var first = 1;
var position;
var min_position;
var max_position;

var sel_hotels;
var hotelrows;
var meal_filter_select;
var reg_filter_select;
var cat_filter_select;
var speccat_filter_select;
var regrows;
var keyword;
var hotels;
var hNames;

function SelectFirstOption(ctrls) {
    var i;
    for (i = 0; i < ctrls.length; i++) {
        ctrls[i].options[0].selected = true;
    }
}

function v2_init() {
    sel_hotels = null;
    
    if($('select.rayon_select').length==0)
        return;
    SelectFirstOption($('select.cat_select'));
    SelectFirstOption($('select.meal_select'));
    SelectFirstOption($('select.rayon_select'));
    SelectFirstOption($('select.speccat_select'));

    meal_filter_select = $("select.meal_select")[0];
    reg_filter_select = $("select.reg_select")[0];
    cat_filter_select = $("select.cat_select")[0];
    speccat_filter_select = $("select.speccat_select")[0];
    regrows = $("tr.regrow");
    $("input[rel=keyword]").val('Введите название отеля...');
    hotels = new Array();
    $("tr.hotelrow").each(function(i) {
        var o = new Object();
        o.m_arr = $("td.meal > input.val", this)[0].value.split('#');
        o.cat = $("td.category > input.val", this)[0].value;
        var specCatCol = $("td.speccategory > input.val", this)[0];
        o.speccat = specCatCol != undefined ? specCatCol.value : '';
        o.loc = $("td.location > input.val", this)[0].value;
        o.city = $("td.location > input.val", this)[1].value;
        o.state = $("td.location > input.val", this)[2].value;
        var anch = $("td.name > a", this)[0];
        o.id = $("input.val", anch)[0].value;
        o.href = anch.href;
        o.cap = getObjInnerText(anch);

        var s_arr = new Array();
        $("td.service", this).each(function(k) {
            s_arr[k] = this.innerHTML != "";
        }
        );
        o.s_arr = s_arr;

        var spec_arr = new Array();
        $("td.specService", this).each(function(k) {
            spec_arr[k] = this.innerHTML != "";
        }
        );
        o.spec_arr = spec_arr;

        o.visible = true;
        o.row = this;
        hotels[i] = o;
    }
    );
}

function setservice(num) {
   var tddd=$("#service_td_" + num);
    
     //var td = $("td [rel='service_td_" + num + "']");
	var td =$("#service_td_" + num);
    if ((sel_services[num] = !sel_services[num]) == false)
        td.css('background-color', "#FFFFFF");
    else
        td.css('background-color', "#f78f1f");
   
    rebuild();
}

function setSpecService(num) {
    var td = $("td [rel='spec_service_td_" + num + "']");
    if ((sel_spec_services[num] = !sel_spec_services[num]) == false)
        td.css('background-color', "#FFFFFF");
    else
        td.css('background-color', "#F78121");
    rebuild();
}

function meal_select(ctrl) {
    var val = $(ctrl).val();
    $('select[rel=meal_select] option[value=' + val + ']').attr('selected', 'yes');
    rebuild();
}

function category_select(ctrl) {
    var val = $(ctrl).val();
    $('select[rel=category_select] option[value=' + val + ']').attr('selected', 'yes');
    rebuild();
}

function speccategory_select(ctrl) {
    var val = $(ctrl).val();
    $('select[rel=speccategory_select] option[value=' + val + ']').attr('selected', 'yes');
    rebuild();
}

function change_city(ctrl, state) {
    //debugger;
    var val = $(ctrl).val();
    var sl = $("#clist" + state).val();
    if (sl == '' || (',' + sl + ',').indexOf(',' + val + ',') != -1) {
        stateVisibleRayon=new Array();
        clearRayon=true;
        $("select.rayon_select").each(function(k) {
            $(this).val("0");
//            var st=$(this).attr("state");
//            stateVisibleRayon[st]=',';
//            $("#"+$(this).attr("id")+" option").each(function(l) {
//                stateVisibleRayon[st]+=$(this).val()+",";
//            });
        });
        rebuild();
        return false;
    }
    else
        return true;
}

function rebuild() {
    //debugger;
    if (hotels != undefined) {
        var meal_filter = meal_filter_select.value;
        var reg_filter = reg_filter_select.value;
        var cat_filter = cat_filter_select.value;
        var speccat_filter = speccat_filter_select != undefined ? speccat_filter_select.value : '';
        var sel_regs = new Array();

        //для каждого контрола из разных стран с дропдауном районов,будет показан выбранный им элемент
        var stateRegion = new Array();
        $("select.reg_select").each(function(k) {
            stateRegion[$(this).attr("state")] = $(this).val();
        }
        );

        //для каждого контрола из разных стран с дропдауном районов,будет показан выбранный им элемент
        var stateRayon = new Array();
        $("select.rayon_select").each(function(k) {
            stateRayon[$(this).attr("state")] = $(this).val();
        }
        );
        
        //debugger;
        for (var i in hotels) {
            var show = true;
            var row = hotels[i];

            if (meal_filter != '0') {
                show = false;
                var m_arr = row.m_arr;
                for (m = 0; m < m_arr.length; m++)
                    if (meal_filter == m_arr[m]) {
                    show = true;
                    break;
                }
            }
            if (show && cat_filter != '0') {
                var m = row.cat;
                if (m != cat_filter) show = false;
            }

            if (show && speccat_filter != '') {
                var m = row.speccat;
                if (speccat_filter == '0' && m != speccat_filter)
                    show = false;
                else if (speccat_filter == '1')
                    show = (m == '1' || m == '0');
            }

            if (show) {
                for (m = 0; m < sel_services.length; m++) {
                    var s0 = row.s_arr[m];
                    if (!s0 && sel_services[m] == true)
                        show = false;
                }
            }

            if (show) {
                for (m = 0; m < sel_spec_services.length; m++) {
                    var s0 = row.spec_arr[m];
                    if (!s0 && sel_spec_services[m] == true)
                        show = false;
                }
            }

            var m = row.city;
            var state = row.state;
            if (show && stateRegion[state] != '0') {
                if ((',' + stateRegion[state] + ',').indexOf(',' + m + ',') == -1) show = false;
            }

            var location = row.loc;
            if (show && stateRayon[state] != '0') {
                if ((',' + stateRayon[state] + ',').indexOf(',' + location + ',') == -1) show = false;
            }

            if (show) {
                if (!row.visible) {
                    $(row.row).show();
                    row.visible = true;
                }
                sel_regs["r" + m] = true;
                //если надо обновить список отелей
                if(clearRayon){
                    if(stateVisibleRayon==undefined)
                        stateVisibleRayon=new Array();
                    if(stateVisibleRayon[row.state]==undefined)
                        stateVisibleRayon[row.state]=",";
                    if(stateVisibleRayon[row.state].indexOf(","+row.loc+",")==-1)
                        stateVisibleRayon[row.state]+= row.loc+",";   
                }
            }
            else {
                if (row.visible) {
                    $(row.row).hide();
                    row.visible = false;
                }
            }
            var HotelNumberRow=$(row.row).next("tr");
            
            if ($(HotelNumberRow).hasClass("hotelNumber")) {
                if (show)
                    $(HotelNumberRow).show();
                else
                    $(HotelNumberRow).hide();
            }
           

        }
        
        if(clearRayon){
            clearRayon=false;
            //прячем районы из dropdown,которых нет в списке отелей
            $("select.rayon_select").each(function(k) {
                var st=$(this).attr("state");
                if(stateVisibleRayon!=undefined && stateVisibleRayon[st]!=undefined){
                    var opt="<option value='0'>Все</option>";
                    var x=0;
                    //debugger;
                    var rayonArray=stateVisibleRayon[st].split(",").sort();
                    for(x=0;x<rayonArray.length;x++)
                        if(rayonArray[x]!="")
                            opt+="<option value='"+rayonArray[x]+"'>"+rayonArray[x]+"</option>";
                    
                    $("#"+$(this).attr("id")).empty().append(opt);  
                }
            });
        }

        regrows.each(function(i) {
            var a = $(this);
            if (sel_regs[this.id]) a.show();
            else a.hide();
        }
                );
    }

}

// фильтр по названиям
function select_click(ctrl) {
    var listObj = $(ctrl)[0];
    if (listObj.selectedIndex >= 0) {
        var autocomplete = $('#autocomplete' + $(listObj).attr('state'));
        var id = listObj.options[listObj.selectedIndex].value;
        if (id != undefined) {
            id = id.replace('undefined', '');
            var sel_text = listObj.options[listObj.selectedIndex].text;
            position = listObj.selectedIndex;
            var element = this;
            element.value = '';
            element.focus();
            autocomplete.hide();
            window.open(id, '_blank');
        }
    }
}

function handleKeyUp(ctrl, e) {
    var code = (e.charCode) ? e.charCode :
                        ((e.keyCode) ? e.keyCode :
                        (e.which ? e.which : 0));

    var state = $(ctrl).attr('state');
    var autocomplete = $('#autocomplete' + state);
    var select_hotel = $("#autocomplete" + state + " > select")[0];
    var listObj = select_hotel;
    if (e.type == 'keyup' || e.type == 'keydown') {
        if (code == 40) {
            if (position < max_position)
                position++;
            else
                position = min_position;

            listObj.selectedIndex = position;
        }
        else
            if (code == 38) {
            if (position > min_position)
                position--;
            else
                position = max_position;
            listObj.selectedIndex = position;

        }
        else
            if (code == 13) {
            if (listObj.selectedIndex >= 0) {
                var id = listObj.options[listObj.selectedIndex].value;
                if (id != undefined) {
                    id = id.replace('undefined', '');
                    var sel_text = listObj.options[listObj.selectedIndex].text;
                    position = listObj.selectedIndex;
                    var element = ctrl;
                    element.value = '';
                    element.focus();
                    autocomplete.hide();
                    window.open(id, '_blank');
                }
            }
        }
        else {
            SendQuery(ctrl, autocomplete, select_hotel, state, ctrl.value);
        }
    }
}


function sName(i, ii) {
    if (i.nm > ii.nm)
        return 1;
    else if (i.nm < ii.nm)
        return -1;
    else
        return 0;
}

function getObjInnerText(obj) {
    return (obj.innerText) ? obj.innerText
: (obj.textContent) ? obj.textContent
: "";
}

function SendQuery(ctrl, autocomplete, listObj, state, key) {
    //debugger;
    if (key != '') {
        var re = new RegExp(".*" + key + ".*", "i");
        var ok = false;
        listObj.options.length = 0;

        for (var key in hNames.sort(sName)) {
            var val = hNames[key];
            if (val.sid == state) {
                var result = re.exec(val.nm);
                if (result != null) {
                    newOpt = document.createElement('option');
                    newOpt.text = val.nm;
                    newOpt.value = val.href;
                    listObj.options.add(newOpt);
                    ok = true;
                }
            }
        }

        if (ok) {
            autocomplete.show();
            listObj.selectedIndex = 0;
            position = 0;
            min_position = 0;
            max_position = listObj.options.length - 1;
        }
        else
            autocomplete.hide();
    }
    else
        autocomplete.hide();
}

function keywordFocus(element) {
    rebuild();
    element.value = '';
    first = 0;
    //}
}

function BodyClick() {
    $("input[rel=keyword]").val('');
    $("div[rel='autocomplete']").hide();
}            
