google.load("maps", "2");

var map = null;
var markers = [];
var sidebar_html = "";

function marker_object(latlng, title, html, img)
{
	this.marker = new google.maps.Marker(latlng);	
	this.html = html + "<br/><a href=\"javascript:street_view('" + latlng.toUrlValue() + "');\">Street View</a><br/>&nbsp;";
	
	if(img)
		this.html = "<img src=\"" + img + "\" align=\"left\"/>" + this.html;
	
	this.marker.bindInfoWindowHtml(this.html);
	sidebar_html += "<a href=\"javascript:on_click(" + markers.length + ")\">" + title + "</a><br/>\n";
}

function street_view(latlng)
{
	window.open("edit_maps/streetview.php?latlng=" + latlng, "_blank", "width=800,height=600");
}

function on_click(id)
{
	markers[id].marker.openInfoWindowHtml(markers[id].html);
}

function readMap(filename)
{	
	google.maps.DownloadUrl("edit_maps/xml_data.php?filename=" + filename, function(data, response)
	{
		if(data == null || response == -1)
			return;
		
		var xml_data = google.maps.Xml.parse(data);
		var xml_markers = xml_data.documentElement.getElementsByTagName("marker");
		var bounds = new google.maps.LatLngBounds();
		
		map.clearOverlays();
		map.closeInfoWindow();
		
		while(markers.length != 0)
		{
			delete markers[0];
			markers.splice(0, 1);
		}
		
		sidebar_html = "";
		
		for(var i = 0; i < xml_markers.length; i++)
		{
			var latlng = new google.maps.LatLng(parseFloat(xml_markers[i].getAttribute("lat")), parseFloat(xml_markers[i].getAttribute("lng")));
			var marker = new marker_object(latlng, xml_markers[i].getAttribute("label"), xml_markers[i].getAttribute("html"), xml_markers[i].getAttribute("img"));
			
			markers.push(marker);
			bounds.extend(latlng);
			map.addOverlay(marker.marker);
		}
		
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		map.savePosition();
		delete bounds;
		
		document.getElementById("sidebar").innerHTML = sidebar_html;
	});
}

function initialise_map()
{
	if(google.maps.BrowserIsCompatible())
	{
		map = new google.maps.Map2(document.getElementById("map"));
		map.addControl(new google.maps.LargeMapControl());
		map.addControl(new google.maps.MapTypeControl());
		map.setCenter(new google.maps.LatLng(-27.0, 133.0), 3);
		map.setMapType(G_HYBRID_MAP);
	}
	else
		alert("Sorry, the Google Maps API is not compatible with your browser.");
}

function unload()
{
	google.maps.Unload();
	
	while(markers.length != 0)
	{
		delete markers[0];
		markers.splice(0, 1);
	}
}