var map;

var lines;
//var lines = [
//    "-122.0873647971727,37.38891217317737,0 -122.0835999110107,37.38732652529153,0 -122.0816948280647,37.39002226276236,0 -122.0853509092328,37.39141339230508,0 -122.0873647971727,37.38891217317737,0"
//    ];

var icong, icon;
var ICONSRC = "http://wifi.google.com/images/green-nowave.png"; 

var SHADOWSRC = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";

var ICONSRC_GATEWAY = "http://wifi.google.com/images/blue-access.png";

var Nodes;
var start;

function load() {
  var img = document.createElement('IMG');
  img.src = ICONSRC;

  if (img.complete) {
    displayMarkers();
  } else {
    img.onload = callback;
  }
}

function callback() {
  window.setTimeout(displayMarkers, 0);
}


function delayed(func) {
  return function() {
    window.setTimeout(func, 0);
  }
}

function cloneObject(what) {
  for (i in what) {
    this[i] = what[i];
  }
}

function displayMarkers() {

  // icon for a gateway
  icong = new GIcon();
  icong.shadow = SHADOWSRC;
  icong.image = ICONSRC_GATEWAY;
  icong.iconSize = new GSize(14, 16);
  icong.shadowSize = new GSize(24, 16);

  icong.iconAnchor = new GPoint(7, 8); // at the center of the icon
  icong.infoWindowAnchor = new GPoint(7, 2);
  icong.infoShadowAnchor = new GPoint(13, 13);

  // icon for a node
  icon = new GIcon();
  icon.image = ICONSRC;
  icon.shadow = SHADOWSRC;
  icon.iconSize = new GSize(14, 16);
  icon.shadowSize = new GSize(24, 16); // at the center of the icon

  icon.iconAnchor = new GPoint(7, 8);

  icon.infoWindowAnchor = new GPoint(7, 2);
  icon.infoShadowAnchor = new GPoint(13, 13);

  var globalMarker;

  globalMarker = new GMarker(new GLatLng(0,0), icon);

  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));

    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());

    // Center or the user's location
    map.setCenter(new GLatLng(37.391340, -122.080773), 13);

    for (var i=0; i<lines.length; i++) {
      createPolylines(lines[i]);
    }       

    //GDownloadUrl() does not work in a module. Must use _IG_FetchContent()            

    GDownloadUrl("nodes.xml", function(data) { 
            
                   var xml = GXml.parse(data);

                   Nodes = xml.documentElement.getElementsByTagName("Node");

                   start=0;
                   displaySomeMarkers();

                 });
  } // if (GBrowserIsCompatible()) 
} // function displayMarkers()

function createPolylines(str) {
  var a = str.split(" ");
  var points = [];

  for (var i=0; i<a.length; i++) {
    var b=a[i].split(",");
        
    if (! isNaN(parseFloat(b[1]))) {
      points.push(new GLatLng(parseFloat(b[1]), parseFloat(b[0])));
    }
  }  

  if (points.length>0) {
    map.addOverlay(new GPolyline(points));
  }       
}

function displaySomeMarkers() {
  var end = start+30;
  var i;

  if (end>Nodes.length) { 
    end = Nodes.length;
  }
  for (i=start;i<end; i++) {
    var lat = parseFloat(Nodes[i].getElementsByTagName("Lat")[0].childNodes[0].data);
    var lng = parseFloat(Nodes[i].getElementsByTagName("Long")[0].childNodes[0].data);

    var point = new GLatLng(
        parseFloat(Nodes[i].getElementsByTagName("Lat")[0].childNodes[0].data),
        parseFloat(Nodes[i].getElementsByTagName("Long")[0].childNodes[0].data) );

    var address = Nodes[i].getElementsByTagName("Address")[0].childNodes[0].data;
    var type    = Nodes[i].getElementsByTagName("Type")[0].childNodes[0].data;
    //map.addOverlay(createMarker(point, type, address));
    map.addOverlay(createMarker(point, type, address + 
                                "[" + lat + ", " + lng + "]"));

  } // for

  if (i<Nodes.length) {
    start=i;
    window.setTimeout(displaySomeMarkers, 0);
  }
             
}       
