function ColumnFilter(mediator,filterDiv,filterId,gridController,columnDef,inputBoxValue,searchFunction){this.mediator=mediator;this.filterDiv=filterDiv;this.filterId=filterId;this.gridController=gridController;this.columnDef=columnDef;this.inputBoxValue=inputBoxValue;this.inputElement=null;this.searchFunction=searchFunction;this.delayID=-1;this.queryDelay=750;this.createFilterElement=function(){this.inputElement=document.createElement('input');this.inputElement.id=this.filterId;this.inputElement.setAttribute("type","text");YAHOO.util.Dom.addClass(this.inputElement,"filterInputBox");if(columnDef.key!="systemName"){YAHOO.util.Dom.setStyle(this.inputElement,"width","3em");}this.inputElement.value=this.inputBoxValue;if(!this.columnDef.gridData.canHaveFilter){YAHOO.util.Dom.setStyle(this.inputElement,"display","none");}this.filterDiv.appendChild(this.inputElement);YAHOO.util.Event.addListener(this.inputElement,"keyup",this.onTextboxKeyUp,this);return this.inputElement;},this.onTextboxKeyUp=function(event,self){var sText=this.value;var nKeyCode=event.keyCode;if(self.ignoreKey(nKeyCode)){return;}if(self.delayID!=-1){clearTimeout(self.delayID);}self.delayID=setTimeout(function(){self.sendQuery(sText);},(self.queryDelay));},this.sendQuery=function(inputBoxValue){var columnType=this.columnDef.gridData.type;var parsed=this.parseUserInput(inputBoxValue,columnType);this.mediator.widgetChanged(globals.SEARCH_BY_NAME,this);this.gridController.setFilter(this.columnDef,parsed.relationAdjusted,parsed.valueAdjusted);this.searchFunction(this.gridController,this.columnDef.key,parsed.relation,parsed.value);},this.ignoreKey=function(nKeyCode){if((nKeyCode==9)||(nKeyCode==13)||(nKeyCode==16)||(nKeyCode==17)||(nKeyCode>=18&&nKeyCode<=20)||(nKeyCode==27)||(nKeyCode>=33&&nKeyCode<=35)||(nKeyCode>=36&&nKeyCode<=40)||(nKeyCode>=44&&nKeyCode<=45)||(nKeyCode==229)){return true;}return false;},this.parseUserInput=function(anInput,aType){var result={};result.relation="";result.value="";result.relationAdjusted="";result.valueAdjusted="";var input=anInput.replace(/(^\s+)|(\s+$)/g,'');if(input==""){result.relation="";result.value="";return result;}if(aType==='number'&&String(parseFloat(input))!=="NaN"){result.relation="ge";result.value=parseFloat(input);result.relationAdjusted=">=";result.valueAdjusted=result.value;return result;}if((input.indexOf('<=')==0)||(input.indexOf('=<')==0)){result.relation="le";result.relationAdjusted="<=";input=input.substring(2);}if((input.indexOf('>=')==0)||(input.indexOf('=>')==0)){result.relation="ge";result.relationAdjusted=">=";input=input.substring(2);}if((input.indexOf('<>')==0)||(input.indexOf('!=')==0)){result.relation="ne";result.relationAdjusted="<>";input=input.substring(2);}if(input.indexOf('<')==0){result.relation="lt";result.relationAdjusted="<";input=input.substring(1);}if(input.indexOf('>')==0){result.relation="gt";result.relationAdjusted=">";input=input.substring(1);}if(input.indexOf('=')==0){result.relation="eq";result.relationAdjusted="=";input=input.substring(1);}if((input.length==0)&&(aType==="number")){input="0";}if(aType==="number"){var f=String(parseFloat(input));if(f==="NaN"){result.value="";result.valueAdjusted=result.value;result.relation="";}else{result.value=f;result.valueAdjusted=result.value;}}else{result.relation="like";result.relationAdjusted="";result.value=input;result.valueAdjusted=result.value;}return result;}}
