/*
		create a numeric stepper from existing htmlFragment like the following:
		<* id="">
			<* class="minus" />
			<input >
			<* class="plus" />
		</*>
	*/
	function NumericStepper(element,params)
	{
		
		this.eValue;//public HTMLInputElement: input value references
		this.eMinus;//public HTMLElement: decrement handler 
		this.ePlus;//public HTMLElement: increment handler
		
		
		var value=0;//private int: value
		var obj=this;
		var params=params;
		
		this.setParams=function (p)
		{
			params=p
			
			
		}
		
		function validateRange(avalue)
		{
			return (params.maxValue==null||avalue<=params.maxValue)&&(params.minValue==null||avalue>=params.minValue);
		}
		
		this.setValue=function(avalue, flag)
		{	
			$(element).get(0).numericStepper=this;
			
			if(typeof(flag) == 'undefined'){
				flag = true;
			}
			if(this.eValue.get(0).disabled==true)
			return;
			
			if(validateRange(avalue)==true)
			{
				value=avalue;
				this.eValue.get(0).value=avalue;
				if(flag)
				if(params.onChange){
					
					params.onChange(this);
				}
					
				return true;
			}
			
			return false;
		}
		
		this.disable=function(value)
		{
				this.eValue.get(0).disabled=value;
		}
		
		this.getValue=function()
		{
			return value;
		}
		
		this.up=function()
		{
			
				if(this.setValue(value+1)==true)
				{	
					if(params.onUp)
					params.onUp(this);
				}
				
				
			
			
			return value;
		}
		
		this.down=function()
		{
			
			
			if(this.setValue(value-1)==true){
			
				if(params.onDown)
					params.onDown(this);
				
			}
				
			return value;	
		}
		
		
		
		
		//ini:constructor(element:HTMLElement,params:Object)
			if(!jQuery){
				alert("this class needs jQuery");
				return;
			}
			
			this.element=$(element).get(0);
			
			$(element).get(0).numericStepper=this;
			this.eValue=$("input",$(element));
			this.ePlus=$(".plus",$(element));
			this.eMinus=$(".minus",$(element));
			
			this.id=this.eValue.get(0).id;
			
			this.ePlus.click(function(){ obj.up(); return false; });
			this.eMinus.click(function(){ obj.down(); return false; });
			
			this.eValue.blur(function(){
				if(!obj.setValue(parseInt(this.value)))
						this.value=obj.getValue();
			});
			
			if(!params)
			params=new Object();
			
			if(!isNaN(parseInt(this.eValue.get(0).value)))
			value=parseInt(this.eValue.get(0).value);
			
			this.eValue.get(0).value=value;
		//end:constructor
		
		return this;
	}
