$(function () {

    // Quick search
    var is_busy = false;
    disableSubmit();

    $('#quick_add_to_order_search')
        .bind('keyup', quickSearch)
        .bind('keydown', function (event) {
            // This will stop the character from appearing when the search is busy
            // if (is_busy) {
            //    return false;
            // }
        })
        .bind('focus', function (event) {
            $('#quick_add_to_order_search').val('');
            disableSubmit();
            event.preventDefault();
        });

    $('#quick_add_to_order_wrap').bind('mouseleave', resetSearch);

    $("#quick_add_to_order_results").delegate("li", "click", function (event) {

        var product_sku = $(this).find(".product_sku").text();
        var product_name = $(this).find(".product_name").text();
        var product_id = $(this).attr('id');

        $('#quick_add_to_order_search').val('(' + product_sku + ') ' + product_name);
        $('#quick_add_to_order_productid').val(product_id);

        resetSearch();
        enableSubmit();
    });

    function quickSearch(event) {

        if (is_busy) {
            return;
        }

        var target = event.target;
        var search_string = $(target).val();

        showBusyIndicator();

        $.ajax({
            url: '/catalogue/quick_add_to_order_search.asp',
            data: { search_string: search_string },
            success: function (results) {
                hideBusyIndicator();
                showResults(results);
            },
            error: function () {
                hideBusyIndicator();
                showError();
            }
        });

        return false;
    }

    function resetSearch() {
        hideResults();
        hideBusyIndicator();
    }

    function enableSubmit() {
        $('#quick_add_to_order_button').removeAttr('disabled').removeClass('disabled');
    }

    function disableSubmit() {
        $('#quick_add_to_order_button').addClass('disabled').attr({ disabled: 'disabled' });
    }

    function showResults(results) {
        $('#quick_add_to_order_results').html(results).show();
    }

    function showError() {
        $('#quick_add_to_order_results').html('<div class="error">Error</div>').show();
    }

    function hideResults(results) {
        $('#quick_add_to_order_results').hide();
    }

    function showBusyIndicator() {
        $('#quick_add_to_order_busy_indicator').show();
        is_busy = true;
    }

    function hideBusyIndicator() {
        $('#quick_add_to_order_busy_indicator').hide();
        is_busy = false;
    }

});
