// NEAMB Autocomplete Logic - Hugo /* start dhtml building blocks */ function isWithinNode(e,i,c,t,obj) { answer = false; te = e; while(te && !answer) { if ((te.id && (te.id == i)) || (te.className && (te.className == i+"Class")) || (!t && c && te.className && (te.className == c)) || (!t && c && te.className && (te.className.indexOf(c) != -1)) || (t && te.tagName && (te.tagName.toLowerCase() == t)) || (obj && (te == obj))) { answer = te; } else { te = te.parentNode; } } return te; }//isWithinNode function getEvent(event) { return (event ? event : window.event); }//getEvent() function getEventElement(e) { return (e.srcElement ? e.srcElement: (e.target ? e.target : e.currentTarget)); }//getEventElement() function findElementPosX(obj) { curleft = 0; if (obj.offsetParent) { while (obj.offsetParent) { curleft += obj.offsetLeft; obj = obj.offsetParent; } }//if offsetParent exists else if (obj.x) { curleft += obj.x } return curleft; }//findElementPosX function findElementPosY(obj) { curtop = 0; if (obj.offsetParent) { while (obj.offsetParent) { curtop += obj.offsetTop; obj = obj.offsetParent; } }//if offsetParent exists else if (obj.y) { curtop += obj.y } return curtop; }//findElementPosY /* end dhtml building blocks */ function handleKeyPress(event) { e = getEvent(event); eL = getEventElement(e); upEl = isWithinNode(eL,null,"inputSearch",null,null); kc = e["keyCode"]; if (siw && ((kc == 13) || (kc == 9))) { siw.selectingSomething = true; if (siw.isSafari) { siw.inputBox.blur(); //hack to "wake up" safari } siw.inputBox.focus(); siw.inputBox.value = siw.inputBox.value.replace(/[ \r\n\t\f\s]+$/gi,' '); hideSmartInputFloater(); } else if (upEl && (kc != 38) && (kc != 40) && (kc != 37) && (kc != 39) && (kc != 13) && (kc != 27)) { if (!siw || (siw && !siw.selectingSomething)) { processSmartInput(upEl); } } else if (siw && siw.inputBox) { siw.inputBox.focus(); //kinda part of the hack. } }//handleKeyPress() function handleFocus(event) { e = getEvent(event); eL = getEventElement(e); if (focEl = isWithinNode(eL,null,"inputSearch",null,null)) { if (!siw || (siw && !siw.selectingSomething)) { processSmartInput(focEl); } } }//handleFocus() //hack this function! (HUGO) function handleBlur(event) { // e = getEvent(event); // eL = getEventElement(e); // if (blurEl = isWithinNode(eL,null,"inputSearch",null,null)) // { // if (siw && !siw.selectingSomething) // { // hideSmartInputFloater(); // } // } }//handleBlur() function handleClick(event) { hideSmartInputFloater(); } function showSmartInputFloater() { if (!siw.floater.style.display || (siw.floater.style.display=="none")) { if (!siw.customFloater) { x = findElementPosX(siw.inputBox); y = findElementPosY(siw.inputBox) + siw.inputBox.offsetHeight; //hack: browser-specific adjustments. if (!siw.isGecko && !siw.isWinIE) { x += 8; } if (!siw.isGecko && !siw.isWinIE) { y += 10; } siw.floater.style.left = 0; siw.floater.style.top = y; } else { //do additional things for the custom floater //beyond setting display and visibility } siw.floater.style.display="block"; siw.floater.style.visibility="visible"; } }//showSmartInputFloater() function hideSmartInputFloater() { if (siw) { siw.floater.style.display="none"; siw.floater.style.visibility="hidden"; } }//hideSmartInputFloater function processSmartInput(inputBox) { if (!siw) { siw = new smartInputWindow(); } siw.inputBox = inputBox; classData = inputBox.className.split(" "); siwDirectives = null; for (i=0;(!siwDirectives && classData[i]);i++) { if (classData[i].indexOf("inputSearch") != -1) { siwDirectives = classData[i]; } } if (siwDirectives && (siwDirectives.indexOf(":") != -1)) { siw.customFloater = true; newFloaterId = siwDirectives.split(":")[1]; siw.floater = document.getElementById(newFloaterId); siw.floaterContent = siw.floater.getElementsByTagName("div")[0]; } setSmartInputData(); } //processSmartInputFloater function simplify(s) { return s.toLowerCase().replace(/^[ \s\f\t\n\r]+/,'').replace(/[ \s\f\t\n\r]+$/,''); }//simplify function getUserInputToMatch(s) { a = s; fields = s.split(","); if (fields.length > 0) { a = fields[fields.length - 1]; } return a; }//getUserInputToMatch function getUserInputBase() { s = siw.inputBox.value; a = s; if ((lastComma = s.lastIndexOf(",")) != -1) { a = a.replace(/^(.*\,[ \r\n\t\f\s]*).*$/i,'$1'); } else { a = ""; } return a; }//getUserInputBase() function runMatchingLogic(userInput, standalone) { userInput = simplify(userInput); if (userInput.length % 3 == 0) // runs every 3 chars - Hugo { modifySmartInputBoxContent(userInput); showSmartInputFloater(); } }//runMatchingLogic function setSmartInputData() { if (siw) { orgUserInput = siw.inputBox.value; orgUserInput = getUserInputToMatch(orgUserInput); userInput = orgUserInput.toLowerCase().replace(/[\r\n\t\f\s]+/gi,' ').replace(/^ +/gi,'').replace(/ +$/gi,'').replace(/ +/gi,' ').replace(/\\/gi,'').replace(/\[/gi,'').replace(/\(/gi,'').replace(/\./gi,'\.').replace(/\?/gi,''); if (userInput && (userInput != "") && (userInput != '"')) { runMatchingLogic(userInput); }//if userinput not blank and is meaningful }//siw exists ... ok! }//setSmartInputData function modifySmartInputBoxContent(content) { siw.floaterContent.innerHTML = '