var TextSuggest=Class.create();TextSuggest.prototype={initialize:function(anId,url,options){this.id=anId;var browser=navigator.userAgent.toLowerCase();this.isIE=browser.indexOf("msie")!=-1;this.isOpera=browser.indexOf("opera")!=-1;this.textInput=$(this.id);this.suggestions=[];this.suggestions_cache=[];this.setOptions(options);this.url=url;this.ignoreHyphen=true;this.injectSuggestBehavior();},setOptions:function(options){this.options=Object.extend({suggestDivClassName:'suggestDiv',suggestionClassName:'suggestion',matchClassName:'match',matchTextWidth:true,selectionBgColor:'#3366cc',selectionColor:'#ffffff',platformColor:'#008000',platformIndex:1,matchAnywhere:false,ignoreCase:false,count:25,baseUri:'',isBeforeInput:false},options||{});},injectSuggestBehavior:function(){if(this.isIE)this.textInput.autocomplete="off";var keyEventHandler=new TextSuggestKeyHandler(this);new Insertion.After(this.textInput,'<input type="text" id="'+this.id+'_preventtsubmit'+'" style="display:none"/>');new Insertion.After(this.textInput,'<input type="hidden" name="'+this.id+'_hidden'+'" id="'+this.id+'_hidden'+'"/>');this.createSuggestionsDiv();},handleTextInput:function(){if(this.textInput.value==""){this.hideSuggestions();var previousRequest=this.lastRequestString;this.lastRequestString=this.fascii2ascii(this.textInput.value);}else if(this.textInput.value!=this.lastRequestString){this.doSuggestion();}},doSuggestion:function(){if(this.handlingRequest){this.pendingRequest=true;return;}var previousRequest=this.lastRequestString;this.lastRequestString=this.fascii2ascii(this.textInput.value);if(typeof(this.suggestions_cache[this.lastRequestString])=='object'){this.suggestions=this.suggestions_cache[this.lastRequestString];this.displaySuggestions();}else{this.sendRequestForSuggestions();}},displaySuggestions:function(){if(this.suggestions.length==0){this.hideSuggestions();$(this.id+"_hidden").value="";}else{this.updateSuggestionsDiv();this.showSuggestions();this.updateSelection(null);}if(this.pendingRequest){this.pendingRequest=false;this.lastRequestString=this.fascii2ascii(this.textInput.value);this.doSuggestion();}},sendRequestForSuggestions:function(){this.handlingRequest=true;this.callAjax();},callAjax:function(){var callParms=[];callParms.push(this.id+'_request');callParms.push('id='+this.id);callParms.push('count='+this.options.count);callParms.push('query='+encodeURIComponent(this.lastRequestString));callParms.push('match_anywhere='+this.options.matchAnywhere);callParms.push('ignore_case='+this.options.ignoreCase);var additionalParms=this.options.requestParameters||[];for(var i=0;i < additionalParms.length;i++)callParms.push(additionalParms[i]);var myAjax=new Ajax.Request(this.url,{method:'get',parameters:callParms.join('&'),onComplete:this.onRequestComplete.bind(this)});},onRequestComplete:function(request){var response=request.responseXML.getElementsByTagName("ajax-response");if(response==null||response.length!=1){return;}var xmlResponseElements=response[0].childNodes;for(var i=0;i < xmlResponseElements.length;i++){var responseElement=xmlResponseElements[i];if(responseElement.nodeType!=1)continue;var responseType=responseElement.getAttribute("type");var responseId=responseElement.getAttribute("id");if(responseType=="object")this.ajaxUpdate(responseElement);};},ajaxUpdate:function(ajaxResponse){this.handlingRequest=false;this.createSuggestions(ajaxResponse);this.displaySuggestions();},createSuggestions:function(ajaxResponse){this.suggestions=[];var entries=ajaxResponse.getElementsByTagName('entry');for(var i=0;i < entries.length;i++){var strText=this.getElementContent(entries[i].getElementsByTagName('text')[0]);var strValue=this.getElementContent(entries[i].getElementsByTagName('value')[0]);var strPlatform=this.getElementContent(entries[i].getElementsByTagName('platform')[0]);this.suggestions.push({text:strText,value:strValue,platform:strPlatform});}var key=this.lastRequestString;if(typeof(this.suggestions_cache[key])=='undefined'){this.suggestions_cache[key]=this.suggestions;}},positionSuggestionsDiv:function(){var textPos=this.getElementPosition(this.textInput);var divStyle=this.suggestionsDiv.style;divStyle.top=(textPos.y+this.textInput.offsetHeight)+"px";divStyle.left=textPos.x+"px";if(this.options.matchTextWidth){if(this.isIE){divStyle.width=this.textInput.offsetWidth+"px";}else{var padding=this.padding();divStyle.width=(this.textInput.offsetWidth-padding)+"px";var children=this.suggestionsDiv.childNodes;for(var i=0;i < children.length;i++){var c=children[i];c.style.width-=padding;}}}},showSuggestions:function(){var divStyle=this.suggestionsDiv.style;if(divStyle.display=='')return;this.positionSuggestionsDiv();divStyle.display='';},updateSelection:function(n){var tr=$(this.id+"_"+this.selectedIndex);if(tr){tr.style.backgroundColor="";tr.style.color="";var children=tr.childNodes;for(var i=0;i < children.length;i++){var c=children[i];c.style.backgroundColor="";if(i==this.options.platformIndex){c.style.color=this.options.platformColor;}else{c.style.color="";}}}this.selectedIndex=n;if(n==null)return;var tr=$(this.id+"_"+this.selectedIndex);if(tr){tr.style.backgroundColor=this.options.selectionBgColor;tr.style.color=this.options.selectionColor;var children=tr.childNodes;for(var i=0;i < children.length;i++){var c=children[i];c.style.backgroundColor=this.options.selectionBgColor;c.style.color=this.options.selectionColor;}}},releaseHandlingRequest:function(){if(this.handlingRequest==true){this.handlingRequest=false;this.pendingRequest=false;}},setInputFromSelection:function(do_search){if(do_search==undefined)do_search=true;var hiddenInput=$(this.id+"_hidden");if(this.selectedIndex!=undefined&&!isNaN(this.selectedIndex)){var suggestion=this.suggestions[ this.selectedIndex ];if(suggestion){this.textInput.value=suggestion.text;hiddenInput.value=suggestion.value;}}this.hideSuggestions();if(do_search==true){this.searchProduct();}},padding:function(){try{var child=this.suggestionsDiv.firstChild;var styleFunc=PositionUtil.getElementsStyleValue;var lPad=styleFunc(this.suggestionsDiv,"paddingLeft");var rPad=styleFunc(this.suggestionsDiv,"paddingRight");var lBorder=styleFunc(this.suggestionsDiv,"borderLeftWidth");var rBorder=styleFunc(this.suggestionsDiv,"borderRightWidth");var lcPad=styleFunc(child,"paddingLeft");var rcPad=styleFunc(child,"paddingRight");var lcBorder=styleFunc(child,"borderLeftWidth");var rcBorder=styleFunc(child,"borderRightWidth");lPad=this.getValueFromStyleRet(lPad);rPad=this.getValueFromStyleRet(rPad);lBorder=this.getValueFromStyleRet(lBorder);rBorder=this.getValueFromStyleRet(rBorder);lcPad=this.getValueFromStyleRet(lcPad);rcPad=this.getValueFromStyleRet(rcPad);lcBorder=this.getValueFromStyleRet(lcBorder);rcBorder=this.getValueFromStyleRet(rcBorder);return parseInt(lPad)+parseInt(rPad)+parseInt(lBorder)+parseInt(rBorder)+parseInt(lcPad)+parseInt(rcPad)+parseInt(lcBorder)+parseInt(rcBorder);}catch(e){return 0;}},getValueFromStyleRet:function(exp){var pos=0;if((pos=exp.indexOf('px'))!=-1){exp=exp.substring(0,pos);}return isNaN(exp)?0:exp;},hideSuggestions:function(){this.suggestionsDiv.style.display='none';},createSuggestionsDiv:function(){this.suggestionsDiv=document.createElement("div");this.suggestionsDiv.className=this.options.suggestDivClassName;var divStyle=this.suggestionsDiv.style;divStyle.display="none";this.textInput.parentNode.appendChild(this.suggestionsDiv);},updateSuggestionsDiv:function(){this.suggestionsDiv.innerHTML="";var suggestTable=this.createSuggestionTable();this.suggestionsDiv.appendChild(suggestTable);},createSuggestionTable:function(){var regExpFlags="";if(this.options.ignoreCase)regExpFlags='i';var startRegExp="^";if(this.options.matchAnywhere)startRegExp='';var regExp=new RegExp(startRegExp+this.lastRequestString,regExpFlags);var suggestionTable=document.createElement("table");suggestionTable.className='suggestion';suggestionTable.onmouseout=this.mouseoutHandler.bindAsEventListener(this);var suggestionTbody=document.createElement("tbody");suggestionTbody.style.width='100%';suggestionTbody.style.margin='0px';suggestionTable.appendChild(suggestionTbody);for(var i=0;i < this.suggestions.length;i++){suggestionTbody.appendChild(this.createSuggestionTr(i,regExp));}return suggestionTable;},createSuggestionTr:function(n,regExp){var suggestion=this.suggestions[n];var suggestionTr=document.createElement("tr");suggestionTr.style.width='100%';suggestionTr.style.margin='0px';suggestionTr.id=this.id+"_"+n;var spaceTdLeft=document.createElement("td");spaceTdLeft.style.width='5px';suggestionTr.appendChild(spaceTdLeft);var suggestionTd=document.createElement("td");suggestionTd.className='suggestion_platform';suggestionTd.id=this.id+"_td2_"+n;suggestionTd.style.color=this.options.platformColor;suggestionTd.onmouseover=this.mouseoverHandler.bindAsEventListener(this);suggestionTd.onclick=this.itemClickHandler.bindAsEventListener(this);suggestionTd.appendChild(document.createTextNode(suggestion.platform));suggestionTr.appendChild(suggestionTd);var spaceTdMid=document.createElement("td");spaceTdMid.style.width='5px';suggestionTr.appendChild(spaceTdMid);var suggestionTd=document.createElement("td");suggestionTd.className='suggestion';suggestionTd.id=this.id+"_td1_"+n;suggestionTd.onmouseover=this.mouseoverHandler.bindAsEventListener(this);suggestionTd.onclick=this.itemClickHandler.bindAsEventListener(this);suggestionTr.appendChild(suggestionTd);var textValues=this.splitTextValues(suggestion.text,this.lastRequestString.length,regExp);var textMatchSpan=document.createElement("span");textMatchSpan.id=this.id+"_match_"+n;textMatchSpan.className=this.options.matchClassName;textMatchSpan.appendChild(document.createTextNode(textValues.mid));suggestionTd.appendChild(document.createTextNode(textValues.start));suggestionTd.appendChild(textMatchSpan);suggestionTd.appendChild(document.createTextNode(textValues.end));var spaceTdRight=document.createElement("td");spaceTdRight.style.width='5px';suggestionTr.appendChild(spaceTdRight);return suggestionTr;},mouseoverHandler:function(e){var src=e.srcElement?e.srcElement:e.target;var index=parseInt(src.id.substring(src.id.lastIndexOf('_')+1));this.updateSelection(index);},mouseoutHandler:function(e){this.updateSelection(null);},itemClickHandler:function(e){this.hideSuggestions();this.textInput.focus();},splitTextValues:function(text,len,regExp){var text_tmp='';if(this.ignoreHyphen){text_tmp=text.replace('-',' ');}else{text_tmp=text;}var startPos=text_tmp.search(regExp);var matchText=text.substring(startPos,startPos+len);var startText=startPos==0?"":text.substring(0,startPos);var endText=text.substring(startPos+len);return{start:startText,mid:matchText,end:endText};},getElementContent:function(element){if(element.firstChild){return element.firstChild.data;}return '';},moveSelectionUp:function(){if(this.selectedIndex===null){this.updateSelection(this.suggestions.length-1);}else if(this.selectedIndex===0){this.updateSelection(null);}else if(this.selectedIndex > 0){this.updateSelection(this.selectedIndex-1);}},moveSelectionDown:function(){if(this.selectedIndex===null){this.updateSelection(0);}else if(this.selectedIndex===(this.suggestions.length-1)){this.updateSelection(null);}else if(this.selectedIndex <=(this.suggestions.length-1)){this.updateSelection(this.selectedIndex+1);}},getElementPosition:function(elm){var x=0;var y=0;var theElm=elm;if(!theElm)return;while(theElm!=null){x+=theElm.offsetLeft;y+=theElm.offsetTop;theElm=theElm.offsetParent;}return{x:x,y:y};},fascii2ascii:(function(){var cclass='['+String.fromCharCode(0xff01)+'-'+String.fromCharCode(0xff5e)+']';var re_fullwidth=new RegExp(cclass,'g');var substitution=function(m){return String.fromCharCode(m.charCodeAt(0)-0xfee0);};return function(s){var result_str=s.replace(re_fullwidth,substitution);if(this.ignoreHyphen){result_str=result_str.replace('-',' ');}return result_str;};})(),searchProduct:function(){document.location.href=this.options.baseUri+'advanced_search_result.php?keywords='+encodeURIComponent(this.textInput.value)+'&enc=utf-8'+'&exe_type=top_s';}};var TextSuggestKeyHandler=Class.create();TextSuggestKeyHandler.prototype={initialize:function(textSuggest){this.textSuggest=textSuggest;this.input=this.textSuggest.textInput;this.addKeyHandling();},addKeyHandling:function(){this.input.onkeydown=this.keydownHandler.bindAsEventListener(this);this.input.onkeyup=this.keyupHandler.bindAsEventListener(this);this.input.onblur=this.onblurHandler.bindAsEventListener(this);this.input.onfocus=this.onfocusHandler.bindAsEventListener(this);if(this.textSuggest.isOpera)this.input.onkeypress=this.keyupHandler.bindAsEventListener(this);},keydownHandler:function(e){var upArrow=38;var downArrow=40;if(e.keyCode==upArrow){this.textSuggest.moveSelectionUp();setTimeout(this.moveCaretToEnd.bind(this),1);}else if(e.keyCode==downArrow){this.textSuggest.moveSelectionDown();}},keyupHandler:function(e){if(this.input.length==0&&!this.textSuggest.isOpera)this.textSuggest.hideSuggestions();if(!this.handledSpecialKeys(e))this.textSuggest.handleTextInput();},handledSpecialKeys:function(e){var enterKey=13;var upArrow=38;var downArrow=40;var escKey=27;if(e.keyCode==upArrow||e.keyCode==downArrow){return true;}else if(e.keyCode==escKey){this.textSuggest.hideSuggestions();}else if(e.keyCode==enterKey){var suggestDisplay=this.textSuggest.suggestionsDiv.style.display;this.textSuggest.setInputFromSelection();if(suggestDisplay=='none'){this.textSuggest.searchProduct();}return true;}return false;},moveCaretToEnd:function(){var pos=this.input.value.length;if(this.input.setSelectionRange){this.input.setSelectionRange(pos,pos);}else if(this.input.createTextRange){var m=this.input.createTextRange();m.moveStart('character',pos);m.collapse();m.select();}},onblurHandler:function(e){if(this.textSuggest.suggestionsDiv.style.display==''){this.textSuggest.setInputFromSelection(true);}this.textSuggest.hideSuggestions();},onfocusHandler:function(e){this.clearDefaultMessage();},clearDefaultMessage:function(){if(this.textSuggest.options.isBeforeInput==true){this.input.value='';this.input.style.color='';this.textSuggest.options.isBeforeInput=false;}}};