(function($){var KEY={ESC:27,RETURN:13,TAB:9,BS:8,DEL:46,UP:38,DOWN:40,LEFT:37,RIGHT:39};$.fn.eSuggest=function(options){$this=$(this);$this.opts={url:options.url||'',data:options.data||'q',minChars:options.minChars||2};$('body').append('<div id="eSuggestContainer"></div>');$this.sDiv=$('#eSuggestContainer');var offSet=$this.offset();$this.sDiv.hide();$this._hide=function(){$this.sDiv.hide().html('')};$this._select=function(){$('#eSuggestContainer .selected').each(function(i){$this.val($(this).attr('title'))})};$this.focus(function(e){$this.bind('keyup',$.fn._eSuggestKeyUp)}).blur(function(e){$this.unbind('keyup',$.fn._eSuggestKeyUp)}).attr('autocomplete','off');$('#eSuggestContainer ul li').live('click',function(e){$this.val($(this).attr('title'));$this._hide();$this.closest('form').submit()});$this.closest('form').submit(function(e){$this._select()});$(document).click(function(e){var target=$(e.target);if(!(target.is('#eSuggestContainer, #eSuggestContainer *'))){$this.sDiv.hide()}});$(window).resize(function(e){$this._hide()})};$.fn._eSuggestKeyUp=function(e){if(!($this.val().length<$this.opts.minChars)){var k=e.which||e.keyCode;switch(k){case KEY.TAB:case KEY.ESC:$this._hide();break;case KEY.ENTER:break;case KEY.UP:var modified=false;var lis=$('#eSuggestContainer ul li');lis.each(function(i){if(!modified){var item=$(this);if(item.hasClass('selected')){modified=true;if(i==0){$(lis.get(lis.length-1)).addClass('selected').siblings().removeClass('selected')}else{item.prev().addClass('selected').siblings().removeClass('selected')}}}});if(!modified){$(lis.get(lis.length-1)).addClass('selected')}break;case KEY.DOWN:var modified=false;var lis=$('#eSuggestContainer ul li');lis.each(function(i){if(!modified){var item=$(this);if(item.hasClass('selected')){modified=true;if(i<lis.length-1){item.next().addClass('selected').siblings().removeClass('selected')}else{$(lis.get(0)).addClass('selected').siblings().removeClass('selected')}}}});if(!modified){$(lis.get(0)).addClass('selected')}break;case KEY.LEFT:case KEY.RIGHT:break;default:$this._hide();eval('var tempStr={'+$this.opts.data+': "'+$this.val()+'"};');$.ajax({url:$this.opts.url,type:'GET',data:tempStr,success:function(data){var offSet=$this.offset();$this.sDiv.css({position:'absolute',top:offSet.top+$this.outerHeight()+'px',left:offSet.left,width:$this.outerWidth()-2+'px',zIndex:20000,overflow:'hidden'}).html(data).show()},failure:function(data){$this._hide()}});break}}else{$this._hide()}}})(jQuery);