var map;
var markers = new Hash();

window.addEvent('domready', function(){
  $('map_button').addEvent('click',  function() { toggleMap(); return false;});
  
  // Add sorting to the list view
  if($("listing_table"))
  {
    new SortingTable( 'listing_table' );    
  }

  // Add tooltips
  var tips  = new Tips('.tooltip');
  var tips2 = new Tips('.tooltip2');
  
  // Add google maps
  if (GBrowserIsCompatible()) {
    map = new GMap2($("map_canvas"));
    map.setCenter(new GLatLng(39.788225, -121.79821), 12);
    map.setUIToDefault();
    
    // TODO: Need a new way to pull out this info!
    $$('.geocoords').each(function(listing, index) {
      var data      = listing.get('text').split(',');
      var mlsNumber = data[0]
      var latitude  = data[1];
      var longitude = data[2];
      
      var point     = new GLatLng(latitude, longitude);
      var marker    = new GMarker(point);
      
      // Store the marker so we can highlight it on demand
      markers[mlsNumber] = marker;
      
      map.addOverlay(marker);
      GEvent.addListener(marker, "click", function(point) {
        showMapListingInfo(mlsNumber);
      });
    }); 
  }
});

function showMapListingInfo(mlsNumber) {
  if (markers.has(mlsNumber)) {
    var marker             = markers[mlsNumber];
    var listingInfoRequest = new Request({url:       "/listings/"+mlsNumber+"/map_listing",
                                          method:    "get",
                                          onSuccess: function(responseText, responseXML) {                                  
      marker.openInfoWindowHtml(responseText);
      map.panTo(marker.getLatLng());
    }});

    listingInfoRequest.send();
  }
}

function highlightOnMap(mlsNumber) {
  showMap();
  
  showMapListingInfo(mlsNumber);  
}

function mapIsDisplayed() {
  var wrapper = $('map_wrapper');
  
  return !(wrapper.style.height == "" || wrapper.style.height == "0px");
}

function showMap() {
  if(!mapIsDisplayed()) {
    toggleMap();
  }
}

function toggleMap() {
  var wrapper   = $('map_wrapper');
  var mapButton = $('map_button');
  
  if(!mapIsDisplayed()) {
    // TODO: add a callback instead of the delay
    wrapper.tween('height', 300);
    (function() {
      mapButton.set('text',  'Hide Map');
      mapButton.set('title', 'Hide Map');
      mapButton.set('class', 'selectedButton');
      
      $('hidden_show_map').set('value', 1);
      map.checkResize();
    }).delay(650);
  } else {
    wrapper.tween('height', 0);
    (function() {
      mapButton.set('text',  'Show Map');
      mapButton.set('title', 'Show Map');
      mapButton.set('class', 'unselectedButton');
      
      $('hidden_show_map').set('value', 0);   
      map.checkResize();
    }).delay(650);
  }
}