//<![CDATA[
/*
GMap.prototype.addOverlays=function(a){
        var b=this;
        for (i=0;i<a.length;i++) {
                try {
                        this.overlays.push(a[i]);
                        a[i].initialize(this);
                        a[i].redraw(true);
                } catch(ex) {
//                        alert('err: ' + i + ', ' + ex.toString());
                }
        }
        this.reOrderOverlays();

};
*/

function createSummaryMarker(point, count) {
  var marker = new GMarker(point, summaryicon);

	var html = "<div class=\"popup\"><b>" + count + " location(s)</b></div>";
	html += "<div class=\"popup\"><a href=\"javascript:void(0)\" onClick=\"loadDetails('"+ point.y +"', '"+ point.x +"')\">Zoom in</a></div>";
	  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });

  return marker;
}

function createDetailMarker(point, title, url, parenttitle, parenturl, photo) {
  var marker = new GMarker(point, detailicon);

  var html = "<div><a href=\"" + parenturl + "\"  target=\"_blank\">" + parenttitle + "</a> : <a href=\"" + url + "\"  target=\"_blank\">" + title + "</a></div>";
  if (photo != "") { html+= "<div><table border=\"0\"><tr><td height=\"100\" width=\"200\"><a href=\"" + url + "\" target=\"_blank\"><img border=\"0\" src=\"" + photo + "\"></a></td></tr></table></div>"; }
  GEvent.addListener(marker, "mouseover", function() {
    marker.openInfoWindowHtml(html);
  });

  return marker;
}

function loadSummary()
{
	var zoom = map.getZoomLevel();
	if (zoom >= 12) zoom = 0;
	if (zoom >= 10) zoom = 1; 
	if (zoom >= 9) zoom = 2; 
	var url = "GData.aspx?" + "level=" + zoom;
	document.getElementById('status').innerHTML = "<p>Retrieving photo locations (" + url + ")...</p>";
	var datarequest = GXmlHttp.create();
	datarequest.open("GET", url, true);
	datarequest.onreadystatechange = function() {
		if (datarequest.readyState == 4) {
			document.getElementById('status').innerHTML = "<p>Drawing photo locations...</p>";
			map.clearOverlays();
			var xmlDoc = datarequest.responseXML;
			var track = xmlDoc.documentElement.getElementsByTagName("group");
			var points = new Array();
			for (var i = 0; i < track.length; i++) {
				var point = new GPoint(parseFloat(track[i].getAttribute("lng")), parseFloat(track[i].getAttribute("lat")));
				var marker = createSummaryMarker(point, track[i].getAttribute("count"));
				map.addOverlay(marker);
//				points[i] = createSummaryMarker(point, track[i].getAttribute("count"));
			}
//			map.addOverlays(points);
			document.getElementById('status').innerHTML = "Done: " + i;
		}
	}
	datarequest.send(null);
}

function loadDetails(lat, lon) {
	var zoom = map.getZoomLevel();
	map.centerAndZoom(new GPoint(lon, lat), Math.min(zoom, 8));
	var bounds = map.getBoundsLatLng();
	var url = "GData.aspx?" + "level=99&minlat=" + bounds.minY + "&maxlat=" + bounds.maxY + "&minlon=" + bounds.minX + "&maxlon=" + bounds.maxX;
//	var url = "GData.aspx?" + "level=99&minlat=-180&maxlat=180&minlon=-180&maxlon=180";
	document.getElementById('status').innerHTML = "<p>Retrieving photo locations (" + url + ")...</p>";
	var datarequest = GXmlHttp.create();
	datarequest.open("GET", url, true);
	datarequest.onreadystatechange = function() {
		if (datarequest.readyState == 4) {
			map.clearOverlays();
//			document.getElementById('results').innerHTML = "";
			document.getElementById('status').innerHTML = "<p>Drawing photo locations...</p>";
			var xmlDoc = datarequest.responseXML;
			var track = xmlDoc.documentElement.getElementsByTagName("group");
			for (var i = 0; i < track.length; i++) {
				var point = new GPoint(parseFloat(track[i].getAttribute("lng")), parseFloat(track[i].getAttribute("lat")));
				var marker = createDetailMarker(point, track[i].getAttribute("title"), track[i].getAttribute("url"), track[i].getAttribute("parenttitle"), track[i].getAttribute("parenturl"), track[i].getAttribute("photo"));
				map.addOverlay(marker);
//				document.getElementById('results').innerHTML += track[i].getAttribute("title") + "<br>";
			}
			document.getElementById('status').innerHTML = "Done: " + i;
		}
	}
	datarequest.send(null);
}

