/**
* Handles keyboard inputs.
*
* Features:
* - Cross browser compatibility
* - Easy to implement
*
* Version 0.5
*
*---------------------------------------
* Originally written by Kjetil Hårtveit.
* www.kjetil-hartveit.com
*---------------------------------------
*/
KeyInputHandler =
{
keyCodes: [],
// constants
KEY_DASH: '-',
KEY_COMMA: ',',
KEY_DOT: '.',
KEY_A: 'A',
KEY_B: 'B',
KEY_C: 'C',
KEY_D: 'D',
KEY_E: 'E',
KEY_F: 'F',
KEY_G: 'G',
KEY_H: 'H',
KEY_I: 'I',
KEY_J: 'J',
KEY_K: 'K',
KEY_L: 'L',
KEY_M: 'M',
KEY_N: 'N',
KEY_O: 'O',
KEY_P: 'P',
KEY_Q: 'Q',
KEY_R: 'R',
KEY_S: 'S',
KEY_T: 'T',
KEY_U: 'U',
KEY_V: 'V',
KEY_W: 'W',
KEY_X: 'X',
KEY_Y: 'Y',
KEY_Z: 'Z',
checkKey: function(ev)
{
ev = ev || window.event;
var self = KeyInputHandler;
var key;
if ((key = self.findKeyCode(ev.keyCode)) === false)
{
return;
}
var keyCodes = self.getKeyCodes();
var keyCode = keyCodes[key][0];
var callback = keyCodes[key][1];
callback();
},
/**
* @param inpKeyCode
* @return int|false Key as integer or false as no match
*/
findKeyCode: function(inpKeyCode)
{
var keyCodes = this.getKeyCodes();
var keyCode;
var res = false;
for (var i=0, length=keyCodes.length; i<length; i++)
{
keyCode = keyCodes[i][0];
if (keyCode == inpKeyCode)
{
res = i;
break;
}
}
return res;
},
/**
* @param inpKeyCode The keycode as integer or string as one of the KEY_ constants. Always use constants if the latter and not the string value.
* @param callback
*/
registerKey: function(inpKeyCode, callback)
{
var keyCodes = this.getKeyCodes();
var keyCode;
var browser = '';
if (navigator.appName.toLowerCase() == 'microsoft internet explorer')
browser = 'ie';
else if (navigator.appName.toLowerCase() == 'opera')
browser = 'opera';
else if (navigator.appName.toLowerCase() == 'netscape')
browser = 'netscape';
else
browser = 'other';
// browser compatibility fix
switch (inpKeyCode)
{
case this.KEY_DASH:
if (browser == 'ie')
keyCode = 189;
else if (browser == 'opera')
keyCode = 45;
else
keyCode = 109;
break;
case this.KEY_COMMA:
if (browser == 'opera')
keyCode = 44;
else
keyCode = 188;
break;
case this.KEY_DOT:
if (browser == 'opera')
keyCode = 46;
else
keyCode = 190;
break;
case this.KEY_A: keyCode = 65; break;
case this.KEY_B: keyCode = 66; break;
case this.KEY_C: keyCode = 67; break;
case this.KEY_D: keyCode = 68; break;
case this.KEY_E: keyCode = 69; break;
case this.KEY_F: keyCode = 70; break;
case this.KEY_G: keyCode = 71; break;
case this.KEY_H: keyCode = 72; break;
case this.KEY_I: keyCode = 73; break;
case this.KEY_J: keyCode = 74; break;
case this.KEY_K: keyCode = 75; break;
case this.KEY_L: keyCode = 76; break;
case this.KEY_M: keyCode = 77; break;
case this.KEY_N: keyCode = 78; break;
case this.KEY_O: keyCode = 79; break;
case this.KEY_P: keyCode = 80; break;
case this.KEY_Q: keyCode = 81; break;
case this.KEY_R: keyCode = 82; break;
case this.KEY_S: keyCode = 83; break;
case this.KEY_T: keyCode = 84; break;
case this.KEY_U: keyCode = 85; break;
case this.KEY_V: keyCode = 86; break;
case this.KEY_W: keyCode = 87; break;
case this.KEY_X: keyCode = 88; break;
case this.KEY_Y: keyCode = 89; break;
case this.KEY_Z: keyCode = 90; break;
default: keyCode = inpKeyCode; break;
}
keyCodes[keyCodes.length] = [keyCode, callback];
this.setKeyCodes(keyCodes);
},
setKeyCodes: function(keyCodes) { this.keyCodes = keyCodes; },
getKeyCodes: function() { return this.keyCodes; }
}