﻿// JScript File


function GoogleMaps_LoadDefault(ctrlGoogleId ){
	var map = new GMap2(document.getElementById(ctrlGoogleId));
	cGoogleId = ctrlGoogleId;
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter( new GLatLng(55.4500, 37.3700), 3 );
	
}

function GoogleMaps_LoadMapPosition(ctrlGoogleId, lon, lat, zoomLevel ){
    cGoogleId = ctrlGoogleId;
	var map = new GMap2(document.getElementById(ctrlGoogleId));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	window.travelMap = map;
	
	var point = new GLatLng(lat,lon);
	map.setCenter(point, zoomLevel );
	map.setMapType( map.getMapTypes()[2] );
	if( window.onGoogleLoaded != null )
		window.onGoogleLoaded();
}
function GoogleMaps_LoadPlaceCoords(ctrlGoogleId, lon, lat, zoomLevel ){
	cGoogleId = ctrlGoogleId;
	var map = new GMap2(document.getElementById(ctrlGoogleId));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	window.travelMap = map;
	
	var point = new GLatLng(lat,lon);
	map.setCenter(point, zoomLevel );
    var marker = new GMarker(point);
    map.addOverlay(marker);
	if( window.onGoogleLoaded != null )
		window.onGoogleLoaded();
}

var baseZoomLevel;
function GoogleMaps_LoadGoogleQuest(ctrlGoogleId, lon, lat, zoomLevel ){
	cGoogleId = ctrlGoogleId;
	var map = new GMap2(document.getElementById(ctrlGoogleId));
	window.travelMap = map;
	baseZoomLevel = zoomLevel;
	map.disableDragging();
	var point = new GLatLng(lat,lon);
	map.setCenter(point, zoomLevel );
	if( window.onGoogleLoaded != null )
		window.onGoogleLoaded();
	map.addControl(new GSmallZoomControl());
	map.setMapType( map.getMapTypes()[1] );
	GEvent.addListener(travelMap, "zoomend", onZoomGoogleQuest ) ;
	if( window.onGoogleLoaded != null )
		window.onGoogleLoaded();
}

var allowZoom;
function onZoomGoogleQuest(old, newLevel ){
	if( allowZoom ) return;
 if( newLevel < baseZoomLevel - 1 ){
	 window.travelMap.setZoom(baseZoomLevel-1); 
	 alert('По правилам викторины запрещено дальнейшее уменьшение масштаба');
	}
 if( newLevel > baseZoomLevel + 1 ) {
	 window.travelMap.setZoom(baseZoomLevel+1); 
	 alert('По правилам викторины запрещено дальнейшее увеличение масштаба');
	}
}


function GoogleMaps_LoadByAddress(ctrlGoogleId, address, zoomLevel ){
	var geocoder = new GClientGeocoder();
	cGoogleId = ctrlGoogleId;
	var map = new GMap2(document.getElementById(ctrlGoogleId));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	
	geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        $(ctrlGoogleId).display = "none";
      } else {
        map.setCenter(point, zoomLevel );
        var marker = new GMarker(point);
        map.addOverlay(marker);
      }
    }
  );

}
var GMarkers = {};
var cGoogleId;
function GoogleMaps_LoadGoogleMap( ctrlGoogleId, dataUrl ){
	cGoogleId = ctrlGoogleId;
	GDownloadUrl( dataUrl, populateMapData );
}

function GoogleMaps_PopulateGoogleMapXml( ctrlGoogleId, data ){
	cGoogleId = ctrlGoogleId;
	if( data.substr( 0, 4  ) == '<!--' )
		data = data.substring( data.indexOf('<marker'), data.length - "-->".length );
	var xml = GXml.parse(data);

	if( xml.documentElement == null ) return;
	populateXmlData(xml);
}

var renderedTravels = {};

function populateMapData(data, responseCode){
	var xml = GXml.parse(data);
	if( xml.documentElement == null ) return;
	
	populateXmlData(xml);
	if( window.onGoogleLoaded != null )
		window.onGoogleLoaded();
}

