var Fredhopper={};Fredhopper.Autocompleter=Class.create();Object.extend(Object.extend(Fredhopper.Autocompleter.prototype,Ajax.Autocompleter.prototype),{initialize:function(C,D,A,B){this.baseInitialize(C,D,B);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=A;this.entries=[];this.hidesuggestions=false;this.onKeyEvent="keypress";if(navigator.appVersion.indexOf("MSIE")>0){Event.stopObserving(this.element,this.onKeyEvent);this.onKeyEvent="keydown";Event.observe(this.element,this.onKeyEvent,this.onKeyPress.bindAsEventListener(this));}},disable:function(){this.hide();Event.stopObserving(this.element,"blur");Event.stopObserving(this.element,this.onKeyEvent);},enable:function(){Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));Event.observe(this.element,this.onKeyEvent,this.onKeyPress.bindAsEventListener(this));},getUpdatedChoices:function(){var A=encodeURIComponent(this.options.paramName)+"="+this.getToken();this.options.parameters=this.options.callback?this.options.callback(this.element,A):A;if(this.options.defaultParams){this.options.parameters+="&"+this.options.defaultParams;}new Ajax.Request(this.url,this.options);},onComplete:function(A){this.updateChoices(A.responseText);initSuggestProductsSwitch();},getEntry:function(A){return this.entries[A];},updateChoices:function(choices){if(!this.changed&&this.hasFocus){try{var result=eval("("+choices+")");var mainTemplate=new Template($("main_template").value);var groupSeparator=$("group_separator_template").value;var suggestHtml="";var first=true;this.entryCount=0;var self=this;result.suggestionGroups.each(function(suggestionGroup,index){if(suggestionGroup.suggestions.length<=0){return ;}var indexName=suggestionGroup.indexName;var indexTitle=suggestionGroup.indexTitle;if(indexTitle.match(".idx$")==".idx"){indexTitle=indexTitle.substr(0,indexTitle.length-4);}var data={"indexName":indexName,"indexTitle":indexTitle};if(indexName===" "){indexName="searchterm";}else{indexName=indexName.gsub(" ","_");}var isDefaultTemplate=false;var templateElement=$(indexName+"_template");if(!templateElement){templateElement=$("default_template");isDefaultTemplate=true;}if(!templateElement){logError("Cannot find a template for the index file with name '"+indexName+"'. Ignoring...");logInfo("Either provide a template with name '"+indexName+"_template' or at least 'default_template'");return ;}else{if(isDefaultTemplate){logInfo("Cannot find a template for the index file with name '"+indexName+"'. Will use the default one ('default_template').");}}var isDefaultItemTemplate=false;var templateItemElement=$(indexName+"_item_template");if(!templateItemElement){templateItemElement=$("default_item_template");isDefaultItemTemplate=true;}if(!templateItemElement){logError("Cannot find a template for the items of index file with name '"+indexName+"'. Ignoring...");logInfo("Either provide a template with name '"+indexName+"_item_template' or at least 'default_item_template'");return ;}else{if(isDefaultItemTemplate){logInfo("Cannot find a template for the items of index file with name '"+indexName+"'. Will use the default one ('default_item_template').");}}var suggestionGroupTemplate=new Template(templateElement.value);var suggestionItemTemplate=new Template(templateItemElement.value);if(first){first=false;}else{suggestHtml+=groupSeparator;}function extendTemplate(suggestionItemTemplate,suggestion){var unknownItemFieldTemplate=$("unknown_item_field_template");if(!unknownItemFieldTemplate){logWarning("Could not find a template for the item fields which have no placeholders. Going to ignore unknown fields...");logInfo("Please provide a template with id 'unknown_item_field_template'.");return suggestionItemTemplate;}var placeholders=[];suggestionItemTemplate.template.scan(/#\{(\w+)\}/,function(placeholder){placeholders.push(placeholder[1]);});var additionalTemplate="";var oldSuggestion=new Hash(suggestion).toJSON().evalJSON();var counter=0;for(var field in oldSuggestion){if(placeholders.indexOf(field)===-1){logWarning("There is no a placeholder for a field with name '"+field+"'. Going to add an auto-generated one...");}}if(additionalTemplate!==""){additionalTemplate+="</div>";}var result=(additionalTemplate!=="")?new Template(suggestionItemTemplate.template+additionalTemplate):suggestionItemTemplate;return result;}function modifySuggestionToDefault(defaultItemTemplate,suggestion){var defaultItem=$("default_item_template");if(!defaultItem){logWarning("There is no a template for the default item!");return"";}var fieldName2TemplateMap={"searchterm":"searchterm_item_container_template","fhLocation":"fhLocation_item_container_template","secondId":"Suggested_Products_item_template"};var oldSuggestion=new Hash(suggestion).toJSON().evalJSON();var defaultItemData={};var alreadyRenderedFields=[];function loadDefaultTemplate(fieldName){var result="";for(var key in oldSuggestion){if(key.startsWith(fieldName+"_")){var idxOfUnderscore=key.indexOf("_");var linkTitleField=key.substr(idxOfUnderscore+1);suggestion[fieldName+"LinkTitle"]=suggestion[linkTitleField];alreadyRenderedFields.push(linkTitleField);suggestion[fieldName]=suggestion[key];alreadyRenderedFields.push(fieldName);alreadyRenderedFields.push(key);delete suggestion[key];}else{if(fieldName===key){suggestion[fieldName+"LinkTitle"]=suggestion[fieldName].truncate(20);}else{continue;}}logDebug('Going to add a container for field with name: "'+fieldName+'"');var fieldContainer=$(fieldName2TemplateMap[fieldName]);if(fieldContainer){var fieldContainerTemplate=new Template(fieldContainer.value);result=fieldContainerTemplate.evaluate(suggestion);}delete oldSuggestion[key];}return result;}for(var fieldName in fieldName2TemplateMap){defaultItemData[fieldName+"_item_container"]=loadDefaultTemplate(fieldName);}if(oldSuggestion.nrResults){logDebug('Going to add a container for field with name "nrResults"');var nrResultsContainer=$("nrResults_container_template");if(nrResultsContainer){var nrResultsContainerTemplate=new Template(nrResultsContainer.value);defaultItemData["nrResults_container"]=nrResultsContainerTemplate.evaluate(suggestion);alreadyRenderedFields.push("nrResults");}delete oldSuggestion["nrResults"];}var unknownItemFieldTemplate=$("unknown_item_field_template");var imageItemFieldTemplate=$("image_item_container_template");if(unknownItemFieldTemplate){var unknownItemTemplate="";var imageItemTemplate="";var isImageRegex=/\.(jpg|png|gif)$/i;var counter=0;for(var key in oldSuggestion){if(alreadyRenderedFields.indexOf(key)>-1){continue;}logDebug('Going to render the value of key: "'+key+'"');var fieldValue="value_"+counter;var itemFieldTemplate;if(suggestion[key].search(isImageRegex)>-1){suggestion[fieldValue]=suggestion[key];itemFieldTemplate=imageItemFieldTemplate.value;}else{suggestion[fieldValue]=forceWrap(""+suggestion[key],6);itemFieldTemplate=unknownItemFieldTemplate.value;}itemFieldTemplate=itemFieldTemplate.sub("___VALUE___",fieldValue);unknownItemTemplate+=itemFieldTemplate;delete suggestion[key];counter++;}var unknownItemContent=new Template(unknownItemTemplate).evaluate(suggestion);defaultItemData["unknown_fields_container"]=unknownItemContent;}var defaultItemContent=new Template(defaultItem.value).evaluate(defaultItemData);return defaultItemContent;}var suggestionItems="";suggestionGroup.suggestions.each(function(suggestion,itemIndex){if(isDefaultItemTemplate){suggestionItems+=modifySuggestionToDefault(suggestionItemTemplate,suggestion);}else{if(Fredhopper.Autocompleter.Wrapped&&Fredhopper.Autocompleter.Wrapped[indexName]){Fredhopper.Autocompleter.Wrapped[indexName].each(function(toWrap){if(suggestion[toWrap]){var wrapped=toWrap+"_wrapped";suggestion[wrapped]=self.forceWrap(suggestion[toWrap],6);}});}if(Fredhopper.Autocompleter.ToRemove&&Fredhopper.Autocompleter.ToRemove[indexName]){Fredhopper.Autocompleter.ToRemove[indexName].each(function(toRemove){if(suggestion[toRemove]){delete suggestion[toRemove];}});}var extendedSuggestionItemTemplate=extendTemplate(suggestionItemTemplate,suggestion);suggestion.index=itemIndex;suggestionItems+=extendedSuggestionItemTemplate.evaluate(suggestion);}});data.suggestionItems=suggestionItems;suggestHtml+=suggestionGroupTemplate.evaluate(data);});this.update.innerHTML=mainTemplate.evaluate({"suggestionsHtml":suggestHtml});this.update.innerHTML.evalScripts();if(this.hidesuggestions){this.hideSuggestions();}Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());this.entries=document.getElementsByClassName("suggestoption",this.update);this.entryCount=this.entries.length;for(var i=0;i<this.entryCount;i++){var entry=this.getEntry(i);entry.autocompleteIndex=i;this.addObservers(entry);}this.stopIndicator();this.index=-1;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide();}else{this.render();}}catch(e){logError(e);}}},showSuggestions:function(){document.getElementsByClassName("suggestions")[0].show();autocompleter.hidesuggestions=false;autocompleter.update.removeClassName("hidesuggestions");autocompleter.element.focus();},hideSuggestions:function(){document.getElementsByClassName("suggestions")[0].hide();autocompleter.hidesuggestions=true;autocompleter.update.addClassName("hidesuggestions");autocompleter.element.focus();},forceWrap:function(E,B){var A="";if(E===null||E.length<=0){return A;}for(var C=0,D=0;C<E.length;C++){var F=E.charAt(C);D=(F<=" ")?0:D+1;if(D>B){A+='<span style="font-size:0px;"> </span>';D=0;}A+=F;}return A;}});function switchSuggestedProducts(){var A=document.getElementById("suggestedProducts");var C=A.style.display;var B=document.getElementById("switchSuggestedProductsId");if(C==="none"){A.style.display="";B.innerHTML="Hide";setSuggestProductsCookie("true");}else{A.style.display="none";B.innerHTML="Show";setSuggestProductsCookie("false");}disableHideOnClick();}function setSuggestProductsCookie(A){setCookie("suggestProducts",A,60*60*24*30*12,"/");}function getSuggestProductsCookie(){var B=getCookie("suggestProducts");var A="true";if(B&&B==="false"){A="false";}return A;}function initSuggestProductsSwitch(){var C=getSuggestProductsCookie();if(C==="false"){var A=document.getElementById("suggestedProducts");var B=document.getElementById("switchSuggestedProductsId");A.style.display="none";B.innerHTML='&gt;&gt;<span onclick="switchSuggestedProduct();" class="off">Afficher la suggestion</span>';}}function disableHideOnClick(){if(autocompleter){autocompleter.skipNextHide=true;autocompleter.element.focus();}}if(!window.console){var levels=["error","warn","info","log"];window.console={};levels.each(function(A){window.console[A]=function(){};});}function logError(A){if(!A){return ;}var B="";if(A.fileName){B+="File: "+A.fileName;}if(A.lineNumber){B+=", line: "+A.lineNumber;}if(A.message){B+=", message: "+A.message;}if(B===""){B=A;}console.error("Fredhopper.Suggest: "+B);}function logInfo(A){console.info("Fredhopper.Suggest: "+A);}function logWarning(A){console.warn("Fredhopper.Suggest: "+A);}function logDebug(A){console.log("Fredhopper.Suggest: "+A);}
