var GoogleMap = {

  create: function(element_or_name, address) {
    element = $(element_or_name);
    element.address = address;
    Event.observe(window, 'load', GoogleMap.load.bindAsEventListener(element));
  },

  load: function(e) {
    var address = this.address;
    var map = new GMap2(this);
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    var geocoder = new GClientGeocoder();
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
          alert(address + " not found");
        } else {
          map.setCenter(point, 13);
          var marker = new GMarker(point);
          map.addOverlay(marker);
          marker.openInfoWindowHtml(GoogleMap.marker_for(address));
        }
      }
    );
    GEvent.addListener(
      map, "click",
      function(marker, point) {
        if (marker) marker.openInfoWindowHtml(GoogleMap.marker_for(address));
      }
    );
  },

  marker_for: function(address) {
    return '<p><b>' + address + '</b><br/><a href="http://www.google.com/maps?q=' + address + '" target="_blank">Open in New Window</a> &mdash; <a href="http://www.google.com/maps?q=' + address + '&f=d" target="_blank">Get Directions</a></p>'
  }

};
