/*
	Blackout Rugby Clock
	
	This code will run a ticking text clock based on a specified time. Not the client PC's time.
	
	(c) 2006 Jeremy Bell
	jeremy@blackoutwebdesign.com
*/

//========================================================= Variables =========================================================//

var clockId = "clockHolder";
var dateId = "dateHolder";
var difference = 0;
var clockurl = String(window.location);
clockurl = clockurl.indexOf("/game/")>=0 ? "../" : "";
clockurl += 'servlets/clock.php';
var clockInteractive = 0;
var localclock = false;
var localdifference = 0;
var localclockId = "localclockHolder";
var localdateId = "localdateHolder";
var globalclock = false;
var globaldifference = 0;
var globalclockId = "globalclockHolder";
var globaldateId = "globaldateHolder";

//========================================================= Functions =========================================================//

function syncClock(attempts){
	if(attempts==null) attempts=0; 
	getDataReturnText(clockurl, clockHandler, clockErrorHandler, false,attempts, clockInteractiveHandler);
	document.getElementById(clockId).innerHTML = "Syncing";
}

function clockInteractiveHandler(){
	var now = new Date();
	clockInteractive = now.getTime();
	document.getElementById(clockId).innerHTML = "Syncing";
}

function clockHandler(text,clockformat){
	var now = new Date();
	var dif = now.getTime() - clockInteractive;
	if(text.indexOf('-')>-1){
		localclock = true;
		var ltime = text.substr(text.indexOf('-')+1);
		eval("var localtime = new Date("+ltime+");");
		localtime = new Date(localtime.getTime()+dif);
		localdifference = localtime.getTime() - now.getTime();
		var btime = text.substr(0,text.indexOf('-'));
		eval("var blackouttime = new Date("+btime+");");
		blackouttime = new Date(blackouttime.getTime()+dif);
		difference = blackouttime.getTime() - now.getTime();
	} else {
		localclock = false;
		var btime = text;
		eval("var blackouttime = new Date("+btime+");");
		blackouttime = new Date(blackouttime.getTime()+dif);
		difference = blackouttime.getTime() - now.getTime();
	}
	updateClock(clockformat);
	setInterval("updateClock("+clockformat+");",1000);
}

function clockErrorHandler(status,url,attempts){
	if(attempts<3){
		syncClock();
	} else {
		setTimeout("syncClock();",5000);
	}
}

function updateClock(clockformat){
	var now = new Date();
	now.setTime(now.getTime()+difference);
	if(document.getElementById(clockId)) document.getElementById(clockId).innerHTML = (clockformat==12?twelveHourTime(now.getHours()):now.getHours())+":"+addZero(now.getMinutes())+":"+addZero(now.getSeconds())+(clockformat==12?ampm(now.getHours()):"");
	if(document.getElementById(dateId)) document.getElementById(dateId).innerHTML = days[now.getDay()]+" "+now.getDate()+" "+months[now.getMonth()]+" "+now.getFullYear();
	if(localclock){
		var localnow = new Date();
		localnow.setTime(localnow.getTime()+localdifference);
		if(document.getElementById(localclockId)) document.getElementById(localclockId).innerHTML = (clockformat==12?twelveHourTime(localnow.getHours()):localnow.getHours())+":"+addZero(localnow.getMinutes())+":"+addZero(localnow.getSeconds())+(clockformat==12?ampm(localnow.getHours()):"");
		if(document.getElementById(localdateId)) document.getElementById(localdateId).innerHTML = days[localnow.getDay()]+" "+localnow.getDate()+" "+months[localnow.getMonth()]+" "+localnow.getFullYear();
	}
	if(globalclock){
		var globalnow = now;
		globalnow.setTime(globalnow.getTime()+globaldifference*60*60*1000);
		if(document.getElementById(globalclockId)) document.getElementById(globalclockId).innerHTML = (clockformat==12?twelveHourTime(globalnow.getHours()):globalnow.getHours())+":"+addZero(globalnow.getMinutes())+":"+addZero(globalnow.getSeconds())+(clockformat==12?ampm(globalnow.getHours()):"");
		if(document.getElementById(globaldateId)) document.getElementById(globaldateId).innerHTML = days[globalnow.getDay()]+" "+globalnow.getDate()+" "+months[globalnow.getMonth()]+" "+globalnow.getFullYear();
	}
}

function twelveHourTime(num) {
	if(num==0){
		return 12;
	} else if(num > 12){
		return num-12;
	} else {
		return num;
	}
}

function addZero(num){
	return num < 10 ? '0'+num : num;
}

function ampm(h){
	return h < 12 ? messages.am : messages.pm;
}
