var Suggestion=Class.create();Suggestion.prototype={initialize:function(h,i,j,a,k,e,c,b,g,d,f){this.inputId=h;this.formId=i;this.suggestionId=j;this.suggestionTitleTag=a;this.suggestionTitle=k;this.suggestionInsertionId=e;this.suggestionLoadingImg=c;this.suggestionNextImg=g;this.suggestionPreviousImg=b;this.requestURI=d;this.requestMethod=f;this._processInitialize()},adjustSuggestion:function(c,b,a){if(this.client.isWinOS&&this.client.isIE){c+=0;b+=0;a+=0}else{if(this.client.isWinOS&&this.client.isFirefox){c+=0;b+=0;a+=0}else{if(this.client.isWinOS&&this.client.isSafari){c+=0;b+=0;a+=0}else{if(this.client.isWinOS&&this.client.isOpera){c+=0;b+=0;a+=0}else{if(this.client.isMacOS&&this.client.isFirefox){c+=0;b+=0;a+=0}else{if(this.client.isMacOS&&this.client.isSafari){c+=0;b+=0;a+=0}else{if(this.client.isLinuxOS&&this.client.isFirefox){c+=0;b+=0;a+=0}}}}}}}return"{left: "+c+", top: "+b+", width: "+a+"}"},isExecutable:function(){if(this.client.isWinOS&&(this.client.isIE||this.client.isFirefox||this.client.isSafari||this.client.isOpera)){return true}else{if(this.client.isMacOS&&(this.client.isFirefox||this.client.isSafari)){return true}else{if(this.client.isLinuxOS&&this.client.isFirefox){return true}else{return false}}}},_processInitialize:function(){this._startRow=0;this._previousOrNext=null;this.client=new ClientEnvironment();this._shim="shim";this._isExecutableRequest=false;this._getInputStringExecuter=null;this._checkTimingOfCreateRequestExecuter=null;this._timeIntervalOfGetInputString="0.3";this._timeIntervalOfCheckTimingOfCreateRequest="0.1";this._newInputString=null;this._oldInputString=null;if(this.isExecutable()){var a=$(this.inputId);if(a){a.writeAttribute("autocomplete","off")}else{throw"Error: Not found the suggestion input tag."}Event.observe(document,"click",this._processDocumentOnClick.bind(this));Event.observe(this.inputId,"keypress",this._processInputOnKeyPress.bind(this));Event.observe(this.inputId,"keyup",this._processInputOnKeyUp.bind(this));Event.observe(this.inputId,"focus",this._startGetInputString.bind(this));Event.observe(this.inputId,"blur",this._stopGetInputString.bind(this));this._startCheckTimingOfCreateRequest()}},_processDocumentOnClick:function(c){var b=Event.findElement(c,"input#"+this.inputId);if(b){if(this._newInputString){var a=$(this.suggestionId);if(!a||a.visible()===false){this._enableExecutableRequest()}}}else{var a=Event.findElement(c,"div#"+this.suggestionId);if(a){var d=a.select('li[class="keywordFocus"]');if(d&&d.length!==0){var e=d[0];var f=e.getElementsByTagName("span");if(f&&f.length!==0){this._reloadSuggestion(e,"previous")}else{var g=e.getElementsByTagName("div");if(g&&g.length!==0){this._reloadSuggestion(e,"next")}else{this._submitKeyword(e)}}}}else{var a=$(this.suggestionId);if(a){this._deleteSuggestion()}}}},_enableExecutableRequest:function(){this._isExecutableRequest=true},_processInputOnKeyPress:function(a){if(a.keyCode==Event.KEY_RETURN){Event.stop(a)}},_processInputOnKeyUp:function(b){if(b.keyCode==Event.KEY_DOWN){var f=$(this.suggestionId);if(f&&f.visible()===true){var e=f.select('li[class="keywordFocus"]');if(e&&e.length!==0){var d=e[0];var i=d.next("li");if(i){this._focusKeyword(i)}else{var h=d.getElementsByTagName("div");if(h&&h.length!==0){this._reloadSuggestion(d,"next")}}}else{var g=f.select('li[class="keywordUnFocus"]');if(g&&g.length!==0){this._focusKeyword(g.first())}}}else{if($F(this.inputId).strip()){this._enableExecutableRequest()}}}else{if(b.keyCode==Event.KEY_UP){var f=$(this.suggestionId);if(f&&f.visible()===true){var e=f.select('li[class="keywordFocus"]');if(e&&e.length!==0){var d=e[0];var c=d.previous("li");if(c){this._focusKeyword(c)}else{var a=d.getElementsByTagName("span");if(a&&a.length!==0){this._reloadSuggestion(d,"previous")}else{this._deleteSuggestion()}}}}}else{if(b.keyCode==Event.KEY_RETURN){var f=$(this.suggestionId);if(f&&f.visible()===true){var e=f.select('li[class="keywordFocus"]');if(e&&e.length!==0){var d=e[0];var a=d.getElementsByTagName("span");if(a&&a.length!==0){this._reloadSuggestion(d,"previous")}else{var h=d.getElementsByTagName("div");if(h&&h.length!==0){this._reloadSuggestion(d,"next")}else{this._submitKeyword(d)}}}}else{$(this.formId).submit()}}else{if(b.keyCode==Event.KEY_ESC){this._deleteSuggestion()}}}}},_processSuggestionOnMouseOver:function(a){var b=Event.findElement(a,"li");if(b&&(b.readAttribute("class")==="keywordUnFocus"||b.readAttribute("class")==="keywordFocus")){this._focusKeyword(b)}},_processSuggestionOnMouseOut:function(b){var a=Event.findElement(b,"li");if(a&&(a.readAttribute("class")==="keywordUnFocus"||a.readAttribute("class")==="keywordFocus")){this._unfocusKeyword(a)}},_startGetInputString:function(){if(this._getInputStringExecuter){this._getInputStringExecuter.stop()}this._getInputStringExecuter=new PeriodicalExecuter(function(){this._newInputString=$F(this.inputId).strip().toLowerCase();if(this._newInputString){var a=false;if(!this._oldInputString&&this._newInputString.length>0){a=true}else{if(this._oldInputString&&this._newInputString!=this._oldInputString){a=true}}if(a){this._enableExecutableRequest()}}else{this._oldInputString=null;this._deleteSuggestion()}}.bind(this),this._timeIntervalOfGetInputString)},_stopGetInputString:function(){if(this._getInputStringExecuter){this._getInputStringExecuter.stop()}},_startCheckTimingOfCreateRequest:function(){if(this._checkTimingOfCreateRequestExecuter){this._checkTimingOfCreateRequestExecuter.stop()}this._checkTimingOfCreateRequestExecuter=new PeriodicalExecuter(function(){if(this._isExecutableRequest){this._isExecutableRequest=false;this._oldInputString=this._newInputString;this._createRequest()}}.bind(this),this._timeIntervalOfCheckTimingOfCreateRequest)},_createRequest:function(){var a=this.createParameter(this._newInputString);a+="&startRow="+encodeURIComponent(this._startRow);if(this._previousOrNext){a+="&nextOrPrevious="+encodeURIComponent(this._previousOrNext)}a+="&suggestionId="+encodeURIComponent(this.suggestionId);this._startRow=0;this._previousOrNext=null;new Ajax.Request(this.requestURI,{method:this.requestMethod,parameters:a,onCreate:this._processLoading.bind(this),onFailure:this._processFailure.bind(this),onSuccess:this._processSuccess.bind(this),onException:this._processException.bind(this)})},createParameter:function(b){var a=new String;a+="&name="+encodeURIComponent(b);return a},_processLoading:function(){var b=new Element("div",{id:this.suggestionId});var d=new Element(this.suggestionTitleTag).update(this.suggestionTitle);var c=new Element("ul");var a=new Element("li",{"class":"suggestionLoading"}).update("Now Loading...");Element.insert(c,{top:a});Element.insert(b,{top:d});Element.insert(b,{bottom:c});if($(this.suggestionId)){Element.replace(this.suggestionId,b)}else{Element.insert(this.suggestionInsertionId,{bottom:b})}this._setStyleSuggestion()},_processFailure:function(c){var b=new Element("div",{id:this.suggestionId});var e=new Element(this.suggestionTitleTag).update(this.suggestionTitle);var d=new Element("ul");var a=new Element("li",{"class":"suggestionError"}).update("A error occurred in getting data.");Element.insert(d,{top:a});Element.insert(b,{top:e});Element.insert(b,{bottom:d});if($(this.suggestionId)){Element.replace(this.suggestionId,b)}else{Element.insert(this.suggestionInsertionId,{bottom:b})}this._setStyleSuggestion()},_processSuccess:function(c){var a=c.responseText;var b=a.match(/<p>(.*)<\/p>/);a=a.replace(/<p>.*<\/p>/,"");if(b[1].unescapeHTML().toLowerCase()===$F(this.inputId).strip().toLowerCase()){if($(this.suggestionId)){Element.replace(this.suggestionId,a)}else{Element.insert(this.suggestionInsertionId,{bottom:a})}this._setStyleSuggestion()}},_processException:function(a,b){this._processFailure()},_setStyleSuggestion:function(){var e=$(this.suggestionId);Element.setStyle(e,{backgroundColor:"#ffffff",borderBottom:"2px solid #999999",borderLeft:"1px solid #cccccc",borderRight:"2px solid #999999",borderTop:"1px solid #cccccc",margin:"0px",padding:"0px",position:"absolute",zIndex:"10"});var g=$(this.inputId);var j=g.positionedOffset();var c=j[0];var f=j[1]+g.getHeight();var b=g.getWidth();var d=this.adjustSuggestion(c,f,b).evalJSON();Element.setStyle(e,{left:d.left+"px",top:d.top+"px",width:d.width+"px"});var a=e.getElementsByTagName(this.suggestionTitleTag);Element.setStyle(a[0],{display:"none"});var h=$A(e.getElementsByTagName("ul"));Element.setStyle(h[0],{margin:"0px",padding:"0px"});var i=$A(e.getElementsByTagName("li"));i.each(function(k){Element.setStyle(k,{fontSize:"1em",lineHeight:"1.6em",listStyle:"none",margin:"1px",overflow:"hidden",padding:"0px 3px 0px 3px",textAlign:"left"});if(k.readAttribute("class")==="keywordUnFocus"){Element.setStyle(k,{backgroundColor:"#ffffff",border:"1px solid #ffffff",cursor:"pointer"})}else{if(k.readAttribute("class")==="keywordFocus"){Element.setStyle(k,{backgroundColor:"#fceee4",border:"1px solid #ff6600",cursor:"pointer"})}else{if(k.readAttribute("class")==="suggestionLoading"){Element.setStyle(k,{backgroundColor:"#ffffff",backgroundImage:"url("+this.suggestionLoadingImg+")",backgroundPosition:"center left",backgroundRepeat:"no-repeat",border:"1px solid #ffffff",paddingLeft:"20px"})}else{if(k.readAttribute("class")==="suggestionError"){Element.setStyle(k,{backgroundColor:"#ffffff",color:"#ff0000",backgroundPosition:"center left",backgroundRepeat:"no-repeat",border:"1px solid #ffffff"})}else{Element.setStyle(k,{backgroundColor:"#ffffff",border:"1px solid #ffffff"})}}}}var l=k.getElementsByTagName("span");if(l&&l.length!==0){Element.setStyle(k,{backgroundImage:"url("+this.suggestionPreviousImg+")",backgroundPosition:"center left",backgroundRepeat:"no-repeat",paddingLeft:"17px"})}var m=k.getElementsByTagName("div");if(m&&m.length!==0){Element.setStyle(k,{backgroundImage:"url("+this.suggestionNextImg+")",backgroundPosition:"center left",backgroundRepeat:"no-repeat",paddingLeft:"17px"})}},this);Event.observe(this.suggestionId,"mouseover",this._processSuggestionOnMouseOver.bind(this));Event.observe(this.suggestionId,"mouseout",this._processSuggestionOnMouseOut.bind(this));if(this.client.getIEVersion()>=5&&this.client.getIEVersion()<=6){this._insertShim()}},_insertShim:function(){var b=$(this.suggestionId);var g=b.positionedOffset();var f=g[0];var e=g[1];var a=b.getHeight();var d=b.getWidth();var c=new Element("iframe",{frameborder:"0",id:this._shim});Element.setStyle(c,{display:"block",height:a+"px",left:f+"px",position:"absolute",top:e+"px",width:d+"px",zIndex:"5"});if($(this._shim)){Element.replace(this._shim,c)}else{Element.insert(this.suggestionInsertionId,{bottom:c})}},_deleteSuggestion:function(){var a=$(this.suggestionId);if(a){this._isExecutableRequest=false;Event.stopObserving(this.suggestionId,"mouseover",this._processSuggestionOnMouseOver.bind(this));Event.stopObserving(this.suggestionId,"mouseout",this._processSuggestionOnMouseOut.bind(this));Element.remove(a);var b=$(this._shim);if(b){Element.remove(b)}}},_focusKeyword:function(b){var a=$A(b.up(1).getElementsByTagName("li"));a.each(function(c){this._clearAndSetClassName(c,"keywordUnFocus");Element.setStyle(c,{backgroundColor:"#ffffff",border:"1px solid #ffffff"})},this);this._clearAndSetClassName(b,"keywordFocus");Element.setStyle(b,{backgroundColor:"#fceee4",border:"1px solid #ff6600"})},_unfocusKeyword:function(a){this._clearAndSetClassName(a,"keywordUnFocus");Element.setStyle(a,{backgroundColor:"#ffffff",border:"1px solid #ffffff"})},_clearAndSetClassName:function(c,b){var a=Element.classNames(c);if(a){a.each(function(d){Element.removeClassName(c,d)})}Element.addClassName(c,b)},_submitKeyword:function(c){var b=$(this.inputId);var a=new String(c.innerHTML).stripTags();b.value=this._convertFromCharacterEntityReference(a);this._oldInputString=$F(b).strip().toLowerCase();this._deleteSuggestion()},_convertFromCharacterEntityReference:function(a){a=a.replace(/&quot;/ig,'"');a=a.replace(/&apos;/ig,"'");a=a.replace(/&lt;/ig,"<");a=a.replace(/&gt;/ig,">");a=a.replace(/&amp;/ig,"&");return a},_reloadSuggestion:function(d,a){var b=0;var f=d.childElements();var e=f.first().readAttribute("class");if(e.include("next")){var c=e.match(/^next\((\d+)\)$/);b=c[1]}else{if(e.include("previous")){var c=e.match(/^previous\((\d+)\)$/);b=c[1]}}this._previousOrNext=a;this._startRow=b;this._enableExecutableRequest()}};