function createTrackMarker(point, title, url) {
  var marker = new GMarker(point, trackicon);

  var html = "<div style=\"width:200px\"><b>Track:</b><br><a href=\"" + url + "\">" + title + "</a></div>";
  GEvent.addListener(marker, "mouseover", function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}

function createRouteMarker(point, title, url) {
  var marker = new GMarker(point, routeicon);

  var html = "<div style=\"width:200px\"><b>Route:</b><br><a href=\"" + url + "\">" + title + "</a></div>";
  GEvent.addListener(marker, "mouseover", function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}

function createGroupMarker(point, title) {
  var marker = new GMarker(point, groupicon);

  var html = "<div style=\"width:200px\"><b>Group of routes/tracks:</b><br>" + title + "<br><a href='#' onclick='map.setCenter(GLatLng(" + point.lat() + "," + point.lng() + "), map.getZoom() + 7);'>Click to zoom in for more detail</a></div>";
  GEvent.addListener(marker, "mouseover", function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}

function Refresh()
{
	var currentbox = map.getBounds();
	if (WithinLoadedBox()) return;
	var newbox = ExpandBox(currentbox, 2);
  	var datarequest = GXmlHttp.create();
	url = "/GData/GBrowse.aspx?minlat=" + newbox.getSouthWest().lat() + "&maxlat=" + newbox.getNorthEast().lat() + "&minlon=" + newbox.getSouthWest().lng() + "&maxlon=" + newbox.getNorthEast().lng();
  	if (gid != null) url = url + "&gid=" + gid;
//	GLog.write("Requesting: " + url);
	datarequest.open("GET", url, true);
	UpdateProgress("Loading...");
	lbox = newbox;
	lzoom = map.getZoom();
	datarequest.onreadystatechange = function() 
	{
		if (datarequest.readyState == 4) {
//			GLog.write("clearing");
			map.clearOverlays();
			var xmlDoc = datarequest.responseXML;
			UpdateProgress("Drawing tracks...");
//			GLog.write("parsing tracks");
			var tracks = xmlDoc.documentElement.getElementsByTagName("track");
//			GLog.write(tracks.length + " tracks");
			for (var i = 0; i < tracks.length; i++) {
				var point = new GLatLng(parseFloat(tracks[i].getAttribute("startlat")), parseFloat(tracks[i].getAttribute("startlng")));
				var marker = createTrackMarker(point, tracks[i].getAttribute("title"), tracks[i].getAttribute("url"));
				map.addOverlay(marker);
			}
			
			UpdateProgress("Drawing routes...");
//			GLog.write("parsing routes");
			var routes = xmlDoc.documentElement.getElementsByTagName("route");
//			GLog.write(routes.length + " routes");
			for (var i = 0; i < routes.length; i++) {
				var point = new GLatLng(parseFloat(routes[i].getAttribute("startlat")), parseFloat(routes[i].getAttribute("startlng")));
				var marker = createRouteMarker(point, routes[i].getAttribute("title"), routes[i].getAttribute("url"));
				map.addOverlay(marker);
			}
			
			UpdateProgress("Drawing groups...");
//			GLog.write("parsing groups");
			var groups = xmlDoc.documentElement.getElementsByTagName("group");
//			GLog.write(groups.length + " groups");
			for (var i = 0; i < groups.length; i++) {
				var point = new GLatLng(parseFloat(groups[i].getAttribute("lat")), parseFloat(groups[i].getAttribute("lng")));
				var marker = createGroupMarker(point, groups[i].getAttribute("title"));
				map.addOverlay(marker);
			}
//			GLog.write("done");
			UpdateProgress("");
		}
	}
	datarequest.send(null);
}

var lbox = new GBounds(0,0,0,0);
var lzoom = -1;
var map;
var baseIcon;
var detailicon;
var gid;

function createMap() 
{
	if (!GBrowserIsCompatible()) return;
	map = new GMap2(document.getElementById("map"));
	map.enableDoubleClickZoom();
	map.enableContinuousZoom();
	AddDiv(map, "legend", G_ANCHOR_TOP_RIGHT, new GSize(9, 30));
	AddDiv(map, "progress", G_ANCHOR_TOP_RIGHT, new GSize(100, 30));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	baseIcon = new GIcon();
	baseIcon.shadow = "/images/GMap/mm_20_shadow.png";
	baseIcon.iconSize = new GSize(12, 20);
	baseIcon.shadowSize = new GSize(22, 20);
	baseIcon.iconAnchor = new GPoint(6, 20);
	baseIcon.infoWindowAnchor = new GPoint(13, 13);
	baseIcon.infoShadowAnchor = new GPoint(13, 13);
	trackicon = new GIcon(baseIcon);
	trackicon.image = "/images/GMap/mm_20_blue.png";
	routeicon = new GIcon(baseIcon);
	routeicon.image = "/images/GMap/mm_20_green.png";
	groupicon = new GIcon(baseIcon);
	groupicon.image = "/images/GMap/mm_20_gray.png";

	map.setCenter(new GLatLng(0, 0), 1);
	
	parseGet();
	if (document.Browser && document.Browser.gid) {
		gid = document.Browser.gid.value;
	} else
		gid = $_GET['gid'];
	Refresh();

    if (window.attachEvent) { 
	    window.attachEvent("onresize", function() {this.map.onResize()} );
	} else {
		window.addEventListener("resize", function() {this.map.onResize()} , false);
    }
    GEvent.addListener(map, "moveend", function(){
		Refresh();
    });
    GEvent.addListener(map, "zoomend", function(){
		Refresh();
    });
}

if(document.getElementById && document.createTextNode) {
	window.onload=function(){
		createMap();
	}
}
