CustomAutocompleter=Class.create(Ajax.Autocompleter,{updateChoices:function(c){if(!this.changed&&this.hasFocus){this.update.innerHTML=c;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());if(this.update.firstChild&&this.update.down().childNodes){this.entryCount=this.update.down().childNodes.length;for(var a=0;a<this.entryCount;a++){var b=this.getEntry(a);b.autocompleteIndex=a;this.addObservers(b)}}else{this.entryCount=0}this.stopIndicator();this.indexHover=this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide()}else{this.index=-1;this.render()}}},onKeyPress:function(b){if(this.active){switch(b.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:if(this.index!=-1){this.selectEntry();Event.stop(b)}else{if(this.options.afterUpdateElement){this.options.afterUpdateElement(this.element,null)}}var a=true;case Event.KEY_ESC:this.hide();this.active=false;if(!a){this.setBaseValue()}Event.stop(b);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();if(this.index!=-1){this.updateTextField(this.getEntry(this.index))}else{this.setBaseValue()}Event.stop(b);return;case Event.KEY_DOWN:this.markNext();this.render();if(this.index!=-1){this.updateTextField(this.getEntry(this.index))}else{this.setBaseValue()}Event.stop(b);return}}else{if(b.keyCode==Event.KEY_TAB||b.keyCode==Event.KEY_RETURN||(Prototype.Browser.WebKit>0&&b.keyCode==0)){return}}this.changed=true;this.hasFocus=true;if(this.observer){clearTimeout(this.observer)}this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000)},setBaseValue:function(){if(this.sInitBaseValue!=undefined){this.element.value=this.sInitBaseValue}},updateTextField:function(c){var b="";if(this.options.select){var a=$(c).select("."+this.options.select)||[];if(a.length>0){b=Element.collectTextNodes(a[0],this.options.select)}}else{b=Element.collectTextNodesIgnoreClass(c,"informal")}this.element.value=b;this.oldElementValue=this.element.value;this.element.focus()},getUpdatedChoices:function($super){$super();this.sInitBaseValue=this.element.value},markPrevious:function(){this.updateIndex();if(this.index>0){this.index--}else{if(this.index==-1){this.index=this.entryCount-1}else{this.index=-1}}},markNext:function(){this.updateIndex();if(this.index<this.entryCount-1){this.index++}else{this.index=-1}},updateIndex:function(){if(this.indexHover){this.index=this.indexHover;this.indexHover=0}},onHover:function(c){if(this.entryCount>0){var b=Event.findElement(c,"LI");this.indexHover=b.autocompleteIndex;for(var a=0;a<this.entryCount;a++){this.indexHover==a?Element.addClassName(this.getEntry(a),"selected"):Element.removeClassName(this.getEntry(a),"selected")}}},updateElement:function(c){if(this.options.updateElement){this.options.updateElement(c);return}var b="";if(this.options.select){var a=$(c).select("."+this.options.select)||[];if(a.length>0){b=Element.collectTextNodes(a[0],this.options.select)}}else{b=Element.collectTextNodesIgnoreClass(c,"informal")}this.oldElementValue=this.element.value=b;this.element.focus();if(this.options.afterUpdateElement){this.options.afterUpdateElement(this.element,c)}}});
