
function loadWaypoints(map, cacheIcons)
{
    /* TODO: When we have lots and lots of waypoints - we'll need this.
    google.maps.event.addListener(map, 'dragend', function() {
      // TODO: Reload max markers for visible area.
    });
    
    google.maps.event.addListener(map, 'zoom_changed', function() {
      // TODO: Reload max markers for visible area.
    });
    */
 
   downloadUrl("?gpxData=xml", map, positionMarkers);
}

function positionMarkers(map, data)
{
  var infoWindow = new google.maps.InfoWindow();
  var xml = parseXml(data); 
  var markers = xml.documentElement.getElementsByTagName("marker");
  
  for (var i = 0; i < markers.length; i++) {
    
    var name = markers[i].getAttribute("name");
    var description = markers[i].getAttribute("description");
    var point = new google.maps.LatLng(
        parseFloat(markers[i].getAttribute("lat")),
        parseFloat(markers[i].getAttribute("lng")));
    var foundDate = markers[i].getAttribute("time");
    var cacheType = markers[i].getAttribute("type");
    var container = markers[i].getAttribute("container");
    
    var formattedDate = stripDate(foundDate);
    
    var html = "<div class='geocacheViewInfoWindow'><a href='http://coord.info/" + name + "' target='_blank'><b>" + name + "</b></a> : " + description + "<br />";
    html += "<b>Container:</b> " + container + "<br />";
    html += "<b>Found:</b> " + formattedDate + "<br />";
    html += "</div>";
    
    var markerImage = new google.maps.MarkerImage(
      getCacheTypeIcon(cacheIcons, cacheType),
      new google.maps.Size(22,22),
      new google.maps.Point(0,0),
      new google.maps.Point(11,11)
    );
    
    var marker = new google.maps.Marker({
      map: map,
      position: point,
      icon: markerImage,
      title: name + " : " + description
    });
    
    bindInfoWindow(marker, map, infoWindow, html);
  }
}

function stripDate(dateWithTimeZone)
{
  return dateWithTimeZone.split("T")[0];
}

function getCacheTypeIcon(cacheIcons, cacheType)
{
  if (cacheType == "Traditional Cache")
    return cacheIcons.traditional;
  else if (cacheType == "Unknown Cache")
    return cacheIcons.mystery;
  else if (cacheType == "Virtual Cache")
    return cacheIcons.virtual;
  else if (cacheType == "Multi-cache")
    return cacheIcons.multi;
  else if (cacheType == "Webcam Cache")
    return cacheIcons.webcam;
  else if (cacheType == "Earthcache")
    return cacheIcons.earth;
  else if (cacheType == "Event Cache")
    return cacheIcons.event;
  else if (cacheType == "Letterbox Hybrid")
    return cacheIcons.letterbox;
  else
    return cacheIcons.mystery;
}

function bindInfoWindow(marker, map, infoWindow, html)
{
  google.maps.event.addListener(marker, 'click', function() {
    infoWindow.setContent(html);
    infoWindow.open(map, marker);
  });
}

function downloadUrl(url, map, callback)
{
  var request = window.ActiveXObject ?
      new ActiveXObject('Microsoft.XMLHTTP') :
      new XMLHttpRequest;

  request.onreadystatechange = function()
  {
    if (request.readyState == 4) {
      request.onreadystatechange = doNothing;
      callback(map, request.responseText, request.status);
    }
  };

  request.open('GET', url, true);
  request.send(null);
}

function parseXml(str)
{
  if (window.ActiveXObject) {
    var doc = new ActiveXObject('Microsoft.XMLDOM');
    doc.loadXML(str);
    return doc;
  } else if (window.DOMParser) {
    return (new DOMParser).parseFromString(str, 'text/xml');
  }
}

function doNothing() {}