function loadAll(gid) {
	var url = "GData.aspx?level=99&minlat=-180&maxlat=180&minlon=-180&maxlon=180";
	if (gid) url = url + "&gid=" + gid;
	document.getElementById('status').innerHTML = "<p>Retrieving photo locations...</p>";
	var datarequest = GXmlHttp.create();
	datarequest.open("GET", url, true);
	datarequest.onreadystatechange = function() {
		if (datarequest.readyState == 4) {
			map.clearOverlays();
			document.getElementById('status').innerHTML = "<p>Drawing photo locations...</p>";
			var xmlDoc = datarequest.responseXML;
			var track = xmlDoc.documentElement.getElementsByTagName("group");
			var points = new Array();
			for (var i = 0; i < track.length; i++) {
				var point = new GPoint(parseFloat(track[i].getAttribute("lng")), parseFloat(track[i].getAttribute("lat")));
				var marker = createDetailMarker(point, track[i].getAttribute("title"), track[i].getAttribute("url"), track[i].getAttribute("parenttitle"), track[i].getAttribute("parenturl"), track[i].getAttribute("photo"));
				map.addOverlay(marker);
//				points[i] = marker;
//				document.getElementById('results').innerHTML += track[i].getAttribute("title") + "<br>";
			}
//			map.addOverlays(points);
			document.getElementById('status').innerHTML = "";
		}
	}
	datarequest.send(null);
}

function GetParam(name)
{
    var start=location.search.indexOf("?"+name+"=");
    if (start<0) start=location.search.indexOf("&"+name+"=");
    if (start<0) return '';
    start += name.length+2;
    var end=location.search.indexOf("&",start)-1;
    if (end<0) end=location.search.length;
    var result=location.search.substring(start,end);
    var result='';
    for(var i=start;i<=end;i++) {
            var c=location.search.charAt(i);
            result=result+(c=='+'?' ':c);
    }
	return unescape(result);
} 

function copy_obj(o) {
        var c = new Object(); for (var e in o) { c[e] = o[e]; } return c;
}
        
if (GBrowserIsCompatible()) {
	var 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);

	var summaryicon = new GIcon(baseIcon);
	summaryicon.image = "/images/GMap/mm_20_blue.png";
	var detailicon = new GIcon(baseIcon);
	detailicon.image = "/images/GMap/mm_20_gray.png";

	var map = new GMap(document.getElementById("map"));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());

/*
   	yourMapType = copy_obj(map.mapTypes[0]);
	yourMapType.baseUrls = new Array();
	yourMapType.baseUrls[0] = "/maps/tiles.aspx?";
	yourMapType.getLinkText = function() { return 'Cemetery'; }
	map.mapTypes[map.mapTypes.length] = yourMapType;
	var mt = GetParam("mt");
	if (mt) { map.setMapType(map.mapTypes[mt]); }
*/
/*	GEvent.addListener(map, "zoom", function(oldLevel, newLevel) {
		if (newLevel >= 9) {
			loadSummary();
		} else {
			var center = map.getCenterLatLng();
			loadDetails(center.y, center.x);
		}
	});
*/
	var gid = GetParam("gid");
	loadAll(gid);
	var lat = GetParam("lat");
	if (lat == "") lat = 39.8333;
	var lon = GetParam("lon");
	if (lon == "") lon = -98.58334;
	var z = GetParam("z");
	if (z == "") z = 15;
	
	map.centerAndZoom(new GPoint(lon, lat), z);
}
   
//]]>
