// by Johnson Cheung (http://www.wahon.net/~johnson/)
// Last update : April 26, 2007
// checked on
//	IE		: 6.0
//	Mozilla	: 1.7
//	Netscape	: 4.78 (Control Keys cannot be got, Down same as Press)
//	Opera	: 7.53, 9.20
//	Avant	: 9.02 (ESC not work, F5 not work)
//	Firefox	: 2.0.0.1
//	Safari	: 2.0.4

// based on 'dream.js', 'browser.js'
// Normal Key Strokes are working on all browsers as *press* event
// Ctrl, Alt, Shift, Fx, Esc depends

// the function KeyDown(evt) must be implemented in the HTML
// the function KeyPress(evt) must be implemented in the HTML

/*
Seems not useful for current browsers
if (!bisIE) {
	document.captureEvents(Event.KEYPRESS | Event.KEYDOWN);
} */

//onkeydown fires when any valid keyboard key is pressed. Valid keys include
document.onkeydown = KeyDown;

//onkeypress fires when any alphanumeric key is held. This includes the following:
//Letters: a - z (lowercase), A - Z (capital)
//Numerals: 0 - 9
//Symbols: ! @ # $ % ^ & * ( ) _ - + = < > [ ] { } , . / ? \ | ' ` " ~
//System: ESCAPE (IE only), SPACE, SHIFT
document.onkeypress = KeyPress;

function KeyIsChar(evt, sChr) {
	if (bisIE) {
		if (String.fromCharCode(window.event.keyCode) == sChr) return true;
	} else {
		if (String.fromCharCode(evt.which) == sChr) return true;
	}
}

function KeyIsCode(evt, v) { return I_KeyIsValue(evt, v); }

function KeyIsLeftArrow(evt) { return I_KeyIsValue(evt, 37); }
function KeyIsRightArrow(evt) { return I_KeyIsValue(evt, 39); }
function KeyIsTopArrow(evt) { return I_KeyIsValue(evt, 38); }
function KeyIsDownArrow(evt) { return I_KeyIsValue(evt, 40); }

function KeyIsCtrl(evt) { return I_KeyIsValue(evt, 17); }
function KeyIsAlt(evt) { return I_KeyIsValue(evt, 18); }
function KeyIsShift(evt) { return I_KeyIsValue(evt, 16); }

function KeyIsLeftWin(evt) { return I_KeyIsValue(evt, 91); }
function KeyIsRightWin(evt) { return I_KeyIsValue(evt, 92); }

function KeyIsEnter(evt) { return I_KeyIsValue(evt, 13); }
function KeyIsTab(evt) { return I_KeyIsValue(evt, 9); }
function KeyIsSpace(evt) { return I_KeyIsValue(evt, 32); }
function KeyIsBackspace(evt) { return I_KeyIsValue(evt, 8); }
function KeyIsCaplock(evt) { return I_KeyIsValue(evt, 20); }
function KeyIsNumlock(evt) { return I_KeyIsValue(evt, 144); }
function KeyIsEscape(evt) { return I_KeyIsValue(evt, 27); }

function KeyIsInsert(evt) { return I_KeyIsValue(evt, 45); }
function KeyIsDelete(evt) { return I_KeyIsValue(evt, 46); }
function KeyIsHome(evt) { return I_KeyIsValue(evt, 36); }
function KeyIsEnd(evt) { return I_KeyIsValue(evt, 35); }
function KeyIsPageUp(evt) { return I_KeyIsValue(evt, 33); }
function KeyIsPageDown(evt) { return I_KeyIsValue(evt, 34); }

function KeyIsF1(evt) { return I_KeyIsValue(evt, 112); }
function KeyIsF2(evt) { return I_KeyIsValue(evt, 113); }
function KeyIsF3(evt) { return I_KeyIsValue(evt, 114); }
function KeyIsF4(evt) { return I_KeyIsValue(evt, 115); }
function KeyIsF5(evt) { return I_KeyIsValue(evt, 116); }
function KeyIsF6(evt) { return I_KeyIsValue(evt, 117); }
function KeyIsF7(evt) { return I_KeyIsValue(evt, 118); }
function KeyIsF8(evt) { return I_KeyIsValue(evt, 119); }
function KeyIsF9(evt) { return I_KeyIsValue(evt, 120); }
function KeyIsF10(evt) { return I_KeyIsValue(evt, 121); }
function KeyIsF11(evt) { return I_KeyIsValue(evt, 122); }
function KeyIsF12(evt) { return I_KeyIsValue(evt, 123); }

// +++++
// Internal Use
function I_KeyIsValue(evt, v) {
	if (bisIE) { if (window.event.keyCode == v) return true; }
	else { if (evt.which == v) return true; }
	return false;
}
