/* jquery.hintbox.js v1.2 - www.wiipass.com @author Tiziano Treccani <treccani.tiziano@tiscali.it> */
(function(a){a.fn.hintbox=function(f){inputs=this;var c={ENTER:13,LEFT:37,UP:38,RIGHT:39,DOWN:40,SPACE:32};var m={backgroundColor:"#3369F9",color:"#FFFFFF",autoDimentions:false,minChars:1,width:"120px",separator:"\n",delay:400,slideDownTime:0,slideUpTime:0,inputClass:"hintbox_input",inputLoadingClass:"hintbox_loading",hintboxContainerClass:"hintbox_list_container",url:"",params:{},extraParams:"",useCache:true,matchHint:false,sort:false,limit:0,onBeforeListLoad:function(){},onListLoaded:function(){},onItemSelected:function(){}};var f=jQuery.extend(m,f);var z=function(E,D){var G;var F;var I;var H=new Array();if(E.length==0){return D.length}if(D.length==0){return E.length}for(G=0;G<=E.length;G++){H[G]=new Array();H[G][0]=G}for(F=0;F<=D.length;F++){H[0][F]=F}for(G=1;G<=E.length;G++){for(F=1;F<=D.length;F++){I=(E.charAt(G-1)==D.charAt(F-1))?0:1;H[G][F]=Math.min(H[G-1][F]+1,H[G][F-1]+1,H[G-1][F-1]+I);if(G>1&&F>1&&E.charAt(G-1)==D.charAt(F-2)&&E.charAt(G-2)==D.charAt(F-1)){H[G][F]=Math.min(H[G][F],H[G-2][F-2]+I)}}}return H[E.length][D.length]};var j=function(D){jQuery(document).bind("keydown",function(E){l(E,D)})};var d=function(){jQuery(document).unbind("keydown")};var y=function(D){d();j(D)};var q=function(D){return p(D).find("ul")};var p=function(D){return D.next("."+f.hintboxContainerClass)};var C=function(D){if(p(D).get()==""){return false}return true};var s=function(D){var E="";D.attr("autocomplete","off");D.keyup(function(H){if(H.keyCode!=c.UP&&H.keyCode!=c.DOWN&&H.keyCode!=c.ENTER&&H.keyCode!=c.LEFT&&H.keyCode!=c.RIGHT){var G=jQuery.trim(D.val());if(G!=E){if(G.length>=f.minChars){setTimeout(function(){w(D)},f.delay)}else{p(D).slideUp(f.slideUpTime)}}E=G}if(H.keyCode==c.ENTER){var F=p(D);if(F.get()!=""){g(D)}}})};var r=function(D){if(C(D)){var E=q(D);E.find("li").click(function(){var F=jQuery(this);D.val(F.text());g(D);f.onItemSelected(F)})}};var l=function(D,I){if(C(I)){var F=jQuery.data(I,"cssBackup");var G=q(I);var J=G.find("li:first");var L=G.find("li:last");var E=G.find(".selected");if(E.get()==""){if(D.keyCode==c.DOWN){E=J}else{if(D.keyCode==c.UP){E=L}}b(E);return}if(D.keyCode==c.DOWN){A(E,F);var K=E.next("li");if(K.get()==""){K=J;I.focus();G.find(".selected").removeClass("selected")}else{E=K;b(E)}}else{if(D.keyCode==c.UP){A(E,F);var H=E.prev("li");if(H.get()==""){H=L;I.focus();G.find(".selected").removeClass("selected")}else{b(H);E=H}}else{if(D.keyCode==c.ENTER){if(E.get()!=""){I.val(E.text())}g(I);f.onItemSelected(E)}}}}};var k=function(D){var E=f.url;E.indexOf("?")!=-1?E+="&":E+="?";E+="q="+escape(jQuery.trim(D.val()));for(i in f.params){E+="&"+i+"="+escape(jQuery.trim(f.params[i]))}var F=jQuery.trim(f.extraParams);if(F.length>0){if(F.indexOf("&")>0){E+="&"+F}else{E+=F}}return E};var B=function(){var D=jQuery(document).data("hintbox_cache");if(D==undefined){var D=new Array();D.getItem=function(E){return this[E]};D.putItem=function(E,F){this[E]=F};D.hasItem=function(E){if(this[E]==undefined){return false}return true};jQuery(document).data("hintbox_cache",D)}return D};var o=function(E,F,G){E.removeClass(f.inputLoadingClass);if(jQuery.trim(G).length>0){if(f.useCache){var D=B();if(!D.hasItem(F)){D.putItem(F,G)}}e(E,G);var H={backgroundColor:q(E).find("li").css("background-color"),color:q(E).find("li").css("color")};jQuery.data(E,"cssBackup",H);n(E);t(E);h(E);y(E);r(E);f.onListLoaded(q(E))}};var w=function(F){F.addClass(f.inputLoadingClass);f.onBeforeListLoad();var G=k(F);var D=null;if(f.useCache){var E=B();if(E.hasItem(G)){D=E.getItem(G)}}if(D==null){jQuery.ajax({url:G,cache:false,success:function(H){o(F,G,H)}})}else{o(F,G,D)}};var u=function(E){var G=E.offset();var D=p(E);var F=q(E);D.css({top:G.top+E.outerHeight()-parseInt(E.css("border-bottom-width")),left:G.left-parseInt(F.css("border-left-width"))+parseInt(E.css("border-left-width")),position:"absolute"})};var x=function(G,D){var J=jQuery.trim(G.val());var F=new Array();var I=0;jQuery.each(D,function(){var L=z(J,jQuery.trim(this));if(F[I]==undefined){F[I]=new Array()}F[I]=new Array(L,jQuery.trim(this));I++});var K=function(N,M){if(parseInt(F[M])<parseInt(F[N])){var L=F[N];F[N]=F[M];F[M]=L;if(N>0){K(N-1,N)}}};for(var H=0;H<F.length-1;H++){K(H,H+1)}D=new Array();for(var H=0;H<F.length;H++){var E=F[H];D.push(E[1])}return D};var v=function(F,E){var G=jQuery.trim(F.val());var D=new Array();jQuery.each(E,function(){var H=jQuery.trim(this).toLowerCase();var I=G.toLowerCase();if(H.match(I)==I){D.push(jQuery.trim(this))}});return D};var e=function(F,H){var E=p(F);if(E.get()==""){E=jQuery("<div></div>").addClass(f.hintboxContainerClass).css({margin:0,padding:0,display:"none","z-index":100})}else{E.empty()}var G=jQuery("<ul></ul>").css({cursor:"default"});var D=jQuery.trim(H).split(f.separator);if(f.matchHint){D=v(F,D)}if(f.sort){D=x(F,D)}if(f.limit>0){D=D.slice(0,f.limit)}jQuery.each(D,function(){G.append(jQuery("<li></li>").text(jQuery.trim(this)))});E.append(G);F.after(E);u(F);E.slideDown(f.slideDownTime)};var n=function(G){var H=q(G);if(H.find("li").length>0){if(f.autoDimentions){var E=parseInt(G.css("border-left-width"));var F=parseInt(G.css("border-right-width"));var D=G.outerWidth();f.width=(D-E-F)+"px";H.find("li").css({"line-height":G.outerHeight()+"px"})}H.css({width:f.width,"overflow-x":"hidden"})}else{H.remove()}};var g=function(E){d();var D=p(E);D.slideUp(f.slideUpTime,function(){jQuery(this).remove()})};var h=function(D){var E=q(D);var F=jQuery.data(D,"cssBackup");E.find("li").hover(function(){A(E.find(".selected"),F);b(jQuery(this))},function(){A(jQuery(this),F)})};var b=function(D){D.css({"background-color":f.backgroundColor,color:f.color});D.addClass("selected")};var A=function(D,E){D.css({"background-color":E.backgroundColor,color:E.color});D.removeClass("selected")};var t=function(D){if(!jQuery.support.boxModel){q(D).css({width:(parseInt(f.width)+parseInt(D.css("border-left-width"))*2)+"px"}).find("li").css({width:(parseInt(f.width)+parseInt(D.css("border-left-width"))*2)+"px"})}};jQuery(inputs).each(function(){var D=jQuery(this);if(!D.hasClass(f.inputClass)){D.addClass(f.inputClass)}s(D);D.click(function(){y(D)});D.focus(function(){y(D)});D.blur(function(){y(D)})});return inputs}})(jQuery);
