﻿function PrepareMap() {
    var dList = NewMapFilter.CleanUp ? [] : $('input[name="districtIds"]')[0].value.split(',');
    var sdList = NewMapFilter.CleanUp ? [] : $('input[name="subdistrictIds"]')[0].value.split(',');
    var i = 0; var j = 0; var k = 0;
    var idanc = "";
    for (i = 0; i < dList.length; i++) {
        if (dList[i] == "")
            continue;
        var idanc = "#distr_" + dList[i] + "_anc";
        var selectAll = true;
        ShowOnMap(dList[i], true);
        var subdistricts = $('input[name="subdistrict"]', $(idanc).parent().children('table'));
        for (j = 0; j < subdistricts.length; j++) {
            for (k = 0; k < sdList.length; k++) {
                if (sdList[k].trim() == "") 
                    AllSubdistrictClick($('input[name="allsublistricts"]', $(idanc).parent().children('table'))[0]);
                 else if (subdistricts[j].value == sdList[k])
                    subdistricts[j].checked = true;
            }
            SubdistrictClick(subdistricts[j]);
            selectAll = selectAll && subdistricts[j].checked;
        }

        var l = $('input[value="' + dList[i] + '"][name="all' + (subdistricts.length > 0 ? "" : "no") + 'sublistricts"]');
        if (l.length > 0)
            l[0].checked = selectAll;
        ShowSubdistrictInfo($('span[nameid="dcount"]', $(idanc).parent()), GetCheckedCount(subdistricts), dList[i]);
    }
    if ($("#Map_IsIncludeNullSubD").length > 0)
        $("#Map_IsIncludeNullSubD")[0].checked = $('[name="IsIncludeNullSubD"]').val().toLowerCase() == 'true';
    else if ($("#Map_IsAllSelected").length > 0)
        if ($("#Map_IsAllSelected")[0].checked)
            $(".region_block,.mapFormHolder,.districtList").hide();
        else
            $(".region_block,.mapFormHolder,.districtList").show();
    if (idanc != "")
        $(idanc).parent().children('table').show();
        
}

function ShowMap() {
  //  PrepareMap();
    $('#NewMapFilter').show();
}

function CloseMap() {
    $('#NewMapFilter').hide();
}

function MouseOverDistrict(districtNameId) {
	var id = "#distr_" + districtNameId + "_over";
	var zIndex = parseInt($("#mappreview").css('z-index')) + 2;
	$(id).css('z-index', zIndex);
	$(id).show();
}

function MouseOutDistrict(districtNameId) {
	var id = "#distr_" + districtNameId + "_over";
	var zIndex = parseInt($("#mappreview").css('z-index')) - 2;
	$(id).css('z-index', zIndex);
	$(id).show();
}

function DistrictClick(districtNameId, districtName) {
	var id = "#distr_" + districtNameId + "_check";
	var idanc = "#distr_" + districtNameId + "_anc";
	var mapZIndex = parseInt($("#mappreview").css('z-index'));
	var selectedZIndex = parseInt($(id).css('z-index'));
	var subdistricts = $('input[name="subdistrict"]', $(idanc).parent().children('table'));
	if (mapZIndex > selectedZIndex) {

		// отмечаем на карте
		ShowOnMap(districtNameId, true);
		// Прячем все подрайоны
		HideAllDistrict();
		// Показываем последний подрайон
		$(idanc).parent().children('table').show();
		// выбираем все подрайоны
		CheckedSubdistrict(subdistricts, true);
		// показываем статистику выбранных
		ShowSubdistrictInfo($('span[nameid="dcount"]', $(idanc).parent()), subdistricts.length, districtNameId);

	}
	else {
		// снимаем пометку с карты
		ShowOnMap(districtNameId, false);
		// Скрываем последний подрайон
		$(idanc).parent().children('table').hide();
		// отменяем все подрайоны
		CheckedSubdistrict(subdistricts, false);
		// показываем статистику выбранных
		ShowSubdistrictInfo($('span[nameid="dcount"]', $(idanc).parent()), 0, districtNameId);
	}
}

function DistrictHrefClick(districtNameId) {
	var idanc = "#distr_" + districtNameId + "_anc";
	var subdistricts = $('input[name="subdistrict"]', $(idanc).parent().children('table'));
	if (subdistricts.length > 0) {
	    if ($(idanc).parent().children('table')[0].style.display == "none") {
	        HideAllDistrict();
	        $(idanc).parent().children('table').show();
	        var count = GetCheckedCount(subdistricts);
	        if (count == 0) {
	            CheckedSubdistrict(subdistricts, true);
	            count = subdistricts.length;
	        }

	        ShowSubdistrictInfo($('span[nameid="dcount"]', $(idanc).parent()), count, districtNameId);

	    }
	    else {
	        // Снимаем подсветку(отменяем)
	        $(idanc).parent().children('table').hide();
	        CheckedSubdistrict(subdistricts, false);
//	        ShowSubdistrictInfo($('span[nameid="dcount"]', $(idanc).parent()), 0, districtNameId);
	    }
	} else {
	    var elm = $('input[name="allnosublistricts"][value="' + districtNameId + '"]')[0];
	    elm.checked = !elm.checked;
	}
}

