﻿
var gm_markerData = new Array();
var gm_defaultLat = 105.3187560;
var gm_defaultLng = 61.5240100;
var gm_defaultZoom = 10;
var gm_infoCloseTimer;

$(window).unload(function() { GUnload(); });
$(window).resize(function () {

	if (map == undefined)
		return;

	correctMap();
	map.checkResize();
	map.returnToSavedPosition()
});

function correctMap() {
	$(".gm_default").width(1);
	var newWidth = $(".content").width();
	$(".gm_default").width(newWidth);
}

function initMap(map) {

    correctMap();
    var gControl = new GControl();

    gControl.initialize = function(map) {
        $("#gm_map").append($("#gm_corners div"));
        $("#gm_map").append($("#gm_controls"));
        $("#gm_map").append($("#gm_infowin"));
        $("#gm_map").append($("#gm_selmaptype"));

        var controls = $("#gm_controls");
        var sliderBg = $(".slider-bg", controls);
        var slider = new GDraggableObject($(".slider", sliderBg).get(0), { left: 0, top: (17 - map.getZoom()) * 6, container: sliderBg.get(0) });
        GEvent.addListener(slider, "dragend", sliderDragEnd);
        sliderBg.height(6 * 17);
        sliderBg.click(sliderClick);

        $(".up", controls).click(function() { map.panDirection(0, 1) });
        $(".down", controls).click(function() { map.panDirection(0, -1) });
        $(".left", controls).click(function() { map.panDirection(1, 0) });
        $(".center", controls).click(function() { map.returnToSavedPosition() });
        $(".right", controls).click(function() { map.panDirection(-1, 0) });
        $(".zoom-in", controls).click(function() { map.zoomIn() });
        $(".zoom-out", controls).click(function() { map.zoomOut() });

        $("#gm_infowin").bind("mouseenter", function() { setTimeout(function() { closeInfoWindow() }, 200); });
        $("#gm_infowin").bind("mouseleave", function() { closeInfoWindow(); });

        $("#el1").click(function() { $(this).addClass("withSeparator"); $("#el2").removeClass("withSeparator"); $("#el3").removeClass("withSeparator"); if ($("#m_expander").hasClass("exp_vertical")) { expandMap(); } })
        $("#el2").click(function() { $(this).addClass("withSeparator"); $("#el1").removeClass("withSeparator"); $("#el3").removeClass("withSeparator"); if ($("#m_expander").hasClass("exp_vertical")) { expandMap(); } })
        $("#el3").click(function() { $(this).addClass("withSeparator"); $("#el1").removeClass("withSeparator"); $("#el2").removeClass("withSeparator"); if ($("#m_expander").hasClass("exp_vertical")) { expandMap(); } })

        controls.show();
        $("#gm_selmaptype").show();
        return controls.get(0);
    };

    if(GBrowserIsCompatible()) {
        setCenter();
        addMarkers();
        map.addControl(gControl);
        GEvent.addListener(map, "zoomend", mapZoomEnd);
        GEvent.addListener(map, "singlerightclick", function(){closeInfoWindow()});
		GEvent.addListener(map, "movestart", function(){closeInfoWindow()});
		GEvent.addListener(map, "click", function() { closeInfoWindow() });
    }
}

function closeInfoWindow() {
    $("#gm_infowin").css("display", "none");
}

function setCenter() {
    if (gm_markerData.length > 0) {
        //ищем минимальный прямоугольник, в который входят все точки
        var firstPoint = new GLatLng(gm_markerData[0][0], gm_markerData[0][1]);
        var latLngBounds = new GLatLngBounds(firstPoint, firstPoint);

        for (i = 0; i < gm_markerData.length; i++) {
            var coords = new GLatLng(gm_markerData[i][0], gm_markerData[i][1]);
            if (!latLngBounds.contains(coords)) latLngBounds.extend(coords);
        }

        map.setCenter(latLngBounds.getCenter(), map.getBoundsZoomLevel(latLngBounds) - (gm_markerData.length > 1 ? 0 : 2));
    }
    else {
        map.setCenter(new GLatLng(gm_defaultLat, gm_defaultLng), gm_defaultZoom);
    }
    
    map.savePosition();
}

function addMarkerData(x, y, content, id, markerPng) {
    if (x > 0 && y > 0)
        gm_markerData[gm_markerData.length] = [x, y, content, id, markerPng];
}

function addMarkers() {
    for (i = 0; i < gm_markerData.length; i++)
        addMarker(new GLatLng(gm_markerData[i][0], gm_markerData[i][1]), gm_markerData[i][2], gm_markerData[i][3], gm_markerData[i][4]);
}

