// Eventually, we could do something clever with icons, generate
// a dynamic key, and so on.  We're pretty seriously handicapped by 
// the data we can freely get.

function mkicon(url) {
  var icon = new GIcon();

  icon.shadow = "http://www.google.com/mapfiles/ms/micons/msmarker.shadow.png";
  icon.image = url;
  icon.iconSize = new GSize(20,34);
  icon.shadowSize = new GSize(37,34);
  icon.iconAnchor = new GPoint(9,34);
  icon.infoWindowAnchor = new GPoint(9,2);
  icon.infoShadowAnchor = new GPoint(18, 25);

  return icon;
}

unfoundIcon = mkicon("http://maps.google.com/mapfiles/ms/micons/pink.png");
newIcon =     mkicon("http://maps.google.com/mapfiles/ms/micons/green.png");
oldIcon = mkicon("http://maps.google.com/mapfiles/ms/micons/red.png");


function createMarker(point, wpt) {
  var html = "";
  var icon;

  var gcnum = wpt.getElementsByTagName("name")[0].firstChild.nodeValue;

  html = wpt.getElementsByTagName("desc")[0].firstChild.nodeValue;
  html += "<br><a href=\"http://www.geocaching.com/seek/cache_details.aspx?wp=";
  html += gcnum;
  html += "\">";
  html += gcnum + " Cache Page</a>";

  icon = unfoundIcon; 
  var sym = wpt.getElementsByTagName("sym")[0].firstChild.nodeValue;
  if (sym.indexOf("-unfound") > 0) {
    icon = newIcon; }

  var marker = new GMarker(point, icon);
  GEvent.addListener(marker, 'click', function() { 
    marker.openInfoWindowHtml(html);
  })

  return marker;
}

// This is about 1/4 as complicated as it was under the original GMap.

function load() {
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map"));
    map.setCenter(new GLatLng(36.5, -86.59), 15);
    map.addControl(new GMapTypeControl());
    map.addControl(new GSmallMapControl());
    map.addMapType(G_SATELLITE_3D_MAP);
    var bb = map.getBounds();
    GDownloadUrl("Nashville.gpx", function(data, responseCode) {
      var xml = GXml.parse(data);
      var markers = xml.documentElement.getElementsByTagName("wpt");
      for (var i = 0; i < markers.length; i++) {
        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                              parseFloat(markers[i].getAttribute("lon")));
	var marker = createMarker(point, markers[i]);
        map.addOverlay(marker);
	bb.extend(point);
      }
     map.setCenter(bb.getCenter(), map.getBoundsZoomLevel(bb));
    });
  }
}
