var xRequest=null;
var gMap=null;
var passesOnScreen=new Array();
var isSmallMap=1;

function createXMLHttpRequest() {
	xRequest=null;
	if (window.XMLHttpRequest) {
		xRequest = new XMLHttpRequest;
	} else if (typeof ActiveXObject != "undefined") {
		xRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}
}

function sendHttpRequest(url) {
	createXMLHttpRequest();
	if (xRequest) {
		xRequest.onreadystatechange=onReadyState;
		xRequest.open("GET", url, true);
		xRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xRequest.send(null);
	}
}

var READY_STATE_UNINIT   = 0;
var READY_STATE_LOADING  = 1;
var READY_STATE_LOADED   = 2;
var READY_STATE_INTERACT = 3;
var READY_STATE_COMPLETE = 4;

function onReadyState() {
	var ready=xRequest.readyState;
	if (ready == READY_STATE_COMPLETE) {
		applyMarkers(xRequest.responseXML);
	}
}

function loadGoogleMap(lat, lng)
{
  if (GBrowserIsCompatible())
    {
	// Карта будет находиться в div id=map
	gMap = new GMap2(document.getElementById("map"));

//	gMap.addMapType(G_PHYSICAL_MAP);
//      gMap.removeMapType(G_HYBRID_MAP);
	gMap.setMapType(G_PHYSICAL_MAP);

	// Приделываем к карте управляющие кнопки
	gMap.addControl(new GSmallZoomControl());
	gMap.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10)));
	gMap.setCenter(new GLatLng(lat, lng), 13, G_PHYSICAL_MAP);
	GEvent.addListener(gMap, "moveend", function() { initMarkersRequest(); } );
	GEvent.addListener(gMap, "zoomend", function() { initMarkersRequest(); } );


	isSmallMap = 1;

	// Запускаем запрос, какие перевалы попадают на карту
	initMarkersRequest();
    }
}

function loadGoogleMapL(lat, lng)
{
  if (GBrowserIsCompatible())
    {
	// Карта будет находиться в div id=map
	gMap = new GMap2(document.getElementById("map"));

	// Приделываем к карте управляющие кнопки
	gMap.addControl(new GSmallZoomControl());
	gMap.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10)));
	gMap.setCenter(new GLatLng(lat, lng), 13, G_HYBRID_MAP);
	GEvent.addListener(gMap, "moveend", function() { initMarkersRequest(); } );
	GEvent.addListener(gMap, "zoomend", function() { initMarkersRequest(); } );

	isSmallMap = 0;
	// Запускаем запрос, какие перевалы попадают на карту
	initMarkersRequest();
    }
}

function loadGoogleMapBounds(minlat, minlng, maxlat, maxlng)
{
  if (GBrowserIsCompatible())
    {
	// Карта будет находиться в div id=map
	gMap = new GMap2(document.getElementById("map"));

	// Приделываем к карте управляющие кнопки
	gMap.addControl(new GSmallZoomControl());
	gMap.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10)));
	var zoom;
	zoom = gMap.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(minlat,minlng),new GLatLng(maxlat,maxlng)));
	if (zoom>14) zoom=14;
	gMap.setCenter(new GLatLng((minlat+maxlat)/2., (minlng+maxlng)/2.), zoom, G_SATELLITE_MAP);
	GEvent.addListener(gMap, "moveend", function() { initMarkersRequest(); } );
	GEvent.addListener(gMap, "zoomend", function() { initMarkersRequest(); } );

	isSmallMap = 0;
	// Запускаем запрос, какие перевалы попадают на карту
	initMarkersRequest();
    }
}


function initMarkersRequest() {
	// Определяем координаты углов
        var boundsObject = gMap.getBounds();
        var southWest = boundsObject.getSouthWest();
        var northEast = boundsObject.getNorthEast();
	var bounds = southWest.lng()+","+southWest.lat()+","+northEast.lng()+","+northEast.lat();

	// HTTP-запрос
	sendHttpRequest("/passes/kml/passes.php?type=gmap&BBOX="+bounds);	
}

function applyMarkers(xmlData) {
	var placemarks = xmlData.getElementsByTagName('Placemark');
	var name, lat, lng, descr;
	for (i=0; i<placemarks.length; i++) {
		id = placemarks[i].getElementsByTagName('id')[0].firstChild.nodeValue;
		name = placemarks[i].getElementsByTagName('name')[0].firstChild.nodeValue;
		lat = placemarks[i].getElementsByTagName('latitude')[0].firstChild.nodeValue;
		lng = placemarks[i].getElementsByTagName('longitude')[0].firstChild.nodeValue;
		descr = placemarks[i].getElementsByTagName('description')[0].firstChild.nodeValue;
		markPass(id, name, lat, lng, descr);
	}
}

function markPass(id, name, lat, lng, descr) {
	if (passesOnScreen[id] != 1) {
		passesOnScreen[id] = 1;
		if (isSmallMap) {
			var marker = new GMarker(new GLatLng(lat, lng), {title: name});
			GEvent.addListener(marker, "click", function() { window.location.href="/passes/Passes/"+id });
		} else {
			var marker = new GMarker(new GLatLng(lat, lng));
			GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(descr, {maxWidth: 50}); });
		}
		gMap.addOverlay(marker, 10);
	}
}


