
/* Endeca Search Autocomplete.
This file extends jQuery.ui.Autocomplete.  All custom settings are in this file.
Find global variable "endeca_xhr_url" in the template JSPs.

Last Updated: 2010-12-03 sshepard - Creation.
*/
$(function() {
   var cache = {}, lastXhr;
	var endeca = $("#keyword").autocomplete({
		width: 325,
		minLength: 2,
		mustMatch:0,
		appendTo:'#header_search',
		selectedItem: 0,
		position: {
			of: '#header_search',
			my: "left top",
			at: "left bottom",
			collision: "none",
			offset:"40 0"
		},
		source:function( request, response ) {
			var term = request.term;
			if ( term in cache ) {
				response( cache[ term ] );
				return;
			}

			lastXhr = $.ajax({
				url: endeca_xhr_url,
				data: { q:request.term },
				success: function( data, status, xhr ) {
					dataArr=data.split("\n");
					data = [], idx = 0;
					for (var i=0,l=dataArr.length;i<l;i++){
						var keyVal = dataArr[i].split('|');
						if (keyVal.length && keyVal.length > 1 && keyVal[0].length > 0 && keyVal[1].length > 0){
						 	data[idx]= { id:keyVal[1], value:keyVal[0] };
							idx++;
						}
					}
					cache[ term ] = data;
					if ( xhr === lastXhr ) {
						response( data );
					}
				}
			});
		}
	});
	if (endeca.data("autocomplete")) {
		endeca.data("autocomplete")._renderMenu = function( ul, items ) {
			var self = this;
			$( '<li class="head"></li>' ).appendTo( ul );
			$.each( items, function( index, item ) {
				self._renderItem( ul, item );
			});
		};
	}
	if (endeca.data("autocomplete")) {
		endeca.data("autocomplete")._renderItem = function(ul, item){
			var match = new RegExp(this.term,"gi");
			return $( "<li></li>" )
				.data( "item.autocomplete", item )
				.append( $( "<a></a>" ).html( item.value.replace(match, "<strong>"+item.value.match(match)+"</strong>" )) )
				.appendTo( ul );
		};
	}
});

