function AutoSuggestControl(b,a){this.cur=-1;this.layer=null;this.provider=a;this.textbox=b;this.textboxID=null;this.timeoutId=null;this.userText=b.value;this.init()}AutoSuggestControl.prototype.reset=function(){this.cur=-1;this.layer.empty();var a=jQuery(this.textbox);this.textboxID=null;a.val("");this.userText=a.val()};AutoSuggestControl.prototype.autosuggest=function(b,a){this.cur=-1;if(b.length>0){if(a){this.typeAhead(b[0])}this.showSuggestions(b)}else{this.hideSuggestions()}};AutoSuggestControl.prototype.createDropDown=function(){var a=this;this.layer=jQuery("<div />").appendTo("body");this.layer.addClass("suggestions");this.layer.css("visibility","hidden");this.layer.mouseover(function(b){a.manageMouseEvents(b)});this.layer.mousedown(function(b){a.manageMouseEvents(b)});this.layer.mouseup(function(b){a.manageMouseEvents(b)})};AutoSuggestControl.prototype.manageMouseEvents=function(b){b=b||window.event;oTarget=b.target||b.srcElement;if(b.type=="mousedown"){var a=jQuery(this.textbox);var c=jQuery(oTarget);this.textboxID=c.attr("id");a.val(c.text());this.hideSuggestions()}else{if(b.type=="mouseover"){this.highlightSuggestion(oTarget)}else{this.textbox.focus()}}};AutoSuggestControl.prototype.goToSuggestion=function(c){var e=this.layer.children();if(e.length>0){var d=null;if(c>0){if(this.cur<e.length-1){d=e.get(++this.cur)}}else{if(this.cur>0){d=e.get(--this.cur)}}if(d){this.highlightSuggestion(d);var a=jQuery(this.textbox);var b=jQuery(d);this.textboxID=b.attr("id");a.val(b.text())}}};AutoSuggestControl.prototype.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;case 13:this.selectRange(this.userText.length,0);this.hideSuggestions();a.returnValue=false;if(a.preventDefault){a.preventDefault()}break}};AutoSuggestControl.prototype.handleKeyUp=function(b){var c=this;var d=b.keyCode;this.userText=this.textbox.value;clearTimeout(this.timeoutId);if(d==8||d==46){var a=jQuery(this.textbox);this.textboxID=null;this.timeoutId=setTimeout(function(){c.provider.requestSuggestions(c,false)},250)}else{if((d<16||(d>16&&d<46)||(d>=112&&d<=123))&&(d!=0||this.userText.charCodeAt(this.userText.length-1)==0)){}else{this.timeoutId=setTimeout(function(){c.provider.requestSuggestions(c,true)},250)}}};AutoSuggestControl.prototype.hideSuggestions=function(){this.layer.css("visibility","hidden")};AutoSuggestControl.prototype.highlightSuggestion=function(a){for(var b=0;b<this.layer.children().length;b++){var c=this.layer.children()[b];if(c==a){c.className="current"}else{if(c.className=="current"){c.className=""}}}};AutoSuggestControl.prototype.init=function(){var a=this;var b=jQuery(this.textbox);b.keyup(function(c){if(!c){c=window.event}a.handleKeyUp(c)});b.keydown(function(c){if(!c){c=window.event}a.handleKeyDown(c)});b.blur(function(){a.hideSuggestions()});this.createDropDown()};AutoSuggestControl.prototype.selectRange=function(b,a){if(this.textbox.createTextRange){var c=this.textbox.createTextRange();c.moveStart("character",b);c.moveEnd("character",a-this.textbox.value.length);c.select()}else{if(this.textbox.setSelectionRange){this.textbox.setSelectionRange(b,a)}}this.textbox.focus()};AutoSuggestControl.prototype.showSuggestions=function(c){var a=null;var d=null;this.layer.empty();for(var b=0;b<c.length;b++){a=jQuery('<div id="'+c[b][0]+'"/>');a.text(c[b][1]);this.layer.append(a)}d=jQuery(this.textbox).offset();this.layer.css("left",d.left+"px");this.layer.css("top",d.top+this.textbox.offsetHeight+"px");this.layer.css("width",this.textbox.offsetWidth+"px");this.layer.css("visibility","visible")};AutoSuggestControl.prototype.typeAhead=function(c){if(this.textbox.createTextRange||this.textbox.setSelectionRange){var b=jQuery(this.textbox);var a=b.val().length;this.textboxID=c[0];b.val(c[1]);this.selectRange(a,c[1].length)}};function SuggestionProvider(a){this.url=a;this.http=null}SuggestionProvider.prototype.requestSuggestions=function(c,b){var a;if(this.http!=null){this.http.abort();this.http=null}if(c.userText.length==0){c.hideSuggestions();return false}var d={text:c.userText,limit:8};this.http=jQuery.get(this.url,d,function(f){var e=new Array();jQuery("div#errorDialog").hide();jQuery("ul#errors").empty();if(jQuery(f).find("errors").length>0){jQuery(f).find("errors error").each(function(){jQuery("ul#errors").append("<li>"+message+"</li>");jQuery("div#errorDialog").show()});return false}jQuery(f).find("record").each(function(){a=jQuery(this);e.push([a.attr("id"),a.attr("name")])});c.autosuggest(e,b);return false})};