/*
 * Google Maps Overlay Library
 * http://redfish.pl/gps
 *
 * Copyright (c) 2009 Cezary Piekacz (cezex@redfish.pl)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Date: 2009-05-30 22:48:33 +0100 (Fri, 30 May 2009)
 */

//http://www.bdcc.co.uk/Gmaps/BdccGmapBits.htm

function getXMLtag(xml, name) {
	return xml.documentElement.getElementsByTagName(name)[0];
}

function getXMLattr(xml, name) {
	return parseFloat(xml.getAttribute(name));
}

function createMarker(lon, lat, thumb, image) {
	var fotoIcon = new GIcon();
	fotoIcon.image = "icon_pic.png";
	fotoIcon.iconSize = new GSize(25, 25);
	fotoIcon.iconAnchor = new GPoint(16, 16);
	fotoIcon.shadowSize = new GSize(0, 0);
	fotoIcon.infoWindowAnchor = new GPoint(25, 1);

	var marker = new GMarker(new GLatLng(lat, lon), fotoIcon);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml('<center><a href="' + image + '" target="_blank"><img src="' + thumb + '" border="0"></a></center>');
	});
	return marker;
}

function createFlag(img) {
	var iconOptions = {};
	
	iconOptions.width = 26;
	iconOptions.height = 26;
	iconOptions.primaryColor = "#00FF00";
	iconOptions.cornerColor = "#FFFFFF";
	iconOptions.strokeColor = "#000000";

	if (img == 'start.png') {
		iconOptions.primaryColor = "#00FF00";
	}
	else if (img == 'stop.png') {
		iconOptions.primaryColor = "#FF0000";
	}
	else {
		iconOptions.width = 18;
		iconOptions.height = 18;
		iconOptions.primaryColor = "#FFFFFF";
	}
	
	return MapIconMaker.createMarkerIcon(iconOptions);
}

/* ---------------------------------------------------------------------------------------------- */
/* ---------------------------------------------------------------------------------------------- */

function createMap(div, points) {
	
	// points = [ [lat, lon, odo], ... ]

	var gpoints = new Array();
	var arrows  = new Array();
	var markers	= new Array();
	var bounds	= new GLatLngBounds();
	var pLength = points.length;
	var odo		= Math.round(points[pLength - 1][2] / 1000);
	
	for (var i = 0; i < pLength; i++) {
		var dist = Math.round(points[i][2] / 1000);
		gpoints[i] = new GLatLng(points[i][0], points[i][1]);

		// ustalanie pozycji strzalki (co 1km)
		if (i > 1 && dist % 1 == 0 && odo - dist >= 1 && dist >= 1 && !arrows[dist])
			arrows[dist] = [ gpoints[i - 1], gpoints[i] ];
			
		// ustalanie pozycji markera dystansu
		//if (dist % 5 == 0 && odo - dist >= 3 && dist >= 3 && dist < 100 && !markers[dist])
		//	markers[dist] = new GMarker(gpoints[i], createFlag(dist + ".png"), true);
		
		bounds.extend(gpoints[i]);
	}

	var map = new GMap2(div);
	//map.addControl(new GLargeMapControl());
	map.addMapType(G_PHYSICAL_MAP);
	//map.setMapType(G_PHYSICAL_MAP); 

	var extLargeMapControl = new ExtLargeMapControl();
	map.addControl(extLargeMapControl);
	
	var hierarchy = new GHierarchicalMapTypeControl();
	hierarchy.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, null, true);
	map.addControl(hierarchy);

	map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	map.addOverlay(new GPolyline(gpoints, "#FFFFFF", 5, 1));
	map.addOverlay(new GPolyline(gpoints, "#d90e0e", 2, 1));
	//map.addOverlay(new GPolyline(points, "#6E6E6E", 2, 1));
	//map.addOverlay(new GPolyline(points, "#FF0000", 4, 0.8));

	var myOverlays = [ new GArrows(arrows, 5, "#FFFFFF", 5, 1), new GArrows(arrows, 5, "#0000CC", 2, 1) ];

	for (var i in myOverlays)
		map.addOverlay(myOverlays[i]);

	GEvent.addListener(map, "moveend", function() {
		for (var i in myOverlays)
			myOverlays[i].redraw(true);
	});

	var beginMarker = new GMarker(gpoints[0], createFlag("start.png"), true);
	map.addOverlay(beginMarker);

	var endMarker = new GMarker(gpoints[pLength - 1], createFlag("stop.png"), true);
	map.addOverlay(endMarker);

	var otherOpts = { 
		buttonStartingStyle: { background:'#FFFFFF', padding:'4px', border:'1px solid #b6b6b6' },
		buttonHTML: '<img title="Przybliż do zaznaczenia" src="ico.zoomin.png">',
		buttonStyle: { marginTop:'5px', marginLeft:'3px', width:'18px', height:'18px' },
		buttonZoomingHTML: 'Zaznacz region na mapie<br />(kliknij tutaj by anulować)',
		buttonZoomingStyle: { background:'#FFFFFF', color:'#b6b6b6', width:'100%', height:'100%' },
		backButtonHTML: '<img title="Cofnij przybliżenie" src="ico.zoomout.png">',  
		backButtonStyle: { display:'none', marginTop:'5px', marginLeft:'3px', width:'18px', height:'18px' },
		backButtonEnabled: true, 
		overlayRemoveTime: 0
	} 

	map.addControl(new DragZoomControl({border:'1px solid #F9CA69'}, otherOpts, {}), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(23,280)));

	for (var i in markers) {
/*		GEvent.addListener(markers[i], 'mouseover', function() {  
			this.overlay = new MapTooltip(this, ' km');  
			map.addOverlay(this.overlay);  
			GEvent.addListener(line, 'mouseout', function() {  
				map.removeOverlay(this.overlay);  
			});  
		});
		map.addOverlay(markers[i]);*/
	}
}
