// Based on original script from OpenJS
// http://www.openjs.com/scripts/events/keyboard_shortcuts/
// The original script is distributed under terms of BSD license

// Digg it! http://digg.com/programming/Handling_Keyboard_Shortcuts_in_JavaScript

function testKeyboardShortcut(e, shortcut) {

	//Find Which key is pressed
	if (e.keyCode)
		code = e.keyCode;
	else if (e.which)
		code = e.which;
	var character = String.fromCharCode(code).toLowerCase();
	var keys = shortcut.toLowerCase().split("+");
	//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
	var kp = 0;

	//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
	var shift_nums = {
		"`":"~",
		"1":"!",
		"2":"@",
		"3":"#",
		"4":"$",
		"5":"%",
		"6":"^",
		"7":"&",
		"8":"*",
		"9":"(",
		"0":")",
		"-":"_",
		"=":"+",
		";":":",
		"'":"\"",
		",":"<",
		".":">",
		"/":"?",
		"\\":"|"
	}

	//Special Keys - and their codes
	var special_keys = {
		'esc':27,
		'escape':27,
		'tab':9,
		'space':32,
		'return':13,
		'enter':13,
		'backspace':8,

		'scrolllock':145,
		'scroll_lock':145,
		'scroll':145,
		'capslock':20,
		'caps_lock':20,
		'caps':20,
		'numlock':144,
		'num_lock':144,
		'num':144,
		
		'pause':19,
		'break':19,
		
		'insert':45,
		'home':36,
		'delete':46,
		'end':35,
		
		'pageup':33,
		'page_up':33,
		'pu':33,

		'pagedown':34,
		'page_down':34,
		'pd':34,

		'left':37,
		'up':38,
		'right':39,
		'down':40,

		'f1':112,
		'f2':113,
		'f3':114,
		'f4':115,
		'f5':116,
		'f6':117,
		'f7':118,
		'f8':119,
		'f9':120,
		'f10':121,
		'f11':122,
		'f12':123
	}

	for(var i=0; k=keys[i],i<keys.length; i++) {
		//Modifiers
		if(k == 'ctrl' || k == 'control') {
			if(e.ctrlKey) kp++;

		} else if(k ==  'shift') {
			if(e.shiftKey) kp++;

		} else if(k == 'alt') {
				if(e.altKey) kp++;

		} else if(k.length > 1) { //If it is a special key
			if(special_keys[k] == code) kp++;

		} else { //The special keys did not match
			if(character == k) kp++;
			else {
				if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
					character = shift_nums[character]; 
					if(character == k) kp++;
				}
			}
		}
	}

	return (kp == keys.length);
}
