var vLastSecond

// Update Clocks
function UpdateClocks()
{
	True_Clock();
	TrueYear_Clock();
	
	var vNow = new Date();
	if (vNow.getSeconds() != vLastSecond)
	{
	
		BCD_Clock();
		Horiz_Clock();
	}
	updateClock();
}

// Update BCD_Clock
function BCD_Clock()
{
	// Get current time in HHMMSS format
	var now = new Date();
	var time = zeropad(now.getHours());
	time += "" + zeropad(now.getMinutes());
	time += "" + zeropad(now.getSeconds());

	// Loop through each character position in time variable
	for (i=1; i<=6; i++)
	{
		// Get current character
		var num = time.charAt(i - 1);

		// Set each decimal character below the clock
		switch(i)
		{
			case 1: document.getElementById('H1').innerHTML = num; break;
			case 2: document.getElementById('H2').innerHTML = num; break;
			case 3: document.getElementById('M1').innerHTML = num; break;
			case 4: document.getElementById('M2').innerHTML = num; break;
			case 5: document.getElementById('S1').innerHTML = num; break;
			case 6: document.getElementById('S2').innerHTML = num; break;
		}

		// Convert the decimal to a nibble (0000)
		var bin = num.charCodeAt(0) - 48;
		bin = bin.toString(2);
		while(bin.length<=3) {bin='0'+bin;}

		// Loop through the nibble & set the LEDs accordingly
		for (p=4; p>=1; p--)
		{
			var str = "C"+i+p;
			switch(str)
			{
				case "C11": document.getElementById(str).src="http://www.kludgeguru.com/gfx/ledno.gif";break;
				case "C12": document.getElementById(str).src="http://www.kludgeguru.com/gfx/ledno.gif";break;
				case "C31": document.getElementById(str).src="http://www.kludgeguru.com/gfx/ledno.gif";break;
				case "C51": document.getElementById(str).src="http://www.kludgeguru.com/gfx/ledno.gif";break;
				default:
					if(bin.charAt(p-1)=='1')
					{
						document.getElementById(str).src="http://www.kludgeguru.com/gfx/led1.gif";break;
					}
					else
					{
						document.getElementById(str).src="http://www.kludgeguru.com/gfx/led0.gif";break;
					}
				break;
			}
		}

	}
}

function Horiz_Clock()
{
	// Get current time in HHMMSS format
	var vNow = new Date();
	var vHr  = vNow.getHours();
	var vMin = vNow.getMinutes();
	var vSec = vNow.getSeconds();

	// Set text below clock
	document.getElementById('HBC_Hrs').innerHTML = zeropad(vHr);
	document.getElementById('HBC_Min').innerHTML = zeropad(vMin);
	document.getElementById('HBC_Sec').innerHTML = zeropad(vSec);

	// Convert Hour to binary
	var vStr = vHr.toString(2);
	while(vStr.length<=7) {vStr='0'+vStr;}

	// Set Hour LEDs
	for (i=7; i>=0; i--)
	{
		var vS = "TH"+i;
		if (vStr.charAt(i) == '1')
		{
			document.getElementById(vS).src="http://www.kludgeguru.com/gfx/led1.gif";
		}
		else
		{
			document.getElementById(vS).src="http://www.kludgeguru.com/gfx/led0.gif";
		}
	}

	// Convert Minutes to binary
	var vStr = vMin.toString(2);
	while(vStr.length<=7) {vStr='0'+vStr;}

	// Set Minute LEDs
	for (i=7; i>=0; i--)
	{
		var vS = "TM"+i;
		if (vStr.charAt(i) == '1')
		{
			document.getElementById(vS).src="http://www.kludgeguru.com/gfx/led1.gif";
		}
		else
		{
			document.getElementById(vS).src="http://www.kludgeguru.com/gfx/led0.gif";
		}
	}

	// Convert Seconds to binary
	var vStr = vSec.toString(2);
	while(vStr.length<=7) {vStr='0'+vStr;}

	// Set Second LEDs
	for (i=7; i>=0; i--)
	{
		var vS = "TS"+i;
		if (vStr.charAt(i) == '1')
		{
			document.getElementById(vS).src="http://www.kludgeguru.com/gfx/led1.gif";
		}
		else
		{
			document.getElementById(vS).src="http://www.kludgeguru.com/gfx/led0.gif";
		}
	}
}

// Update True Binary Clock
function True_Clock()
{
	// Get current time in HHMMSS format
	var vNow = new Date();
	var vHr  = vNow.getHours();
	var vMin = vNow.getMinutes();
	var vSec = vNow.getSeconds();
	var vmSec = vNow.getMilliseconds();

	// Convert time to total Milliseconds
	vmSec += vSec * 1000;
	vmSec += vMin * 60000;
	vmSec += vHr * 3600000;

	// Calculate True Binary Time
	var vCompare = 43200000;
	for (i=23; i>=0; i--)
	{
		var vGif = "T"+i;
		if (vmSec >= vCompare)
		{
			document.getElementById(vGif).src="http://www.kludgeguru.com/gfx/led1.gif";
			document.getElementById(vGif+'T').innerHTML = "1";
			vmSec -= vCompare;
		}
		else
		{
			document.getElementById(vGif).src="http://www.kludgeguru.com/gfx/led0.gif";
			document.getElementById(vGif+'T').innerHTML = "0";
		}
		vCompare = vCompare / 2;
	}
}

// Update True Binary Clock
function TrueYear_Clock()
{
	// Get New Years
	var vNow = new Date();
	var vYear  = vNow.getFullYear();
	var vNewYears = new Date("01/01/" + vYear);
	var vNextNewYears = new Date("01/01/" + (vYear + 1));

	// Get MilliSeconds since New Years
	var vmSec = vNow - vNewYears;

	// Find how many MilliSeconds per year (Accounts for leap year also)
	var vmSecYear = vNextNewYears - vNewYears;

	// Calculate True Binary Time
	var vCompare = vmSecYear/2;
	for (i=23; i>=0; i--)
	{
		var vGif = "Y"+i;
		if (vmSec >= vCompare)
		{
			document.getElementById(vGif).src="http://www.kludgeguru.com/gfx/led1.gif";
			document.getElementById(vGif+'T').innerHTML = "1";
			vmSec -= vCompare;
		}
		else
		{
			document.getElementById(vGif).src="http://www.kludgeguru.com/gfx/led0.gif";
			document.getElementById(vGif+'T').innerHTML = "0";
		}
		vCompare = vCompare / 2;
	}
}

// Pad numbers < 10 with zeroes
function zeropad(num)
{
	if (num < 10)
	{
		return "0" + num;
	}
	else
	{
	  return num;
	}
}

// Update the clock every second
function updateClock()
{
	setTimeout("UpdateClocks()", 5);
}

