GMarker.prototype.setMarkerZIndex = function(a)
{
	gMap.markersHandler.Set_zIndex(this);
	if (!this.zIndexSaved)
	{
		this.zIndexSaved = true;
		this.oldZIndex = eval(gMap.PdMIN + ".style.zIndex");
	}
	eval(gMap.PdMIN + ".style.zIndex = a")
	this.redraw(true);
}

GMarker.prototype.pro_zIndx = function(nI)
{
	this.setMarkerZIndex(600000);
}
GMarker.prototype.pro_resetZIndx = function()
{
	gMap.markersHandler.Set_zIndex(this);
	if (this.zIndexSaved)
	{
		this.zIndexSaved = false;
		eval(gMap.PdMIN + ".style.zIndex = this.oldZIndex")
		this.redraw(true);
	}
}

var gMap =
{
	map : null,
	tooltip : null,
	PdMIN : '',
	PdMIA : '',
	ajax_param : null,
	makeCurrent : function()
	{
		var lat		= gMap.map.getCenter().lat().toFixed(6);
		var lng		= gMap.map.getCenter().lng().toFixed(6);
		var zoom	= gMap.map.getZoom();
		var bounds 	= gMap.map.getBounds();
		var sw		= bounds.getSouthWest();
		var ne		= bounds.getNorthEast();
		
		gMap.ajax_param = "swlat=" + sw.lat() + "&swlng=" + sw.lng() + "&nelat=" + ne.lat() + "&nelng=" + ne.lng() + "&zoom=" + zoom + "&link=" + window.map_default_link;
	},
	onDocumentLoad : function ()
	{
		if (GBrowserIsCompatible())
		{
			gMap.map = new GMap2(document.getElementById('map'));
			if (window.map_default_lat && window.map_default_lng)
			{
				gMap.map.setCenter(new GLatLng(window.map_default_lat, window.map_default_lng), window.map_default_zoom);
			}
			else
			{
				gMap.map.setCenter(new GLatLng(55.431351, 37.545433), 13);
			}
			gMap.map.addControl(new GOverviewMapControl());
			gMap.map.addControl(new GLargeMapControl());
			gMap.map.addControl(new GMapTypeControl());
			
			gMap.map.hideControls();
			
			gMap.tooltip = document.createElement("div");
			document.getElementById("map").appendChild(gMap.tooltip);
			gMap.tooltip.style.visibility="hidden";
			
		
			GEvent.addListener(gMap.map, 'load', function()
				{
					gMap.makeCurrent();
					var url = '/' + window.mod_name + '/map_data/?' + gMap.ajax_param;
					gMap.markersHandler.server.loadMarkers(url);
				}
			);
			GEvent.addListener(gMap.map, 'moveend', function()
				{
					gMap.makeCurrent();
					var url = '/' + window.mod_name + '/map_data/?' + gMap.ajax_param;
					gMap.markersHandler.server.loadMarkers(url);
				}
			);
			GEvent.addListener(gMap.map, 'mouseover', gMap.map.showControls);
			GEvent.addListener(gMap.map, 'mouseout', gMap.map.hideControls);
		}
	},
	iconsHandler : {
		prepareIcon : function (markerType, vip)
		{
			var newIcon = new GIcon();
			newIcon.shadow = '/i/map/shadowfor32x32.png';
			newIcon.iconSize = new GSize(32, 37);
			newIcon.shadowSize = new GSize(58, 34);
			newIcon.iconAnchor = new GPoint(16, 32);
			newIcon.infoWindowAnchor = new GPoint(16, 2);
			newIcon.infoShadowAnchor = new GPoint(0,0);
			newIcon.image = '/i/map/default' + vip + '.png';
			return newIcon;
		},
		Tooltip : function (marker)
		{
			gMap.tooltip.innerHTML = marker.tooltip;
			var point=gMap.map.getCurrentMapType().getProjection().fromLatLngToPixel(gMap.map.getBounds().getSouthWest(), gMap.map.getZoom());
			var offset = gMap.map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(), gMap.map.getZoom());
			var anchor=marker.getIcon().iconAnchor;
			var width=marker.getIcon().iconSize.width;
			var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width,- offset.y + point.y +anchor.y));
			pos.apply(gMap.tooltip);
			gMap.tooltip.style.visibility="visible";
		}
	},
	markersHandler :
	{
		createMarker : function(point, icon, name, link, vip)
		{
			var marker = new GMarker(point, {icon:icon});
			
			marker.tooltip = '<div class="tooltip' + vip + '">' + name + '</div>';
			gMap.map.addOverlay(marker);
			
			GEvent.addListener(marker,"mouseover", function()
				{
					marker.pro_zIndx();
					gMap.iconsHandler.Tooltip(marker);
				}
			);
			GEvent.addListener(marker,"mouseout", function()
				{
					marker.pro_resetZIndx();
					gMap.tooltip.style.visibility="hidden";
				}
			);
			GEvent.addListener(marker,"click", function()
				{
					gMap.markersHandler.ShowInfoWindow(link);
				
				}
			);
		},
		ShowInfoWindow : function(link)
		{
			ajax.onreadystatechange = function()
			{
				$('#authpop2 #info').text('');
				$('#loading').css({ display: "block" });
				$('#screen').css({ display: "block" });
				$('#screen').css({ height: getyScroll() + "px" });
				$('#authpop2').css({ display: "block" });
				if(ajax.readyState == 4)
				{
					$('#loading').css({ display: "none" });
					document.getElementById("info").innerHTML = ajax.responseText;
				}
			}
			ajax.open(null,"/" + window.mod_name + "/ajax.php?prop=show_infowindow&link=" + link, true);
			ajax.send();
			
		},
		Set_zIndex : function(marker)
		{
			if (gMap.PdMIN.length == 0)
			{
				for (var i in marker)
				{
					if (eval("typeof marker." + i) == "object")
					{
						try
						{
							if (eval("typeof marker." + i + "[0].src") != "undefined")
							{
								gMap.PdMIA = "this." + i;
								gMap.PdMIN = gMap.PdMIA + "[0]";
							}
						}
						catch (e) 
						{
						}
					}	
				}
			}
		},
		server :
		{
			loadMarkers : function (url)
			{
				$('#spinner').css({ display: "block" });
				var request = GXmlHttp.create();
				request.open("GET", url, true);
				request.onreadystatechange = function()
				{
					if (request.readyState == 4)
					{
						$('#spinner').css({ display: "none" });
						var xmlDoc = GXml.parse(request.responseText);
						var markers = xmlDoc.documentElement.getElementsByTagName("marker");
						gMap.map.clearOverlays(); 
						for (var i = 0; i < markers.length; i++)
						{
							var lat		= parseFloat(markers[i].getAttribute("lat"));
							var lng		= parseFloat(markers[i].getAttribute("lng"));
							var name	= markers[i].getAttribute("name");
							var link	= markers[i].getAttribute("link");
							var vip	= markers[i].getAttribute("vip");
							var point = new GLatLng(lat, lng);
							var icon = gMap.iconsHandler.prepareIcon('', vip);
							var t_marker = gMap.markersHandler.createMarker(point, icon, name, link, vip);
						}
					}
				}
				request.send(null);
			}
		}
	}
};

$(document).ready(function()
{
	if ($('#map'))
	{
		gMap.onDocumentLoad();
		GEvent.trigger(gMap.map, 'load');
	}
});