/**
* Google Maps API script to take locations from a table (id="data")
* and plot them on a map.
*
* Anthony Cartmell <ajcartmell@fonant.com>
* March 2009
*/

var centerLatitude = 54.5;
var centerLongitude = -2.5;
var startZoom = 5;
var current;

if (GBrowserIsCompatible()) {

  var mapDiv = document.getElementById("map");
  var map = new GMap2(mapDiv);
  var markers = [];
  var links = [];

  map.setUIToDefault();
  map.addControl(new GOverviewMapControl(new GSize(150,85)));

  map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);

  var icon = new GIcon();
  icon.image = "http://labs.google.com/ridefinder/images/mm_20_green.png";
  icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
  icon.iconSize = new GSize(12, 20);
  icon.shadowSize = new GSize(22, 20);
  icon.iconAnchor = new GPoint(6, 20);
  icon.infoWindowAnchor = new GPoint(6, 4);

  function makeMarker(point, title, placename, weblink) {
    var marker = new GMarker(point, icon);
    GEvent.addListener(marker, "click", function() {
      current = marker;
      var html = "<div style=\"font-size: 90%\"><h3 style=\"margin: 0\">"+title+"</h3>";
      html += "<p style=\"margin-top: 0;\">"+placename+"</p>";
      if (weblink && weblink.href!=undefined) {
        html += "<p style=\"margin: 0.25em 0;\">Website: <a href=\""+weblink.href+"\">"+title+"</a></p>\n";
      }
      else {
        html += "<p style=\"margin: 0.25em 0;\"><i>(website not known)</i></p>\n"
      }
      html += "<p style=\"font-size: 90%;\">";
      html += "<a href=\"#map\" onclick=\"zoomInCurrentMarker()\">Zoom In</a> | ";
      html += "<a href=\"#map\" onclick=\"zoomOutCurrentMarker()\">Zoom Out</a>";
      html += "</p></div>";
      marker.openInfoWindowHtml(html);
    });
    return marker;
  }

  function makeLink(r) {
    var link = document.createElement('a');
    if (link.style) link.style.fontStyle = 'italic';
    link.appendChild(document.createTextNode('(map)'));
    link.href = '#maptop';
    link.onclick = function(){showMarker(r); return true};
    return link;
  }

  function showMarker(r) {
    var marker = markers[r];
    map.setCenter(marker.getLatLng(), 12);
    GEvent.trigger(marker, 'click');
  }

  function zoomInCurrentMarker() {
    var zoom = map.getZoom();
    if (zoom<11) zoom = 11;
    map.setCenter(current.getLatLng(), zoom+1);
  }

  function zoomOutCurrentMarker() {
    var zoom = map.getZoom();
    map.setCenter(current.getLatLng(), zoom-1);
  }

  var datatable = document.getElementById("data");
  var rows = datatable.getElementsByTagName("tr");
  var bounds = new GLatLngBounds();
  var title;
  var placename;
  var weblink;

  for (r = 0; r < rows.length; r++) {
    var cells = rows[r].getElementsByTagName("td");
    if (cells.length>0) {
      var latlng = cells[0].firstChild.data;
      if (latlng!=undefined) {
        latlng = latlng.split(',');
        if (latlng[0]!=0) {
          if (cells[1] && cells[1].firstChild) {
            title = cells[1].firstChild.data;
          }
          if (cells[3] && cells[3].firstChild) {
            placename = cells[3].firstChild.data;
          }
          if (cells[4] && cells[4].firstChild) {
            weblink = cells[4].firstChild;
          }
          point = new GLatLng(parseFloat(latlng[0]), parseFloat(latlng[1]));
          markers[r] = makeMarker(point, title, placename, weblink);
          bounds.extend(point);
          map.addOverlay(markers[r]);
          links[r] = makeLink(r);
          cells[1].appendChild(document.createTextNode(' '));
          cells[1].appendChild(links[r]);
        }
      }
    }
  }
  //----- fit map view to plotted points -----
  map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

  if (window.attachEvent) // Internet Explorer
  {
    window.attachEvent("onresize", function(){map.checkResize();} );
    window.attachEvent("onunload", GUnload );
  }
  else // Firefox and others.
  {
    window.addEventListener("resize", function(){map.checkResize();}, false);
    window.addEventListener("unload", GUnload, false);
  }

}


