var ajax_listener = function(){

    var ajax_target = URL.base_url + "jax/cocktail_teaser";
    var ajax_target_session = URL.base_url + "jax/session";
    var search_button = "#search_submit";
    var search_text_field = "#search_cocktail";
    var selected_filter_value = "#search_dropdown";
    var cocktail_container_id = "#cocktails.teaser";
    var paging_items = ".pages a";
    var filter_id = "#filter_cocktail";
    var alphabet_triggers = ".teaser_alphabet div";
    var divider = "LETTER_";
    var targetLetter = "A";
    
    var event = jQuery.Event("cocktail");
    
    
    //
    var page = 1;
    var current_filter = 0;
    var search_text = "";
    var current_alpha = false;
    //
    var json = false;
    var callback = false;
    /**
     *
     */
    var hide_sitemap_content = function(targetLetter){
    
        var all_items = $(".alphabet");
        var target_items = all_items.filter(function(){
            return $(this).attr("id").split(divider)[1] == targetLetter;
        });
        
        all_items.hide();
        target_items.show();
        
    };
	/**
	 * 
	 */
    var set_alphabet = function(){
    
    	hide_sitemap_content(targetLetter);
        
        
        $(alphabet_triggers).live("click", function(e){
            e.stopPropagation();
            var new_alpha = $.trim($(this).text());
            if (current_alpha == new_alpha) {
                return false;
            }
            
            
            
            cocktail_container_id = "#sitemap.teaser";
            current_alpha = new_alpha;
            hide_sitemap_content(current_alpha);
            
            //load_cocktails();
        });
        
    }
    /**
     *
     */
    var set_filter_cocktails = function(){
        if ($("#selected_filter_value").length > 0) {
            current_filter = $("#selected_filter_value").attr("class").split("_")[1];
        }
        
        $("#search_dropdown_list li").live("click", function(){
			
			
			$(this).parent().parent().parent().find(".teaser_head").trigger("click");
			
            var that = $(this);
            var new_filter = that.attr("id").split("_")[1];
            
            if (that.attr("id") == "none" || current_filter === new_filter) {
                return false;
            }
            
            current_filter = new_filter;
            page = 1;
            search_text = "";
            $("span", selected_filter_value).html($.trim(that.html()));
            load_cocktails();
        });
        
        /*
         $(filter_id).change(function(e){
         e.preventDefault();
         filter = $("option:selected", this).val();
         page = 1;
         load_cocktails();
         });
         */
    };
    
    /**
     *
     */
    var set_paging_cocktails = function(){
        $(paging_items).live('click', function(e){
        
            var a = $(this);
            var url_array = a.attr("href").split("/");
            
            page = url_array[url_array.length - 1].split("_")[1];
            
            e.preventDefault();
            
            load_cocktails();
            
        });
    };
    /**
     * main function to handle all ajax requests
     */
    var load_cocktails = function(){
    
        var params = {};
        
        if (current_alpha !== false) {
            params.alpha = current_alpha;
        }
        else {
            params.search_text = search_text;
            params.page = page;
            params.filter = current_filter;
        }
        
        if (json) {
            params.json = true;
            $.post(ajax_target, params, function(response){
                $(cocktail_container_id).html(response.html);
            }, "json");
        }
        else {//html  
            $.post(ajax_target, params, function(response){
                $(cocktail_container_id).replaceWith(response);
                set_item_link();
                $("body").trigger(event);
            });
            //$(cocktail_container_id).load();
        
        }
    };
    //Teaserlink    
    var set_item_link = function(){
        $(".teaser_content div.item").click(function(e){
        
            var item = $(this).find("a");
            window.location = item[0].href;
            
        });
    };
    //
    /**
     *
     */
    var set_search_button = function(){
    
        $("input#search_cocktail").live("keypress", function(event){
            if (event.keyCode == 13) {
                $(search_button).trigger("click");
            }
        }).live("click", function(){
            this.value = '';
        }).live("focus", function(){
            this.select();
        }).live("blur", function(){
            this.value = !this.value ? 'Suche verfeinern' : this.value;
        });
        $(search_button).live("click", function(){
        
            $(this).parent().parent().parent().find(".teaser_head").trigger("click");
            
            search_text = $(search_text_field).val();
            load_cocktails();
            return false;
        });
    };
    /**
     *
     */
    var set_listeners = function(){
    
        //
        $('body').bind('cocktail', function(e){
        
            var params = {};
            
            
            
            if (current_alpha != false) {
                params.alpha = current_alpha;
            }
            else {
                params.page = page;
                params.filter = current_filter;
                
                if (search_text != "") 
                    params.search_text = search_text;
                
            }
            
            $.post(ajax_target_session, params, function(response){
            
            }, "json");
            
        });
        //
        
        set_item_link();
        set_filter_cocktails();
        set_paging_cocktails();
        set_search_button();
        set_alphabet();
    };
    
    
    
    return set_listeners();
};
