/* $Id$ */

/**
 * @link    http://shippingkit.com/
 * @copyright    2010 ShippingKit Group. All Rights Reserved.
 */

jQuery.extend({
    autoSuggestMinString: 2,
    autoSuggestSearchTimer: '',
    autoSuggestSearchTimeout: 50,
    autoSuggestFadeOutTimeout: 500
});

$(document).bind('keyup', 'C', function(e) {
    return fn_autosuggest_event(e); 
});

jQuery(document).ready(function($){

    var input = $('#searchInput');
    if (!input) return;

    $('#searchForm').append('<ul id="autosuggest"></ul>');

    var offset_search = $('#searchInput').offset();
    var height_search = $('#searchInput').height();
    $('ul#autosuggest').css({
        left: offset_search.left,
        top: offset_search.top + height_search
      });
        
    input.attr('autocomplete', 'off');

}); 



function fn_autosuggest_event(e){
    var input = $('#searchInput');
    control_buttons = {13: 'enter', 27: 'esc', 38: 'up' ,40: 'down'};
    var char_code = (e.which) ? e.which : e.keyCode;
    if (typeof(control_buttons[char_code]) != 'undefined') {
        if (char_code == 13) {
            row = $('ul#autosuggest li.autosuggest-selected a');
            if (row.length > 0){
                var str = row.text();
                $('#searchInput').attr("value",$.trim(str));
                jQuery.redirect(row.attr("href"));
            }
        } else if (char_code == 27) {
            $('#autosuggest').fadeOut();
        } else if (char_code == 38 || char_code == 40) {
    
            row = $('ul#autosuggest li.autosuggest-selected');
            
            if (row.length > 0) {
                if (char_code == 38) {
                    new_row = row.prev();
                    if (!(new_row.length > 0)) new_row = $('ul#autosuggest li:last');
                } else {
                    new_row = row.next();
                    if (!(new_row.length > 0)) new_row = $('ul#autosuggest li:first');
                }
            } else {
                if (char_code == 38) {
                    direction = ':last';
                } else {
                    direction = ':first';
                }    
                new_row = $('ul#autosuggest li' + direction);
            }
        $('ul#autosuggest li.autosuggest-selected').removeClass('autosuggest-selected');
        new_row.addClass('autosuggest-selected');
        }

    } else {
        if ($.autoSuggestSearchTimer)
            clearTimeout($.autoSuggestSearchTimer);

        if (input.val().length < $.autoSuggestMinString) {
            $('#autosuggest').fadeOut();
            return;
        }
        
        $.autoSuggestSearchTimer = setTimeout(function(){
                var frm = $('#searchForm');
                if (!frm)
                    return;

                var params = {};
                params['q'] = $("#searchInput").val();
                params['dispatch'] = 'products.search';
                params['caller'] = 'autosuggest';

                $.post(index_script, params, function(data){
                    if (data.length == 0) {
                        $('#autosuggest').fadeOut();
                        return;
                    }
                    $('#autosuggest').html(data).fadeIn();
                    $("ul#autosuggest li").mouseover(function(){
                        $('ul#autosuggest li.autosuggest-selected').removeClass('autosuggest-selected');
                        $(this).addClass('autosuggest-selected');
                    });
                });
            }, 
            $.autoSuggestSearchTimeout
        );

        input.blur(function(){
        setTimeout(function(){ $('#autosuggest').fadeOut(); }, $.autoSuggestFadeOutTimeout);
    });
    }
}
