/**
 * jQuery Graphical Counter
 * Needed something
 * @name jquery.hw2counter-1.0.js
 * @author Marco Ivarsson - http://hw2k.se
 * @version 1.0
 * @date June 15, 2010
 * @category jQuery plugin
 * @copyright (c) 2010 marco Ivarsson (hw2k.se)
 * @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US
 * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
 */
(function($){
    $.fn.extend({ 
        hw2counter: function(options) {
    	
    		var defaults = {
    		    numbers: 1, 		/* How many numbers to use, don't go overboard */
    		    initial: 0, 		/* Starting value */
    		    min: 0, 			/* Lowest possible value */
    		    max: 0, 			/* Highest possible value */
    		    speed: 300, 		/* Counting speed */
    		    reset: true, 		/* Resets the number to 0 before counting up*/
    		    announce: false, 	/* Alerts if the min or max values are exceeded, will probably be updated to function calls */
    		    height: 0,			/* Define this number if the */
    		    current: 0
    		};
    		var options = $.extend(defaults, options);
    		
            return this.each(function() {
            	
            	var $container = $(this);
            	var digits = '<span>0</span><span>1</span><span>2</span><span>3</span><span>4</span><span>5</span><span>6</span><span>7</span><span>8</span><span>9</span>';
            	var number_parts = ("" + options.initial).split("");
            	
            	var fallback_number = parseInt($container.html());
            	if(fallback_number > 0) {
            		options.initial = fallback_number;
            	}
            	
            	$container.html('');
            	for(var i = 0;i < options.numbers;i++) {
            		var $number = $('<div />', { 'class': 'hw2counter-number' }).append('<div class="hw2counter-scroller">'+digits+'</div>');
            		$container.append($number);
            	}
            	
            	var $numbers = $container.find('.hw2counter-number').reverse();
            	if(!options.height) {
            		options.height = $numbers.eq(0).height();
            	}
            	
            	$container.bind('hw2count', function(event, arg) {
            		
            		var numbers = [], initial = false, value = null;
	            	if(typeof arg == 'boolean') {
	            		initial = true;
	            		value = options.initial;
	            	} else if(arg != undefined && arg.length != 0 && !isNaN(arg)) {
	            		if(typeof arg == 'number') arg = ""+arg;
	            		if(arg != "0") arg = arg.replace(/^0+/, ''); /* parse leading zeros or javascript might go bananas */
	            		value = parseInt(arg);
            		} else {
            			value = 0;
            		}
	            	
	            	if(value == options.current) return;
	            	options.current = value;
	            	
        			if(options.max > 0 && value > options.max) {
        				value = options.max;
        				if(options.announce) alert('The Maximum value is '+options.max)
        			} else if(options.min > 0 && value < options.min) {
        				value = options.min;
        				if(options.announce) alert('The Minimum value is '+options.min)
        			}
        			
        			if((""+value).length > 1) {
        				numbers = (""+value).split("");
        			} else {
        				numbers.push(value);
        			}     		
            		
            		if(numbers.length < options.numbers) {
            			var diff = options.numbers - numbers.length;
            			for(var i = 0;i < diff;i++) {
            				numbers.unshift(0);
            			}
            		}
                	$numbers.each(function(n, item) {
                		var $scroller = $('.hw2counter-scroller', item).eq(0);
                		var styles = {};
                		var number = parseInt(numbers.pop());
                		if(initial) {
                			styles.top = -(options.height * number);
                			$scroller.css('top', -(options.height * number));
                		} else {
                			if(!isNaN(number)) {
	                			styles.top = -(options.height * number);
	                			if(options.reset) {
	                				$scroller.css('top', 0);
	                			}
	                			$scroller.stop(true, false).animate(styles, options.speed);
                			}
                		}
                	});
                	
                	
            		
            	});
            	
            	if(options.initial > 0) {
            		$container.trigger('hw2count', true)
            	}
            	
            });
        }
    });
})(jQuery);

if(jQuery.fn.reverse == undefined) {
	jQuery.fn.reverse = function() {
	    return this.pushStack(this.get().reverse(), arguments);
	};
}