function populateXmlData(xml){
	var minLat = 0;
	var maxLat = 0;
	var minLon = 0;
	var maxLon = 0;
	var Gpolylines = [];
	var markers = [];
	var defaultTravelID = xml.documentElement.getAttribute('travelID');
	if( defaultTravelID != null && defaultTravelID != "" ){
		if( renderedTravels[defaultTravelID] != null )
			return;
		else{
			renderedTravels[defaultTravelID] = xml.documentElement;
		}
	}
		
	
	var travelLatLngSet = false;
	
	var polylines = xml.documentElement.getElementsByTagName("polyline");
	for (var i = 0; i < polylines.length; i++)
	{
		var pointsStr = polylines[i].firstChild.nodeValue;
		var points = pointsStr.split(" ");


		
		var coords = [];
		var firstLon = null;
		var firstLat = null;
		
		
		for (var d = 0; d < points.length; d++)
		{
			
			
			var pointStrs = points[d].split(',');
			var lat = parseFloat( pointStrs[1] );
			var lon = parseFloat( pointStrs[0] );
			if( minLat == 0 || minLat > lat ) minLat = lat;
			if( maxLat == 0 || maxLat < lat ) maxLat = lat;
			if( minLon == 0 || minLon > lon ) minLon = lon;
			if( maxLon == 0 || maxLon < lon ) maxLon = lon;
			if( d==0){
				firstLon = pointStrs[0];
				firstLat = pointStrs[1];

			}
			coords.push( new GLatLng(pointStrs[1], pointStrs[0]) );

		}
		
		var color = "#ff0000";
		if( polylines[i].getAttribute('travelID') != null ){
			if( window.travelElems != null ){
				var travelID = polylines[i].getAttribute('travelID');
				var elem = window.travelElems[travelID];
				if( elem != null ){
					elem.lon = firstLon;
					elem.lat = firstLat;
				
				if( elem.color != null )
					color = elem.color;
				}
				travelLatLngSet = true;
			}
		}

		var polyline = new GPolyline(coords, color, 4);
		Gpolylines.push(polyline);
		
		
			
	}
	
	var ptCenter = null;
	var zoomLevel = 2;

	
	

	var map = new GMap2(document.getElementById(cGoogleId));

	window.travelMap = map;
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	

	

	map.setCenter( new GLatLng(55.4419, 24.1419) );
	
	var travels = xml.documentElement.getElementsByTagName("travel");
	for( var c = 0; c < travels.length; c++ )
	{
		var travel = travels[c];
		var travelID = travel.getAttribute('travelID');
		var arrowCoords = travel.getAttribute('arrowCoords');
		
		if( window.travelElems != null ){
			var elem = window.travelElems[travelID];
			var coords = arrowCoords.split(',');
			elem.lon = coords[0];
			elem.lat = coords[1];
		}
	}

	var points = xml.documentElement.getElementsByTagName("point");
	for( var c = 0; c < points.length; c++ )
	{
		var name = points[c].getAttribute('name');
		var markerID = points[c].getAttribute('ID');

		var descrElem = points[c].getElementsByTagName("description")[0];
		var descr = (descrElem!=null)?descrElem.firstChild.nodeValue : "";

		
		var pointStrs = points[c].getElementsByTagName('coordinates')[0].firstChild.nodeValue.split(',');

		var lat = parseFloat( pointStrs[1] );
		var lon = parseFloat( pointStrs[0] );

		if( minLat == 0 || minLat > lat ) minLat = lat;
		if( maxLat == 0 || maxLat < lat ) maxLat = lat;
		if( minLon == 0 || minLon > lon ) minLon = lon;
		if( maxLon == 0 || maxLon < lon ) maxLon = lon;

		

		var point = new GLatLng(lat,lon);
		var marker = createMarker(point, name, descr);
		if( markerID != null )
		{
			GMarkers[markerID] = marker;
			var aShow = $('show' + markerID);
			if( aShow != null ) aShow.style.display = "";
		}
		markers.push(marker);
		
		if( window.travelElems != null && markerID!=null ){
			var elem = window.travelElems[markerID];
			if( elem != null ){
				elem.lon = lon;
				elem.lat = lat;
				elem.marker = marker;
			}
		}
		
		
		if( ptCenter == null ){
			ptCenter = point;
			
			if( window.travelElems != null && !travelLatLngSet ){
				var elem = window.travelElems[defaultTravelID];
				if( elem != null && elem.lon == null ){
					elem.lon = lon;
					elem.lat = lat;
				}
			}
		}
	}
	
	/*
	var se = new GLatLng(minLat, maxLon);
	if( se.distanceFrom(sw) > se.distanceFrom(ne) )
	{
		containerId = "googleContainer2";
		ctrlGoogleId = "googleMap2";
	}
	*/
	var gBounds = null;

	if( minLat != 0 && maxLat != 0 && minLon != 0 && maxLon != 0 )
	{
		var sw = new GLatLng(minLat, minLon);
		var ne = new GLatLng( maxLat, maxLon );
		//var dist = sw.distanceFrom( ne )/1000;
		gBounds = new GLatLngBounds(sw, ne);
		ptCenter = gBounds.getCenter();
	}

	if(gBounds!=null){
		zoomLevel = map.getBoundsZoomLevel(gBounds);
	}
	
	if( ptCenter != null ){
		map.setCenter( ptCenter, zoomLevel);
	}
	map.setMapType( map.getMapTypes()[2] );

	for (var c = 0; c < Gpolylines.length; c++)
	{
		map.addOverlay(Gpolylines[c]);
	}
	for (var c = 0; c < markers.length; c++)
	{
		map.addOverlay(markers[c]);
	}
	

	if( window.travelElems != null ){
		if( window.navigator.appVersion.indexOf('MSIE') > 0 )
		{
			InitMapHandlers();
			DrawTravelArrows();
		}
	}



}

function createMarker(point, name, descr ) {
  var marker = new GMarker(point);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("<b>"+name+"</b><br/>" + descr);
  });
  return marker;
}