
// after how many days does the cookie expire
var cookielifetime=1

var futureyear=2004
var futuremonth=11
var futureday=24
var displaytype="showall"
var digitordate="isdigit"
var aftercountdown="stopit"
var digitfrom=338
var digitto=0
// speed will vary randomly between these two values
var maxspeed=4
var minspeed=0.1

var countdownid=new Array()
var futuredate
var nowdate
var resulthoursraw
var resulthours
var resultminutesraw
var resultminutes
var resultsecondsraw
var resultseconds

var p_seconds
var p_minutes
var p_hours
var p_days

var resultsecondsonly
var resultminutesonly
var resulthoursonly
var content

var i_countdown=-1
var countdownid

var step=1
maxspeed*=1000
minspeed*=1000

if (digitfrom>digitto) {step=-1}
if (digitfrom<digitto) {step=1}

var browserinfos=navigator.userAgent 
var ns4=document.layers
var ie4=!document.getElementById&&document.all&&!browserinfos.match(/Opera/)
var ie5=document.getElementById&&document.all&&!browserinfos.match(/Opera/)
var ns6=document.getElementById&&!document.all&&!browserinfos.match(/Opera/)
var opera=browserinfos.match(/Opera/)  

function outofbounds( value ) {
	return ( ( step == 1 && (value <= digitfrom || value >= digitto) )  ||
			 ( step == -1 &&  (value <= digitto || value >= digitfrom) ) )
}


function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function setfuturedate() {
	futuredate=new Date(futureyear,futuremonth,futureday,0,0,0)
	if (digitordate=="isdigit") {content=digitfrom-step	}
	n = Number(readCookie("counter"))
	if ( !outofbounds(n) )
		content = n
	docountdown()
}

// generate a random speed between the max and min
function randomspeed() {
	return Math.round((Math.random() * (maxspeed-minspeed))) + minspeed; 
}

function docountdown() {
	speed = randomspeed()
	if (digitordate=="isdate") {
		calculateresults()
		formatresults()
		displayresults()
		saveresults()
		setTimeout("docountdown()",speed)
	}
	else if (digitordate=="isdigit") {
		content+=step	
		displayresults()
		saveresults()
		if (content==digitto) {
			setTimeout("happensafter()",speed)
		}
		else {
			setTimeout("docountdown()",speed)
		}
	}
}

function firstcountdown() {
	if (digitordate=="isdate") {
		futuredate=new Date(futureyear,futuremonth,futureday,0,0,0)
		calculateresults()
		formatresults()
	}
	else if (digitordate=="isdigit") {
		content=digitfrom
	}
}

function calculateresults() {
nowdate=new Date()
resultdaysraw=(Date.parse(futuredate)-Date.parse(nowdate))/1000/60/60/24
if (displaytype!="showall") {
	resultsecondsonly=Math.floor((Date.parse(futuredate)-Date.parse(nowdate))/1000)
	resultminutesonly=Math.floor((Date.parse(futuredate)-Date.parse(nowdate))/1000/60)
	resulthoursonly=Math.floor((Date.parse(futuredate)-Date.parse(nowdate))/1000/60/60)
}
else {
	resultdays=Math.floor((Date.parse(futuredate)-Date.parse(nowdate))/1000/60/60/24)
	resulthoursraw=(resultdaysraw-resultdays)*24
	resulthours=Math.floor((resultdaysraw-resultdays)*24)
	resultminutesraw=(resulthoursraw-resulthours)*60
	resultminutes=Math.floor((resulthoursraw-resulthours)*60)
	resultsecondsraw=(resultminutesraw-resultminutes)*60
	resultseconds=Math.floor((resultminutesraw-resultminutes)*60)
	}
}

function formatresults() {
	if (displaytype=="showall") {
		if (resultdays>1) {p_days="days"}
		else {p_days="day"}
		if (resultminutes<10) {resultminutes="0"+resultminutes}
		if (resultseconds<10) {resultseconds="0"+resultseconds}
		content=resultdays+" "+p_days+" "+resulthours+"h "+resultminutes+"m "+resultseconds +"s"
	}
	else if (displaytype=="showdays") {
		if (resultdays>1) {p_days="days"}
		else {p_days="day"}
		content=resultdays+" "+p_days
	}
	else if (displaytype=="showhours") {
		content=resulthoursonly+" hrs"
	}
	else if (displaytype=="showminutes") {
		content=resultminutesonly+" min"
	}
	else if (displaytype=="showseconds") {
		content=resultsecondsonly+" sec"
	}
}

function happensafter() {
	if (aftercountdown=="repeatit") {
		if (digitordate=="isdigit") {content=digitfrom-step}
		docountdown()
	}
	if (aftercountdown!="stopit" && aftercountdown!="repeatit") {
		document.location.href=aftercountdown
	}
}

function displayresults() {
	if (ie4) {
		for (i=0;i<=countdownid.length-1;i++) {
			var thisclock=eval(countdownid[i])
			thisclock.innerHTML=content
		}
	}
	else {
		for (i=0;i<=countdownid.length-1;i++) {
			document.getElementById(countdownid[i]).innerHTML=content
		}
	}
}

function saveresults()
{
	if ( outofbounds(content) )
		eraseCookie("counter");
	else
		createCookie( "counter", content, cookielifetime ) 
}

function setcountdown() {
	if (ns4 || ie4 || ie5 || ns6 || opera) {
		firstcountdown()
		i_countdown++
		countdownid[i_countdown]="countdown"+i_countdown
		document.write("<span id='"+countdownid[i_countdown]+"' style='position:relative'>"+content+"</span>")
	}
}

if (ie4 || ie5 || ns6 || opera) {
	onload=setfuturedate
}
