/*
* Code to create map and load venue markers.
* Markers are retrieved from database and formatted as XML by gen-xml.php.
* 
* Upgrade to Gmaps v3 API when MarkerClusterer works with it.
*/

//<![CDATA[
var locations = {};

function initialize() {
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(52.6145, -2.7418), 6);
    map.addControl(new GSmallZoomControl3D());


    // Create our "tiny" marker icon

    var tinyIcon = new GIcon();
    tinyIcon.image = "mm_20_red.png";
    tinyIcon.shadow = "mm_20_shadow.png";
    tinyIcon.iconSize = new GSize(12, 20);
    tinyIcon.shadowSize = new GSize(22, 20);
    tinyIcon.iconAnchor = new GPoint(6, 20);
    tinyIcon.infoWindowAnchor = new GPoint(5, 1);
    // Set up our GMarkerOptions object
    var blueIcon = new GIcon(G_DEFAULT_ICON);
    blueIcon.image = "green.png";

    markerOptions = { icon:blueIcon };

    // Retrieve data from DB as XML file and parse.
    GDownloadUrl("gen-xml.php", function(data) {
      var xml = GXml.parse(data);
      var markers = xml.documentElement.getElementsByTagName("marker");
      for (var i = 0; i < markers.length; i++) {
        var name = markers[i].getAttribute("name");
        var link = markers[i].getAttribute("link");
        var address = markers[i].getAttribute("address");
        var phone = markers[i].getAttribute("phone");
        var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                parseFloat(markers[i].getAttribute("lng")));
        var venue = {latlng: latlng, name: name, link: link, address: address, phone: phone};
        var latlngHash = (latlng.lat().toFixed(6) + "" + latlng.lng().toFixed(6));
        latlngHash = latlngHash.replace(".","").replace(".", "").replace("-","");
        if (locations[latlngHash] == null) {
          locations[latlngHash] = []
        }
        locations[latlngHash].push(venue);
      }
      var mk = [];
      for (var latlngHash in locations) {
        var venues = locations[latlngHash];
        mk.push(createMarker(venues));
      }
     var mcOptions = {gridSize: 50, maxZoom: 12};
     var markerCluster = new MarkerClusterer(map, mk, mcOptions);
    });

  }
}

function createMarker(venues) {
  var venue = venues[0];

  var marker = new GMarker(venue.latlng, markerOptions);
  var html = '<div class="map_infowindow">';
  html += '<p class="map_venuename">' + venue.name + '</p>';
  html += venue.address + venue.phone;
  html += '<p><a href="/venues' + venue.link + '">more info...</a></p>';
  html += '</div>';
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}


//]]>

