(function($){var $suggest,timer=null;$.suggest={close:function(){clearTimeout(timer);if($suggest.is(":visible")){timer=setTimeout(function(){$suggest.hide()},200)}}};$.fn.suggest=function(url,callback,options){return this.each(function(){if(this.type!='text')return;options=$.extend({},$.fn.suggest.defaults,{q:this.name},options);$(":input",this.form).blur($.suggest.close);$(this).attr({autocomplete:"off"}).css({position:"relative"}).keydown(function(event){if(!$suggest.is(":visible"))return;switch(event.which){case 13:var $active=$("a.active",$suggest);if($active.length){event.preventDefault();$active.click()}$.suggest.close();return;case 27:$.suggest.close();return;case 33:event.preventDefault();var $anchors=$("a",$suggest),index=0;break;case 34:event.preventDefault();var $anchors=$("a",$suggest),index=$anchors.length-1;break;case 38:event.preventDefault();var $anchors=$("a",$suggest),index=$anchors.index($("a.active",$suggest)[0])-1;if(index<0)index=$anchors.length-1;break;case 40:event.preventDefault();var $anchors=$("a",$suggest),index=$anchors.index($("a.active",$suggest)[0])+1;if(index>=$anchors.length)index=0;break;default:return}if(!$anchors.length)return;var top=$anchors.removeClass("active").eq(index).addClass("active").position().top;var height=$anchors[index].offsetHeight;if(top+height>$suggest.height()){$suggest.scrollTop($suggest.scrollTop()+top+height-$suggest.height())}else if(top<0){$suggest.scrollTop($suggest.scrollTop()+top)}}).keyup(function(event){switch(event.which){case 9:case 13:case 27:case 33:case 34:case 37:case 38:case 39:case 40:break;default:clearTimeout(timer);if(this.value.length>=options.min){var invoker=this,re=new RegExp('('+encodeRE(this.value)+')',"ig");timer=setTimeout(function(){$.ajax({url:url,type:"GET",data:[{name:options.q,value:invoker.value}],success:function(json){if(!$.isArray(json))return;if(!json.length)return;$suggest.empty();$.each(json,function(i,data){if(!data.suggest)return;$('<a href="#">'+data.suggest.replace(re,"<b>$1</b>")+'</a>').mouseover(function(){$("a.active",$suggest).removeClass("active");$(this).addClass("active")}).click(function(){invoker.focus();callback.call(invoker,data);return false}).appendTo($suggest)});var offset=$(invoker).offset();$suggest.css({left:offset.left,top:offset.top+invoker.offsetHeight+1}).slideDown("normal").scrollTop(0)},dataType:"json"})},options.delay)}else $.suggest.close()}})})};$.fn.suggest.defaults={min:3,delay:500,autofill:false};$(document).ready(function(){$suggest=$("#suggest");if(!$suggest.length){$suggest=$('<div id="suggest"></div>').appendTo("body")}})})(jQuery);
