var MooCountdown = new Class({
	//implements
	Implements: [Options,Log],
	// placeholder variables
	target: '',
	today: '',
	complete: false,
	//options
	options: {
		element: 'countdown',
		target: '',
		intervals: ['day', 'hour', 'minute', 'second'],
		completeClass: 'complete',
		leadingZeroes: false
	},
	
	//initialization
	initialize: function(options) {
		//set options
		this.setOptions(options);
		this.options.element = $(this.options.element);
		if (this.options.target == '' && this.options.element) {
			this.options.target = new Date();
			this.options.intervals.each(function(item) {
				if (this.options.element.getElement('.' + item)) {
					var inc = this.options.element.getElement('.' + item).get('text').toInt();
					this.options.target.increment(item, inc);
				}
			}, this);
		} else if (this.options.target != '') {
			this.options.target = new Date().parse(this.options.target);
		}
		return this;
	},
	
	//get things started
	start: function() {
		if (this.options.element) {
			this.tick();
		} else {
			this.log('Cannot find countdown element');
		}
	},
	
	//calculate the date
	tick: function() {
		var target = this.options.target.clone();
		var today = new Date();
		var ms = today.diff(target, 'ms');
		var complete = (ms <= 0 ? true : false);
		this.options.intervals.each(function(item, index) {
			var diff, multiplier;
			if (!complete) {
				switch(item) {
					case 'day':
						multiplier = 1000 * 60 * 60 * 24;
						break;
					case 'hour':
						multiplier = 1000 * 60 * 60;
						break;
					case 'minute':
						multiplier = 1000 * 60;
						break;
					case 'second':
						multiplier = 1000;
						break;
					case 'ms':
						multiplier = 1;
						break;
				}
				diff = Math.floor(ms / multiplier);
				ms -= (diff * multiplier);
			} else {
				diff = 0;
			}
			diff = this.prepend_zero(diff);
			this.options.element.getElement('.' + item).set('text', diff);
		}, this);
		if (complete) {
			this.options.element.addClass(this.options.completeClass);
		} else {
			this.tick.delay(1000, this);
		}
	},
	
	// adds leading zeroes (or not)
	prepend_zero: function(number) {
		if (this.options.leadingZeroes && number.toString().length == 1) {
			return '0' + number.toString();
		} else {
			return number
		}
	}
});

/* usage
window.addEvent('domready',function() {
	$$('.countdown').each(function(el) {
		new MooCountdown({
			element: el,
			leadingZeroes: true
		}).start();
	});
}); */