var otxJsSugestions=Class.create();otxJsSugestions.prototype={requestTimeOut:100,requestMinChars:1,dynamicList:"",lastInsertText:"",autoInsert:false,autoInsertOnBlur:false,autoJumpToFirst:true,autoJumpToLast:true,splitByComa:false,charSet:"alpha",inputId:"",active:false,chTmeout:"",chAutoHideTmeout:"",autoHideTimeout:0,chKeyPress:"",fullRequest:false,initialize:function(b,a,c){this.inputId=b;Event.observe(b,"keyup",this.onKeyUp.bindAsEventListener(this));Event.observe(b,"keydown",this.onKeyPress.bindAsEventListener(this));Event.observe(b,"blur",this.onBlur.bindAsEventListener(this));Event.observe(b,"click",this.onClick.bindAsEventListener(this));if(c){this.requestTimeOut=c.timeOut?c.timeOut:this.requestTimeOut;this.requestMinChars=c.minChars?c.minChars:this.requestMinChars;this.autoHideTimeout=c.autoHideTimeout?c.autoHideTimeout:this.autoHideTimeout;this.dynamicList.listActive=c.listActiveClass?c.listActiveClass:"hover";this.autoInsert=c.autoInsertOnCursorMove?c.autoInsertOnCursorMove:false;this.autoInsertOnBlur=c.autoInsertOnBlur?c.autoInsertOnBlur:false;this.autoJumpToFirst=c.autoJumpToFirst?c.autoJumpToFirst:true;this.autoJumpToLast=c.autoJumpToLast?c.autoJumpToLast:true;this.splitByComa=c.splitByComa?c.splitByComa:true;this.charSet=c.charSet?c.charSet:"alpha"}this.dynamicList=new otxJsDynamicList(a,b)},onKeyUp:function(b){if(this.isAllowedChar(b.keyCode)||(b.keyCode==Event.KEY_BACKSPACE)||(b.keyCode==Event.KEY_DELETE)||(b.keyCode==188)){this.fullRequest=false;if(this.splitByComa){var a=Event.element(b).value.split(",");this.lastInsertText=a[a.length-1]}else{this.lastInsertText=Event.element(b).value}if(b.keyCode==188){this.lastInsertText="&nbsp;"}if(this.lastInsertText.length<1){this.dynamicList.hide();this.onReset()}if(this.lastInsertText.length>=this.requestMinChars&&this.lastInsertText.length>0){clearTimeout(this.chTimeout);if(this.requestTimeOut>0){this.chTimeout=setTimeout(this.doRequest.bind(this),this.requestTimeOut)}}}},onKeyPress:function(a){if(this.active){switch(a.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:if(this.dynamicList.currentIndex>-1){Event.stop(a)}this.active=false;this.dynamicList.onReturn();return false;case Event.KEY_UP:this.dynamicList.markPrevious(this.autoJumpToLast);if(this.autoInsert){if(this.dynamicList.currentIndex<0){$(this.inputId).value=this.lastInsertText}else{this.dynamicList.onSelect(this.dynamicList.currentIndex)}}clearTimeout(this.chAutoHideTimeout);if(this.autoHideTimeout>0){this.chAutoHideTimeout=setTimeout(this.hideList.bind(this),this.autoHideTimeout)}Event.stop(a);return false;case Event.KEY_DOWN:this.dynamicList.markNext(this.autoJumpToFirst);if(this.autoInsert){if(this.dynamicList.currentIndex<0){$(this.inputId).value=this.lastInsertText}else{this.dynamicList.onSelect(this.dynamicList.currentIndex)}}clearTimeout(this.chAutoHideTimeout);if(this.autoHideTimeout>0){this.chAutoHideTimeout=setTimeout(this.hideList.bind(this),this.autoHideTimeout)}Event.stop(a);return false;case Event.KEY_ESC:this.hideList();Event.stop(a);return false}}},onBlur:function(){setTimeout(this.hideList.bind(this),300)},doFullRequest:function(a){this.fullRequest=true;this.doRequest()},hideList:function(){if(this.active&&this.autoInsertOnBlur){this.dynamicList.onReturn()}else{if(this.active){this.dynamicList.hide()}}this.active=false},isAllowedChar:function(a){switch(this.charSet){case"alnum":return(a>=65&&a<=90)||(a>=48&&a<=57);case"numeric":return a>=48&&a<=57;break;default:return a>=65&&a<=90}return false},doRequest:function(){var a=this.generateUrl(this.lastInsertText);if(a&&(this.lastInsertText.length>=this.requestMinChars||this.fullRequest)){new Ajax.Request(a,{method:"get",onComplete:this.onComplete.bind(this)})}},onComplete:function(transport){this.dynamicList.onSelect=this.onSelect.bind(this);this.dynamicList.onShow=this.onShow.bind(this);this.dynamicList.onHide=this.onHide.bind(this);this.dynamicList.onReset=this.onReset.bind(this);this.dynamicList.onListElementCreate=this.onListElementCreate.bind(this);this.active=true;if(transport.status==200&&(this.lastInsertText.length>=this.requestMinChars||this.fullRequest)){var _list=eval(transport.responseText);if(_list.length>0){this.dynamicList.updateList(_list);this.dynamicList.show()}else{this.dynamicList.hide()}clearTimeout(this.chAutoHideTimeout);if(this.autoHideTimeout>0){this.chAutoHideTimeout=setTimeout(this.hideList.bind(this),this.autoHideTimeout)}}},generateUrl:function(){return null},onSelect:function(){return null},onShow:function(){return null},onHide:function(){return null},onReset:function(){return null},getEntryData:function(a){return this.dynamicList.elements[a]},onListElementCreate:function(b,a){return null},onClick:function(a){if(this.active){this.dynamicList.hide();this.active=false}else{this.doFullRequest(a)}}};var otxJsDynamicList=Class.create();otxJsDynamicList.prototype={DOMelement:"",currentIndex:-1,elements:Array(),listActive:"hover",autoHideTimeout:5000,initialize:function(listName,inputId){x=document.createElement("ul");x.setAttribute("id",listName);x.className="sugestions";x.style.display="none";document.body.appendChild(x);this.DOMelement=$(listName);this.DOMinput=$(inputId);this.DOMinput.setAttribute("autocomplete","off");
/*@cc_on @*/
/*@if (@_jscript_version < 5.8)
				// iframe dla ukrycia selectów

    		x = document.createElement("iframe");
    		x.setAttribute("id",listName + "ie");
    		x.style.display="none";
    		document.body.appendChild(x);

				this.DOMiframe = $(listName + "ie");
    		@end @*/
},updateList:function(a){this.clearList();this.elements=a;this.createList()},createList:function(){if(this.DOMelement){if(this.elements.length>0){for(i=0;i<this.elements.length;i++){var a=document.createElement("li");a.innerHTML=this.elements[i].n;a.setAttribute("value",i);if(this.elements[i].lm){a.className="break"}this.onListElementCreate(a,i);Event.observe(a,"mousedown",this.onClick.bind(this));Event.observe(a,"mouseover",this.onMouseOver.bind(this));Event.observe(a,"mousedown",this.onMouseDown.bind(this));this.DOMelement.appendChild(a)}}}},clearList:function(){this.DOMelement.innerHTML="";this.currentIndex=-1;this.onReset()},show:function(){this.DOMelement.style.display="block";this.DOMelement.style.position="absolute";this.DOMelement.style.top=findPos(this.DOMinput).y+this.DOMinput.offsetHeight+"px";this.DOMelement.style.left=findPos(this.DOMinput).x+"px";
/*@cc_on @*/
/*@if (@_jscript_version < 5.8)
				this.DOMelement.style.top = findPos(this.DOMinput).y + this.DOMinput.offsetHeight + 1 + "px";
		    this.DOMelement.style.left = findPos(this.DOMinput).x + 1 + "px";

				// iframe dla ukrycia selectów
				this.DOMiframe.style.display = 'block';
				this.DOMiframe.style.position = 'absolute';
				this.DOMiframe.style.top = findPos(this.DOMinput).y + this.DOMinput.offsetHeight + 1 + "px";
		    this.DOMiframe.style.left = findPos(this.DOMinput).x + 1 + "px";

				this.DOMiframe.style.width = this.DOMelement.offsetWidth + 'px';
				this.DOMiframe.style.height = this.DOMelement.offsetHeight + 'px';
			
    		@end @*/
this.onShow()},hide:function(){this.DOMelement.style.display="none";
/*@cc_on @*/
/*@if (@_jscript_version < 5.8)
				// iframe dla ukrycia selectów
				this.DOMiframe.style.display = 'none';
			
    		@end @*/
this.onHide()},markNext:function(a){if(this.currentIndex<this.elements.length){this.currentIndex++;if(this.currentIndex==this.elements.length){if(a){this.currentIndex=0}else{this.currentIndex--}}}this.render()},markPrevious:function(a){this.currentIndex--;if(this.currentIndex<-1){if(a){this.currentIndex=this.elements.length-1}else{this.currentIndex=-1}}this.render()},render:function(){var a=this.DOMelement.childNodes;for(i=0;i<a.length;i++){Element.classNames(a[i]).remove(this.listActive);if(this.currentIndex==i){Element.classNames(a[i]).add(this.listActive)}}},onReturn:function(){if(this.currentIndex>-1){this.onSelect(this.currentIndex)}this.hide()},onClick:function(a){this.hide();var b=Event.element(a);this.onSelect(b.value)},onMouseDown:function(a){this.hide();var b=Event.element(a);this.onSelect(b.value)},onMouseOver:function(b){var a=$(Event.element(b));Event.stop(b);this.currentIndex=a.value;this.render()},onShow:function(){return null},onHide:function(){return null},onReset:function(){return null},onSelect:function(){return null},onListElementCreate:function(b,a){return null}};
