﻿var gm_markerData = new Array();
var gm_defaultLat = 105.3187560;
var gm_defaultLng = 61.5240100;
var gm_defaultZoom = 10;
var gm_infoCloseTimer;

$(window).resize(function () {

	if (map == undefined)
		return;

	map.checkResize();
	map.returnToSavedPosition()
});

function initMap(map) {

	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);

		var singlePoint = true;

		for (i = 0; i < gm_markerData.length; i++) {

			if (gm_markerData[i][0] != gm_markerData[0][0] || gm_markerData[i][1] != gm_markerData[0][1])//хотя бы один из маркеров - в другой точке
				singlePoint = false;

			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 || singlePoint ? 4 : 0));
	}
	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 = "http://files.mirkvartir.ru/files/images/gmap/" + markerPng;
	myIcon.iconSize = new GSize(27, 37);
	myIcon.iconAnchor = new GPoint(12, 35);
	myIcon.shadow = "";

	var gMarker = new GMarker(point, { icon: myIcon });
	gMarker.title = content;
	gMarker.id = "/" + id + "/";

	if (typeof (window.isPartner) == undefined)
		isPartner = false;

	switch (markerPng) {
		case 'marker_flatsale.png': gMarker.id = (isPartner ? 'http://base.rgr.ru' : 'http://www.mirkvartir.ru') + gMarker.id; break;
		case 'marker_newbuilding.png': gMarker.id = (isPartner ? 'http://base.rgr.ru' : 'http://new.mirkvartir.ru') + gMarker.id; break;
		case 'marker_flatrent.png': gMarker.id = (isPartner ? 'http://arenda.base.rgr.ru' : 'http://arenda.mirkvartir.ru') + gMarker.id; break;
		case 'marker_townhousesale.png': gMarker.id = (isPartner ? 'http://dom.base.rgr.ru' : 'http://dom.mirkvartir.ru') + gMarker.id; break;
		case 'marker_townhouserent.png': gMarker.id = (isPartner ? 'http://arendadoma.base.rgr.ru' : 'http://arendadoma.mirkvartir.ru') + gMarker.id; break;
		case 'marker_newbuildings.png': gMarker.id = (isPartner ? 'http://new.base.rgr.ru' : 'http://new.mirkvartir.ru') + gMarker.id; break;
		case 'marker_zem.png': gMarker.id = (isPartner ? 'http://zem.base.rgr.ru' : 'http://zem.mirkvartir.ru') + gMarker.id; break;
	}

	GEvent.addListener(gMarker, "mouseover", function () {
		$("#markerContent").html(gMarker.title);

		var pixel = map.fromLatLngToContainerPixel(gMarker.getLatLng());

		$("#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, "click", function () { window.location = gMarker.id; });
	GEvent.addListener(gMarker, "dblclick", function () { window.location = gMarker.id; });

	map.addOverlay(gMarker);
}

function expandMap() {
}

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);
}
