var map;

// Setup events that need to happen on load.
Event.observe(window, 'load', function() {
  gmap_show($('latitude').value, $('longitude').value);
});

function gmap_show(latitude, longitude)
{
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(latitude, longitude), 13);
    var marker = new GMarker(map.getCenter());
    map.addOverlay(marker);
  }
}

function gmap_create_marker(point, text_1, text_2, text_3, icon)
{
  var marker = new GMarker(point, icon);
  var infoTabs = [
    new GInfoWindowTab("Main", text_1),
    new GInfoWindowTab("Details", text_2),
    new GInfoWindowTab("Schools", text_3)
  ];
  
  GEvent.addListener(marker, "click", function() {
      marker.openInfoWindowTabsHtml(infoTabs);
  });
  
  return marker;
}

function gmap_get_nearby_listings(id, price)
{
  new Ajax.Request('/idx/ajax/dispatch.php',
    {
      method: 'get',
      parameters: { id: id, price: price, ajaxpage: 'gmap_get_nearby_listings' },
      onSuccess: function(t) {
        // {{{ Create the blue icon
        
        var blue_icon              = new GIcon();
        blue_icon.image            = 'http://idx.securenet-it.com/1.2/images/gmap/mm_20_blue.png';
        blue_icon.shadow           = 'http://idx.securenet-it.com/1.2/images/gmap/mm_20_shadow.png';
        blue_icon.iconSize         = new GSize(12, 20);
        blue_icon.shadowSize       = new GSize(22, 20);
        blue_icon.iconAnchor       = new GPoint(6, 20);
        blue_icon.infoWindowAnchor = new GPoint(5, 1);
        
        // }}}
        // {{{ Grab the elements
        
        var root          = t.responseXML.documentElement; 
        var listing_count = root.getElementsByTagName("property").length;
        
        // }}}
        // {{{ Loop over the listings
        
        for(var i = 0; i < listing_count; i++) {
          
          var property = root.getElementsByTagName("property")[i];
          
          var mls           =  property.getAttribute("mls");
          var latitude      = (property.getElementsByTagName("latitude")[0].firstChild)      ? property.getElementsByTagName("latitude")[0].firstChild.nodeValue      : '';
          var longitude     = (property.getElementsByTagName("longitude")[0].firstChild)     ? property.getElementsByTagName("longitude")[0].firstChild.nodeValue     : '';
          var address       = (property.getElementsByTagName("address")[0].firstChild)       ? property.getElementsByTagName("address")[0].firstChild.nodeValue       : '';
          var city          = (property.getElementsByTagName("city")[0].firstChild)          ? property.getElementsByTagName("city")[0].firstChild.nodeValue          : '';
          var state         = (property.getElementsByTagName("state")[0].firstChild)         ? property.getElementsByTagName("state")[0].firstChild.nodeValue         : '';
          var zip           = (property.getElementsByTagName("zip")[0].firstChild)           ? property.getElementsByTagName("zip")[0].firstChild.nodeValue           : '';
          var image         = (property.getElementsByTagName("image")[0].firstChild)         ? property.getElementsByTagName("image")[0].firstChild.nodeValue         : '';
          var price         = (property.getElementsByTagName("price")[0].firstChild)         ? property.getElementsByTagName("price")[0].firstChild.nodeValue         : '';
          var bedrooms      = (property.getElementsByTagName("bedrooms")[0].firstChild)      ? property.getElementsByTagName("bedrooms")[0].firstChild.nodeValue      : '';
          var bathrooms     = (property.getElementsByTagName("baths")[0].firstChild)         ? property.getElementsByTagName("baths")[0].firstChild.nodeValue         : '';
          var sqft          = (property.getElementsByTagName("sqft")[0].firstChild)          ? property.getElementsByTagName("sqft")[0].firstChild.nodeValue          : '';
          var elem_school   = (property.getElementsByTagName("elem_school")[0].firstChild)   ? property.getElementsByTagName("elem_school")[0].firstChild.nodeValue   : '';
          var middle_school = (property.getElementsByTagName("middle_school")[0].firstChild) ? property.getElementsByTagName("middle_school")[0].firstChild.nodeValue : '';
          var high_school   = (property.getElementsByTagName("high_school")[0].firstChild)   ? property.getElementsByTagName("high_school")[0].firstChild.nodeValue   : '';
          
          var tab_1 = '<div style="width:300px;"><table><tr><td><img src="' + image + '" width="75" /></td><td>' + address + '<br />' + city + ', ';
          tab_1= tab_1 + state + ' ' + zip + '<br />MLS #' + mls + '</td></tr></table></div>';
          tab_1= tab_1 + '<table><tr><td><strong>View Property:</strong></td><td><a href="/idx/' + mls + '">Click Here</a></td></tr></table></style>';
          
          var tab_2 = '<div style="width:300px;"><table><tr><td>Price:</td><td>$' + price + '</td><td>Heated Sq Ft.</td><td>' + sqft + '</td></tr>';
          tab_2 = tab_2 + '<tr><td>Beds:</td><td>' + bedrooms + '</td><td align="right">Baths:</td><td>' + bathrooms + '</td></tr></table>';
          tab_2 = tab_2 + '<table><tr><td><strong>View Property:</strong></td><td><a href="/idx/' + mls + '">Click Here</a></td></tr></table></style>';
          
          var tab_3 = '<div style="width:300px;"><table><tr><td align="right">Elementary School:</td><td>' + elem_school + '</td></tr>';
          tab_3 = tab_3 + '<tr><td align="right">Middle School:</td><td>' + middle_school + '</td></tr>';
          tab_3 = tab_3 + '<tr><td align="right">High School:</td><td>' + high_school + '</td></tr></table></style>';
          
          map.addOverlay(gmap_create_marker(new GLatLng(latitude, longitude), tab_1, tab_2, tab_3, blue_icon));
        }
        
        // }}}
      },
      onFailure: function() {
        alert("An error occurred while processing your request.\n\nPlease try again.");
      }
    });
}
