﻿(function ($) {
    $.widget("custom.ajaxsearch", $.ui.autocomplete, {

        //going to extend the AutoComplete widget by customizing renderMenu and renderItems
        _renderMenu: function (ul, items) {
            var self = this,
			currentCategory = "";
            self._renderHeader(ul);
            $.each(items, function (index, item) {
                if (item.category != currentCategory) {
                    ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>");
                    currentCategory = item.category;
                }
                self._renderItem(ul, item);
            });
            self._renderFooter(ul);
        },

        _renderItem: function (ul, item) {
            return $("<li></li>")
			.data("item.autocomplete", item)
			.append($("<a href='" + item.url + "'></a>").text(item.label))
			.appendTo(ul);
        },

        _renderHeader: function (ul) {

        },

        _renderFooter: function (ul) {
            var self = this;
            $("<li class='ajaxsearch-footer'></li>")
            .data("item.autocomplete", { url: self.options.footerUrl + self.term })
            .append($("<a></a>").attr('href', self.options.footerUrl + self.term).text(self.options.footerText)).appendTo(ul);
        },

        _move: function (direction, event) {
            //menu is closed
            if (!this.menu.element.is(":visible")) {
                this.search(null, event);
                return;
            }
            if (this.menu.first() && /^previous/.test(direction) ||
				    this.menu.last() && /^next/.test(direction)) {
                //end of list - display search term
                this.element.val(this.term);
                this.menu.deactivate();
                this.menu.element.find('.menu-selected').removeClass('menu-selected');
                return;
            }
            this.menu[direction](event);
            this.menu.element.find('.menu-selected').removeClass('menu-selected');
            this.menu.active.addClass('menu-selected');
        }
    });
})(jQuery);
