(function($) {

	var methods = {
	    init : function(options) {

		    var defaults = {
		        targetDate : new Date(2011, 11, 15, 10, 0, 0),
		        digitWidth : 19,
		        digitHeight : 25,
		        digitImage : '/images/bg_clock-numbers.png'
		    };

		    return this.each(function() {

			    var $this = $(this);

			    if (options) {
				    $.extend(defaults, options);
			    }

			    // set up the digit divs
			    $(this).find('div').each(function() {
				    $(this).css({
				        'width' : (defaults.digitWidth * 2),
				        'height' : defaults.digitHeight + 8
				    });
				    for ( var i = 0; i < 2; i++) {
					    $(this).append($('<div />', {
						    'class' : 'digit-' + i + ' countdown-digit'
					    }).css({
					        'background-image' : 'url(' + defaults.digitImage + ')',
					        'background-position' : '0px 0px',
					        'width' : defaults.digitWidth,
					        'height' : defaults.digitHeight
					    }));
				    }
			    });
			    $(this).data('defaults', defaults);
			    $(this).countdown('tick');
			    $(this).data('timer', setInterval(function() {
				    $this.countdown('tick');
			    }, 1000));

		    });

	    },
	    tick : function() {
		    this.each(function() {
			    var defaults = $(this).data('defaults');
			    // work out the time difference
			    var now = new Date();
			    var datediff = Math.ceil((defaults.targetDate.getTime() - now.getTime()) / 1000);
			    if (datediff > 0) {
				    var display = {
				        days : Math.floor(datediff / 86400),
				        hours : Math.floor((datediff % 86400) / 3600),
				        minutes : Math.floor(((datediff % 86400) % 3600) / 60),
				        seconds : ((datediff % 86400) % 3600) % 60
				    };

		
			    } else {
				    // $(this).hide();
				    var display = {
				        days : 0,
				        hours : 0,
				        minutes : 0,
				        seconds : 0
				    };
			    }
		
			    for ( var k in display) {
				    var part = display[k].toString();
				    if (part.length < 2) {
					    part = '0' + part;
				    }
				    var parts = part.split('');
				    for ( var i = 0; i < 2; i++) {
					    var pos = ((parseInt(parts[i]) * (defaults.digitHeight - 1)) * -1);
					    $(this).find('div.' + k).find('div.digit-' + i).css({
						    'background-position' : '0px ' + pos + 'px'
					    }, 100).html(parts[i]);
				    }

			    }

		    });
	    }
	};

	$.fn.countdown = function(method) {

		// Method calling logic
		if (methods[method]) {
			return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
		} else if (typeof method === 'object' || !method) {
			return methods.init.apply(this, arguments);
		} else {
			$.error('Method ' + method + ' does not exist on jQuery.tooltip');
		}

	};

})(jQuery);
