var map;

var lines = [
    "-122.081216,37.42772899999999,0 -122.0812183469512,37.42780992765437,0 -122.0812253849134,37.42789075560622,0 -122.0812371052159,37.42797138427589,0 -122.0812534934193,37.42805171432926,0 -122.0812745293334,37.4281316468001,0 -122.081300187042,37.42821108321186,0 -122.0813304349351,37.42828992569936,0 -122.0813652357472,37.42836807712901,0 -122.081404546604,37.42844544121859,0 -122.0814483190748,37.42852192265589,0 -122.0814964992319,37.42859742721609,0 -122.0815490277177,37.42867186187801,0 -122.0816058398173,37.42874513493842,0 -122.0816668655385,37.42881715612528,0 -122.0817320296978,37.42888783670882,0 -122.0818012520134,37.42895708961088,0 -122.0818744472036,37.42902482951217,0 -122.0819515250923,37.42909097295753,0 -122.08203239072,37.42915543845842,0 -122.0821169444605,37.42921814659375,0 -122.082205082144,37.42927902010734,0 -122.0822966951853,37.4293379840033,0 -122.0823916707174,37.42939496563839,0 -122.0824898917312,37.42944989481148,0 -122.0825912372187,37.42950270385011,0 -122.0826955823226,37.42955332769378,0 -122.0828027984904,37.42960170397413,0 -122.0829127536322,37.42964777309184,0 -122.0830253122838,37.42969147828995,0 -122.0831403357734,37.42973276572382,0 -122.0832576823927,37.42977158452759,0 -122.0833772075711,37.42980788687664,0 -122.0834987640541,37.42984162804666,0 -122.0836222020848,37.42987276646862,0 -122.0837473695881,37.42990126378021,0 -122.0838741123582,37.42992708487283,0 -122.0840022742485,37.42995019793501,0 -122.0841316973642,37.42997057449162,0 -122.0842622222566,37.42998818943876,0 -122.0843936881197,37.43000302107492,0 -122.0845259329881,37.43001505112763,0 -122.0846587939367,37.43002426477587,0 -122.0847921072816,37.43003065066849,0 -122.0849257087811,37.43003420093809,0 -122.0850594338391,37.43003491121081,0 -122.0851931177066,37.43003278061151,0 -122.0853265956859,37.43002781176514,0 -122.0854597033328,37.43002001079327,0 -122.0855922766591,37.43000938730662,0 -122.0857241523352,37.4299959543934,0 -122.0858551678908,37.42997972860277,0 -122.0859851619155,37.42996072992494,0 -122.086113974257,37.42993898176606,0 -122.0862414462193,37.42991451091983,0 -122.0863674207575,37.42988734753429,0 -122.0864917426714,37.42985752507451,0 -122.0866142587972,37.42982508028166,0 -122.0867348181954,37.42979005312756,0 -122.0868532723375,37.4297524867655,0 -122.0869694752885,37.42971242747714,0 -122.0870832838869,37.42966992461518,0 -122.0871945579211,37.42962503054309,0 -122.0873031603019,37.42957780057011,0 -122.0874089572317,37.42952829288336,0 -122.0875118183691,37.42947656847604,0 -122.0876116169898,37.42942269107247,0 -122.0877082301424,37.42936672704929,0 -122.0878015387997,37.42930874535392,0 -122.087891428006,37.42924881741959,0 -122.0879777870183,37.42918701707718,0 -122.0880605094425,37.42912342046449,0 -122.0881394933651,37.42905810593215,0 -122.0882146414783,37.42899115394747,0 -122.0882858611998,37.42892264699492,0 -122.0883530647874,37.42885266947482,0 -122.0884161694465,37.4287813075991,0 -122.0884750974324,37.42870864928525,0 -122.0885297761463,37.42863478404804,0 -122.0885801382241,37.428559802889,0 -122.0886261216199,37.42848379818467,0 -122.0886676696826,37.42840686357243,0 -122.088704731225,37.42832909383546,0 -122.0887372605874,37.42825058478556,0 -122.088765217694,37.42817143314567,0 -122.0887885681016,37.42809173643017,0 -122.0888072830427,37.42801159282506,0 -122.0888213394604,37.42793110106689,0 -122.0888307200375,37.42785036032111,0 -122.088835413217,37.42776947006001,0 -122.088835413217,37.42768852994001,0 -122.0888307200375,37.42760763967888,0 -122.0888213394604,37.42752689893315,0 -122.0888072830427,37.42744640717498,0 -122.0887885681016,37.42736626356986,0 -122.088765217694,37.42728656685436,0 -122.0887372605874,37.42720741521443,0 -122.088704731225,37.42712890616457,0 -122.0886676696826,37.42705113642756,0 -122.0886261216199,37.42697420181536,0 -122.0885801382241,37.42689819711099,0 -122.0885297761463,37.42682321595198,0 -122.0884750974324,37.42674935071474,0 -122.0884161694465,37.42667669240093,0 -122.0883530647874,37.42660533052516,0 -122.0882858611998,37.42653535300507,0 -122.0882146414783,37.42646684605256,0 -122.0881394933651,37.42639989406789,0 -122.0880605094425,37.42633457953554,0 -122.0879777870183,37.42627098292284,0 -122.087891428006,37.42620918258044,0 -122.0878015387997,37.42614925464611,0 -122.0877082301424,37.42609127295074,0 -122.0876116169898,37.42603530892757,0 -122.0875118183691,37.42598143152394,0 -122.0874089572317,37.42592970711663,0 -122.0873031603019,37.42588019942989,0 -122.0871945579211,37.42583296945691,0 -122.0870832838869,37.4257880753848,0 -122.0869694752885,37.42574557252289,0 -122.0868532723375,37.42570551323449,0 -122.0867348181954,37.42566794687243,0 -122.0866142587972,37.42563291971833,0 -122.0864917426714,37.42560047492547,0 -122.0863674207575,37.42557065246574,0 -122.0862414462193,37.42554348908016,0 -122.086113974257,37.42551901823396,0 -122.0859851619155,37.42549727007509,0 -122.0858551678908,37.42547827139723,0 -122.0857241523352,37.42546204560663,0 -122.0855922766591,37.42544861269337,0 -122.0854597033328,37.42543798920676,0 -122.0853265956859,37.42543018823489,0 -122.0851931177066,37.42542521938852,0 -122.0850594338391,37.42542308878922,0 -122.0849257087811,37.4254237990619,0 -122.0847921072816,37.42542734933154,0 -122.0846587939367,37.42543373522415,0 -122.0845259329881,37.42544294887239,0 -122.0843936881197,37.42545497892507,0 -122.0842622222566,37.42546981056127,0 -122.0841316973642,37.42548742550841,0 -122.0840022742485,37.42550780206497,0 -122.0838741123582,37.4255309151272,0 -122.0837473695881,37.42555673621978,0 -122.0836222020848,37.42558523353137,0 -122.0834987640541,37.42561637195338,0 -122.0833772075711,37.42565011312339,0 -122.0832576823927,37.4256864154724,0 -122.0831403357734,37.42572523427617,0 -122.0830253122838,37.42576652171004,0 -122.0829127536322,37.42581022690814,0 -122.0828027984904,37.42585629602586,0 -122.0826955823226,37.42590467230625,0 -122.0825912372187,37.42595529614988,0 -122.0824898917312,37.42600810518854,0 -122.0823916707174,37.42606303436163,0 -122.0822966951853,37.42612001599672,0 -122.082205082144,37.42617897989265,0 -122.0821169444605,37.42623985340628,0 -122.08203239072,37.4263025615416,0 -122.0819515250923,37.4263670270425,0 -122.0818744472036,37.42643317048782,0 -122.0818012520134,37.42650091038915,0 -122.0817320296978,37.4265701632912,0 -122.0816668655385,37.42664084387471,0 -122.0816058398173,37.4267128650616,0 -122.0815490277177,37.42678613812202,0 -122.0814964992319,37.42686057278394,0 -122.0814483190748,37.42693607734414,0 -122.081404546604,37.42701255878144,0 -122.0813652357472,37.42708992287098,0 -122.0813304349351,37.42716807430062,0 -122.081300187042,37.42724691678812,0 -122.0812745293334,37.42732635319993,0 -122.0812534934193,37.42740628567074,0 -122.0812371052159,37.42748661572414,0 -122.0812253849134,37.42756724439381,0 -122.0812183469512,37.42764807234565,0 -122.081216,37.42772899999999,0 -122.081216,37.42772899999999,0",

    "-122.092719,37.410855,0 -122.093719,37.40895599999999,0 -122.090279,37.407479,0 -122.089281,37.40942400000002,0 -122.092719,37.410855,0",

    "-122.110314,37.40586000000002,0 -122.105791,37.403816,0 -122.105295,37.40538100000003,0 -122.108464,37.40729500000001,0 -122.110314,37.40586000000002,0",

    "-122.073084,37.40044900000003,0 -122.070731,37.40259900000002,0 -122.073219,37.40393400000001,0 -122.074681,37.40335000000001,0 -122.074502,37.40183100000003,0 -122.073084,37.40044900000003,0",

    "-122.085894,37.40316500000002,0 -122.086428,37.40108800000002,0 -122.083264,37.40050699999999,0 -122.082774,37.40172700000002,0 -122.085894,37.40316500000002,0 ",

    "-122.082874,37.40086900000001,0 -122.082863,37.40005700000001,0 -122.081116,37.40006000000002,0 -122.081242,37.401008,0 -122.082874,37.40086900000001,0 ",

    "-122.075227,37.40196800000001,0 -122.077233,37.40042900000002,0 -122.075131,37.39925900000002,0 -122.07357,37.40039100000003,0 -122.075227,37.40196800000001,0 ",

    "-122.104004,37.40082500000001,0 -122.104829,37.399469,0 -122.103751,37.39893000000001,0 -122.102075,37.399882,0 -122.102078,37.40010699999999,0 -122.104004,37.40082500000001,0",

    "-122.060349,37.39391500000001,0 -122.062487,37.389804,0 -122.058011,37.38800599999999,0 -122.054111,37.39108300000002,0 -122.060349,37.39391500000001,0 ",

    "-122.06044,37.38452599999998,0 -122.060973,37.38240400000003,0 -122.057922,37.38177700000003,0 -122.056677,37.385345,0 -122.059105,37.38574700000001,0 -122.06044,37.38452599999998,0 ",

    "-122.070152,37.37870000000003,0 -122.071525,37.37658,0 -122.069005,37.375082,0 -122.068973,37.37833500000001,0 -122.070152,37.37870000000003,0 ",

    "-122.081898,37.37010200000002,0 -122.081928,37.36703,0 -122.078492,37.36702000000001,0 -122.078404,37.37022800000001,0 -122.081898,37.37010200000002,0 ",

    "-122.061789,37.38120599999999,0 -122.062085,37.379716,0 -122.059162,37.379075,0 -122.058755,37.38033899999999,0 -122.061789,37.38120599999999,0",

    "-122.059688,37.37162100000001,0 -122.063279,37.373032,0 -122.06528,37.37005600000001,0 -122.061746,37.36864500000002,0 -122.059688,37.37162100000001,0",

    "-122.071084,37.35855,0 -122.071097,37.35724,0 -122.069126,37.35723400000003,0 -122.069,37.35854400000002,0 -122.071084,37.35855,0 ",

    "-122.066389,37.38316199999999,0 -122.067156,37.37968500000001,0 -122.065751,37.37932000000001,0 -122.064182,37.384105,0 -122.066389,37.38316199999999,0 ",

    "-122.073315,37.41358100000001,0 -122.069975,37.41358100000001,0 -122.069975,37.41779300000003,0 -122.073315,37.41779300000003,0 -122.073315,37.41358100000001,0 ",

    "-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);
  }
             
}       
