TouringMachine.Maps = {};

TouringMachine.Maps.load = function(id, name, lat, lon) {
  var point = new LatLonPoint(lat, lon);

  var marker = new Marker(point);
  marker.setInfoBubble(name);

  var map = new Mapstraction(id,"openlayers");
  map.setCenterAndZoom(point, 11);
  map.addMarker(marker);
};

TouringMachine.Maps.loadAll = function(root) {
  var mapdivs = root.getElementsBySelector('.map-div');

  mapdivs.each(function(element) {
    TouringMachine.Maps.load(element,
			   element.getElementsBySelector('.fn')[0].innerHTML,
			   parseFloat(element.getElementsBySelector('.latitude')[0].title),
			   parseFloat(element.getElementsBySelector('.longitude')[0].title)
		          );
  });
};

Event.observe(window, 'load', function() {
  TouringMachine.Maps.loadAll($(document.body));
});

// options:
//   * into - div (Element or ID) to put the map in
//   * hCards - Elements to extract microformat data from
TouringMachine.Maps.Overview = function(options) {
  if (!options) options = {};

  var map = new Mapstraction($(options.into).id, 'openlayers');

  var markers = [];
  options.hCards.each(function(hCard, i) {
    var geo = hCard.down('.geo');
    var point = new LatLonPoint(
      parseFloat(geo.down('.latitude').title),
      parseFloat(geo.down('.longitude').title));
    var cardMarker = hCard.down('.marker');

    var marker = new Marker(point);
    marker.setInfoBubble(hCard.down('.org.fn').innerHTML);
    marker.setIcon(cardMarker.down('img').src, [21, 34]);
    map.addMarker(marker);
    // must add listener after the marker is on a map
    marker.addListener('click', function(evt) {
      window.location.hash = hCard.up('.venue').id;
    });
    cardMarker.observe('click', function(evt) {
      marker.openBubble();
      map.setCenter(point);
    });
  });

  map.autoCenterAndZoom();
};

TouringMachine.Maps.createOverview = function() {
  var overview_map_div = $('overview_map');
  var hCards = $$('.venue-info .vcard');

  if (overview_map_div && hCards.length) {
    new TouringMachine.Maps.Overview({
      hCards: hCards,
      into: overview_map_div
    });
  };
};
