function EnhancedMap()
{
    this.initial = true;
    this.markers = new Array();
    this.filter = null;
}

EnhancedMap.prototype.map;
EnhancedMap.prototype.markers;

EnhancedMap.prototype.activate = function()
{
    if (GBrowserIsCompatible())
    {
        this.map = new GMap2(document.getElementById('mapcanvas'));
        this.map.setCenter(new GLatLng(32.715329, -117.157255), 13);
        this.map.setUIToDefault();
        this.map.disableScrollWheelZoom();
    }
}

EnhancedMap.prototype.request = function(url)
{
    var mapobject = this;
    
    $.getJSON(url, function(data, textStatus)
    {
        if (true == mapobject.initial)
        {
            mapobject.initial = false;
            $("#mapcanvas").css('width', '450px');
            $("#mapresults").show();
            $("#mapmainneighborhoods").show();
        }
        
        $('#mapresults').empty();
        $('#mapselector').empty();
        
        mapobject.map.clearOverlays();
        mapobject.markers = new Array();
        
        if (data.total > 0)
        {
            var bounds = new GLatLngBounds();
            
            for (key in data.members)
            {
                var coords = new GLatLng(data.members[key].latitude, data.members[key].longitude);
                var marker = new GMarker(coords);
                mapobject.markers[key] = marker;
                marker.bindInfoWindow(data.members[key].placemark);
                mapobject.map.addOverlay(marker);
                bounds.extend(coords);
                
                $('#mapresults').append('<li><a href="javascript: map.highlight('+key+');">'+data.members[key].title+'</a></li>');
            }
            
            $('#mapselector').html(data.selector);
            $('#mapselector a').click(function(event)
            {
                event.preventDefault();
                mapobject.request($(this).attr('href'));
            });
            
            if (data.center != '')
            {
                mapobject.map.setCenter(new GLatLng(data.center.latitude, data.center.longitude));
            }
            else
            {
                mapobject.map.setCenter(bounds.getCenter());
            }
            
            if (data.zoom != '')
            {
                mapobject.map.setZoom(parseInt(data.zoom));
            }
            else
            {
                mapobject.map.setZoom(mapobject.map.getBoundsZoomLevel(bounds));
            }
        }
        else
        {
            $('#mapresults').append("No results were found.");
        }
    });
}

EnhancedMap.prototype.query = function(form)
{
    url = BASE_HREF + '/maplogic?'+ $(form).serialize();
    this.request(url);
}

EnhancedMap.prototype.highlight = function(key)
{
    GEvent.trigger(this.markers[key], 'click');
}

EnhancedMap.prototype.zoom = function()
{
    this.map.setZoom(20);
}

EnhancedMap.prototype.preload = function(member)
{
    var url = BASE_HREF+'/maplogic?member='+member;
    this.request(url);
}

var map = new EnhancedMap();

$(document).ready(function()
{
    map.activate();
    
    $('.mapsearch').submit(function(event)
    {
        event.preventDefault();
        map.query(this);
    });
    
    $('.mapsearch input:checkbox').click(function(event)
    {
        map.query($(this).parents('form:first'));
    });
});
