﻿/**
* AjaxSearch by Simeon Albertson, Cordovan Digital AB
* Based on LiveSearch by Andreas Lagerkvist
*
* Usage: $('#ajaxSearchTextField1, #ajaxSearchTextField2').ajaxSearch('search.aspx?q=');
* HTML: <input type="text" id="ajaxSearchTextField1" class="ajaxSearchTextField" />
* HTML: <input type="text" id="ajaxSearchTextField2" class="ajaxSearchTextField" />
*/

// Hide all search-results if you click outside them (and outside textbox)
$(document.body).click(function(event) {
    var jqTarget = $(event.target);
    if (!jqTarget.parents('#ajaxSearchResults').length && !jqTarget.hasClass('.ajaxSearchField')) {
        $('#ajaxSearchResults').slideUp(300);
    }
});

jQuery.fn.ajaxSearchUpdateLeft = function(relatingTo) {
    /*return this.css('left', relatingTo.position().left - 2);*/
    return this.css('left', 1);
};

jQuery.fn.ajaxSearch = function(serverURL, onDataLoaded) {
    return this.each(function() {
        var input = $(this);
        var resultContainer = $("#headSerch");
        var results = $('<div id="ajaxSearchResults" style="position:absolute;" >s</div>').appendTo(resultContainer).hide().slideUp(0);

        input.keyup(function() {
            if (this.value != this.lastValue) {
                input.addClass('results-loading');

                var q = this.value;

                if (this.timer) {
                    clearTimeout(this.timer);
                }

                this.timer = setTimeout(function() {
                    $.get(serverURL + q, function(data) {
                        input.removeClass('results-loading');

                        if (data.length) {
                            results.html(data).slideDown(300).end()
							.ajaxSearchUpdateLeft(input);

                            if (typeof onDataLoaded === 'function' && onDataLoaded)
                                onDataLoaded(results, input);
                        }
                        else {
                            results.slideUp(300);
                        }
                    });
                }, 500);

                this.lastValue = this.value;
            }
        });

        $(window).resize(function() {
            results.ajaxSearchUpdateLeft(input);
        });
    });
};