function Suggester() {this.Initialize=function(Options) {this.Options={TargetElement:'',DataSource:'',LettersToSuggestion:3,Suggestions:10,DivClass:'',ListItemClass:'',ListItemHover:'',ListItemCategory:'',Timeout:200,GameId:0} Object.extend(this.Options,Options||{});if(!$(this.Options.TargetElement)) {return;} this.ObserverId=Event.observe($(this.Options.TargetElement),'keydown',this.CheckStatus.bindAsEventListener(this),false);this.DivId='suggesterdiv';this.SuggestTimeout=0;if(!$(this.DivId)) {var Div=document.createElement('div');Div.style.position='absolute';Div.id=this.DivId;Div.style.display='none';Div.className=this.Options.DivClass;document.body.appendChild(Div);}} this.CheckStatus=function(evt) {KeyHit=false;switch(evt.keyCode) {case 40:this.SelectNextElement();return;break;case 38:this.SelectPreviousElement();return;break;case 13:this.EnterHandler();evt.cancelBubble=true;if(evt.stopPropagation)evt.stopPropagation();evt.stop();return;break;case 27:this.HidePane();return;break;case 37:return;break;case 39:return;break;} if(evt.keyCode==8) {if($(this.Options.TargetElement).value.replace(/\?/g,'').length>=this.Options.LettersToSuggestion+1) {clearTimeout(this.SuggestTimeout);this.SuggestTimeout=setTimeout(this.RequestData.bindAsEventListener(this),this.Options.Timeout);} else {this.HidePane();}} else {if($(this.Options.TargetElement).value.replace(/\?/g,'').length>=this.Options.LettersToSuggestion-1) {clearTimeout(this.SuggestTimeout);this.SuggestTimeout=setTimeout(this.RequestData.bindAsEventListener(this),this.Options.Timeout);} else {this.HidePane();}}} this.ShowPane=function() {var Coordinates=Position.cumulativeOffset($(this.Options.TargetElement));var TargetSize=Element.getDimensions($(this.Options.TargetElement)) $(this.DivId).style.left=Coordinates[0]+'px';$(this.DivId).style.top=Coordinates[1]+TargetSize.height+'px';$(this.DivId).style.width=TargetSize.width+'px';if($(this.DivId)) {$(this.DivId).style.display='block';} this.ClickObserver=Event.observe(document,'click',this.ClickHandler.bindAsEventListener(this),false);} this.HidePane=function() {clearTimeout(this.SuggestTimeout);Event.stopObserving(document,'click',this.ClickObserver);if($(this.DivId)) {$(this.DivId).style.display='none';} this.ClearSuggestions();} this.RequestData=function() {this.SuggestTimeout=0;var Keywords=$(this.Options.TargetElement).value.replace(/\?/g,'');var MyAjax=new Ajax.Request (this.Options.DataSource,{method:'post',parameters:'keyword='+Keywords+'&limit='+this.Options.Suggestions+'&game='+this.Options.GameId,onSuccess:this.Populate.bindAsEventListener('',this),onFailure:this.HandleError.bindAsEventListener()});} this.Populate=function(Response,Object) {var Result=Response.responseText.evalJSON();var SuggestionsLengthPlaygrounds=Result.PlaygroundsSuggestions.length;Object.ClearSuggestions();if((SuggestionsLengthPlaygrounds>0)) {var ServerText=document.createElement('span');var ListContainerPlaygrounds=document.createElement('ul');for(i=0;i0) {for(i=0;i0) {for(k=0;k0) {for(i=0;i0) {for(i=0;i=0)) {var Target=ListItems[i-1];} ListItems[i].className=this.Options.ListItemClass;} if(Target) {Target.className=this.Options.ListItemHover;} else {ListItems[ListItemsLength-1].className=this.Options.ListItemHover;}}} this.MouseOverItem=function(evt,Object) {var ListItems=$(Object.DivId).getElementsByTagName('li');var ListItemsLength=ListItems.length;if(ListItemsLength>0) {for(i=0;i