function AutoSuggestControl(a,c,b){this.cur=-1;this.layer=null;this.textbox=a;this.sUrl=b;this.parent=this.textbox.parent();this.form=c;this.timeoutId=null;this.init()}AutoSuggestControl.prototype={requestSuggestions:function(b){if(this.textbox.val().length<3){return}var a=this;var d="text="+this.userText;var c=function(e){a.autosuggest(e,b)};jQuery.ajax({type:"POST",url:this.sUrl,data:d,dataType:"json",success:c,timeout:0})},hideSuggestions:function(){this.layer.css("visibility","hidden")},highlightSuggestion:function(a){this.layer.children().each(function(){if(this===a){jQuery(this).addClass("current")}else{jQuery(this).removeClass("current")}})},goToSuggestion:function(a){var c=this.layer.children();if(c.length>0){var b=null;if(a>0){if(this.cur<c.length-1){b=c[++this.cur]}}else{if(this.cur>0){b=c[--this.cur]}}if(b){this.highlightSuggestion(b);this.textbox.val(b.firstChild.nodeValue)}}},createDropDown:function(){var a=this;this.layer=jQuery('<div class="suggestions"></div>').css({visibility:"hidden",width:this.textbox.get(0).offsetWidth});this.layer.bind("mousedown mouseup mouseover",function(c){var b=c.target;if(c.type=="mousedown"){a.textbox.val(b.firstChild.nodeValue);a.hideSuggestions()}else{if(c.type=="mouseover"){a.highlightSuggestion(b)}else{a.textbox.get(0).focus()}}});this.layer.appendTo(this.parent)},showSuggestions:function(c){var a=null;this.layer.empty();for(var b=0;b<c.length;b++){this.layer.append(jQuery("<div>"+c[b]+"</div>"))}this.layer.css({left:this.textbox.offset().left,top:this.textbox.offset().top+this.textbox.get(0).offsetHeight,width:this.textbox.get(0).offsetWidth,visibility:"visible"})},selectRange:function(a,b){if(this.textbox.get(0).createTextRange){var c=this.textbox.get(0).createTextRange();c.moveStart("character",a);c.moveEnd("character",b-this.textbox.val().length);c.select()}else{if(this.textbox.get(0).setSelectionRange){this.textbox.get(0).setSelectionRange(a,b)}}this.textbox.get(0).focus()},typeAhead:function(b){if(this.textbox.get(0).createTextRange||this.textbox.get(0).setSelectionRange){var a=this.textbox.val().length;this.textbox.val(b);this.selectRange(a,b.length)}},autosuggest:function(b,a){if(b.length>0){if(a){this.typeAhead(b[0])}this.showSuggestions(b)}else{this.hideSuggestions()}},handleKeyUp:function(a){var c=a.keyCode;var b=this;this.userText=this.textbox.val();clearTimeout(this.timeoutId);if(c==8||c==46){this.timeoutId=setTimeout(function(){b.requestSuggestions(false)},50)}else{if(c<32||(c>=33&&c<46)||(c>=112&&c<=123)){}else{this.timeoutId=setTimeout(function(){b.requestSuggestions(true)},50)}}},handleKeyDown:function(a){switch(a.keyCode){case 38:this.goToSuggestion(-1);break;case 40:this.goToSuggestion(1);break;case 27:this.textbox.value=this.userText;this.selectRange(this.userText.length,0);case 13:this.hideSuggestions();a.returnValue=false;if(a.preventDefault){a.preventDefault()}break}},init:function(){var a=this;this.form.get(0).setAttribute("autocomplete","off");this.textbox.keyup(function(b){a.handleKeyUp(b)});this.textbox.keydown(function(b){a.handleKeyDown(b)});this.textbox.blur(function(){a.hideSuggestions()});this.createDropDown()}};