(function($) {
	$.fn.XTypeField = function(options) {
		return this.each(function() { $.XTypeField(this, options); });
	};
	$.XTypeField = function(container, options) {
		var settings = {'type':'int'};
		if (options) $.extend(settings, options);
		switch(settings.type){
			case 'int':
				$.XTypeFieldInt(container, settings);
				break;
		}
	};
	$.XTypeFieldIntSetUp = function(container, options){
		var settings = {'maxlen':10,'max':2147483647};
		if (options) $.extend(settings, options);
		var count = $(container).attr("value");
		if(count=='') count=0;
		count = parseInt(count); 
		$(container).attr("value",count+1);
	}
	$.XTypeFieldIntSetDown = function(container, options){
		var settings = {'min':1};
		if (options) $.extend(settings, options);
		var count = $(container).attr("value");
		if(count=='') count=0;
		count = parseInt(count); 
		if(count>settings.min) $(container).attr("value",count-1);
	}
	$.XTypeFieldIntCheck = function(container, options){
		var settings = {'maxlen':10,'min':-2147483647,'max':2147483647};
		if (options) $.extend(settings, options);
		var str = $(container).attr("value");
		str = str.replace(/[^\d- ]*/g, '');
		intgr = parseInt(str);
		if(intgr<settings.min) str=settings.min;
		if(intgr>settings.max) str=settings.max;
		str=parseInt(str);
		if(isNaN(str)) str='';
		$(container).attr("value",str);
	}
	$.XTypeFieldInt = function(container, options){
		var settings = {'maxlen':10,'size':11,'min':-2147483647,'max':2147483647};
		if (options) $.extend(settings, options);
		$(container).
			focus(function(){
				$(this).mousewheel(function(event, delta){
					if(delta>0) $.XTypeFieldIntSetUp(this,settings);
					else if(delta<0) $.XTypeFieldIntSetDown(this,settings);
				});
			}).
			keydown(function(event){
				switch(event.keyCode?event.keyCode:event.which?event.which:null){ 
					case 0x26: 
					case 107: 
						$.XTypeFieldIntSetUp(this,settings); 
						break; 
					case 0x28: 
					case 109: 
						$.XTypeFieldIntSetDown(this,settings); 
						break; 
					default:
						//alert(event.keyCode);
						break; 
				} 
			}).
			keyup(function(){
				$.XTypeFieldIntCheck(this,settings);
			}).
			blur(function(){
				if($(this).attr("value")=='') $(this).attr("value",settings.min>0?settings.min:0);
				$(this).unmousewheel();
			});
	}
})(jQuery);
