MapBasedSearch = Class.create();

MapBasedSearchOptions = Object.extend({
        overlayOpacity: 0.7,
        resizeDuration: 0.8,
	    fps: 50
    }, {});

MapBasedSearch.prototype = {
    
    initialize: function() {
        $('map_toggle').observe('click', this.toggle_map);
    },

    toggle_map: function(event) {
        var map_based_search = $('map_based_search');
        var showing = map_based_search.showing;
        var search_location = $('search_location');
        var link_text = $('map_toggle_text');
        var clicked_on_link = event.element().identify() == 'map_toggle_text';

        if(showing) {
            new Effect.Parallel([
                                 new Effect.Opacity($$('.middle')[0], 
                                                    { from: MapBasedSearchOptions.overlayOpacity, 
                                                            to: 1.0, 
                                                            sync: true }),
                                 new Effect.Opacity($$('.middle')[1], 
                                                    { from: MapBasedSearchOptions.overlayOpacity, 
                                                            to: 1.0, 
                                                            sync: true }),
                                 new Effect.BlindUp(map_based_search, { duration: MapBasedSearchOptions.resizeDuration, fps: MapBasedSearchOptions.fps })
                                 ], { duration: MapBasedSearchOptions.resizeDuration, fps: MapBasedSearchOptions.fps });
            
            search_location.value = search_location.old_value;
            search_location.stopObserving('focus');
            
            hideLabel(search_location.getAttribute('id'), false);
            initOverLabels();

            if (!clicked_on_link) {
                hideLabel(search_location.getAttribute('id'), true); // do the work of the init over label focus handler
            }

            link_text.innerHTML = 'or use a map';
            link_text.setStyle("background-image: url(/images/arrow_collapsed.gif)");
            $('map_based_search').showing = false
        } else {

        new Ajax.Request('/search/prezoom_map', {
          method:'get',
          parameters: {location: $('search_location').value},
          onSuccess: function(transport){
            boundingBox = transport.responseText.evalJSON();

            new Effect.Parallel([
                                 new Effect.Opacity($$('.middle')[0],
                                                    { from: 1.0,
                                                            to: MapBasedSearchOptions.overlayOpacity,
                                                            sync: true }),
                                 new Effect.Opacity($$('.middle')[1],
                                                    { from: 1.0,
                                                            to: MapBasedSearchOptions.overlayOpacity,
                                                      sync: true }),
                                 new Effect.BlindDown(map_based_search, { duration: MapBasedSearchOptions.resizeDuration, fps: MapBasedSearchOptions.fps })
                                 ], { duration: MapBasedSearchOptions.resizeDuration, fps: MapBasedSearchOptions.fps });


            setTimeout(function() {                
                if (boundingBox['known_location']) {                    
                    dropDownMap.zoomMap(boundingBox['p1lo'],boundingBox['p1la'],boundingBox['p2lo'],boundingBox['p2la']);
                }
                dropDownMap.resizeSelf();
            }, MapBasedSearchOptions.resizeDuration + 50);

            search_location.old_value = search_location.value
            hideLabel(search_location.getAttribute('id'), true);
            search_location.value = '[map area]';
            search_location.observe('focus', function(event) { MapBasedSearch.prototype.toggle_map(event); } );
            link_text.innerHTML = 'close map'
            link_text.setStyle("background-image: url(/images/arrow_expanded.gif)");
            $('map_based_search').showing = true
           }
        });
        }
    }
}

Event.observe(window, 'load', function() {
    new MapBasedSearch();
});

