/*	Distributed as part of 'AT JsMenu' under the same terms (LGPL)
	Author: AT Mulyana (atmulyana@yahoo.com)
	Copyright (C) 2001-2006 AT Mulyana
*/
var AtJsMenuKeys = function() {};
AtJsMenuKeys.prototype = {
ALT_MASK:		1,
CONTROL_MASK:	2,
SHIFT_MASK:		4,
META_MASK:		8,
DOM_VK_CANCEL:	3,
DOM_VK_HELP:	6,
DOM_VK_BACK_SPACE:8,
DOM_VK_TAB:		9,
DOM_VK_CLEAR:	12,
DOM_VK_RETURN:	13,
DOM_VK_ENTER:	14,
DOM_VK_SHIFT:	16,
DOM_VK_CONTROL:17,
DOM_VK_ALT:		18,
DOM_VK_PAUSE:	19,
DOM_VK_CAPS_LOCK:20,
DOM_VK_ESCAPE:	27,
DOM_VK_SPACE:	32,
DOM_VK_PAGE_UP:33,
DOM_VK_PAGE_DOWN:34,
DOM_VK_END:		35,
DOM_VK_HOME:	36,
DOM_VK_LEFT:	37,
DOM_VK_UP:		38,
DOM_VK_RIGHT:	39,
DOM_VK_DOWN:	40,
DOM_VK_PRINTSCREEN:44,
DOM_VK_INSERT:	45,
DOM_VK_DELETE:	46,
DOM_VK_0:		48,
DOM_VK_1:		49,
DOM_VK_2:		50,
DOM_VK_3:		51,
DOM_VK_4:		52,
DOM_VK_5:		53,
DOM_VK_6:		54,
DOM_VK_7:		55,
DOM_VK_8:		56,
DOM_VK_9:		57,
DOM_VK_SEMICOLON:59,
DOM_VK_EQUALS:	61,
DOM_VK_A:		65,
DOM_VK_B:		66,
DOM_VK_C:		67,
DOM_VK_D:		68,
DOM_VK_E:		69,
DOM_VK_F:		70,
DOM_VK_G:		71,
DOM_VK_H:		72,
DOM_VK_I:		73,
DOM_VK_J:		74,
DOM_VK_K:		75,
DOM_VK_L:		76,
DOM_VK_M:		77,
DOM_VK_N:		78,
DOM_VK_O:		79,
DOM_VK_P:		80,
DOM_VK_Q:		81,
DOM_VK_R:		82,
DOM_VK_S:		83,
DOM_VK_T:		84,
DOM_VK_U:		85,
DOM_VK_V:		86,
DOM_VK_W:		87,
DOM_VK_X:		88,
DOM_VK_Y:		89,
DOM_VK_Z:		90,
DOM_VK_CONTEXT_MENU:93,
DOM_VK_NUMPAD0:	96,
DOM_VK_NUMPAD1:	97,
DOM_VK_NUMPAD2:	98,
DOM_VK_NUMPAD3:	99,
DOM_VK_NUMPAD4:	100,
DOM_VK_NUMPAD5:	101,
DOM_VK_NUMPAD6:	102,
DOM_VK_NUMPAD7:	103,
DOM_VK_NUMPAD8:	104,
DOM_VK_NUMPAD9:	105,
DOM_VK_MULTIPLY:106,
DOM_VK_ADD:		107,
DOM_VK_SEPARATOR:108,
DOM_VK_SUBTRACT:109,
DOM_VK_DECIMAL:	110,
DOM_VK_DIVIDE:	111,
DOM_VK_F1:		112,
DOM_VK_F2:		113,
DOM_VK_F3:		114,
DOM_VK_F4:		115,
DOM_VK_F5:		116,
DOM_VK_F6:		117,
DOM_VK_F7:		118,
DOM_VK_F8:		119,
DOM_VK_F9:		120,
DOM_VK_F10:		121,
DOM_VK_F11:		122,
DOM_VK_F12:		123,
DOM_VK_F13:		124,
DOM_VK_F14:		125,
DOM_VK_F15:		126,
DOM_VK_F16:		127,
DOM_VK_F17:		128,
DOM_VK_F18:		129,
DOM_VK_F19:		130,
DOM_VK_F20:		131,
DOM_VK_F21:		132,
DOM_VK_F22:		133,
DOM_VK_F23:		134,
DOM_VK_F24:		135,
DOM_VK_NUM_LOCK:144,
DOM_VK_SCROLL_LOCK:145,
DOM_VK_COMMA:	188,
DOM_VK_PERIOD:	190,
DOM_VK_SLASH:	191,
DOM_VK_BACK_QUOTE:192,
DOM_VK_OPEN_BRACKET:219,
DOM_VK_BACK_SLASH:220,
DOM_VK_CLOSE_BRACKET:221,
DOM_VK_QUOTE:	222,
DOM_VK_META:	224,
SCROLL_PAGE_UP:	-32768,
SCROLL_PAGE_DOWN:32768,

NAV_KEYS: [],

getKeyChar: function(iKeyCode,bShift) {
	if (iKeyCode >= this.DOM_VK_A && iKeyCode <= this.DOM_VK_Z) {
		if (!bShift) iKeyCode += 32;
		return String.fromCharCode(iKeyCode);
	} else if (iKeyCode >= this.DOM_VK_0 && iKeyCode <= this.DOM_VK_9) {
		if (!bShift) return String.fromCharCode(iKeyCode);
		else {
			var arChars = [')','!','@','#','$','%','^','&','*','('];
			return arChars[iKeyCode - this.DOM_VK_0];
		}
	} else if (bShift) switch (iKeyCode) {
		case this.DOM_VK_BACK_QUOTE: return '~';
		case this.DOM_VK_SUBTRACT: return '_';
		case this.DOM_VK_EQUALS: return '+';
		case this.DOM_VK_BACK_SLASH: return '|';
		case this.DOM_VK_OPEN_BRACKET: return '{';
		case this.DOM_VK_CLOSE_BRACKET: return '}';
		case this.DOM_VK_SEMICOLON: return ':';
		case this.DOM_VK_QUOTE: return '"';
		case this.DOM_VK_COMMA: return '<';
		case this.DOM_VK_PERIOD: return '>';
		case this.DOM_VK_SLASH: return '?';
	} else switch (iKeyCode) {
		case this.DOM_VK_BACK_QUOTE: return '`';
		case this.DOM_VK_SUBTRACT: return '-';
		case this.DOM_VK_EQUALS: return '=';
		case this.DOM_VK_BACK_SLASH: return String.fromCharCode(this.DOM_VK_BACK_SLASH);
		case this.DOM_VK_OPEN_BRACKET: return '[';
		case this.DOM_VK_CLOSE_BRACKET: return ']';
		case this.DOM_VK_SEMICOLON: return ';';
		case this.DOM_VK_QUOTE: return '\'';
		case this.DOM_VK_COMMA: return ',';
		case this.DOM_VK_PERIOD: return '.';
		case this.DOM_VK_SLASH: return '/';
		case this.DOM_VK_NUMPAD0: return '0';
		case this.DOM_VK_NUMPAD1: return '1';
		case this.DOM_VK_NUMPAD2: return '2';
		case this.DOM_VK_NUMPAD3: return '3';
		case this.DOM_VK_NUMPAD4: return '4';
		case this.DOM_VK_NUMPAD5: return '5'
		case this.DOM_VK_NUMPAD6: return '6';
		case this.DOM_VK_NUMPAD7: return '7';
		case this.DOM_VK_NUMPAD8: return '8';
		case this.DOM_VK_NUMPAD9: return '9';
		case this.DOM_VK_MULTIPLY: return '*';
		case this.DOM_VK_ADD: return '+';
		case this.DOM_VK_SUBTRACT: return '-';
		case this.DOM_VK_DECIMAL: return '.';
		case this.DOM_VK_DIVIDE:	 return '/';
	}
	return '';
},

getKeyText: function(iKeyCode) {
	var sNbsp = String.fromCharCode(160);
	with (this) switch(iKeyCode) {
	case DOM_VK_BACK_SPACE: return 'Backspace';
	case DOM_VK_TAB: return 'Tab';
	case DOM_VK_RETURN: return 'Enter';
	case DOM_VK_SHIFT: return 'Shift';
	case DOM_VK_CONTROL: return 'Ctrl';
	case DOM_VK_ALT: return 'Alt';
	case DOM_VK_PAUSE: return 'Pause';
	case DOM_VK_CAPS_LOCK: return 'Caps'+sNbsp+'Lock';
	case DOM_VK_ESCAPE: return 'Esc';
	case DOM_VK_SPACE: return 'Space';
	case DOM_VK_PAGE_UP: return 'Page'+sNbsp+'Up';
	case DOM_VK_PAGE_DOWN: return 'Page'+sNbsp+'Down';
	case DOM_VK_END: return 'End';
	case DOM_VK_HOME: return 'Home';
	case DOM_VK_LEFT: return 'Left'+sNbsp+'Arrow';
	case DOM_VK_UP: return 'Up'+sNbsp+'Arrow';
	case DOM_VK_RIGHT: return 'Right'+sNbsp+'Arrow';
	case DOM_VK_DOWN: return 'Down'+sNbsp+'Arrow';
	case DOM_VK_PRINTSCREEN: return 'Prt'+sNbsp+'Scr';
	case DOM_VK_INSERT: return 'Insert';
	case DOM_VK_DELETE: return 'Delete';
	case DOM_VK_0: return '0';
	case DOM_VK_1: return '1';
	case DOM_VK_2: return '2';
	case DOM_VK_3: return '3';
	case DOM_VK_4: return '4';
	case DOM_VK_5: return '5';
	case DOM_VK_6: return '6';
	case DOM_VK_7: return '7';
	case DOM_VK_8: return '8';
	case DOM_VK_9: return '9';
	case DOM_VK_SEMICOLON: return ';';
	case DOM_VK_EQUALS: return '=';
	case DOM_VK_A: return 'A';
	case DOM_VK_B: return 'B';
	case DOM_VK_C: return 'C';
	case DOM_VK_D: return 'D';
	case DOM_VK_E: return 'E';
	case DOM_VK_F: return 'F';
	case DOM_VK_G: return 'G';
	case DOM_VK_H: return 'H';
	case DOM_VK_I: return 'I';
	case DOM_VK_J: return 'J';
	case DOM_VK_K: return 'K';
	case DOM_VK_L: return 'L';
	case DOM_VK_M: return 'M';
	case DOM_VK_N: return 'N';
	case DOM_VK_O: return 'O';
	case DOM_VK_P: return 'P';
	case DOM_VK_Q: return 'Q';
	case DOM_VK_R: return 'R';
	case DOM_VK_S: return 'S';
	case DOM_VK_T: return 'T';
	case DOM_VK_U: return 'U';
	case DOM_VK_V: return 'V';
	case DOM_VK_W: return 'W';
	case DOM_VK_X: return 'X';
	case DOM_VK_Y: return 'Y';
	case DOM_VK_Z: return 'Z';
	case DOM_VK_NUMPAD0: return 'Numpad'+sNbsp+'0';
	case DOM_VK_NUMPAD1: return 'Numpad'+sNbsp+'1';
	case DOM_VK_NUMPAD2: return 'Numpad'+sNbsp+'2';
	case DOM_VK_NUMPAD3: return 'Numpad'+sNbsp+'3';
	case DOM_VK_NUMPAD4: return 'Numpad'+sNbsp+'4';
	case DOM_VK_NUMPAD5: return 'Numpad'+sNbsp+'5';
	case DOM_VK_NUMPAD6: return 'Numpad'+sNbsp+'6';
	case DOM_VK_NUMPAD7: return 'Numpad'+sNbsp+'7';
	case DOM_VK_NUMPAD8: return 'Numpad'+sNbsp+'8';
	case DOM_VK_NUMPAD9: return 'Numpad'+sNbsp+'9';
	case DOM_VK_MULTIPLY: return 'Numpad'+sNbsp+'*';
	case DOM_VK_ADD: return 'Numpad'+sNbsp+'+';
	case DOM_VK_SUBTRACT: return 'Numpad'+sNbsp+'-';
	case DOM_VK_DECIMAL: return 'Numpad'+sNbsp+'.';
	case DOM_VK_DIVIDE: return 'Numpad'+sNbsp+'/';
	case DOM_VK_F1: return 'F1';
	case DOM_VK_F2: return 'F2';
	case DOM_VK_F3: return 'F3';
	case DOM_VK_F4: return 'F4';
	case DOM_VK_F5: return 'F5';
	case DOM_VK_F6: return 'F6';
	case DOM_VK_F7: return 'F7';
	case DOM_VK_F8: return 'F8';
	case DOM_VK_F9: return 'F9';
	case DOM_VK_F10: return 'F10';
	case DOM_VK_F11: return 'F11';
	case DOM_VK_F12: return 'F12';
	case DOM_VK_F13: return 'F13';
	case DOM_VK_F14: return 'F14';
	case DOM_VK_F15: return 'F15';
	case DOM_VK_F16: return 'F16';
	case DOM_VK_F17: return 'F17';
	case DOM_VK_F18: return 'F18';
	case DOM_VK_F19: return 'F19';
	case DOM_VK_F20: return 'F20';
	case DOM_VK_F21: return 'F21';
	case DOM_VK_F22: return 'F22';
	case DOM_VK_F23: return 'F23';
	case DOM_VK_F24: return 'F24';
	case DOM_VK_NUM_LOCK: return 'Num'+sNbsp+'Lock';
	case DOM_VK_SCROLL_LOCK: return 'Scroll'+sNbsp+'Lock';
	case DOM_VK_COMMA: return ',';
	case DOM_VK_PERIOD: return '.';
	case DOM_VK_SLASH: return '/';
	case DOM_VK_BACK_QUOTE: return '`';
	case DOM_VK_OPEN_BRACKET: return '[';
	case DOM_VK_BACK_SLASH: return String.fromCharCode(DOM_VK_BACK_SLASH);
	case DOM_VK_CLOSE_BRACKET: return ']';
	case DOM_VK_QUOTE: return "'";
	default: return '';
	}
},

getKeyModifiersText: function(iModifiers) {
	var sModifiers = '';
	if (iModifiers & this.CONTROL_MASK) sModifiers = 'Ctrl';
	if (iModifiers & this.ALT_MASK) { if (sModifiers) sModifiers += '+Alt'; else sModifiers += 'Alt'; }
	if (iModifiers & this.SHIFT_MASK) { if (sModifiers) sModifiers += '+Shift'; else sModifiers += 'Shift'; }
	return sModifiers;
},

getKeyStroke: function(iKeyCode,iModifiers) {
	return {keyCode: iKeyCode, modifiers: iModifiers};
}

};
AtJsMenuKeys = new AtJsMenuKeys();
AtJsMenuKeys.NAV_KEYS[AtJsMenuKeys.DOM_VK_LEFT] = 'Left';
AtJsMenuKeys.NAV_KEYS[AtJsMenuKeys.DOM_VK_UP] = 'Up';
AtJsMenuKeys.NAV_KEYS[AtJsMenuKeys.DOM_VK_RIGHT] = 'Right';
AtJsMenuKeys.NAV_KEYS[AtJsMenuKeys.DOM_VK_DOWN] = 'Down';
AtJsMenuKeys.NAV_KEYS[AtJsMenuKeys.DOM_VK_RETURN] = 'Enter';
AtJsMenuKeys.NAV_KEYS[AtJsMenuKeys.DOM_VK_ESCAPE] = 'Esc';
