function isString(a){return typeof(a)=="string"}function $(b){if(arguments.length>1){for(var a=0,d=[],c=arguments.length;a<c;a++){d.push($(arguments[a]))}return d}if(isString(b)){b=document.getElementById(b)}return b}if(!Function.prototype.bindAsEventListener){Function.prototype.bindAsEventListener=function(b){var a=this;return function(c){a.call(b,c||window.event)}}}var Element={Browser:(function(){var b=navigator.userAgent;var a=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!a,Opera:a,WebKit:b.indexOf("AppleWebKit/")>-1,Gecko:b.indexOf("Gecko")>-1&&b.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile.*Safari/.test(b)}})(),visible:function(a){return $(a).style.display!="none"},toggle:function(a){a=$(a);Element[Element.visible(a)?"hide":"show"](a);return a},hide:function(a){a=$(a);a.style.display="none";return a},show:function(a){a=$(a);a.style.display="";return a},firstDescendant:function(a){a=$(a).firstChild;while(a&&a.nodeType!=1){a=a.nextSibling
}return $(a)},down:function(b,c,a){b=$(b);if(arguments.length==1){return Element.firstDescendant(b)}return Object.isNumber(c)?Element.descendants(b)[c]:Element.select(b,c)[a||0]},select:function(b){var a=Array.prototype.slice.call(arguments,1);return Selector.findChildElements(b,a)},getStyle:function(b,c){b=$(b);c=c=="float"?"cssFloat":c;var d=b.style[c];if(!d||d=="auto"){var a=(document.defaultView&&document.defaultView.getComputedStyle)?document.defaultView.getComputedStyle(b,null):b.currentStyle;d=a?a[c]:null}if(c=="opacity"){return d?parseFloat(d):1}return d=="auto"?null:d},getHeight:function(a){return Element.getDimensions(a).height},getWidth:function(a){return Element.getDimensions(a).width},classNames:function(a){return new Element.ClassNames(a)},hasClassName:function(a,b){if(!(a=$(a))){return}var c=a.className;if(!c){return false}return(c.length>0&&(c==b||new RegExp("(^|\\s)"+b+"(\\s|$)").test(c)))},addClassName:function(a,b){if(!(a=$(a))){return}if(!Element.hasClassName(a,b)){a.className+=(a.className?" ":"")+b
}return a},removeClassName:function(a,b){if(!(a=$(a))){return}a.className=Element.strip(a.className.replace(new RegExp("(^|\\s+)"+b+"(\\s+|$)")," "));return a},toggleClassName:function(a,b){if(!(a=$(a))){return}return Element[Element.hasClassName(a,b)?"removeClassName":"addClassName"](a,b)},cleanWhitespace:function(b){b=$(b);var c=b.firstChild;while(c){var a=c.nextSibling;if(c.nodeType==3&&!/\S/.test(c.nodeValue)){b.removeChild(c)}c=a}return b},getDimensions:function(c){c=$(c);var g=Element.getStyle(c,"display");if(g!="none"&&g!=null){return{width:c.offsetWidth,height:c.offsetHeight}}var b=c.style;var f=b.visibility;var d=b.position;var a=b.display;b.visibility="hidden";if(d!="fixed"){b.position="absolute"}b.display="block";var h=c.clientWidth;var e=c.clientHeight;b.display=a;b.position=d;b.visibility=f;return{width:h,height:e}},positionedOffset:function(b){var a=0,d=0;do{a+=b.offsetTop||0;d+=b.offsetLeft||0;b=b.offsetParent;if(b){if(b.tagName.toUpperCase()=="BODY"){break}var c=Element.getStyle(b,"position");
if(c!=="static"){break}}}while(b);return Element._returnOffset(d,a)},isArray:function(a){return(typeof(a.length)=="undefined")?false:true},recursivelyCollectText:function(b,c,d){if(c&&Element.hasClassName(b,c)){return""}if(b.nodeType==3){return d+b.nodeValue}else{if(Element.isArray(b)){for(var a=0;a<b.length;a++){d=Element.recursivelyCollectText(b[a],c,d)}}else{if(typeof(b.childNodes)!="undefined"){d=Element.recursivelyCollectText(b.childNodes,c,d)}}}return d},collectTextNodes:function(a,b){return Element.recursivelyCollectText(a.childNodes,null,"")},collectTextNodesIgnoreClass:function(a,b){return Element.recursivelyCollectText(a.childNodes,b,"")},observe:function(b,a,c){b=$(b);if(b.addEventListener){b.addEventListener(a,c,false)}else{b.attachEvent("on"+a,c)}return b},strip:function(a){return a.replace(/^\s+/,"").replace(/\s+$/,"")}};Element._returnOffset=function(b,c){var a=[b,c];a.left=b;a.top=c;return a};var Event={KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,element:function(c){if(document.all){c=event
}if(c.target){node=c.target}else{if(c.srcElement){node=c.srcElement}}var a=c.type,b=c.currentTarget;if(b&&b.tagName){if(a==="load"||a==="error"||(a==="click"&&b.tagName.toLowerCase()==="input"&&b.type==="radio")){node=b}}if(node.nodeType&&node.nodeType==3){node=node.parentNode}if(node.tagName&&node.tagName.toLowerCase()==="strong"){node=node.parentNode}return node},stop:function(a){a.cancelBubble=true;a.returnValue=false;a.stopped=true}};AutocompleterPT=function(){this.baseInitialize=function(element,update,options,submitAction){element=$(element);this.element=element;this.update=$(update);this.hasFocus=false;this.changed=false;this.active=false;this.index=0;this.entryCount=0;this.submitAction=submitAction||false;this.oldElementValue=this.element.value;if(this.setOptions){this.setOptions(options)}else{this.options=options||{}}this.options.paramName=this.options.paramName||this.element.name;this.options.tokens=this.options.tokens||[];this.options.frequency=this.options.frequency||0.4;this.options.minChars=this.options.minChars||2;
this.options.onShow=this.options.onShow||function(element,update){if(!update.style.position||update.style.position=="absolute"){update.style.position="absolute"}Element.show(update)};this.options.onHide=this.options.onHide||function(element,update){Element.hide(update)};if(typeof(this.options.tokens)=="string"){this.options.tokens=new Array(this.options.tokens)}this.options.tokens.push("\n");this.options.defaultText=this.options.defaultText;this.options.choices=this.options.choices||10;this.options.partialSearch=this.options.partialSearch||true;this.options.partialChars=this.options.partialChars||2;this.options.ignoreCase=this.options.ignoreCase||true;this.options.fullSearch=this.options.fullSearch||true;this.options.selector=function(instance){var ret=[];var partial=[];var entry=instance.getToken();var count=0;for(var i=0;i<instance.options.array.length&&ret.length<instance.options.choices;i++){var elem=instance.options.array[i];var foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase()):elem.indexOf(entry);
while(foundPos!=-1){if(foundPos==0&&elem.length!=entry.length){ret.push("<li><strong>"+elem.substr(0,entry.length)+"</strong>"+elem.substr(entry.length)+"</li>");break}else{if(entry.length>=instance.options.partialChars&&instance.options.partialSearch&&foundPos!=-1){if(instance.options.fullSearch||/\s/.test(elem.substr(foundPos-1,1))){partial.push("<li>"+elem.substr(0,foundPos)+"<strong>"+elem.substr(foundPos,entry.length)+"</strong>"+elem.substr(foundPos+entry.length)+"</li>");break}}}foundPos=instance.options.ignoreCase?elem.toLowerCase().indexOf(entry.toLowerCase(),foundPos+1):elem.indexOf(entry,foundPos+1)}}if(partial.length){ret=ret.concat(partial.slice(0,instance.options.choices-ret.length))}return"<ul>"+ret.join("")+"</ul>"};this.observer=null;this.element.setAttribute("autocomplete","off");Element.hide(this.update);if(this.options.defaultText){this.options.defaultTextColor=this.options.defaultTextColor||"gray";this.options.textColor=Element.getStyle(this.element,"color")||"black";
this.element.value=this.options.defaultText;this.element.style.color=this.options.defaultTextColor;Element.observe(this.element,"focus",this.onFocus.bindAsEventListener(this))}Element.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));Element.observe(this.element,"keydown",this.onKeyPress.bindAsEventListener(this))};this.startIndicator=function(){if(this.options.indicator){Element.show(this.options.indicator)}};this.stopIndicator=function(){if(this.options.indicator){Element.hide(this.options.indicator)}};this.show=function(){if(Element.getStyle(this.update,"display")=="none"){this.options.onShow(this.element,this.update)}};this.hide=function(){this.stopIndicator();if(Element.getStyle(this.update,"display")!="none"){this.options.onHide(this.element,this.update)}};this.onKeyPress=function(event){if(this.active){switch(event.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(event);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(event);
return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();Event.stop(event);return;case Event.KEY_DOWN:this.markNext();this.render();Event.stop(event);return}}else{if(event.keyCode==Event.KEY_TAB||event.keyCode==Event.KEY_RETURN||(Element.Browser.WebKit>0&&event.keyCode==0)){if(this.submitAction&&event.keyCode==Event.KEY_RETURN){if(typeof this.submitAction=="function"){this.submitAction(this.element)}else{eval(this.submitAction)}}return}}this.changed=true;this.hasFocus=true;if(this.observer){clearTimeout(this.observer)}this.observer=setTimeout(this.onObserverEvent.bindAsEventListener(this),this.options.frequency*1000)};this.activate=function(){this.changed=false;this.hasFocus=true;this.getUpdatedChoices()};this.onHover=function(event){var element=Event.element(event);if(this.index!=element.autocompleteIndex){this.index=element.autocompleteIndex;this.render()}Event.stop(event)};this.onClick=function(event){var element=Event.element(event);
this.index=element.autocompleteIndex;this.selectEntry();this.hide()};this.onFocus=function(event){if(this.options.defaultText&&this.element.value===this.options.defaultText){this.element.value="";this.element.style.color=this.options.textColor}};this.onBlur=function(event){setTimeout(this.hide.bindAsEventListener(this),250);this.hasFocus=false;this.active=false;if(this.options.defaultText&&this.element.value===""){this.element.value=this.options.defaultText;this.element.style.color=this.options.defaultTextColor}};this.render=function(){if(this.entryCount>0){for(var i=0;i<this.entryCount;i++){this.index==i?Element.addClassName(this.getEntry(i),"selected"):Element.removeClassName(this.getEntry(i),"selected")}if(this.hasFocus){this.show();this.active=true}}else{this.active=false;this.hide()}};this.markPrevious=function(){if(this.index>0){this.index--}else{this.index=this.entryCount-1}this.moveHighlight("up")};this.markNext=function(){if(this.index<this.entryCount-1){this.index++}else{this.index=0
}this.moveHighlight("down")};this.moveHighlight=function(direction){var updatescroll=this.update.scrollTop;var updateheight=Element.getDimensions(this.update).height;var entryy=Element.positionedOffset(this.getEntry(this.index))[1];var entryheight=Element.getDimensions(this.getEntry(this.index)).height;if(((updatescroll+updateheight)<(entryy+entryheight))||(entryy<updatescroll)){var newy=(direction=="up")?entryy:entryy-updateheight+entryheight;this.update.scrollTop=newy}};this.getEntry=function(index){return this.update.firstChild.childNodes[index]};this.getCurrentEntry=function(){return this.getEntry(this.index)};this.selectEntry=function(){this.active=false;this.updateElement(this.getCurrentEntry())};this.updateElement=function(selectedElement){if(this.options.updateElement){this.options.updateElement(selectedElement);return}var value="";if(this.options.select){var nodes=$(selectedElement).select("."+this.options.select)||[];if(nodes.length>0){value=Element.collectTextNodes(nodes[0],this.options.select)
}}else{value=Element.collectTextNodesIgnoreClass(selectedElement,"informal")}var bounds=this.getTokenBounds();if(bounds[0]!=-1){var newValue=this.element.value.substr(0,bounds[0]);var whitespace=this.element.value.substr(bounds[0]).match(/^\s+/);if(whitespace){newValue+=whitespace[0]}this.element.value=newValue+value+this.element.value.substr(bounds[1])}else{this.element.value=value}this.oldElementValue=this.element.value;this.element.focus();if(this.options.afterUpdateElement){this.options.afterUpdateElement(this.element,selectedElement)}};this.updateChoices=function(choices){if(!this.changed&&this.hasFocus){this.update.innerHTML=choices;Element.cleanWhitespace(this.update);var liElements=Element.down(this.update);Element.cleanWhitespace(liElements);if(this.update.firstChild&&liElements.childNodes){this.entryCount=liElements.childNodes.length;for(var i=0;i<this.entryCount;i++){var entry=this.getEntry(i);entry.autocompleteIndex=i;this.addObservers(entry)}}else{this.entryCount=0}this.stopIndicator();
this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide()}else{this.render()}}};this.addObservers=function(element){Element.observe(element,"mouseover",this.onHover.bindAsEventListener(this));Element.observe(element,"click",this.onClick.bindAsEventListener(this))};this.onObserverEvent=function(){this.changed=false;this.tokenBounds=null;if(this.getToken().length>=this.options.minChars){this.getUpdatedChoices()}else{this.active=false;this.hide()}this.oldElementValue=this.element.value};this.getToken=function(){var bounds=this.getTokenBounds();return Element.strip(this.element.value.substring(bounds[0],bounds[1]))};this.getTokenBounds=function(){if(null!=this.tokenBounds){return this.tokenBounds}var value=this.element.value;if(Element.strip(value)==""){return[-1,0]}var diff=arguments.callee.getFirstDifferencePos(value,this.oldElementValue);var offset=(diff==this.oldElementValue.length?1:0);var prevTokenPos=-1,nextTokenPos=value.length;var tp;for(var index=0,l=this.options.tokens.length;
index<l;++index){tp=value.lastIndexOf(this.options.tokens[index],diff+offset-1);if(tp>prevTokenPos){prevTokenPos=tp}tp=value.indexOf(this.options.tokens[index],diff+offset);if(-1!=tp&&tp<nextTokenPos){nextTokenPos=tp}}return(this.tokenBounds=[prevTokenPos+1,nextTokenPos])};this.getTokenBounds.getFirstDifferencePos=function(newS,oldS){var boundary=Math.min(newS.length,oldS.length);for(var index=0;index<boundary;++index){if(newS[index]!=oldS[index]){return index}}return boundary}};LocalAutocompleter=function(b,d,c,a){this.baseInitialize(b,d,a);this.options.array=c;this.getUpdatedChoices=function(){this.updateChoices(this.options.selector(this))}};LocalAutocompleter.prototype=new AutocompleterPT();AjaxAutocompleter=function(c,f,b,a,e,d){this.baseInitialize(c,f,a,d);this.options.asynchronous=true;this.options.defaultParams=this.options.parameters||null;this.url=b;this.method=this.options.method||"POST";this.ajaxSack=new sack();this.ajaxSack.requestFile=this.url;this.ajaxSack.method=this.method;
this.disableCache=e||false;this.cache={};this.getUpdatedChoices=function(){var g=this.getToken();if(!this.disableCache&&this.cache[g]){this.updateChoices(this.cache[g])}else{this.startIndicator();var h=encodeURIComponent(this.options.paramName)+"="+encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,h):h;if(this.options.defaultParams){this.options.parameters+="&"+this.options.defaultParams}this.options.parameters+="&choices="+encodeURIComponent(this.options.choices)+"&partialSearch="+encodeURIComponent(this.options.partialSearch)+"&partialChars="+encodeURIComponent(this.options.partialChars)+"&ignoreCase="+encodeURIComponent(this.options.ignoreCase)+"&fullSearch="+encodeURIComponent(this.options.fullSearch);this.ajaxSack.runAJAX(this.options.parameters)}};this.onError=function(){this.stopIndicator()};this.translateValuesFromServer=function(){if(this.ajaxSack.response){this.options.array=this.ajaxSack.response.split("|")}else{this.options.array=[]
}var g=this.options.selector(this);if(!this.disableCache){this.cache[this.getToken()]=g}this.updateChoices(g)};this.ajaxSack.onCompletion=this.translateValuesFromServer.bindAsEventListener(this);this.ajaxSack.onError=this.onError.bindAsEventListener(this);this.ajaxSack.onFail=this.onError.bindAsEventListener(this)};AjaxAutocompleter.prototype=new AutocompleterPT();
