(function(b){function a(p,i){var c=b(p);var m=null;var k=-1;var h=false;var w=c.val();var r={};c.parent("form").attr("autocomplete","off");var g=b("<div/>").addClass(i.resultsClass).css("display","none").css("position","absolute").appendTo(b("body"));function f(){var A=c.position();g.css({top:A.top+p.offsetHeight,left:A.left,width:p.offsetWidth})}f();b(window).resize(f);c.focus(function(){h=true}).blur(function(){h=false;t()});if(b.browser.mozilla){c.keypress(z)}else{c.keydown(z)}function z(A){lastKeyPressCode=A.keyCode;switch(A.keyCode){case 38:A.preventDefault();n(-1);break;case 40:A.preventDefault();n(1);break;case 9:case 13:if(e()){c.get(0).blur();A.preventDefault()}break;default:k=-1;if(m){clearTimeout(m)}m=setTimeout(function(){u()},i.delay);break}}function u(){w=c.val();if(lastKeyPressCode==46||(lastKeyPressCode>8&&lastKeyPressCode<32)){return g.hide()}var A=c.val();if(A.length>=i.minChars){v(A)}else{g.hide()}}function v(B){if(B in r){return o(B,r[B])}var A=i.url+"?q="+encodeURI(B);b.get(A,function(C){C=d(C);r[B]=C;o(B,C)})}function d(D){if(!D){return null}var C=D.split(i.lineSeparator);var A=[];for(var B=0;B<C.length;B++){var E=b.trim(C[B]);if(E){A[A.length]=E.split(i.cellSeparator)}}return A}function o(B,A){if(!A){return x()}g.html("");if(!h||A.length==0){return x()}g.append(y(A));s()}function t(){if(m){clearTimeout(m)}m=setTimeout(x,200)}function x(){if(m){clearTimeout(m)}g.hide()}function s(){g.show()}function y(D){var C=b("<ul/>");for(var B=0;B<D.length;B++){var A=b("<li/>");if(i.formatItem){A.html(i.formatItem(D[B],B,D.length))}else{A.html(q(D[B]))}A.data("rownum",B);A.data("selectValue",D[B][0]);C.append(A)}b("li",C).hover(function(){l(b(this).data("rownum"))},function(){}).click(function(E){E.preventDefault();E.stopPropagation();j(this)});return C}function n(A){l(k+A,true)}function l(B,C){var A=b("li:visible",g);if(!A){return}A.removeClass("ac_over");k=B;if(k<-1){k=A.size()-1}else{if(k>=A.size()){k=-1}}if(k==-1){return c.val(w)}var D=b(A[k]).addClass("ac_over");if(C){c.val(D.data("selectValue"))}}function e(){var A=b("li.ac_over",g)[0];if(A){j(A);return true}return false}function j(A){if(!A){A=b("<li/>").data("selectValue","")}c.val(b(A).data("selectValue"));g.html("");x();c.parent("form").submit()}function q(A){return A[0]}}b.fn.suggest=function(d,c,e){c=c||{};c.url=d||"/suggest";c.resultsClass=c.resultsClass||"ac_results";c.lineSeparator=c.lineSeparator||"\n";c.cellSeparator=c.cellSeparator||"|";c.minChars=c.minChars||2;c.delay=c.delay||100;c.formatItem=c.formatItem||null;this.each(function(){new a(this,c)});return this}})(jQuery);