function FFSuggest() { var pRequest; var pLayer; var pDebug = false; var pInstanceName = ''; var pSearchURL = ''; var pQueryParamName = ''; var pFormname = ''; var pLayerName = ''; var pQueryInput; var pSuggest = new Array(); var pLastQuery; var pCurrentSelection = 0; var submitted = false; var pShowImages = false; // ITB: Text für weitere Suchergebnisse (mehrsprachig) var pMoreText = ""; var pSuggestImageClass = 'suggestImage'; var pSuggestQueryClass = 'suggestTextQuery'; var pSuggestTypeClass = 'suggestTextType'; var pSuggestAmountClass = 'suggestTextAmount'; var pSuggestQueryTypedClass = 'suggestTextQueryTyped'; var pSuggestFooterClass = 'suggestFooter'; var pSuggestHeaderClass = 'suggestHeader'; var pSuggestRowClass = 'suggestRow'; var pSuggestHighlightClass = 'suggestHighlight'; this.init = function(searchURL, formname, queryParamName, divLayername, instanceName, debugMode, channelParamName, channel, showImages, moreText, lang) { pSearchURL = searchURL; pFormname = formname; pQueryParamName = queryParamName; pChannelParamName = channelParamName; pChannel = channel; pLayerName = divLayername; pInstanceName = instanceName; pDebug = debugMode; pShowImages = showImages; // ITB: Text für weitere Suchergebnisse (mehrsprachig) pMoreText = moreText; pLang = lang; if (pSearchURL == '') { if (pDebug) alert('no searchurl defined'); return null; } else if (pInstanceName == '') { if (pDebug) alert('no instancename defined'); return null; } else if (pFormname == '') { if (pDebug) alert('no formname defined'); return null; } else if (pQueryParamName == '') { if (pDebug) alert('no queryparamname defined'); return null; } else if (pLayerName == '') { if (pDebug) alert('need a layer for output'); } pQueryInput = document[pFormname][pQueryParamName]; pQueryInput.onkeyup = handleKeyPress; pQueryInput.onkeydown = handleKeyPress; pQueryInput.onfocus = showLayer; pQueryInput.onblur = hideLayer; document[pFormname].onsubmit = handleSubmit; } function handleSubmit() { //ITB Direktbestellung if (pFormname == "search_word_inc_directorder") { // if (pSuggest[pCurrentSelection]) { // document[pFormname][pQueryParamName].value = pSuggest[pCurrentSelection].split('###')[0]; // hideLayer(); // $('#MengeWert').focus(); // } return false; } else { submitted = true; if (pSuggest[pCurrentSelection] != undefined) { document[pFormname][pQueryParamName].value = pSuggest[pCurrentSelection].split('###')[0]; createQueryFromSuggestField(); } } } this.handleClick = function() { if (pSuggest[pCurrentSelection] != undefined) { document[pFormname][pQueryParamName].value = pSuggest[pCurrentSelection].split('###')[0]; createQueryFromSuggestField(); //ITB Direktbestellung if (pFormname == "search_word_inc_directorder") { hideLayer(); getContent(SHOPROOT); return false; } document[pFormname].submit(); //ITB Direktbestellung // if (pFormname == "search_word_inc_directorder") { // document[pFormname][pQueryParamName].blur(); // } } // ITB: Weitere Suchergebnisse else { document[pFormname].submit(); } } this.handleMouseOver = function(pos) { var tblCell = getTableCell(pos); unmarkAll(); if (tblCell != null) { highlightSuggest(tblCell); pCurrentSelection = pos; } } this.handleMouseOut = function(pos) { var tblCell = getTableCell(pos); if (tblCell != null) { unmarkSuggest(tblCell); pCurrentSelection = -1 } } function handleKeyPress(evt) { evt = (evt) ? evt : ((event) ? event : null); var keyCode = evt.keyCode; if (keyCode == 38) { moveSelection('up') } else if (keyCode == 27) { hideLayer(); } else if (keyCode == 40) { moveSelection('down'); } //ITB Direktbestellung else if (keyCode == 9 || keyCode == 13) { if (pFormname == "search_word_inc_directorder") { if (pSuggest[pCurrentSelection] != undefined) { document[pFormname][pQueryParamName].value = pSuggest[pCurrentSelection].split('###')[0]; } hideLayer(); getContent(SHOPROOT); return false; } } else { if (pQueryInput.value == '') { hideLayer(); if (pLayer != null){ pLayer.innerHTML = ''; } return null; } if (pLastQuery != pQueryInput.value){ startAjax(); } pLastQuery = pQueryInput.value; } } function moveSelection(direction) { var pos = pCurrentSelection; if (direction == 'up'){ pos--; } else{ pos += 1; } if (pos < 0) { unmarkAll(); pQueryInput.focus(); pCurrentSelection = -1; } else { var tblCell = getTableCell(pos); if (tblCell != null) { unmarkAll(); highlightSuggest(tblCell); pCurrentSelection = pos; } } var query = pQueryInput.value; pQueryInput.value = ''; pQueryInput.focus(); pQueryInput.value = query; } function startAjax() { var query = pQueryInput.value; if(query.length > 50 ){ return; } var kundennummernInput = document.getElementById('Kundennummern'); var kundennummern = "0"; if (kundennummernInput != null && kundennummernInput.value.length > 0){ kundennummern = kundennummernInput.value } //ITB: Umlaute ersetzen query = query.replace(/ä/g, "ae"); query = query.replace(/ö/g, "oe"); query = query.replace(/ü/g, "ue"); query = query.replace(/Ä/g, "Ae"); query = query.replace(/Ö/g, "Oe"); query = query.replace(/Ü/g, "Ue"); query = query.replace(/ß/g, "ss"); var requestURL = pSearchURL +'?'+ 'query' +'='+ encodeURIComponent(query) +'&'+ pChannelParamName +'='+ pChannel +'&filterKundennummern=' + kundennummern; try { if( window.XMLHttpRequest ) { pRequest = new XMLHttpRequest(); } else if( window.ActiveXObject ) { pRequest = new ActiveXObject( "Microsoft.XMLHTTP" ); } else { if (pDebug) alert( 'no ajax connection' ); } pLayer = document.getElementById(pLayerName); if (pLayer != null) { if (query != '') { pRequest.open( "GET", requestURL, true ); pRequest.onreadystatechange = callbackAjax; pRequest.send( null ); } else { hideLayer(); } } else { if (pDebug) alert( 'no layer for output found' ); } } catch( ex ) { hideLayer(); if (ex == undefined) { if (pDebug) alert( 'Error: ' + ex.getmessage ); } else { if (pDebug) alert( 'Error: ' + ex ); } } } function hideLayer() { //ITB Direktbestellung // if (pFormname == "search_word_inc_directorder") { // getContent(SHOPROOT); // } //ITB if(pQueryInput.value == '') { // pQueryInput.value = pQueryInput.defaultValue; } if (pLayer != null) { pLayer.style.display = 'none'; fireSuggestLayerHidden(); } } this.hideLayerOutsideCall = function() { if (pLayer != null) { pLayer.style.display = 'none'; fireSuggestLayerHidden(); } } function showLayer() { //ITB if(pQueryInput.value == pQueryInput.defaultValue) { pQueryInput.value = ''; } if (pLayer != null && pSuggest != null && pSuggest.length >= 1) { pLayer.style.display = 'block'; } } function callbackAjax() { if (submitted == false) { if (pRequest.readyState == 4) { if (pRequest.status != 200) { hideLayer(); if (pDebug) alert( 'Error (' + pRequest.status + '): ' + pRequest.statusText ); } else { handleResponse(pRequest.responseText); } } } } // calls the callback for "outside" listeners if the callback is implemented function fireSuggestCompleted(suggestLayerIsVisible) { if (typeof(onSuggestCompleted) == 'function') { onSuggestCompleted(suggestLayerIsVisible); } } // calls the callback for "outside" listeners if the callback is implemented function fireSuggestLayerHidden() { if (typeof(onSuggestLayerHidden) == 'function') { onSuggestLayerHidden(); } } function handleResponse(text) { var colSpan = 3; if(pShowImages){colSpan++;} pCurrentSelection = -1; pSuggest = new Array(); pSuggest = text.split('\n'); var outputText = ''; outputText += ''; var pNewSuggest = new Array(); for (var i = 0; i < pSuggest.length; i++) { var firstChar = pSuggest[i].charCodeAt(0); if (firstChar != 13 && firstChar != 10 && pSuggest[i].length >= 1) { pNewSuggest.push(pSuggest[i]); } } pSuggest = pNewSuggest; var query = pQueryInput.value; // ITB: Variablen zum Pr�fen des vorherigen Thumbs var currentThumb = null; var oldThumb = null; for (var i = 0; i < pSuggest.length; i++) { pSuggestParts = new Array(); pSuggestParts = pSuggest[i].split("###"); // ITB: CMS-Inhalte aus Direktbestellung raus if(pFormname == "search_word_inc_directorder" && pSuggestParts[2] == 'Inhalt') { continue; } // ITB: Suchvorschlag auf x Zeichen kürzen var itbFFdescription = itbShortStr(pSuggestParts[0],100); // ITB: "Produktname" durch "Artikel" ersetzen if(pLang == 'DE') { if(pSuggestParts[2] == 'Produktname') { pSuggestParts[2] = 'Artikel'; } } else { if(pSuggestParts[2] == 'Produktname') { pSuggestParts[2] = 'Article'; } if(pSuggestParts[2] == 'Kategorie') { pSuggestParts[2] = 'Category'; } } // ITB: Ändern der Anzeige der gefundenen Produkte, z.B. "4 Produkte" -> "[4]" pSuggestAmount = new Array(); pSuggestAmount = pSuggestParts[1].split(" "); if(pSuggestAmount[0] == "Ein") { pSuggestAmount[0] = "1"; } pSuggestParts[1] = pSuggestAmount[0]; outputText += ''; if(pShowImages){ // ITB: Artikelbild innerhalb der Variation nur beim ersten Artikel anzeigen currentThumb = pSuggestParts[3]; if(currentThumb == oldThumb){ currentThumb = "/tradepro/shop/trenner.gif"; } outputText += ''; // ITB: oa.gif eingef�gt oldThumb = pSuggestParts[3]; } // ITB: Ausgabe angepasst und Quelltextabschnitt für bessere Lesbarkeit formatiert outputText += '' +'' //+'' +'' +''; } // ITB: Weitere Suchergebnisse if (pFormname != "search_word_inc_directorder") { i++; outputText += ''; outputText += '' outputText += ''; } outputText += '
Vorschläge zu Ihrer Suche...
' + itbFFdescription.replace(new RegExp("(" +query +")","ig"),'$1') + '' + pSuggestParts[2] + '[' + pSuggestParts[1] + ']
'+pMoreText+'
 
'; if (pSuggest.length >= 1) { showLayer(); pLayer.innerHTML = outputText; // calback for "outside" listeners fireSuggestCompleted(true); } else { hideLayer(); pLayer.innerHTML = ''; // calback for "outside" listeners fireSuggestCompleted(false); } } // ITB: Funktion zum K�rzen von Texten function itbShortStr(inStr,outLength) { var output = inStr; var output2 = ''; if (outLength>0 && inStr.length>outLength){ var lastspace=0; output=inStr.substring( 0 , outLength ); output2=inStr.substring( outLength , inStr.length ); lastspace=output2.indexOf(' '); output=output+output2.substring(0,lastspace)+' ...'; } return( output ); } function highlightSuggest(tblCell) { tblCell.className = pSuggestHighlightClass; } function unmarkSuggest(tblCell) { tblCell.className = pSuggestRowClass; } function unmarkAll() { var tblCell; for (var i = 0; i < pSuggest.length; i++) { tblCell = getTableCell(i); if (tblCell != null) { unmarkSuggest(tblCell); } } } function getTableCell(pos) { var tblCell; tblCell = document.getElementById(pLayerName + '_' + pos); return tblCell; } //creates a hidden input field to pass, so we know this query was chosen from suggest function createQueryFromSuggestField(){ var element = document.createElement('input'); element.name = 'queryFromSuggest'; element.type = 'hidden'; element.value = 'true'; document[pFormname].appendChild(element); var kundennummernInput = document.getElementById('Kundennummern'); var kundennummern = "0"; if (kundennummernInput != null && kundennummernInput.value.length > 0){ kundennummern = kundennummernInput.value } var furtherElement = document.createElement('input'); furtherElement.name = 'Kundennummern'; furtherElement.type = 'hidden'; furtherElement.value = kundennummern document[pFormname].appendChild(furtherElement); } }