jQuery(document).ready(function() 
{
	jQuery('#txtSearch').SearchAC('exm_search/ajax.php');
});

function css_browser_selector(u){var ua = u.toLowerCase(),is=function(t){return ua.indexOf(t)>-1;},g='gecko',w='webkit',s='safari',h=document.getElementsByTagName('html')[0],b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3')?g+' ff3':is('gecko/')?g:/opera(\s|\/)(\d+)/.test(ua)?'opera opera'+RegExp.$2:is('konqueror')?'konqueror':is('chrome')?w+' chrome':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?'mobile':is('iphone')?'iphone':is('ipod')?'ipod':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win':is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js']; c = b.join(' '); h.className += ' '+c; return c;}; css_browser_selector(navigator.userAgent);

(function(jQuery) {
    var SearchAC = function(input, url, options) {
        settings = jQuery.extend({
            minimumCharacters: 3,
            searchDelay: 500,
            limitPerCategory: 5,
            actionFunction: null,
            align: 'center',
            width: '600',
            showEffect: 'fade',
            hideEffect: 'fade'
        }, options);

        var input = jQuery(input);
        var container = jQuery(document.createElement('div'));
        container.attr('className',  'SearchAC-balloon');
        container.css({
            left: input.offset().left,
            top: input.offset().top + input.outerHeight()
        });

        var results = jQuery(document.createElement('div'));
        results.attr('className', 'SearchAC-results-wrapper');
        results.css({
            width: '100%',
            height: '100%'
        });

        container.append(results);
        jQuery(document.body).append(container);


        this._input = input;
        this._container = container;
        this._searchURL = url;
        this._resultsContainer = results;

        input.bind('focus.SearchAC', {SearchAC: this}, function(evt) {
            var SearchAC = evt.data.SearchAC;
            if (this.value.length >= settings.minimumCharacters) {
                SearchAC.search(this.value);
            }
        });
        jQuery(document.body).bind('mousedown.SearchAC', {SearchAC: this}, function(evt) {
            var SearchAC = evt.data.SearchAC;

            // Make sure we didn't click the SearchAC
            var node = evt.target;
            var c = 0
            while (node) {
                // Clicked SearchAC, so return
                if (node == SearchAC._input[0] || node == SearchAC._container[0]) {
                    return;
                }
                node = node.parentNode;
            }

            SearchAC.hide();
        });

        input.bind('keydown.SearchAC', {SearchAC: this}, function(evt) {
            var SearchAC = evt.data.SearchAC;
            if (evt.which == 38 && SearchAC._selectedRow > 0) {
                // Up arrow
                SearchAC.selectRow(SearchAC._selectedRow-1);
            } else if (evt.which == 40 && SearchAC._selectedRow < SearchAC._rowCount -1) {
                // Down arrow
                SearchAC.selectRow(SearchAC._selectedRow+1);
            } else if (evt.which == 13 && SearchAC._selectedRow > -1) {
                SearchAC.activateRow(SearchAC._selectedRow);
            }
            if (evt.which == 38 || evt.which == 40) {
                evt.preventDefault();
            }
			if (evt.which == 13)
			{
				SearchAC.hide();
			}
        });
        input.bind('keyup.SearchAC', {SearchAC: this}, function(evt) {
            var SearchAC = evt.data.SearchAC;
            if (SearchAC._searchDelayTimer) {
                clearTimeout(SearchAC._searchDelayTimer);
            }
            SearchAC._searchDelayTimer = setTimeout(function() {
                var input = SearchAC._input[0];
                if (input.value == SearchAC._previousQuery) {
                } else if (input.value.length >= settings.minimumCharacters) {
                    SearchAC.search(input.value);
                } else {
                    SearchAC.hide();
                }
            }, settings.searchDelay);
        });
        input.bind('keypress.SearchAC', {SearchAC: this}, function(evt) {
            var SearchAC = evt.data.SearchAC;
        });
        this._container.bind('mouseleave.SearchAC', {SearchAC: this}, function(evt) {
            var SearchAC = evt.data.SearchAC;
            SearchAC.selectRow(-1);
        });


        this.resultAction = settings.actionFunction ? settings.actionFunction : this.defaultResultAction;
    };
    SearchAC.prototype.show = function() {
        if (!this._container.is(':visible')) {
            this._container.fadeIn('fast');
        }
    };
    SearchAC.prototype.hide = function() {
        if (this._disableHide) {
            return;
        }
        this._container.fadeOut('fast');
    };
    SearchAC.prototype.search = function(query) {
        var SearchAC = this;
        this._previousQuery = query;
        if (this._previousXHR) {
            this._previousXHR.abort();
        }
        this._previousXHR = jQuery.getJSON(this._searchURL, {q: query}, function(results) {
            SearchAC.clearResults();
			if (results.length > 0)
			{
				for (var i = 0; i < results.length; i++) {
					var r = results[i]
					SearchAC.addResultCategory(r.title, r.results);
				}
				SearchAC.show();
			}
			else
			{
			}
        });
    };
    SearchAC.prototype.clearResults = function() {
        this._categoryCount = 0;
        this._rowCount = 0;
        this._selectedRow = -1;
        this._resultsContainer.html('<table class="SearchAC-results"></table>');
    };
    SearchAC.prototype.addResultCategory = function(name, results) {
        var first = true;
        for (var i = 0; i < results.length; i++) {
            var r = results[i];

            var tr = document.createElement('tr');
            jQuery(tr).attr('className', 'SearchAC-not-selected');

            var th = document.createElement('th');
            var td = document.createElement('td');

            if (first) {
                jQuery(th).text(name);
                first = false;
            }
            var img = document.createElement('img');
            img.className = 'SearchAC-result-icon';
            img.style.width = '16px';
            img.style.height = '16px';
            // If icon, then use that otherwise use blank
            img.src = r[2] ? r[2] : 'icons/blank.gif';
            jQuery(td).append(img);

            jQuery(td).append(r[1]);

            jQuery(tr).append(th);
            jQuery(tr).append(td);

            jQuery(tr).bind('mousemove', {SearchAC: this}, function(evt) {
                var SearchAC = evt.data.SearchAC;
                SearchAC.selectRow(this._rowId);
            });
            jQuery(tr).bind('click', {SearchAC: this}, function(evt) {
                var SearchAC = evt.data.SearchAC;
                SearchAC.activateRow(this._rowId);
            });

            tr._rowId = this._rowCount;
            tr._actionValue = r[0];
            this._resultsContainer.children('table').append(tr);
            this._rowCount++;
        }

        // Add spacer if this isn't the first category
        var tr = document.createElement('tr');
        var th = document.createElement('th');
        var td = document.createElement('td');
        tr.className = 'SearchAC-spacer-row';

        jQuery(tr).append(th);
        jQuery(tr).append(td);
        this._resultsContainer.children('table').append(tr);

        this._categoryCount++;
    };

    SearchAC.prototype.selectRow = function(id) {
        this._selectedRow = id;

        this._resultsContainer.find('tr:not(.SearchAC-spacer-row)').each(function(i) {
            if (this._rowId == id) {
                if (!jQuery(this).hasClass('SearchAC-selected')) {
                    jQuery(this).removeClass('SearchAC-not-selected');
                    jQuery(this).addClass('SearchAC-selected');
                }
            } else {
                if (!jQuery(this).hasClass('SearchAC-not-selected')) {
                    jQuery(this).removeClass('SearchAC-selected');
                    jQuery(this).addClass('SearchAC-not-selected');
                }
            }
        });
    };

    SearchAC.prototype.activateRow = function(id) {
        this.resultAction(this._resultsContainer.find('tr:not(.SearchAC-spacer-row):eq('+ id +')')[0]._actionValue);
    }

    SearchAC.prototype.defaultResultAction = function(val) {
		// grab the header html and remove the form
		var html = jQuery(".HeadLine").html();
		html = html.replace('<form method="post" action="search.php" name="productsearchform">', '<div>');
		html = html.replace('</form>', '</div>');
	
		window.location.href = "product.php?productid=" + val;
		jQuery(".HeadLine").html(html);
		this.hide();
		jQuery("#txtSearch").val("Loading product...");
		jQuery("#txtSearch").unbind();		
    };


    jQuery.fn.SearchAC = function(url, options) {
        this.each(function() {
            new SearchAC(this, url, options);
        });
    };
})(jQuery);