//initial vars
date_obj=new Date();
var global_last_key_time=date_obj.getTime();

var search_autocomplete_pad;
var search_input;
var search_url;
var presearch_url;
var loader_img;
var additionalParameter;

var site_search_focus = true;
var ajax_results_visible = false;
var in_tab=false;

var KEY = {
    UP: 38,
    DOWN: 40,
    DEL: 46,
    RETURN: 13,
    ESC: 27,
    BACKSPACE: 8
};
    
function initAjaxSearch(resultSource,inputJQueryIdentifier,additionalParam)
{
    $("body").append('<img id="ac-search-input-loader" src="/bitrix/images/search/map_preloader.gif"/>');
    $("body").append('<div class="b-rarus-search-autocomplete g-hidden" id="s-rarus-search-autocomplete"></div>');
    $("body").append('<div id="fader" style="position:fixed;left:0px;top:0px;width:100%;height:100%;z-index:9999;opacity:0.5;background-color:#888;display:none;"></div>')
    search_autocomplete_pad = $("#s-rarus-search-autocomplete");
    search_autocomplete_pad.css("position","absolute");
    
    loader_img = $("#ac-search-input-loader");
    search_input = $(inputJQueryIdentifier);          
    search_url = $("form:has("+inputJQueryIdentifier+")").attr("action");
    presearch_url = resultSource;
    additionalParameter = additionalParam;      
    
    // create ajax manager
    $.manageAjax.create('search_request', {
        queue: 'clear', 
        maxRequests: 1, 
        abortOld: true,
        preventDoubbleRequests: true,
        cacheResponse: true
    });
      
    //binds
    current_value = search_input.val();
    search_input.bind($.browser.opera ? "keypress" : "keydown", input_change);
    search_input.bind("focus",{text:current_value},input_focus);
    search_input.bind("blur",{text:current_value},input_blur);        
    
}

/**
* Processing of navigation between search result items
*/
function arrow_key_pressed(pressed_key){
    var ajax_items = $("#ajax_items a");
    var already_selected_ac_item = false;
    var ajax_items_length = ajax_items.length;
    for(i=0; i<ajax_items_length; i++){
        if ($(ajax_items.get(i)).attr("class") == "selected"){
            if (i == 0 && pressed_key == "up"){
                $(ajax_items.get(i)).removeClass("selected");
                $(ajax_items.get(ajax_items_length - 1)).addClass("selected");
                already_selected_ac_item = true;
                break;
            }
            else if (i < (ajax_items_length - 1) && pressed_key == "down"){
                $(ajax_items.get(i)).removeClass("selected");
                $(ajax_items.get(i+1)).addClass("selected");
                already_selected_ac_item = true;
                break;
            }
            else if (i < (ajax_items_length) && pressed_key == "up"){
                $(ajax_items.get(i)).removeClass("selected");
                $(ajax_items.get(i-1)).addClass("selected");
                already_selected_ac_item = true;
                break;
            }
            
            else if (i == (ajax_items_length - 1) && pressed_key == "down"){
                $(ajax_items.get(i)).removeClass("selected");
                break;
            }
        }
    }
    if (!already_selected_ac_item && pressed_key == "down") $(ajax_items.get(0)).addClass("selected");
    else if (!already_selected_ac_item && pressed_key == "up") $(ajax_items.get(ajax_items.length - 1)).addClass("selected");
}

/*
    Event handlers
*/
function input_focus(e){
    site_search_focus = true;
}
function input_blur(e){
    if(!in_tab) {
        search_autocomplete_pad.hide();
    }
    site_search_focus = false;
}
function input_change(e){                
    $(this).focus();             
    switch(e.keyCode){
        case KEY.DOWN:
            arrow_key_pressed("down");
            break;
        case KEY.UP:
            arrow_key_pressed("up");
            break;
        case KEY.RETURN:                
            search_autocomplete_pad.hide();
            var ajax_items = $("#ajax_items a");
            for(i=0; i<ajax_items.length; i++){
                if ($(ajax_items.get(i)).attr("class") == "selected"){
                    $("input.search-input").blur();
                    location.href = $(ajax_items.get(i)).attr("href");
                    break;
                }
            }
            break;
        default:
            break;
    }
    if(e.keyCode != KEY.DOWN && e.keyCode != KEY.UP && e.keyCode != KEY.RETURN){
        $.manageAjax.abort('search_request');
        
        //schedule the new ajax request
        date_obj=new Date();
        time=date_obj.getTime();
        global_last_key_time=time;
        setTimeout(
            "ajaxSearch("+time+")",
            300//delay time in msecs
        );
    }
}

function ajaxSearch(start_time){
var search_string = search_input.val();
//слово должно быть длиннее 3х букв или "1с"
if((search_string.length>=3 || search_string=="1c" || search_string=="1с") && start_time==global_last_key_time) 
{
    var ajax_url = presearch_url+"?"+search_input.attr("name")+"=" + encodeURIComponent(search_string) + "&"+additionalParameter;
    $("input.search-input")
    loader_img.css("left",$("input.search-input").offset().left+$("input.search-input").outerWidth()-17);
    loader_img.css("top",$("input.search-input").offset().top-1);
    loader_img.show();
    $.manageAjax.add('search_request', {
        success: function(responseText){
            if (responseText.length > 0){
                search_autocomplete_pad.html(responseText + "<li class='search-link'><a href='"+search_url+"?"+search_input.attr("name")+"=" + search_string + "' >Все результаты</a></li></ul>");
                if (site_search_focus){
                    loader_img.hide();
                }
                
                search_autocomplete_pad.css("left",$("input.search-input").offset().left);
                search_autocomplete_pad.css("top",$("input.search-input").offset().top+$("input.search-input").height()+6);
                pad_width = search_input.width();
                if(pad_width<500) pad_width = 500;            
                search_autocomplete_pad.width(pad_width);
                var highlite_text = $("#ajax_items a");
                highlite_text
                    .bind("mouseenter", function(){
                        $("#ajax_items a").removeClass("selected");
                        $(this).addClass("selected");
                        in_tab=true;
                    })
                    .bind("mouseleave", function(){ 
                        $(this).removeClass("selected");
                        in_tab=false;
                    });                    
                search_autocomplete_pad.show();
            }
            else{
                search_autocomplete_pad.hide();

            }
            loader_img.hide();
        },
        url:  ajax_url
    });
}
else
{
    loader_img.hide();
    search_autocomplete_pad.hide();
}
}
