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 pSuggestQueryClass = 'ffsuggestTextQuery'; var pSuggestTypeClass = 'ffsuggestTextType'; var pSuggestAmountClass = 'ffsuggestTextAmount'; var pSuggestQueryTypedClass = 'ffsuggestTextQueryTyped'; var pSuggestFooterClass = 'ffsuggestFooter'; var pSuggestHeaderClass = 'ffsuggestHeader'; var pSuggestRowClass = 'ffsuggestRow'; var pSuggestHighlightClass = 'ffsuggestHighlight'; this.init = function(searchURL, formname, queryParamName, divLayername, instanceName, debugMode, mandantParamName, mandant) { pSearchURL = searchURL; pFormname = formname; pQueryParamName = queryParamName; pMandantParamName = mandantParamName; pMandant = mandant; pLayerName = divLayername; pInstanceName = instanceName; pDebug = debugMode; 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.onfocus = showLayer; pQueryInput.onblur = hideLayer; document[pFormname].onsubmit = handleSubmit; } function handleSubmit() { submitted = true; if (pSuggest[pCurrentSelection] != undefined) { document[pFormname][pQueryParamName].value = pSuggest[pCurrentSelection].split('###')[0]; } } this.handleClick = function() { if (pSuggest[pCurrentSelection] != undefined) { document[pFormname][pQueryParamName].value = pSuggest[pCurrentSelection].split('###')[0]; 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'); } 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; var requestURL = pSearchURL +'?'+ pQueryParamName +'='+ escape(query) +'&'+ pMandantParamName +'='+ pMandant; 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() { if (pLayer != null) { pLayer.style.display = 'none'; fireSuggestLayerHidden(); } } this.hideLayerOutsideCall = function() { if (pLayer != null) { pLayer.style.display = 'none'; fireSuggestLayerHidden(); } } function showLayer() { 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) { pCurrentSelection = -1; pSuggest = new Array(); pSuggest = text.split('\n'); var headlineText = 'Vorschläge zu Ihrer Suche...'; if(mandant == 'ves'){ headlineText = 'sugerencia para su b?squeda...'; }else if(mandant == 'vnl'){ headlineText = 'Voorstellen voor uw zoekopdracht...'; }else if(mandant == 'vit'){ headlineText = 'Proposte per la tua ricerca...'; }else if(mandant == 'vse'){ headlineText = 'Förslag till din sökning...'; }else if(mandant == 'vfa'){ headlineText = 'Propositions pour votre recherche...'; } var outputText = ''; outputText += ''; var pNewSuggest = new Array(); //for (var i in pSuggest) { 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; for (var i = 0; i < pSuggest.length; i++) { pSuggestParts = new Array(); pSuggestParts = pSuggest[i].split("###"); outputText += '' +'' +'' +'' +''; } outputText += '
'+headlineText+'
' + pSuggestParts[0].replace(new RegExp("("+query+")","ig"),'$1') + '' + pSuggestParts[2] + '' + pSuggestParts[1] + '
 
'; if (pSuggest.length >= 1) { showLayer(); pLayer.innerHTML = outputText; // calback for "outside" listeners fireSuggestCompleted(true); } else { hideLayer(); pLayer.innerHTML = ''; // calback for "outside" listeners fireSuggestCompleted(false); } } function highlightSuggest(tblCell) { tblCell.className = pSuggestHighlightClass; } function unmarkSuggest(tblCell) { tblCell.className = pSuggestRowClass; } function unmarkAll() { var tblCell; for (var i in pSuggest) { tblCell = getTableCell(i); if (tblCell != null) { unmarkSuggest(tblCell); } } } function getTableCell(pos) { var tblCell; tblCell = document.getElementById(pLayerName + '_' + pos); return tblCell; } }