function CustomSelect(servlet,inputField,processor,existingPopup,loadicon){this.proc=processor;this.sendServlet=servlet;this.inputField=inputField;this.loader=loadicon;this.ajax=null;this.origMaxLen=0;this.exist=existingPopup;this.useParent=false;this.popup=null;this.container=null;this.defOffset=0;this.maxHeight=100;this.elemSize=0;this.selPos=-1;this.noBlur=false;this.optHeight=0;this.zIndex=50;this.response=function(){if(this.responseStatus[0]==200||this.responseStatus[1]=="OK"){var responseArray=this.response.split("|");if(responseArray.length==3){if(responseArray[1]=="alert"){alert(responseArray[2]);}else if(responseArray[1]=="print"){this.controller.printMsg(responseArray[2]);}else if(responseArray[1]=="json"&&responseArray[0]=="true"){var data=eval('('+responseArray[2]+')');this.controller.processJSON(data);}}}};this.processJSON=function(root){var nr=new NodeRemover(this.popup);nr.removeChildren();var h=0;this.selPos=-1;this.elemSize=root.options.length;for(var j=0;j<root.options.length;j++){var opt=root.options[j];var border=(j+1<root.options.length);var div=this.buildPopupRow(opt.name,opt.value,j,border);}this.popup.scrollTop=0;if(this.popup&&this.popup.style.display=='block'){this.showPopup();}};this.buildPopupRow=function(text,value,pos,border){var vDiv=document.createElement('DIV');if(border)vDiv.style.borderBottom='none';vDiv.appendChild(document.createTextNode(text));vDiv.position=pos;vDiv.textValue=text;vDiv.cs_value=value;vDiv.id=this.inputField+'_div'+pos;vDiv.controller=this;vDiv.onmouseover=function(evt){source=et_findEventSource(evt,true);source.className='hover';var last=document.getElementById(source.controller.inputField+'_div'+source.controller.selPos);if(last)last.className='default';source.controller.selPos=source.position;};vDiv.onmouseout=function(evt){source=et_findEventSource(evt,true);source.className='default';};vDiv.onmousedown=this.divElemMouseClick;this.popup.appendChild(vDiv);return vDiv};this.divElemMouseClick=function(evt){source=et_findEventSource(evt,true);source.controller.popuplateValue();et_stopBubble(evt);};this.putLoadIcon=function(){if(this.loader){var nr=new NodeRemover(this.popup);nr.removeChildren();var div=document.createElement('DIV');div.style.padding='2';div.style.textAlign='center';div.appendChild(et_createImage(this.loader));this.popup.appendChild(div);this.popup.style.height=div.offsetHeight;}};this.sendRequest=function(){this.putLoadIcon();var inf=document.getElementById(this.inputField);this.ajax=new sack(this.sendServlet);this.ajax.setVar("proc_class","nfm.core.entity.ajax.cs."+this.proc);this.ajax.setVar("value",inf.value);this.ajax.requestFile=this.sendServlet;this.ajax.method="POST";this.ajax.onCompletion=this.response;this.ajax.runAJAX();this.ajax.controller=this;};this.computeHeights=function(){this.optHeight=0;for(var i=0;i<this.popup.childNodes.length;i++){var n=this.popup.childNodes[i];n.yPos=this.optHeight;this.optHeight+=n.offsetHeight;}return this.optHeight;};this.highlightByKey=function(nextPos){var ldiv=document.getElementById(this.inputField+'_div'+this.selPos);if(ldiv&&nextPos<this.elemSize)ldiv.className='default';if(nextPos>=0&&nextPos<this.elemSize){var div=document.getElementById(this.inputField+'_div'+nextPos);if(div){div.className='hover';this.popup.scrollTop=Math.max(div.yPos-this.maxHeight+div.offsetHeight,0);}}this.selPos=nextPos;};this.popuplateValue=function(){var last=document.getElementById(this.inputField+'_div'+this.selPos);var input=document.getElementById(this.inputField);input.value=last.textValue;input.cs_value=last.cs_value;this.popup.style.display='none';};this.keyUpHandler=function(evt){var event=(evt)?evt:window.event;var source=et_findEventSource(evt,true);var thisObj=source.controller;if(event.keyCode==40&&thisObj.elemSize>0){thisObj.highlightByKey(thisObj.selPos+1);}else if(event.keyCode==38&&thisObj.elemSize>0){thisObj.highlightByKey(thisObj.selPos-1);}};this.keyPress=function(evt){var event=(evt)?evt:window.event;if(event.keyCode==13||event.keyCode==9){et_findEventSource(evt,true).controller.popuplateValue();}return!(event.keyCode==13||event.keyCode==38);};this.showPopup=function(){if(this.popup){this.popup.style.display='block';}var input=document.getElementById(this.inputField);var sizing=(this.useParent)?input.parentNode:input;var width=Math.max(sizing.clientWidth,sizing.offsetWidth);if(Math.max(this.popup.clientWidth,this.popup.offsetWidth)>width){this.popup.style.width=sizing.clientWidth;}this.popup.style.top=-1*(sizing.offsetTop-this.defOffset);this.popup.style.left=(sizing.offsetLeft-this.defOffset);this.popup.style.height=Math.min(this.computeHeights(),this.maxHeight);};this.popupMouseDown=function(evt){var source=et_findEventSource(evt,true);var thisObj=source.controller;thisObj.noBlur=true;window.setTimeout(function(){thisObj.noBlur=false;document.getElementById(thisObj.inputField).focus();},500);};this.focusHandler=function(evt){source=et_findEventSource(evt,true);var thisObj=source.controller;thisObj.showPopup();};this.blurHandler=function(evt){source=et_findEventSource(evt,true);var thisObj=source.controller;if(thisObj.popup&&!thisObj.noBlur)thisObj.popup.style.display='none';};this.buildPopup=function(input){var root=input.parentNode;var popup=null;var container=null;if(this.exist&&document.getElementById(this.exist)){popup=document.getElementById(this.exist);container=popup.parentNode;container.parentNode.style.zIndex=this.zIndex;}else{container=document.createElement('DIV');container.className='cs_container';popup=document.createElement('DIV');popup.className='popup';}var width=Math.max(input.clientWidth,input.offsetWidth);popup.style.width=width;container.appendChild(popup);root.appendChild(container);popup.controller=this;popup.onmousedown=this.popupMouseDown;this.popup=popup;this.container=container;};this.initialize=function(){if(!document.getElementById(this.inputField)){var thisObj=this;window.setTimeout(function(){thisObj.initialize()},100);}else{var field=document.getElementById(this.inputField);field.controller=this;field.onfocus=this.focusHandler;field.onblur=this.blurHandler;field.onkeyup=this.keyUpHandler;field.onkeypress=this.keyPress;field.cs_value=-1;field.setAttribute("autocomplete","off");this.buildPopup(field);this.sendRequest();}};this.initialize();}