nerd clocks - code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>nerd clocks</title>
<meta name="Author" content="fitzrovian">
<meta name="Keywords" content="nerd, nerds, clock, clocks,
nerd clocks, binary clock,
hexadecimal clock, octal clock,
esperanto, horlogxo esperanta">
<meta name="Description" content="clocks for nerds">
<script language="javascript">
// -------------------------------------------
// nerd clocks
// written by fitzrovian
// 05-02-03
//
// based in small part on a decimal
// javascript clock by Nicolas -
// http://www.javascript-page.com/clock.html
//
// cut and paste but please include this note
// -------------------------------------------
var typeChars = location.href.substring(location.href.length - 3,
location.href.length);
if (typeChars == "bin" || typeChars == "oct" || typeChars == "hex")
var numBase = typeChars;
if (numBase == null)
var numBase = "bin";
var boxSize = new Array();
boxSize["bin"] = 19;
boxSize["oct"] = 8;
boxSize["hex"] = 8;
var clockName = new Array();
clockName["bin"] = "binary";
clockName["oct"] = "octal";
clockName["hex"] = "hexadecimal";
var runClock = false;
function dec2bin(x)
{
if (x < 1) return "";
return dec2bin((x - (x % 2)) / 2) + x % 2;
}
function bin2dec(binString)
{
var j = 1;
var decVal = 0;
for (var i = binString.length - 1; i >= 0; i--)
{
decVal += (binString.charAt(i) == "1" ? 1 : 0) * j;
j *= 2;
}
return decVal;
}
function dec2hex(x)
{
if (x == 0) return "0";
var hex = new Array("0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "A",
"B", "C", "D", "E", "F");
var i = 0;
var hexString = "";
var binString = dec2bin(x);
var numExtraBits = (4 - (binString.length % 4)) % 4;
for (i = 0; i < numExtraBits; i++)
binString = "0" + binString;
for (i = 0; i < binString.length; i += 4)
hexString = hexString + hex[bin2dec(binString.substring(i, i + 4))];
return hexString;
}
function dec2octProper(x, n)
{
if (x < 1) return "";
return dec2octProper((x - (x % 8)) / 8, n * 8) + x % 8;
}
function dec2oct(x)
{
if (x == 0) return "0";
return dec2octProper(x, 1);
}
function isBin(binString)
{
for (var i = 0; i < binString.length; i++)
if (binString.charAt(i) != '0' && binString.charAt(i) != '1') return false;
return true;
}
function formatBin(binString, timeType)
{
var NUM_BITS = new Array();
NUM_BITS["h"] = 5;
NUM_BITS["m"] = 6;
NUM_BITS["s"] = 6;
var numExtraBits = NUM_BITS[timeType] - binString.length;
if (!isBin(binString))
return "Error: string not a binary number.";
if (timeType != "h" && timeType != "m" && timeType != "s")
return "Error: timeType not valid.";
for (var i = 0; i < numExtraBits; i++)
binString = "0" + binString;
return binString;
}
function formatHex(hexString)
{
return (hexString.length == 1 ? "0" : "") + hexString;
}
function formatOct(octString)
{
return (octString.length == 1 ? "0" : "") + octString;
}
function esperantoNumber(x)
{
var numeroj = new Array("nul", "unu", "du", "tri", "kvar",
"kvin", "ses", "sep", "ok", "naux",
"dek");
var numero = "";
if (x > 59 || x == 0) return "nul";
if (x > 9) numero = (x - (x % 10) != 10 ? numeroj[(x - (x % 10)) / 10] : "") + "dek";
if (x > 0 && (x % 10) != 0) numero += (numero == "" ? "" : " ") + numeroj[x % 10];
return numero;
}
function updateClock()
{
if (runClock)
{
var date_var = new Date;
if (numBase == "oct")
document.nerdClock.nerdTime.value = "" +
formatOct(dec2oct(date_var.getHours())) + ":" +
formatOct(dec2oct(date_var.getMinutes())) + ":" +
formatOct(dec2oct(date_var.getSeconds()));
else if (numBase == "hex")
document.nerdClock.nerdTime.value = "" +
formatHex(dec2hex(date_var.getHours())) + ":" +
formatHex(dec2hex(date_var.getMinutes())) + ":" +
formatHex(dec2hex(date_var.getSeconds()));
else
document.nerdClock.nerdTime.value = "" +
formatBin(dec2bin(date_var.getHours()), "h") + ":" +
formatBin(dec2bin(date_var.getMinutes()), "m") + ":" +
formatBin(dec2bin(date_var.getSeconds()), "s");
setTimeout("updateClock()", 1000);
}
}
function updateGClock()
{
if (runClock)
{
var date_var = new Date;
var gHours = formatBin(dec2bin(date_var.getHours()), "h");
var gMinutes = formatBin(dec2bin(date_var.getMinutes()), "m");
var gSeconds = formatBin(dec2bin(date_var.getSeconds()), "s");
var i = 0;
document.gNerdClock.gNerdTimeH0.checked =
(gHours.charAt(0) == '1');
document.gNerdClock.gNerdTimeH1.checked =
(gHours.charAt(1) == '1');
document.gNerdClock.gNerdTimeH2.checked =
(gHours.charAt(2) == '1');
document.gNerdClock.gNerdTimeH3.checked =
(gHours.charAt(3) == '1');
document.gNerdClock.gNerdTimeH4.checked =
(gHours.charAt(4) == '1');
document.gNerdClock.gNerdTimeM0.checked =
(gMinutes.charAt(0) == '1');
document.gNerdClock.gNerdTimeM1.checked =
(gMinutes.charAt(1) == '1');
document.gNerdClock.gNerdTimeM2.checked =
(gMinutes.charAt(2) == '1');
document.gNerdClock.gNerdTimeM3.checked =
(gMinutes.charAt(3) == '1');
document.gNerdClock.gNerdTimeM4.checked =
(gMinutes.charAt(4) == '1');
document.gNerdClock.gNerdTimeM5.checked =
(gMinutes.charAt(5) == '1');
document.gNerdClock.gNerdTimeS0.checked =
(gSeconds.charAt(0) == '1');
document.gNerdClock.gNerdTimeS1.checked =
(gSeconds.charAt(1) == '1');
document.gNerdClock.gNerdTimeS2.checked =
(gSeconds.charAt(2) == '1');
document.gNerdClock.gNerdTimeS3.checked =
(gSeconds.charAt(3) == '1');
document.gNerdClock.gNerdTimeS4.checked =
(gSeconds.charAt(4) == '1');
document.gNerdClock.gNerdTimeS5.checked =
(gSeconds.charAt(5) == '1');
setTimeout("updateGClock()", 1000);
}
}
function updateEsperantoClock()
{
if (runClock)
{
var date_var = new Date;
var horoj = date_var.getHours();
var minutoj = date_var.getMinutes();
var sekundoj = date_var.getSeconds();
document.nerdEsperantoClock.nerdEsperantoTime.value =
esperantoNumber(horoj) + " horo" +
((horoj == 0 || horoj > 1) ? "j" : "") + ", " +
esperantoNumber(minutoj) + " minuto" +
((minutoj == 0 || minutoj > 1) ? "j" : "") + " kaj " +
esperantoNumber(sekundoj) + " sekundo" +
((sekundoj == 0 || sekundoj > 1) ? "j" : "");
setTimeout("updateEsperantoClock()", 1000);
}
}
function startClock()
{
runClock = true;
updateClock();
updateGClock();
updateEsperantoClock();
}
function stopClock()
{
runClock = false;
}
function sizeClock(x)
{
document.nerdClock.nerdTime.size = x;
}
</script>
</head>
<body bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#800000"
alink="#ff00ff" background="?" onLoad="startClock()" onUnload="stopClock()">
<h1>nerd clocks<br /><hr /></h1>
<script language="javascript">
document.writeln("<h2>" + clockName[numBase] + " clock</h2>");
</script>
<form name="nerdClock">
<input type="text" name="nerdTime" />
</form>
<script language="javascript">
sizeClock(boxSize[numBase]);
</script>
<a href="nerdclocks.html?numBase=bin">bin</a> |
<a href="nerdclocks.html?numBase=oct">oct</a> |
<a href="nerdclocks.html?numBase=hex">hex</a>
<br /><br /><hr />
<h2>graphical binary clock</h2>
<form name="gNerdClock">
<input type="radio" name="gNerdTimeH0" />
<input type="radio" name="gNerdTimeH1" />
<input type="radio" name="gNerdTimeH2" />
<input type="radio" name="gNerdTimeH3" />
<input type="radio" name="gNerdTimeH4" /> <b>:</b>
<input type="radio" name="gNerdTimeM0" />
<input type="radio" name="gNerdTimeM1" />
<input type="radio" name="gNerdTimeM2" />
<input type="radio" name="gNerdTimeM3" />
<input type="radio" name="gNerdTimeM4" />
<input type="radio" name="gNerdTimeM5" /> <b>:</b>
<input type="radio" name="gNerdTimeS0" />
<input type="radio" name="gNerdTimeS1" />
<input type="radio" name="gNerdTimeS2" />
<input type="radio" name="gNerdTimeS3" />
<input type="radio" name="gNerdTimeS4" />
<input type="radio" name="gNerdTimeS5" />
</form>
<hr />
<h2>horlogxo esperanta</h2>
<form name="nerdEsperantoClock">
<input type="text" name="nerdEsperantoTime" size="70" />
</form>
<hr />
<a href="http://www.fitzrovian.com/nerdclocks-code.html" target="new">view the code for this page</a>
<hr />
visit <a href="http://www.herdofnerds.net/" target="new">herd of nerds</a>
<hr />
</body>
</html>
visit herd of nerds