function HideAllDistrict() {
	var list = $('table[nameid="districtlist"]');
	var i;
	for (i = 0; i < list.length; i++) {
		$(list[i]).hide();
	}
}

function AllSubdistrictClick(allCheckBox) {
	var parentTable = $(allCheckBox).parent().parent().parent();
	var subdistricts = $('input[name="subdistrict"]', parentTable);
	CheckedSubdistrict(subdistricts, allCheckBox.checked);
	if (allCheckBox.checked)
		ShowSubdistrictInfo($('span[nameid="dcount"]', $(parentTable).parent().parent()), subdistricts.length, allCheckBox.value);
	else
		ShowSubdistrictInfo($('span[nameid="dcount"]', $(parentTable).parent().parent()), 0, allCheckBox.value);
}

function CheckedSubdistrict(list, checked) {
	var i;
	for (i = 0; i < list.length; i++) {
		list[i].checked = checked;
	}
	if (i > 0)
		SubdistrictClick(list[0]);
}

function SubdistrictClick(checkBox) {
	var parentTable = $(checkBox).parent().parent().parent();
	var subdistricts = $('input[name="subdistrict"]', parentTable);
	var count = GetCheckedCount(subdistricts);
	$('input[name="allsublistricts"]', parentTable)[0].checked = count == subdistricts.length;
	ShowSubdistrictInfo($('span[nameid="dcount"]', $(parentTable).parent().parent()), count, $('input[name="allsublistricts"]', parentTable)[0].value);


}

function GetCheckedCount(list) {
	var i;
	var result = 0;
	for (i = 0; i < list.length; i++) {
		if (list[i].checked)
			result++;
	}
	return result;
}

function MapGetDistrictName(count)
{
    var text = "район/город";
	if (count > 4)
	    text = "районов/городов";
	if (count > 1 && count <= 4)
	    text = "района/города";
	    return text;
}

function ShowSubdistrictInfo(control, count, districtNameId) {

	if(control.length>0)
	    control[0].innerHTML = count > 0 ? "(Выбрано " + count + " " + MapGetDistrictName(count) + ")" : "";
	if (count == 0)
		ShowOnMap(districtNameId, false);
	else
		ShowOnMap(districtNameId, true);
}


function ShowOnMap(districtNameId, isShow) {
	var id = "#distr_" + districtNameId + "_check";
	var mapZIndex = parseInt($("#mappreview").css('z-index'));
	var selectedZIndex = parseInt($(id).css('z-index'));
	if (isShow)
		$(id).css('z-index', mapZIndex + 2);
	else
		$(id).css('z-index', mapZIndex - 2);
	$(id).show();
}

function Complete() {
	// Выберем все выбранные районы и подрайоны
	$('input[name="districtIds"]')[0].value = $('input[name="subdistrictIds"]')[0].value = "";
	$('input[name="region"]').val(NewMapFilter.RegionId);
	var i = 0;
	var tooltip = "";

	var selectedDistrict = [];
	var selectList = $('input[name="allnosublistricts"],[name="allsublistricts"]');
	for (i = 0; i < selectList.length; i++) 
	    selectedDistrict[selectList[i].value] = { id: selectList[i].value, isAll: selectList[i].checked, sub: [], name: selectList[i].getAttribute("dname") };
       
    var sList = $('input[name="subdistrict"]');
	for (i = 0; i < sList.length; i++) {
	    var districtid = $('input[name="allsublistricts"]', $(sList[i]).parent().parent().parent())[0].value;
	    if (sList[i].checked)
	        selectedDistrict[districtid].sub.push({ id: sList[i].value, name: sList[i].getAttribute("dname") });
	    else
	        selectedDistrict[districtid].isAll = false;
	}
	var isAll = true;
	for (var i in selectedDistrict)
	    if (!selectedDistrict[i].isAll) {
	        isAll = false;
	        break;
	}
	if (!isAll) { // not all is checked

	    var selectedSubdistrict = "";
	    var selectedDistricts = "";
	    for (var i in selectedDistrict) {
	        var o = selectedDistrict[i];
	        if (o.isAll || o.sub.length > 0) {
	            tooltip += "<b>"+o.name+"</b>";
	            selectedDistricts += "," + o.id;
	            if (/*!o.isAll*/o.sub.length>0) {
        	        tooltip+=" ("; 
	                for (var j in o.sub){
	                   selectedSubdistrict += "," + o.sub[j].id;
	                   tooltip += "<i>" + o.sub[j].name + "</i>" + "; "; 
	                }
        	        tooltip+=")"; 
	            }
	            tooltip += "; ";
	        }
	    }

	    $('input[name="districtIds"]')[0].value = selectedDistricts.substring(1);
	    $('input[name="subdistrictIds"]')[0].value = selectedSubdistrict.substring(1);
	}
	var elm = $('#chooseDistrict');
	$('a.chooseDistrict')[0].innerHTML ="<span style='font-size:14px;'>"+ GetCaptionForDistrictFilter($('input[name="districtIds"]')[0].value)+"</span>";
	if (tooltip == "")
	    tooltip = $('a.chooseDistrict')[0].innerHTML;
	elm = $('a.chooseDistrict');
	if (elm[0].hastip) {
	    elm.eq(0).simpletip().update(tooltip);
	}
	else {
	    $('div[class="tooltipfilter fixed"]').remove();
	    ShowToolTip(elm, tooltip, 'tooltipfilter');
	    var e = $('div[class="tooltipfilter fixed"]');
	    e.remove();
	    $("body").append(e);
	    elm[0].hastip = true;
	}
	if ($("#Map_IsIncludeNullSubD").length>0)
	    $('[name="IsIncludeNullSubD"]').val($("#Map_IsIncludeNullSubD")[0].checked ? 'true' : 'false');
	CloseMap();
	if ($("a[href=filterpos]").length > 0)
	    if (NewMapFilter.NeedScroll) {
	        var t = $("a[href=filterpos]").offset().top;
	        if ($(window).scrollTop() > t)
	            window.scrollTo(0, t);
	    }
	    else
	        NewMapFilter.NeedScroll = true;
	        
	if (NewMapFilter.OnSaveF)
	    NewMapFilter.OnSaveF();

	var e = $("#IsNearMetroHolder"); /*it is kiev near metro checkbox*/
	if (e.length > 0)
	    if (NewMapFilter.RegionId == 1) e.show(); else e.hide();
}

