var map;
var g_markers;


function loadMap()
{
	loadPhotoInfo();
	
}

/***** initGMap() *****/
function openMarkerAt(lat, lng)
{
	var marker = findMarker(lat, lng);
	if (marker)
		{
		GEvent.trigger(marker, 'click');
		map.setZoom(12);
		}
		else if (!map.getBounds().contains(new GLatLng(lat, lng)))
		{
			setMapLocation(lat, lng, 12);
		}
}

function initGMap(parentDiv) 
{
	if (GBrowserIsCompatible()) 
	{
       	map = new GMap2(document.getElementById(parentDiv));

		map.addControl(new GLargeMapControl());
		map.setCenter(new GLatLng(19.324103,-81.204071), 12);	
		map.setMapType(G_SATELLITE_TYPE);

		GEvent.addListener(map, "moveend", function() {
  			var center = map.getCenter();
			var waldo = document.getElementById('waldo-message');
			if (waldo != null)
  				waldo.innerHTML = center.lat() + ", " + center.lng() + ", " + map.getZoom() + "<br />" + "lat=\"" + center.lat() + "\" lng=\"" + center.lng() + "\"";
				 
		});

	}
}

function loadLocationInfo()
{
	map.clearOverlays();

	GDownloadUrl("/map/locations.xml", function(data, responseCode) {
		var xml = GXml.parse(data);
		
		var markers = xml.documentElement.getElementsByTagName("marker");
		var points = new Array(markers.length)

		for (var i = 0; i < markers.length; i++) {
			
			var mark = createMarker(markers[i]);
			map.addOverlay(mark);
			points[i] = mark.getPoint();
		}
		
		//var polyline = new GPolyline(points);
		//map.addOverlay(polyline);
	});
}

function loadPhotoInfo()
{
	map.clearOverlays();
	
	GDownloadUrl("/map/photos.xml", function(data, responseCode) {
		var xml = GXml.parse(data);
		
		var markers = xml.documentElement.getElementsByTagName("marker");
		g_markers = new Array(markers.length);

		for (var i = 0; i < markers.length; i++) {
			
			var mark = createMarker(markers[i], true);
			map.addOverlay(mark);
			g_markers[i] = mark;
		}
	openMarkerAt('19.294441', '-81.113616');
	});
}

function findMarker(lat, lng)
{
	for (var i = 0; i < g_markers.length; i++)
	{
		var point = g_markers[i].getPoint();
		if (point.lat() == lat && point.lng() == lng)
			return g_markers[i];
	}
	
	return null;
}

function createMarker(node, isPhotoMarker)
{
	var point = new GLatLng(parseFloat(node.getAttribute("lat")), parseFloat(node.getAttribute("lng")));
	var zoom = parseInt(node.getAttribute("zoom"));
	var icon;
	if (isPhotoMarker)
	{
		icon = new GIcon(null, "http://maps.google.com/mapfiles/kml/pal4/icon46.png");
		icon.iconSize=new GSize(32,32);
		icon.shadowSize=new GSize(56,32);
		icon.iconAnchor=new GPoint(16,32);
		icon.infoWindowAnchor=new GPoint(16,0);
	}
	else
	{
		icon = new GIcon(null, "http://maps.google.com/mapfiles/kml/pal4/icon21.png");
	}
	
	icon.iconSize=new GSize(32,32);
	icon.shadowSize=new GSize(56,32);
	icon.iconAnchor=new GPoint(16,32);
	icon.infoWindowAnchor=new GPoint(16,0);

	var marker = new GMarker(point, {title: node.getAttribute("label"), icon: icon});
	
	var html = createHtmlForInfoWindow(node, point, zoom);
	
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
		});
	
	return marker
}

function createHtmlForInfoWindow(node, point, zoom)
{
	var html = '<div class="info_window_content">';

	var photo = node.getElementsByTagName('photo')[0];
	if (photo)
		html += ('<img src="/map/images/' + GXml.value(photo) + '" width="' + photo.getAttribute('width') + '" height="' + photo.getAttribute('height') + '"><br />');

	html += '<center><span class="info_window_label">' + node.getAttribute('label') + '</span><center />';
	html += "</div>";
	
	return html;
}