function addMarker(point, content, id, markerPng) {
    var myIcon = new GIcon(G_DEFAULT_ICON);
    myIcon.image = "/files/images/gmap/" + markerPng;        
    myIcon.iconSize = new GSize(27, 37);
    myIcon.iconAnchor = new GPoint(12, 35);
    myIcon.shadow = "";// "/files/images/gm_pointershadow.png";

    var gMarker = new GMarker(point, {icon: myIcon});
    gMarker.title = content;
    gMarker.id = "/" + id + "/";
    
    switch (markerPng) {
        case 'marker_flatsale.png': gMarker.id = 'http://www.mirkvartir.ru' + gMarker.id; break;
        case 'marker_flatrent.png': gMarker.id = 'http://arenda.mirkvartir.ru' + gMarker.id; break;
        case 'marker_townhousesale.png': gMarker.id = 'http://dom.mirkvartir.ru' + gMarker.id; break;
        case 'marker_townhouserent.png': gMarker.id = 'http://arendadoma.mirkvartir.ru' + gMarker.id; break;
    }

    GEvent.addListener(gMarker, "mouseover", function() {
        $("#markerContent").html(gMarker.title);

        //показываем окошко с данными рядом с маркером
        var pixel = map.fromLatLngToContainerPixel(gMarker.getLatLng());

        ////$("#gm_infowin").css("top" , pixel.y > 105 ? pixel.y-98 : 7);
        ////$("#gm_infowin").css("left", pixel.x > 96 ? (pixel.x < $("#gm_map").width() - 94 ? pixel.x-94 : $("#gm_map").width() - 190) : 2);
        //$("#gm_infowin").css("top", pixel.y > 105 ? pixel.y - 100 : 7);
        //$("#gm_infowin").css("left", pixel.x + 240 > $("#gm_map").width() ? pixel.x - 240 : pixel.x);

        // Work variant
        $("#gm_infowin").removeClass("postl").removeClass("postr").removeClass("posbl").removeClass("posbr");
        if (pixel.y > 105) {
            if (pixel.x > 250) {
                $("#gm_infowin").addClass("posbr");
                $("#gm_infowin").css("top", pixel.y - $("#gm_infowin").height() - 35);
                $("#gm_infowin").css("left", pixel.x - 230);
            } else {
                $("#gm_infowin").addClass("posbl");
                $("#gm_infowin").css("top", pixel.y - $("#gm_infowin").height() - 35);
                $("#gm_infowin").css("left", pixel.x - 10);
            }
        } else {
            if (pixel.x > 250) {
                $("#gm_infowin").addClass("postr");
                $("#gm_infowin").css("top", pixel.y - 5);
                $("#gm_infowin").css("left", pixel.x - 230);
            } else {
                $("#gm_infowin").addClass("postl");
                $("#gm_infowin").css("top", pixel.y - 5);
                $("#gm_infowin").css("left", pixel.x - 10);
            }
        }

        $("#gm_infowin").css("display", "block");
    });

    //GEvent.addListener(gMarker, "mouseout", function() { setTimeout(function() { closeInfoWindow() }, 200); });
    //GEvent.addListener(gMarker, "mouseout", function() { closeInfoWindow(); });
    GEvent.addListener(gMarker, "click", function () { window.location = gMarker.id; });
    GEvent.addListener(gMarker, "dblclick", function () { window.location = gMarker.id; });

    map.addOverlay(gMarker);
   }

function expandMap() {
   	var expander = document.getElementById("m_expander");
   	var container;
   	var height;

   	var center = map.getCenter();

   	$.cookie('map_expand_mode', expander.className, { expires: 1000 });

   	switch (expander.className) {
   		case "exp_vertical":
   			expander.className = "exp_undo";
   			container = $("#map_container_top");
   			$("#m_expander").css("top", "5px");
   			$("#m_expander").attr("title", "Сжать карту");
   			$("#gm_controls").children().show();
   			height = "264px";
   			break;

   		default:
   			expander.className = "exp_vertical";
   			container = $("#map_container_top");
   			$("#m_expander").css("top", "5px");
   			$("#m_expander").attr("title", "Увеличить карту");
   			$("#gm_controls").children(":not[id!='m_expander']").hide();
   			height = "40px";
   	}

   	container.append($("#gm_map"));
   	$("#gm_map").height(height);
   	map.checkResize();
   	map.panTo(center);
}

function sliderClick(C) {
    if(C.target==this)
    {
        var A=C.pageY-$(this).offset().top+1;
        var B=getZoom(A)+1==0?1:getZoom(A)+1;
        map.setZoom(B);
    }
}

function sliderDragEnd() {
    var A=getZoom(this.top)==0?1:getZoom(this.top);
    map.setZoom(A);
}

function mapZoomEnd(A,B) {
    $("#gm_controls .slider-bg .slider").css({top:(17-B)*6+"px"});
}

function getZoom(A) {
    return 17-Math.ceil(A/6);
}
