// code adapted from Danny Goodman, http://safari.oreilly.com/0596527403/orm9780596527402-CHP-VI

// array of table cell ids
var tCells = ["downKey", "pressKey", "upKey", "downChar", "pressChar", "upChar", "character", "modifier"];

// clear table cells for each key down event
function clearCells() {
	for (var i=0;i<tCells.length;i++) {
		document.getElementById(tCells[i]).innerHTML = "&mdash;";
		}
	}
	
// display modifier keys
function oshowModifiers (evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt.shiftKey) {
		document.getElementById("shiftKey").innerHTML = "Shift";
		}
	if (evt.ctrlKey) {
		document.getElementById("ctrlKey").innerHTML = "Ctrl";
		}
	if (evt.altKey) {
		document.getElementById("altKey").innerHTML = "Alt";
		}
	}
	
function showModifiers (evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt.shiftKey || evt.ctrlKey || evt.altKey) { 
		var newContent = "";
		if (evt.shiftKey) {
			newContent += "Shift ";
			}
		if (evt.ctrlKey) {
			newContent += "Ctrl ";
			}
		if (evt.altKey) {
			newContent += "Alt";
			}
		document.getElementById("modifier").innerHTML = newContent;
		}
	}
	
// display target node's node name
function showTarget(evt) {
	var node= (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null );
	if (node) {
		document.getElementById("keyTarget").innerHTML = node.nodeName;
		if (evt.ctrlKey) { document.getElementById("keyTarget").innerHTML = 'ctrl on' };
		}
	}
	
// decipher key down codes
function showDown (evt) {
	clearCells();
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt) {
		document.getElementById("downKey").innerHTML = evt.keyCode+' <span class="s">('+String.fromCharCode(evt.keyCode)+')</span>';
		if (evt.charCode) {
			document.getElementById("downChar").innerHTML = evt.charCode+' <span class="s">('+String.fromCharCode(evt.charCode)+')</span>';
			}
		}
	showModifiers(evt);
	//showTarget(evt);
	}
	
// decipher key press codes
function showPress (evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt) {
		document.getElementById("pressKey").innerHTML = evt.keyCode+' <span class="s">('+String.fromCharCode(evt.keyCode)+')</span>';
		if (evt.charCode) {
			document.getElementById("pressChar").innerHTML = evt.charCode+' <span class="s">('+String.fromCharCode(evt.charCode)+')</span>';
			}
		//showTarget(evt);
		var charCode = (evt.charCode) ? evt.charCode : evt.keyCode;
		// use String method to convert back to character
		document.getElementById("character").innerHTML = String.fromCharCode(charCode);
		}
	}
	
// decipher key up codes
function showUp (evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt) {
		document.getElementById("upKey").innerHTML = evt.keyCode+' <span class="s">('+String.fromCharCode(evt.keyCode)+')</span>';
		if (evt.charCode) {
			document.getElementById("upChar").innerHTML = evt.charCode+' <span class="s">('+String.fromCharCode(evt.charCode)+')</span>';
			}
		//showTarget(evt);
		}
	}

// set page-wide event listeners
//document.onkeydown = showDown;
//document.onkeypress = showPress;
//document.onkeyup = showUp;

// bind events to text box
function setKeyboardEvents( ) {
    addEvent(document.forms["myForm"].elements["entry"], "keydown", showDown, false);
    addEvent(document.forms["myForm"].elements["entry"], "keypress", showPress, false);
    addEvent(document.forms["myForm"].elements["entry"], "keyup", showUp, false);
	}
	
// do event binding now that elements exist
addOnLoadEvent(setKeyboardEvents);
