var up, down, left, right, fire, isJoykeysEnabled;

function KeyboardInit() {
  isJoykeysEnabled = 0;
  up = down = left = right = fire = 0;
	keymap = [
		50, 52,54,56 ,48,189,36,115,
		81, 69,84,85, 79, -2,-3,114,
		17, 83,70,72,75,186,187,113,
		32, 90,67,66,77,190, 16,112,
		 9, 16,88,86,78,188,191, 40,
		17, 65,68,71,74, 76,222, 39,
		219,87,82,89,73, 80,106, 13,
		49, 51,53,55,57,187,220,  8
	];
}


function keyDown(e) {
if (e && e.preventDefault)
    e.preventDefault(); // DOM style
	applyKey(document.all? event.keyCode:e.which,false);
}

function keyUp(e) {
if (e && e.preventDefault)
    e.preventDefault(); // DOM style
	applyKey(document.all? event.keyCode:e.which,true);
}

function applyKey(sym,keyup) {
  if (isJoykeysEnabled) {
    var isJoystick = true;
	
  	if (sym ==37)
			left = !keyup;
		else if (sym == 39)
			right = !keyup;
		else if (sym == 38)
			up = !keyup;
		else if (sym == 40)
			down = !keyup;
		else if (sym == 192)
			fire = !keyup;
		else
			isJoystick = false;
			
		if (isJoystick) {
			updateJoystickAndKeyboard();	
			return;
		}
  }
  
	for(var i=0; i<64; i++) {
			if(keymap[i]==sym) {
				if (keyup) keysdown[7-(i>>3)]&=~(1<<(i&7)); else keysdown[7-(i>>3)]|=(1<<(i&7));
				updateJoystickAndKeyboard();	
				return;
			}
		}
		if (sym==37) {
			if (keyup) {
				keysdown[3]&=~0x02; // SHIFT
				keysdown[2]&=~0x80;
			}
			else {
				keysdown[3]|=0x02; // SHIFT
				keysdown[2]|=0x80;
			}
			updateJoystickAndKeyboard();	
		}
		else if (sym==38) {
			if (keyup) {
				keysdown[3]&=~0x02; // SHIFT
				keysdown[3]&=~0x80;
			}
			else {
				keysdown[3]|=0x02; // SHIFT
				keysdown[3]|=0x80;
			}
			updateJoystickAndKeyboard();	
		}
}
