function TimeInterval(counter, name, seconds)
{
	this.counter = counter;
	this.name = name;
	this.seconds = seconds;
	
	this.show = getSubClass(counter, 'show-'+this.name).length > 0;
	if (this.show) {
		this.node = getSubClass(getSubClass(counter, name)[0], 'value')[0];
	}
	
	this.updateTime = function(time) {
		if (this.show && this.node != null) {
			interval = Math.floor(time / this.seconds);
			this.node.innerHTML = interval;
			return time - interval * this.seconds;
		}
		return time;
	};
}



//if this script is loaded several times in one document we only want it to fire once
var coundAroundLoaded = false;
addEvent(window, 'load', function() {
	if (!coundAroundLoaded) {
		coundAroundLoaded = true;
		
		var countArounds = getSubClass(document, 'count-around');
		for (i=0; i<countArounds.length; i++) {
			counter = countArounds[i];
			
			setupCounter(counter);
		}
	}
});

function setupCounter(counter)
{
	var startTime = getSubClass(counter, 'start-time')[0].value;
	var endTime = getSubClass(counter, 'end-time')[0].value;
	
	var timeIntervals = new Array(
		new TimeInterval(counter, 'years', 31557600),
		new TimeInterval(counter, 'months', 2592000),
		new TimeInterval(counter, 'weeks', 604800),
		new TimeInterval(counter, 'days', 86400),
		new TimeInterval(counter, 'hours', 3600),
		new TimeInterval(counter, 'minutes', 60),
		new TimeInterval(counter, 'seconds', 1),
		new TimeInterval(counter, 'miliseconds', 0.001)
	);
	
	var updateTime = 60;
	for (var i in timeIntervals) {
		var timeInterval = timeIntervals[i];
		
		if (timeInterval.show && timeInterval.seconds / 10 < updateTime) {
			updateTime = timeInterval.seconds / 10;
		}
	}
	if (updateTime < 0.05) {
		updateTime = 0.05
	}
	
	var updateFunction = function() {
		var time = new Date().getTime() / 1000;
		var difference;
		if (startTime != 0 && endTime != 0) {
			difference = endTime - startTime;
		} else if (startTime == 0) {
			if (time > endTime) {
				difference = 0;
			} else {
				difference = endTime - time;
			}
		} else if (endTime == 0) {
			difference = time - startTime;
		}
		
		for (var i in timeIntervals) {
			var timeInterval = timeIntervals[i];
			difference = timeInterval.updateTime(difference);
		}
	}
		
	updateFunction();
	setInterval(updateFunction, timeInterval);
}

function hasStyleClass(sender, className) {
	return sender.className.indexOf(className) !== -1;
}

function getSubClass(sender, className) {
	if (sender.getElementsByClassName) {
		return sender.getElementsByClassName(className);
	} else {
		var classes = new Array();
		
		var els = sender.getElementsByTagName("*");
		if(els.length < 1 && sender.all)els = sender.all;
		for(var count=0; count < els.length; count++) {
			if(hasStyleClass(els[count], className))
				classes.push(els[count]);
		}
		return classes;
	}
}

function addEvent(sender, event, func) {
	try {
		return sender.addEventListener(event, func, false); 
	} catch (err){
		return sender.attachEvent('on' + event, func);
	}
}

function removeEvent(sender, event, func) {
	try {
		return sender.removeEventListener(event, func, false);
	} catch (err) {
		return sender.detachEvent('on' + event, func);
	}
}