var typeAheadRequest = null;
RegExp.escape = function (str) {
return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
};
jQuery.widget("custom.catcomplete", jQuery.ui.autocomplete, {
_renderMenu: function (ul, items) {
var self = this,
currentCategory = "";
jQuery.each(items, function (index, item) {
if (item.category != null && item.category != 'taxonomy' && item.category != currentCategory) {
ul.append("
" + item.category + "");
currentCategory = item.category;
}
self._renderItem(ul, item);
});
},
_renderItem: function (ul, item) {
return jQuery("").data("ui-autocomplete-item", item).append(""
+ item.label.replace(new RegExp(RegExp.escape(this.term), 'gi'), '$&')
+ "").appendTo(ul);
}
});
jQuery('input#query').catcomplete({
appendTo: "#search-form",
delay: 0,
source: function (request, response) {
processTypeAhead(request, response);
},
open: function () {
$('.ui-autocomplete').css('z-index', 9);
},
select: function (event, ui) {
$("input#query").val(ui.item.value);
var $form = $("#header-search");
markTypeAhead($form);
$form.submit();
}
});
jQuery('input#query-insight').catcomplete({
delay: 0,
source: function (request, response) {
processTypeAhead(request, response);
},
select: function (event, ui) {
$("input#query-insight").val(ui.item.value);
var $form = $("#header-search-insight");
markTypeAhead($form);
$form.submit();
}
});
function markTypeAhead($form) {
$form.append("");
}
function processTypeAhead(request, response) {
if (typeAheadRequest !== null) {
typeAheadRequest.abort();
}
typeAheadRequest = $.get("/search/typeAhead.ajax",
{typedText: request.term},
function(data) {
response(data);
});
}