﻿var gMap;

var gFilterNotaries = [];

var gDistrict = -1;
var gMetro = -1;

var gIsPrivate = 1;
var gIsPublic = 1;

var gSun = 0;
var gSat = 0;


function createVisicomMap() {
	if (gCurrentCity.HasMap && !IsShowList) {
				gMap = new VMap(document.getElementById('viewport'), {
			zoomControl: {
				min: 11,
				max: 18,
				left: 30,
				top: 30,
				smooth: true,
				ruler: true,
				mouseWheel: false
			}
		});

		ShowAll();

	
				$("#btnSearch").click(function(e) {

					e.preventDefault();

					FilterNotaries();

					var txt = $("#inputStreet").val();
					if (!txt) return;

					VMap.AUTH_KEY = "de2990fde77aa39ce7c00eba708e4439";
					VRemoteCall.request("address", gCurrentCity.Name + "," + txt,
				function callback(layer) {
					var ch = layer.childs();
					if (ch.length == 0) return;
					gMap.add(layer);

					gMap.center(layer.childs()[0].bounds().center(), 14);

					gMap.repaint();

					$("#divCurrentSelection").html("Находятся на: " + txt);
				}
				);

					return false;

				});

	}
}



$(function () {

    $("#aShowAll").click(function (e) {
        e.preventDefault();
        ResetFilter();
        ResetDefaultCheckBoxesState();
        ReadCheckBoxesState();

        if (!gCurrentCity.HasMap || IsShowList) {
            RemoveAllFromList();
        } else {
            RemoveAll();
            ShowAll();
        }
    });


    $("[did]").click(function (e) {
        e.preventDefault();


        ResetFilter();
        gDistrict = $(this).attr("did");


        $("#by_district .selected, #divCurrentSelection").html(gDistricts[gDistrict].Name);
        $("#divCurrentSelection").html("В районе: " + gDistricts[gDistrict].Name);

        if (!gCurrentCity.HasMap || IsShowList) {
            RemoveAllFromList();
            FilterNotariesNoMap($('#inputStreet').val().toLowerCase());

        } else {
            RemoveAll();
            FilterNotaries();
            gMap.center([{
                lng: gDistricts[gDistrict].Lng,
                lat: gDistricts[gDistrict].Lat
            }], gDistricts[gDistrict].ZoomLevel);
            gMap.repaint();
        }

        $(this).parent().parent().parent().parent().parent().hide();

    });


    $("[mid]").click(function (e) {
        e.preventDefault();

        ResetFilter();

        gMetro = $(this).attr("mid");



        $("#by_metro .selected").html(gMetros[gMetro].Name);
        $("#divCurrentSelection").html("Возле метро: " + gMetros[gMetro].Name);

        if (!gCurrentCity.HasMap || IsShowList) {
            RemoveAllFromList();
            FilterNotariesNoMap($('#inputStreet').val().toLowerCase());

        } else {
            RemoveAll();
            FilterNotaries();
            gMap.center([{
                lng: gMetros[gMetro].Lng,
                lat: gMetros[gMetro].Lat
            }], gMetros[gMetro].ZoomLevel);
            gMap.repaint();
        }

        $(this).parent().parent().parent().parent().parent().hide();

    });


    $(".filter_cb").click(function () {

        
        ReadCheckBoxesState();
        if (!gCurrentCity.HasMap || IsShowList) {

            FilterNotariesNoMap($('#inputStreet').val().toLowerCase());

        } else {

            FilterNotaries();

        }
    });


    if (!gCurrentCity.HasMap || IsShowList) {
        $("#btnSearch").hide();

        $("#aShowAll").click(function (e) {
            e.preventDefault();
            $('li[content="notarius"]').show();
            $('.letter_block_wrapper').show();
            $('#inputStreet').val('');
        });

        $('#inputStreet').val('');

        $('#inputStreet').keyup(function (e) {
            e.preventDefault();
            FilterNotariesNoMap($(this).val().toLowerCase());
        });

        $('#inputStreet').result(function () {
            FilterNotariesNoMap($('#inputStreet').val().toLowerCase());
        });
    }




});           

function FilterNotariesNoMap(query)
{

    $('li[content="notarius"]').each(function () {

        var addr = $(this).find('input[content="Addr"]');

        var isPrivate = $(this).find('input[content="IsPrivate"]');
        var isSat = $(this).find('input[content="IsSat"]');
        var isSun = $(this).find('input[content="IsSun"]');
        var metro = $(this).find('input[content="Metro"]');
        var distr = $(this).find('input[content="District"]');


        if (query != "") {
            
            if (addr.val().toLowerCase().search(query) == -1) {

                HideNotaryAndLetter(this);

                return true;

            } 
            else {
                ShowNotaryAndLetter(this);
            }
        }


       

        if (gDistrict != -1) {
            if (distr.val() == gDistrict) {
                ShowNotaryAndLetter(this);
            } else {
                HideNotaryAndLetter(this);
                return true;
            }
        }




        if (gMetro != -1) {
            if (metro.val() == gMetro) {
                ShowNotaryAndLetter(this);
            } else {
                HideNotaryAndLetter(this);
                return true;
            }
        }


        if (gIsPrivate == 1 && isPrivate.val() == 1) {

            ShowNotaryAndLetter(this);

        } else if (gIsPublic == 1 && isPrivate.val() == 0) {

            ShowNotaryAndLetter(this);

        } else {

            HideNotaryAndLetter(this);

            return true;
        }



        if (gSat == 1 && gSun == 0) {
            if (isSat.val() == 1) {
                ShowNotaryAndLetter(this);
            } else {
                HideNotaryAndLetter(this);
            }
        } else if (gSun == 1 && gSat == 0) {
            if (isSun.val() == 1) {
                ShowNotaryAndLetter(this);
            } else {
                HideNotaryAndLetter(this);
            }

        } else if (gSun == 1 && gSat == 1) {
            if (isSun.val() == 1 && isSat.val() == 1) {
                ShowNotaryAndLetter(this);
            } else {
                HideNotaryAndLetter(this);
            }
        }



    });                          
}


