/*
 * jQuery LH Stepper 0.1 - Numeric Stepper
 * 
 * http://lmswork.com/
 * 
 * lh.stepper.js - rev 1 
 * Copyright (c) 2010, LMSWork (http://lmswork.com)
 * Liscensed under the MIT License (MIT-LICENSE.txt)
 * http://www.opensource.org/licenses/mit-license.php
 * Created: 2010-08-25 | Updated: 2010-08-25
 * 
 * -----
 * 
 * File generated: Wed Sat 25 00:00:00 GMT+0800 2010
 */

(function($){  
				
	$.stepper = function(options){
		$.extend($.stepper.defaults, options);  
	}
	
	// Default Setting
	$.stepper.defaults = {  
		min:0,
		max:99,
		step:1,
		start:1,
		width:50,
		height:20,
		buttonWidth:20
	};  
	
	$.fn.stepper = function(initOptions){
		return this.each(function(idx,elm){
			var $$ = $(elm);
			var container = $('<div class="lh-stepper-container"/>');
			var buttons = $('<div class="lh-stepper-buttons"/>');
			
			var options = {};
			$.extend(options,$.stepper.defaults);  
			$.extend(options,initOptions);  
			var value = $$.val();
			var lastValue = options.start;
			
			var getValue = function(){
				var val = $$.val();
				if(checkValue(val)){
					if(isNaN(val)) return options.start;
					return !isNaN(parseInt(val)) ? parseInt(val) : lastValue;
				}
				return options.start;
			}
			
			var filter = function(val){
				if(checkValue(val))
					return ensure(typeof val == "string" ? parseInt(val) : val);
				return lastValue;
			}
			
			var ensure = function(val){
			
				if(val < options.min) val = options.min;
				if(val > options.max) val = options.max;
				return val;
			}
			
			var checkValue = function(val){
				return val && String(val).match(/^[0-9]+$/);
			}
			
			var stepUp = function(){
				value = getValue();
				value += options.step;
				if(value > options.max) value = options.max;
				lastValue = value;
				$$.val(value);
			}
			var stepDown = function(){
				value = getValue();
				value -= options.step;
				if(value < options.min) value = options.min;
				lastValue = value;
				$$.val(value);
			}
			
			var checkInput = function(event){
				var char = String.fromCharCode(event.which);
				if(checkValue( $$.val() )){
					
					value = getValue();
					if(value < options.min) value = options.min;
					if(value > options.max) value = options.max;
					
					lastValue = value;
				}
				$$.val(lastValue);				
			}
				
			container.insertBefore(elm);
			container.width(options.width);
			container.height(options.height);
			
			$$.appendTo(container);
			buttons.appendTo(container);
			
			$$.width(options.width - options.buttonWidth);
			
			//$(self).height(options.height);
			$$.keyup(checkInput);
			$$.val( getValue() );
	
			var btnUp = $('<button type="button" class="lh-stepper-button lh-stepper-up">&nbsp;</button>')
				.click(stepUp)
				.appendTo(buttons);
			btnUp.width(options.buttonWidth);
			btnUp.height( options.height * 0.5 );
			
			var btnDown = $('<button type="button" class="lh-stepper-button lh-stepper-down">&nbsp;</button>')
				.click(stepDown)
				.appendTo(buttons);
			btnDown.width(options.buttonWidth);
			btnDown.height( options.height * 0.5 );
		});
	}
})(jQuery);  
