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 = '
| '+headlineText+' | ||
| ' + pSuggestParts[0].replace(new RegExp("("+query+")","ig"),'$1') + ' | ' +'' + pSuggestParts[2] + ' | ' +'' + pSuggestParts[1] + ' | ' +'