function ShowNotaryAndLetter(item) {
    $(item).show();
    $(item).parent().parent().show();
}

function HideNotaryAndLetter(item) {
    $(item).hide();

    if ($(item).parent().find('div:visible').size() == 0) {

        $(item).parent().parent().hide();

    }
}

function GetUrl(not)
{
	return '<a target="_blank" href="http://' + not.Login + '.notarius.ua">Cайт нотариуса</a>';
}

function GetNameUrl(not)
{
	return '<a target="_blank" href="http://' + not.Login + '.notarius.ua">' + not.Name + '</a>';
}

function FilterNotaries()
{
	RemoveAll();

	var txt = $("#inputStreet").val();

	if (txt) {
		gFilterNotaries = GetNotariesByStreet(txt);
	} 
	else 	if (gDistrict != -1){
		gFilterNotaries = GetNotariesByDistrict(gDistrict);
	}
	else 	if (gMetro != -1){
		gFilterNotaries = GetNotariesByMetro(gMetro);
	} else {
		gFilterNotaries = gNotaries;
	}
	
	gFilterNotaries = FilterNotariesByStatus(gFilterNotaries);
	gFilterNotaries = FilterNotariesByWork(gFilterNotaries);

	$(gFilterNotaries).each(function() {
			PlaceMarker(this);
		});

	gMap.repaint();
}


function ReadCheckBoxesState() {
    ($("#cbSun").attr("checked")) ? gSun = 1 : gSun = 0;
    ($("#cbSat").attr("checked")) ? gSat = 1 : gSat = 0;
    ($("#cbPrivate").attr("checked")) ? gIsPrivate = 1 : gIsPrivate = 0;
    ($("#cbPublic").attr("checked")) ? gIsPublic = 1 : gIsPublic = 0;

}


function ResetDefaultCheckBoxesState() {
    
    $("#cbSun").attr("checked", 0);
    $("#cbSat").attr("checked", 0);

    $("#cbPrivate").attr("checked", 1);
    $("#cbPublic").attr("checked", 1);
}


function ResetFilter() {
	$("#inputStreet").val("");
	$("#by_district .selected").html("не выбрано");
	$("#by_metro .selected").html("не выбрано");
	$("#divCurrentSelection").html("");
	gDistrict = -1;
	gMetro = -1;
}

function GetNotariesByStreet(street) {
	var selected = [];
	$(gNotaries).each(function() {
		var addr = this.Str.toLowerCase();
		
		var streetArr = street.split(" ");
		streetArr[0] = "";
		var stt = streetArr.join(" ");
		
		if (addr.indexOf(stt.toLowerCase()) > -1) {
			selected.push(this);
		}
	});

	return selected;
}

function GetNotariesByMetro(metro) {
	var selected = [];
	$(gNotaries).each(function() {

		if (this.Metro == metro) {
			selected.push(this);
		}
	});

	return selected;
}

function GetNotariesByDistrict(distr) {
	var selected = [];
	$(gNotaries).each(function() {

		if (this.Distr == distr) {
			selected.push(this);
		}
	});

	return selected;
}

function FilterNotariesByStatus(notaries) {
	var selected = [];
	$(notaries).each(function() {

		if (gIsPrivate == 1 && this.IsPrivate == 1) {
			selected.push(this);
		} 
		if (gIsPublic == 1 && this.IsPrivate == 0) {
			selected.push(this);
		}
	});

	return selected;
}

function FilterNotariesByWork(notaries) {
	if (gSat == 0 && gSun == 0) 
		return notaries;
	
	var selected = [];
	$(notaries).each(function() {

		if (gSat == 1 && gSun == 0 && this.WorkOnSat == 1) {
			selected.push(this);
		} else if (gSun == 1 && gSat == 0 && this.WorkOnSun == 1) {
			selected.push(this);
		} else if (gSun == 1 && gSat == 1 && this.WorkOnSun == 1 && this.WorkOnSat == 1) {
			selected.push(this);
		}
		
	});

	return selected;
}



function RemoveAllFromList() {
    $('li[content="notarius"]').each(function () {
        HideNotaryAndLetter(this);
    });
}

function RemoveAll() {
	var markers = gMap.childs();
	$(markers).each(function() {
		gMap.remove(this);
	});
}
function ShowAll() {
	var point = { lng: gCurrentCity.Lng, lat: gCurrentCity.Lat };
	gMap.center(point, gCurrentCity.Zoom);
	$(gNotaries).each(function() {
		PlaceMarker(this);
	});

	gMap.repaint();
}

function PlaceMarker(notary) {
	var marker = new VMarker({
		lng: notary.Lng,
		lat: notary.Lat
	});

	marker.draggable(false);

	marker.hint(notary.Name);
	
	var ht = $("#divTemplateNotary").html();
	
	var tmp = $.processTemplateToText($.createTemplate(ht), notary);
	
	var win = new VInfoWindow(tmp);
	
	win.size(350, 200);
	marker.info(win);

	gMap.add(marker);

}

