
function IntLimiter(obj, min, max, value, plus_obj, minus_obj){ // {{{

	this.obj = (typeof obj == 'string') ? document.getElementById(obj) : obj;
	if(!this.obj || this.obj.type != 'text') return false;

	this.min = parseInt(min);
	this.max = parseInt(max);

	if(null != plus_obj){
		this.plus_button = (typeof plus_obj == 'string') ? document.getElementById(plus_obj) : plus_obj;
	}
	if(null != minus_obj){
		this.minus_button = (typeof minus_obj == 'string') ? document.getElementById(minus_obj) : minus_obj;
	}

	this.inited = false;

	this.Init = function() // {{{
	{
		if(!this.plus_button){
			this.plus_button = document.createElement('INPUT');
			this.plus_button.type = 'button';
			this.plus_button.value = '+';
			this.plus_button.style.width = this.plus_button.offsetHeight;
			this.obj.parentNode.insertBefore(this.plus_button, this.obj.nextSibling);
		}
		this.plus_button._limiter = this;
//		this.plus_button.onclick = function(){this._limiter.Plus(); return false;}; // slow in IE
		this.plus_button.onmouseup = function(){this._limiter.Plus(); return false;};

		if(!this.minus_button){
			this.minus_button = document.createElement('INPUT');
			this.minus_button.type = 'button';
			this.minus_button.value = '-';
			this.obj.parentNode.insertBefore(this.minus_button, this.obj.nextSibling);
			this.minus_button.style.width = this.minus_button.offsetHeight;
		}
		this.minus_button._limiter = this;
//		this.minus_button.onclick = function(){this._limiter.Minus(); return false;}; //  // slow in IE
		this.minus_button.onmouseup = function(){this._limiter.Minus(); return false;};

		this.obj._limiter = this;
		if(this.obj.onchange){
			this.obj.default_onchange = this.obj.onchange;
		}else{
			this.obj.default_onchange = function(){};
		}
		this.obj.onchange = function(){this._limiter.SetValue(this.value);};

		this.SetValue(0);

	} // }}}

	this.GetValue = function() // {{{
	{
		return parseInt(this.obj.value);
	} // }}}

	this.SetValue = function(val) // {{{
	{
		val = parseInt(val);
		if(isNaN(val)) val = 0;
		if(val < this.min) val = this.min;
		if(val > this.max) val = this.max;

		this.plus_button.disabled = (val >= this.max);
		this.minus_button.disabled = (val <= this.min);

		this.obj.value = val;
		this.obj.default_onchange();
	} // }}}

	this.Plus = function() // {{{
	{
		var val = this.GetValue();
		val++;
		this.SetValue(val);
	} // }}}

	this.Minus = function() // {{{
	{
		var val = this.GetValue();
		val--;
		this.SetValue(val);
	} // }}}

	this.Disable = function() // {{{
	{
		this.obj.disabled = true;
		this.plus_button.disabled = true;
		this.minus_button.disabled = true;
		return true;
	} // }}}

	this.Activate = function() // {{{
	{
		this.obj.disabled = false;
		this.SetValue(this.obj.value);
	} //}}}

	this.Init();
	if(!isNaN(value)) this.SetValue(value);

} // }}}

