/* +-------------------------------------------------------------------+
 * | This file is part of autocomplete                                 |
 * | Copyright (c) 2005 Claudio Cicali <claudio@cicali.org>            |
 * +-------------------------------------------------------------------+
 * | flexac is free software; you can redistribute it and/or           |
 * | modify it under the terms of the GNU General Public License       |
 * | as published by the Free Software Foundation; either version 2    |
 * | of the License, or (at your option) any later version.            |
 * | flexac is distributed in the hope that it will be useful,         |
 * | but WITHOUT ANY WARRANTY; without even the implied warranty of    |
 * | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     |
 * | GNU General Public License for more details.                      |
 * | You should have received a copy of the GNU General Public License |
 * | along with this program; if not, write to the:                    |
 * | Free Software Foundation, Inc., 59 Temple Place - Suite 330,      |
 * |                           Boston, MA 02111-1307, USA.             |
 * +-------------------------------------------------------------------+
 * | Authors: Claudio Cicali <claudio@cicali.org>                      |
 * +-------------------------------------------------------------------+
*/
autocomplete.configure=function(){autocomplete.config.script="autocomplete.php";autocomplete.config.scriptMethod="GET";autocomplete.config.hideTimeout=10000;autocomplete.config.acTimeout=250;autocomplete.config.listMaxItem=7;autocomplete.config.notifyChoose=true;autocomplete.config.notifySearching=true;};autocomplete.onInputKeyUp=function(hEvent){if(autocomplete.hideTimer!=null)clearTimeout(autocomplete.hideTimer);autocomplete.hideTimer=setTimeout("autocomplete.hideList()",autocomplete.config.hideTimeout);if(autocomplete.input.value.length<2&&autocomplete.listShown)autocomplete.hideList();};autocomplete.onInputKeyDown=function(hEvent){if(!hEvent)hEvent=window.event;switch(hEvent.keyCode){case 37:case 39:case 33:case 34:case 36:case 35:case 27:case 16:case 17:case 18:case 20:case 38:case 40:break;default:if(autocomplete.config.notifyChoose)autocomplete.input.className=autocomplete.input.className.replace(/autocompleteChoose/,"");break;};switch(hEvent.keyCode){case 13:case 39:autocomplete.setValue();autocomplete.clearList();autocomplete.hideList();hEvent.returnValue=false;break;case 40:if(!autocomplete.listShown){if(autocomplete.acTimer!=null)clearTimeout(autocomplete.acTimer);autocomplete.autoComplete();autocomplete.selectCurrent();break;};if(autocomplete.container&&autocomplete.list.hasChildNodes()){if(autocomplete.activeItem==null){try{autocomplete.activeItem=autocomplete.list.childNodes.item(0).firstChild;autocomplete.activeItemIdx=0;autocomplete.windowMax=autocomplete.config.listMaxItem-1;autocomplete.windowMin=0;}catch(e){};}else{try{nextItem=autocomplete.list.childNodes.item(autocomplete.activeItemIdx+1).firstChild;autocomplete.unselectCurrent();autocomplete.activeItem=nextItem;autocomplete.activeItemIdx++;}catch(e){};};};autocomplete.selectCurrent();break;case 37:break;case 38:if(!autocomplete.listShown)break;if(autocomplete.container&&autocomplete.list.hasChildNodes()){if(autocomplete.activeItem!=null){autocomplete.unselectCurrent();if(autocomplete.activeItemIdx>0){autocomplete.activeItemIdx--;autocomplete.activeItem=autocomplete.list.childNodes.item(autocomplete.activeItemIdx).firstChild;};};};autocomplete.selectCurrent();break;case 27:if(!autocomplete.listShown)break;autocomplete.clearList();autocomplete.hideList();break;case 9:autocomplete.hideList();autocomplete.onInputBlur();break;default:if(autocomplete.acTimer!=null)clearTimeout(autocomplete.acTimer);autocomplete.acTimer=setTimeout("autocomplete.autoComplete()",autocomplete.config.acTimeout);break;};return hEvent.returnValue;};autocomplete.setValue=function(){if(autocomplete.activeItem){autocomplete.input.value=autocomplete.activeItem.innerHTML.replace(/<strong>(.*)<\/strong>/ig,"$1");key=autocomplete.getMatchingElementKey(autocomplete.activeItemIdx);if(autocomplete.config.notifyChoose)autocomplete.input.className+=" autocompleteChoose";parentName=autocomplete.input.name;var hidden=null;var fields=document.getElementsByTagName('INPUT');for(f in fields){if(fields[f].name==parentName+"_id"){hidden=fields[f];break;};};if(!hidden)hidden=document.createElement("input");hidden.name=parentName+"_id";hidden.type="hidden";hidden.value=key;autocomplete.input.form.appendChild(hidden);};};autocomplete.getMatchingElementKey=function(idx){var i=0;for(match in autocomplete.matches){if(i==idx)return match;i++;};};autocomplete.onInputBlur=function(hEvent){if(autocomplete.listShown)return;delete autocomplete.activeItem;autocomplete.activeItemIdx=0;if(autocomplete.container){autocomplete.clearList();autocomplete.container.parentNode.removeChild(autocomplete.container);autocomplete.container=null;};};autocomplete.autoComplete=function(){var pattern=autocomplete.input.value.toLowerCase().trim();if(pattern.length<2||autocomplete.plugin=='null')return;if(autocomplete.config.notifyChoose)autocomplete.input.className=autocomplete.input.className.replace(/autocompleteChoose/,"");if(autocomplete.config.notifySearching)autocomplete.input.className+=" autocompleteSearching";if(autocomplete.xhr){autocomplete.xhr.abort();delete autocomplete.xhr;};autocomplete.xhr=new XHConn();if(!autocomplete.xhr)alert("XMLHTTP not available. Try a newer/better browser.");query="q="+pattern;query+="&p="+autocomplete.plugin;query+="&l="+autocomplete.returnLimit;query+="&b="+autocomplete.searchBeginsWith;autocomplete.xhr.connect(autocomplete.config.script,autocomplete.config.scriptMethod,query,autocomplete.feedListFromServer);};autocomplete.feedListFromServer=function(data){if(data.status.toString()!="200"){return;};eval("autocomplete.matches = "+data.responseText);if(!autocomplete.matches){autocomplete.hideList();return;};autocomplete.feedList();};autocomplete.feedList=function(){if(autocomplete.config.notifySearching)autocomplete.input.className=autocomplete.input.className.replace(/autocompleteSearching/,"");autocomplete.clearList();autocomplete.activeItem=null;autocomplete.activeItemIdx=0;var pattern=autocomplete.input.value.toLowerCase().trim();hItem=null;for(match in autocomplete.matches){idx=autocomplete.matches[match].toLowerCase().indexOf(pattern);if(idx!=-1&&autocomplete.matches[match]!="???"){hItem=document.createElement("li");hAnchor=document.createElement("a");hAnchor.href="#";hAnchor.innerHTML=autocomplete.matches[match].substring(0,idx)+"<strong>"+autocomplete.matches[match].substring(idx,idx+pattern.length)+"</strong>"+autocomplete.matches[match].substring(idx+pattern.length);if(hAnchor.attachEvent){hAnchor.attachEvent('onclick',autocomplete.onItemClick);hAnchor.attachEvent('onmouseover',autocomplete.onItemMouseOver);}else{hAnchor.addEventListener('click',autocomplete.onItemClick,false);hAnchor.addEventListener('mouseover',autocomplete.onItemMouseOver,false);};hItem.appendChild(hAnchor);autocomplete.list.appendChild(hItem);};};if(window.hItem){autocomplete.showList();if(autocomplete.container)autocomplete.container.style.height=hItem.offsetHeight*autocomplete.config.listMaxItem+"px";}else autocomplete.hideList();};autocomplete.onItemClick=function(hEvent){var hItem=(hEvent.srcElement)?hEvent.srcElement:hEvent.originalTarget;autocomplete.setValue();autocomplete.clearList();autocomplete.hideList();hEvent.cancelBubble=true;hEvent.returnValue=false;return false;};autocomplete.onItemMouseOver=function(hEvent){autocomplete.unselectCurrent();autocomplete.activeItem=(hEvent.srcElement)?hEvent.srcElement:hEvent.originalTarget;var i=0;while(autocomplete.list.childNodes[i]){if(autocomplete.list.childNodes[i]==autocomplete.activeItem.parentNode){autocomplete.activeItemIdx=i;break;};i++;};if(autocomplete.hideTimer!=null)clearTimeout(autocomplete.hideTimer);autocomplete.hideTimer=setTimeout("autocomplete.hideList()",autocomplete.config.hideTimeout);autocomplete.selectCurrent();};autocomplete.showList=function(){if(!autocomplete.container)return;autocomplete.container.style.display="block";if(autocomplete.hideTimer!=null)clearTimeout(autocomplete.hideTimer);autocomplete.hideTimer=setTimeout("autocomplete.hideList()",autocomplete.config.hideTimeout);autocomplete.listShown=true;};autocomplete.hideList=function(){if(!autocomplete.container)return;autocomplete.container.style.display="none";autocomplete.listShown=false;};autocomplete.selectCurrent=function(){if(autocomplete.activeItem){autocomplete.activeItem.style.backgroundColor="highlight";autocomplete.activeItem.style.color="highlighttext";if(autocomplete.activeItemIdx>autocomplete.windowMax)autocomplete.scrollListDown();if(autocomplete.activeItemIdx<autocomplete.windowMin)autocomplete.scrollListUp();};};autocomplete.scrollListDown=function(){autocomplete.container.scrollTop+=autocomplete.activeItem.offsetHeight;autocomplete.windowMax++;autocomplete.windowMin++;};autocomplete.scrollListUp=function(){autocomplete.container.scrollTop-=autocomplete.activeItem.offsetHeight;autocomplete.windowMax--;autocomplete.windowMin--;};autocomplete.unselectCurrent=function(){if(autocomplete.activeItem){autocomplete.activeItem.style.backgroundColor="";autocomplete.activeItem.style.color="black";autocomplete.activeItem.className="";};};autocomplete.clearList=function(){if(autocomplete.list){while(autocomplete.list.hasChildNodes()){autocomplete.list.removeChild(autocomplete.list.childNodes[0]);};};};autocomplete.createContainer=function(){if(autocomplete.container){autocomplete.container.parentNode.removeChild(autocomplete.container);autocomplete.container=null;autocomplete.list=null;};hC=document.createElement("div");hC.style.width=autocomplete.input.offsetWidth+"px";var nTop=autocomplete.getOffsetParam(autocomplete.input,'offsetTop');var nLeft=autocomplete.getOffsetParam(autocomplete.input,'offsetLeft');hC.style.position="absolute";hC.style.top=(nTop+autocomplete.input.offsetHeight)+'px';hC.style.left=nLeft+'px';hC.style.zIndex="10000";hC.className="autocompleteContainer";hC.style.display='none';hC.style.visibility='visible';hList=document.createElement("ul");hList.className="autocompleteList";hC.appendChild(hList);document.body.appendChild(hC);autocomplete.container=hC;autocomplete.list=hList;};function autocompleteConfiguration(){this.hideTimeout=0;};function autocompleteOn(hInput,plugin,beginsWith,returnLimit){hInput.autocomplete='off';autocomplete.config=new autocompleteConfiguration();autocomplete.configure();autocomplete.plugin=plugin;autocomplete.input=hInput;autocomplete.searchBeginsWith=beginsWith?"1":"0";autocomplete.returnLimit=autocomplete.config.listMaxItem;if(returnLimit)autocomplete.returnLimit=returnLimit;if(hInput.attachEvent){hInput.detachEvent('onkeyup',autocomplete.onInputKeyUp);hInput.detachEvent('onkeydown',autocomplete.onInputKeyDown);hInput.detachEvent('onblur',autocomplete.onInputBlur);hInput.attachEvent('onkeyup',autocomplete.onInputKeyUp);hInput.attachEvent('onkeydown',autocomplete.onInputKeyDown);hInput.attachEvent('onblur',autocomplete.onInputBlur);}else if(hInput.addEventListener){hInput.removeEventListener('keyup',autocomplete.onInputKeyUp,false);hInput.removeEventListener('keydown',autocomplete.onInputKeyDown,false);hInput.removeEventListener('blur',autocomplete.onInputBlur,false);hInput.addEventListener('keyup',autocomplete.onInputKeyUp,false);hInput.addEventListener('keydown',autocomplete.onInputKeyDown,false);hInput.addEventListener('blur',autocomplete.onInputBlur,false);};autocomplete.createContainer();};autocomplete.getOffsetParam=function(hElement,sParam,hLimitParent){var nRes=0;if(hLimitParent==null){hLimitParent=document.body.parentElement};while(hElement!=hLimitParent){nRes+=eval('hElement.'+sParam);if(!hElement.offsetParent){break};hElement=hElement.offsetParent};return nRes;};function XHConn(){var xmlhttp;var active;try{xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){try{xmlhttp=new XMLHttpRequest();}catch(e){xmlhttp=false;}}};if(!xmlhttp)return null;this.connect=function(sURL,sMethod,sVars,fnDone){if(!xmlhttp)return false;sMethod=sMethod.toUpperCase();try{if(sMethod=="GET"){xmlhttp.open(sMethod,sURL+"?"+sVars,true);sVars="";}else{xmlhttp.open(sMethod,sURL,true);xmlhttp.setRequestHeader("Method","POST "+sURL+" HTTP/1.1");xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");};xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4){fnDone(xmlhttp);}};xmlhttp.send(sVars);}catch(z){return false;};return true;};this.abort=function(){try{}catch(z){return false;};};return this;};function strtrim(){return this.replace(/^\s+/,'').replace(/\s+$/,'');};String.prototype.trim=strtrim;function autocomplete(){};
