/**
 *	keyboardEvents.js
 *
 *	The function keyUpHandle has been registered with document element as a
 *	'keyUp' listener event. keyUpHandle examines the event object for 
 *	interesting keyCodes and dispatches interesting events to the appropriate 
 *	subhandlers.
 */

/*var isRepeat 		= false;
var repeatTimeout 	= null;*/
function keyUpHandle(evt) {
	evt = new Evt(evt,true);
	//alert("keyUpHandle [keyCode: " + evt.self.keyCode + " charCode : "+
	//evt.self.charCode+" alt:"+evt.self.altKey+"]");
	if (wasMetaKeyClick(evt)) {
		return;
	}
	if (selectedTopLevelMenuItem && !keyUpSet.contains(evt.self.keyCode)) {
		evt.cancel();
	}
	switch (evt.self.keyCode) {

		// Enter key
		case 13:
			enterKeyHandle(evt);
			break;

		// Esc key	
		case 27:
			escKeyHandle(evt);
			break;
		
		// Arrow keys
		case 37: //left
			leftKeyHandle(evt);
			break;
		case 38: //up
			upKeyHandle(evt);
			break;
		case 39: //right
			rightKeyHandle(evt);
			break;
		case 40: //down
			downKeyHandle(evt);
			break;
	}
}

function keyPressHandle(evt) {
	evt = new Evt(evt,true);
	//alert("keyPressHandle [keyCode: " + evt.self.keyCode + " charCode : "+evt.self.charCode+" alt:"+evt.self.altKey+"] meta:"+evt.self.metaKey+"]");
	if (wasMetaKeyClick(evt)) {
		return;
	}
	if (selectedTopLevelMenuItem && !keyPressSet.contains(evt.self.charCode)) {
		evt.cancel();
	}
	switch (evt.self.charCode) {
		// 'alt-a' press
		case 97:
			if (!evt.self.altKey) break;
				// fall-thru
		case 229:
			showSpecificMenu(evt,"account");
			break;
			
		// 'alt-c' press
		case 99:
			if (!evt.self.altKey) break;
				// fall-thru
		case 231:
			showSpecificMenu(evt,"computer");
			break;
		
		// 'alt-o' press
		case 111:
			if (!evt.self.altKey) break;
				// fall-thru
		case 248:
			showSpecificMenu(evt,"core");
			break;
			
		// 'alt-s' press
		case 115:
			if (!evt.self.altKey) break;
				// fall-thru
		case 223:
			showSpecificMenu(evt,"datacenters");
			break;

		// 'alt-m' press
		case 109:
			if (!evt.self.altKey) break;
				// fall-thru
		case 181:
			showSpecificMenu(evt,"departments");
			break;

		// 'alt-l' press
		case 108:
			if (!evt.self.altKey) break;
				// fall-thru
		case 172:
			showSpecificMenu(evt,"help");
			break;

		// 'alt-y' press
		case 121:
			if (!evt.self.altKey) break;
				// fall-thru
		case 165:
			showSpecificMenu(evt,"history");
			break;

		// 'alt-r' press
		case 114:
			if (!evt.self.altKey) break;
				// fall-thru
		case 174:
			showSpecificMenu(evt,"rack");
			break;

		// 'alt-p' press
		case 112:
			if (!evt.self.altKey) break;
				// fall-thru
		case 960:
			showSpecificMenu(evt,"reports");
			break;
	}
}

function wasMetaKeyClick(evt) {
	if (evt.self.metaKey || (isWin && evt.self.ctrlKey)) {
		return true;
	}
	return false;
}

function enterKeyHandle(evt) {
	if (selectedMenuItem) {
		followMenuLink(evt);
	}
}

function escKeyHandle(evt) {
	hideAllMenus();
	_hideAllPopups();
	evt.cancel();
}

function upKeyHandle(evt) {
	if (selectedTopLevelMenuItem) {
		menuUpOrDownKeyPressed(evt,UP);
	} else if (activeTabPaneId) {
		tabPaneUpKeyPressed(evt);
	}
}

function downKeyHandle(evt) {
	if (selectedTopLevelMenuItem) {
		menuUpOrDownKeyPressed(evt,DOWN);
	} else if (activeTabPaneId) {
		tabPaneDownKeyPressed(evt);
	}
}

function rightKeyHandle(evt) {
	if (selectedTopLevelMenuItem) {
		menuRightOrLeftKeyPressed(evt,RIGHT);
	} else if (activeTabPaneId && !shouldBlockArrowKeyTabbing) {
		tabPaneRightOrLeftKeyPressed(evt,RIGHT);
	}
}

function leftKeyHandle(evt) {
	if (selectedTopLevelMenuItem) {
		menuRightOrLeftKeyPressed(evt,LEFT);
	} else if (activeTabPaneId && !shouldBlockArrowKeyTabbing) {
		tabPaneRightOrLeftKeyPressed(evt,LEFT);
	}
}
