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 pInitialTest = ''; 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, initialTest, mandantParamName, mandant) { pSearchURL = searchURL; pFormname = formname; pQueryParamName = queryParamName; pMandantParamName = mandantParamName; pMandant = mandant; pLayerName = divLayername; pInstanceName = instanceName; pDebug = debugMode; pInitialTest = initialTest; 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(); pCurrentSelection = -1; } else { var tblCell = getTableCell(pos); if (tblCell != null) { unmarkAll(); highlightSuggest(tblCell); pCurrentSelection = pos; } } var query = pQueryInput.value; pQueryInput.value = ''; pQueryInput.value = query; } function startAjax() { var query = pQueryInput.value; if (query.length<1 || query==pInitialTest) { hideLayer(); return; } 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'; } } this.hideLayerOutsideCall = function() { if (pLayer != null) { pLayer.style.display = 'none'; } } function showLayer() { //if (pDebug) alert( 'Error: '+pInitialTest+' -' + this.pInitialTest+' - '+document[pFormname][pQueryParamName].value ); if (pInitialTest!= null && pInitialTest!='' && pInitialTest==document[pFormname][pQueryParamName].value) { doClear(document[pFormname][pQueryParamName]); } 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); } } function handleResponse(text) { pCurrentSelection = -1; pSuggest = new Array(); pSuggest = text.split('\n'); var outputText = ''; outputText += ''; var pNewSuggest = new Array(); //for (var i in pSuggest) { for (i=0;i= 1) { pNewSuggest.push(pSuggest[i]); } } pSuggest = pNewSuggest; var query = pQueryInput.value; //for (var i in pSuggest) { for (i=0;i' +'' //+'' //+'' +''; } outputText += '
Suggerimenti per la ricerca
' + 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); } // get position of target textfield // position holding div below it // set width of holding div to width of field // var curleft = 0; var obj=document[pFormname][pQueryParamName]; if (obj.offsetParent) { while (obj.offsetParent) { curleft += obj.offsetLeft; obj = obj.offsetParent; } } else if (obj.x) curleft += obj.x; var obj = document[pFormname][pQueryParamName]; var curtop = 0; if (obj.offsetParent) { while (obj.offsetParent) { curtop += obj.offsetTop; obj = obj.offsetParent; } } else if (obj.y) curtop += obj.y; /*pLayer.style.left = curleft + "px"; pLayer.style.top = ( curtop + document[pFormname][pQueryParamName].offsetHeight+3) + "px";*/ pLayer.style.width = document[pFormname][pQueryParamName].offsetWidth + "px"; } 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; } }