function GetCaptionForDistrictFilter(dIds) {
	var dCount = dIds == "" ? 0 : dIds.split(',').length;
	var text = $("span.selectedRegion").html();
	if (!text || text == "") {
	    text = "Все";
	    if (window.NewMapFilter.Nothing)
	        return "Выберите район";
	}
	if (dCount > 0)
	    text += ", " + dCount + " " + MapGetDistrictName(dCount) + " ";
	return "Выбрано " + text;
}


oNewMapFilter = function(realty, trans, isAll, nullRegion, onSavef, obj, isAllShow, userId) {
    this.Transaction = trans;
    this.RealtyType = realty;
    this.UserId = userId;
    this.OnSaveF = onSavef;
    this.Obj = obj;
    this.IsCanAll = isAll ? isAll : false;
    this.IsAllShow = isAllShow ? isAllShow : false;
    this.NullRegion = nullRegion ? nullRegion : 1;
    this.CntrUrl = "/realtyfilter/newmap/";
    this.RegionId = $('input[name="region"]').val();
    this.DistrictIds = $('input[name="districtIds"]').val();
    this.SubDistrictIds = $('input[name="subdistrictIds"]').val();
    this.Elm = "#NewMapFilter";
    this.CleanUp = false;
    window.NewMapFilter = this;

    this.Remove = function() { $(this.Elm).remove(); }

    this.Show = function() {
        if ($(this.Elm).length < 1)
            this.Get();
        ShowMap();
        this.CleanUp = false;
    }

    this.Hide = function() {
        CloseMap();
    }

    this.Get = function(f, b) {
        var elm = this.Elm;
        $.ajax({
            type: 'POST',
            url: this.CntrUrl,
            data: { Transaction: this.Transaction, RealtyType: this.RealtyType, UserId: this.UserId, RegionId: this.RegionId, DistrictIds: this.DistrictIds, IsAllShow: this.IsAllShow,
                SubDistrictIds: this.SubDistrictIds, IsCanAll: this.IsCanAll, NRegions: this.NRegions, NDistricts: this.NDistricts, NSubDistricts: this.NSubDistricts
            },
            dataType: 'html',
            success: function(data) {
                NewMapFilter.Remove();
                $("body").append(data);
                $(document).ready(function() {
                    if (NewMapFilter.Obj) {
                        var p = $(NewMapFilter.Obj).offset();
                        var s = $(NewMapFilter.Elm)[0].style;
                        s.top = p.top + "px";
                        s.left = p.left + "px";
                        s.marginLeft = "0";
                        s.marginTop = "14px";
                    };
                    if (typeof b != 'undefined' && b)
                        b();
                    PrepareMap();
                    if (typeof f != 'undefined')
                        f();
                });
            }
        })
    }

    this.ChangeRegion = function(id, isClean) {
        this.RegionId = id || this.RegionId;
        this.Get(function() { NewMapFilter.Show(); }, isClean ? function() { NewMapFilter.CleanUp = true; } : null);
    }

    this.Get(function() { Complete(); });
}
