/**
 * Updates the SomaFM time 
 *
 * @version 1.0
 * @author Andrew Christoffersen
 * @website www.websix.ca
 */

var gSomaTimeSourceURL;
var gSomaTimeUpdateDiv; 
var gSomaTimeCheckInterval;
var gSomaTime;
var gTimeoutRef;


new SomaTimeUpdater('/recent/epoch.html', 'somafmtime', 43200000, 1000);


//init function
function SomaTimeUpdater(sourceURL, updateDiv, checkInterval, refreshInterval)
{
	gSomaTimeSourceURL = sourceURL;
	gSomaTimeUpdateDiv = updateDiv;
	gSomaTimeCheckInterval = checkInterval;
	gRefresh = refreshInterval;

	gTimeoutRef = new Array(2);
	gTimeoutRef[0] = -1;
	gTimeoutRef[1] = -1;

	DisplaySomaTime();
}

//server time-grab
function DisplaySomaTime()
{
	new Ajax.Request(gSomaTimeSourceURL,
			{
				method:'get',
				onSuccess: function(transport)
				{
					var content = transport.responseText;
					var parts = content.split(' ');
					gSomaTime = parseInt(parts[0]) + parseInt(parts[1]);
					RefreshSomaTime(true);
				},
			  onFailure: function(transport)
				{
					$(gSomaTimeUpdateDiv).innerHTML = "";
				}	
			});

	if (gTimeoutRef[0] != -1)
	{
		clearTimeout(gTimeoutRef[0]);
	}
	gTimeoutRef[0] = setTimeout('DisplaySomaTime()', gSomaTimeCheckInterval);	
}

//format time display
function GetSomaTimeString()
{
	var date = new Date(gSomaTime * 1000);

	//get in seconds
	var gmtdiff = date.getTimezoneOffset() * 60;
	var gmtdate = new Date( (gSomaTime + gmtdiff) * 1000);

	var timeStr = "SomaFM time is " + date.getHours() + ":" + 
		TwoDigits(date.getMinutes()) + ":" + 
		TwoDigits(date.getSeconds()) + " (" + gmtdate.getHours() + ":" +
		TwoDigits(gmtdate.getMinutes()) + ":" +
		TwoDigits(gmtdate.getSeconds()) + " gmt)";

	return timeStr;
}

function TwoDigits(i)
{
	if (i<10)  {
  		i="0" + i;
  	}
  	
return i;
}

//local time refresh
function RefreshSomaTime(init)
{
	if (!init)
	{
		gSomaTime += gRefresh / 1000;
	}

	$(gSomaTimeUpdateDiv).innerHTML = GetSomaTimeString() ;

	if (gTimeoutRef[1] != -1)
	{
		clearTimeout(gTimeoutRef[1]);
	}
	gTimeoutRef[1] = setTimeout('RefreshSomaTime()', gRefresh);
}
