(function(a){a.suggest=function(r,g){var c=a(r).attr("autocomplete","off");var f=a(document.createElement("ul"));var l=false;var q=false;var d=0;var t=[];var m=[];f.addClass(g.resultsClass).appendTo("body");a(window).resize(k);c.focus(function(){k();o()});c.blur(function(){setTimeout(function(){f.hide()},200)});try{f.bgiframe()}catch(v){}if(a.browser.mozilla){c.keypress(p)}else{c.keydown(p)}function k(){if(a(this).attr("autocomplete")){c=a(this).attr("autocomplete","off")}var e=c.offset();f.css({top:(e.top+r.offsetHeight)+"px",left:e.left+"px",width:c.width()+4})}function p(z){if((/27$|38$|40$/.test(z.keyCode)&&f.is(":visible"))||(/^13$|^9$/.test(z.keyCode)&&x())){if(z.preventDefault){z.preventDefault()}if(z.stopPropagation){z.stopPropagation()}z.cancelBubble=true;z.returnValue=false;switch(z.keyCode){case 38:n();break;case 40:w();break;case 9:case 13:u();break;case 27:f.hide();break}}else{setTimeout(s,g.delay)}}function s(){if(c.val().length!=d){if(l){setTimeout(s,g.delay)}else{if(q){clearTimeout(q)}var e=a.trim(c.val()).toLowerCase().charAt(0);var z=m[e]==undefined?0:(g.delay*5);d=c.val().length;if(z){q=setTimeout(o,z)}else{o()}}}}function o(){var e=a.trim(c.val()).toLowerCase();if(e.length>=g.minchars){cached=y(e);if(cached){j(cached)}else{l=true;a.get(g.source,{q:e,l:(g.limit+1)},function(z){f.hide();var A=b(z);j(A);h(e,A);l=false})}}else{f.hide()}}function y(C){var e=C.charAt(0);var z=[];var B=0;if(t[e]!=undefined){for(var A=0;A<t[e].length;A++){if(t[e][A].toLowerCase().search(C)==0){z[B]=t[e][A];B++;if(B>=g.displaylimit){return z}}}if(m[C]!=undefined){return z}else{if(C.length>1){for(var A=1;A<=C.length;A++){if(m[C.substr(0,A)]!=undefined&&m[C.substr(0,A)]<g.limit){return z}}}}}return false}function h(A,z){var e=A.charAt(0);t[e]=t[e]==undefined?z:a.unique(z.concat(t[e]));m[A]=z.length}function j(A){if(!A){return}if(!A.length){f.hide();return}var D=0;var B="";var C="";var z=A.length>g.displaylimit?g.displaylimit:A.length;for(i in A){D++;if(D<=z&&A[i]!=C){B+="<li>"+A[i]+"</li>";C=A[i]}}try{f.html(B).show().bgiframe()}catch(E){f.html(B).show()}f.children("li").mouseover(function(){f.children("li").removeClass(g.selectClass);a(this).addClass(g.selectClass)}).click(function(F){F.preventDefault();F.stopPropagation();u()})}function b(e){var z=[];var C=e.split(g.delimiter);for(var B=0;B<C.length;B++){var A=a.trim(C[B]);if(A){z[z.length]=A}}return z.sort()}function x(){if(!f.is(":visible")){return false}var e=f.children("li."+g.selectClass);if(!e.length){e=false}return e}function u(){$currentResult=x();if($currentResult){c.val($currentResult.text());f.hide();if(g.onSelect){g.onSelect.apply(c[0])}}}function w(){$currentResult=x();if($currentResult){$currentResult.removeClass(g.selectClass).next().addClass(g.selectClass)}else{f.children("li:first-child").addClass(g.selectClass)}}function n(){$currentResult=x();if($currentResult){$currentResult.removeClass(g.selectClass).prev().addClass(g.selectClass)}else{f.children("li:last-child").addClass(g.selectClass)}}};a.fn.suggest=function(c,b){if(!c){return}b=b||{};b.source=c;b.delay=b.delay||100;b.displaylimit=b.displaylimit||10;b.limit=b.limit||100;b.resultsClass=b.resultsClass||"suggest_results";b.selectClass=b.selectClass||"suggest_over";b.minchars=b.minchars||2;b.delimiter=b.delimiter||"\n";b.onSelect=b.onSelect||false;this.each(function(){new a.suggest(this,b)});return this}})(jQuery);