function map_load()
{
  var map_div = document.getElementById('map_div');
  if (map_div == null) return;
  if (!GBrowserIsCompatible())
  {
    map_div.style.display = 'none';
    return;
  }
  var gicon = new Array();
  gicon[null] = new GIcon(); gicon[null].iconSize = new GSize(32, 32); gicon[null].shadowSize = new GSize(56, 32); gicon[null].iconAnchor = new GPoint(16, 32); gicon[null].infoWindowAnchor = new GPoint(16, 0);
  gicon['direct'] = new GIcon(gicon[null], 'http://maps.google.com/mapfiles/kml/pal3/icon21.png'); gicon['sublet'] = new GIcon(gicon[null], 'http://maps.google.com/mapfiles/kml/pal3/icon56.png'); gicon['room'] = new GIcon(gicon[null], 'http://maps.google.com/mapfiles/kml/pal2/icon28.png');
  var bounds = new GLatLngBounds(); var gmarkers = []; var last_lat, last_lng;
  for (var i = 0; i < listings.length; i++)
  {
    if ((listings[i].lat != last_lat) || (listings[i].lng != last_lng))
    {
      var latlng = new GLatLng(listings[i].lat, listings[i].lng);
      bounds.extend(latlng);
      var gmarker = new GMarker(latlng, gicon[listings[i].type]);
      gmarker.ids = [ i ];
      for (var j = i + 1; j < listings.length; j++) { if ((listings[j].lat != listings[i].lat) || (listings[j].lng != listings[i].lng)) break; gmarker.ids.push(j); }
      gmarkers.push(gmarker);
      last_lat = listings[i].lat; last_lng = listings[i].lng;
    }
  }
  var map = new GMap2(map_div);
  var lng = (document.getElementById('lng') == null) ? -72.925014 : document.getElementById('lng').value, lat = (document.getElementById('lat') == null) ? 41.307165 : document.getElementById('lat').value;
  var zoom = (document.getElementById('zoom') == null) ? 15 : parseInt(document.getElementById('zoom').value);
  if ((document.getElementById('map_clickable') == null) ? false : (document.getElementById('map_clickable').value == '0')) map.disableInfoWindow();
  if (listings.length <= 1) map.setCenter(bounds.getCenter(), zoom);
  else
  {
    var zoom2 = map.getBoundsZoomLevel(bounds);
    if (zoom2 > zoom) zoom2 = zoom;
    map.setCenter(bounds.getCenter(), zoom2);
  }
  map.enableContinuousZoom();
  map.enableDoubleClickZoom();
  map.addControl(new GSmallMapControl());
  map_manager = new GMarkerManager(map);
  map_manager.addMarkers(gmarkers, 0);
  map_manager.refresh();
  GEvent.addListener(map, 'click', function(marker, point)
    {
      if (!marker) return;
      if (marker.ids.length == 1) marker.openInfoWindowHtml('<div style="width: 400px;"><p style="font-size: 125%; font-weight: bold; margin: 0px;">' + listings[marker.ids[0]].street + ', ' + listings[marker.ids[0]].city + '</p><p>' + ((listings[marker.ids[0]].stream == '') ? '' : '<div style="float: right; height: 100px; margin-left: 10px;"><img src="/portal/stream.jpg?h=100&w=150&id=' + listings[marker.ids[0]].stream + '" /></div>') + listings[marker.ids[0]].summary + '<br />' + listings[marker.ids[0]].info + '</p><p><a href="?id=' + listings[marker.ids[0]].id + '">View Details &gt;&gt;</a></p></div>');
      else
      {
        var units = ''; var stream = null;
        for (var i = 0; i < marker.ids.length; i++)
        {
          if ((listings[marker.ids[i]].stream != '') && (stream == null)) stream = listings[marker.ids[i]].stream;
          units += '<li><a href="?id=' + listings[marker.ids[i]].id + '">' + listings[marker.ids[i]].summary + '</a><br />' + listings[marker.ids[i]].info + '</li>';
        }
        marker.openInfoWindowTabsHtml([new GInfoWindowTab('Property', '<div style="width: 400px;"><p style="font-size: 125%; font-weight: bold; margin: 0px;">' + listings[marker.ids[0]].street + ', ' + listings[marker.ids[0]].city + '</p><p>' + ((stream == null) ? '' : '<div style="float: right; height: 100px; margin-left: 10px;"><img src="/portal/stream.jpg?h=100&w=150&id=' + stream + '" /></div>') + 'This property contains multiple listings that may be accessed by clicking on the "Listings" tab.</p></div>'), new GInfoWindowTab('Listings', '<div style="width: 400px;"><ul>' + units + '</ul></div>')]);
      }
    });
}