/**
 * Dynamite Framework
 * 
 * @link		$HeadURL$
 * @version		$Id$
 * 
 * @category	Dynamite Framework
 * @package		Core
 * 
 * @copyright	Copyright (c) 2005-2009 Rivo Group GmbH
 */

/**
 * Countdown Timer
 * 
 * @author		Andreas Traber (a.traber@rivo-systems.com)
 * 
 * @category	Dynamite Framework
 * @package		Core
 */
dyn_countdownTimers = new Array();
dyn_countdownStartTime = new Date();

dyn_countdownStart();

function dyn_countdownStart() {
	var spans = document.getElementsByTagName('span');
	for (i = 0; i < spans.length; i++) {
		if(spans[i].className == 'dyn-countdown') {
			timer = new Object();
			if(spans[i].getAttribute('rsd:timeBase') != undefined) {
				timer.timeBase = new Date(parseInt(spans[i].getAttribute('rsd:targetDate')) * 1000) - new Date(parseInt(spans[i].getAttribute('rsd:timeBase')) * 1000);
			} else {
				timer.timeBase = new Date(parseInt(spans[i].getAttribute('rsd:targetDate')) * 1000) - dyn_countdownStartTime;
			}
			timer.formatDisplay = spans[i].childNodes[0].innerHTML;
			timer.formatExpired = spans[i].childNodes[1].innerHTML;
			spans[i].childNodes[0].style.visibility = timer.timeBase > 0 ? 'visible' : 'hidden';
			spans[i].childNodes[1].style.visibility = timer.timeBase > 0 ? 'hidden' : 'visible';
			timer.container = spans[i].id;
			dyn_countdownTimers.push(timer);
		}
	}
	dyn_countdownCount();
}

function dyn_countdownCount() {
	var period = new Date() - dyn_countdownStartTime;
	for (i = 0; i < dyn_countdownTimers.length; i++) {
		time = dyn_countdownTimers[i].timeBase - period;		
		visible = document.getElementById(dyn_countdownTimers[i].container).childNodes[time > 0 ? 0 : 1];
		hidden = document.getElementById(dyn_countdownTimers[i].container).childNodes[time > 0 ? 1 : 0];
		visible.style.visibility = 'visible';
		visible.style.position = 'relative';
		hidden.style.visibility = 'hidden';
		hidden.style.position = 'absolute';
		string = time > 0 ? dyn_countdownTimers[i].formatDisplay : dyn_countdownTimers[i].formatExpired;
		string = string.replace(/\[%d\]/g, dyn_countdownCalculateDigit(time, 86400000, 100000, 1));
		string = string.replace(/\[%h\]/g, dyn_countdownCalculateDigit(time, 3600000, 24, 2));
		string = string.replace(/\[%m\]/g, dyn_countdownCalculateDigit(time, 60000, 60, 2));
		string = string.replace(/\[%s\]/g, dyn_countdownCalculateDigit(time, 1000, 60, 2));
		string = string.replace(/\[%ms\]/g, dyn_countdownCalculateDigit(time, 1, 1000, 3));
		if(visible.innerHTML != string) {
			visible.innerHTML = string;
		}
	}
	window.setTimeout("dyn_countdownCount()", 30);
}

function dyn_countdownCalculateDigit(time, factor, range, digits) {
	digit = ((Math.floor(time / factor)) % range).toString();
	if (digit.length < digits) {
		digit = "0" + digit;
	}
	return digit;
}
