var up, down, left, right, fire, isJoykeysEnabled;

function KeyboardInit() {
  isJoykeysEnabled = 0;
  up = down = left = right = fire = 0;
  keymap=[[50]/*2*/,[52]/*4*/,[54]/*6*/,[56]/*8*/,[48]/*0*/,[187,107,61]/*=*/,[36]/*Home*/,[115]/*F4(F7)*/,[81]/*q*/,[69]/*e*/,
    [84]/*t*/,[85]/*u*/,[79]/*o*/,[219,91]/*[*/,[-1]/*Up arr*/,[114]/*F3*/,[20]/*Caps(CBM)*/,
    [83]/*s*/,[70]/*f*/,[72]/*h*/,[75]/*k*/,[186,59]/*;*/,[220,92]/*\*/,[113]/*F2(F3)*/,[32]/* */,
    [90]/*z*/,[67]/*c*/,[66]/*b*/,[77]/*m*/,[190,46]/*.*/,[16]/*Shift*/,[112]/*F1*/,
    [9]/*Tab*/,[16]/*shift*/,[88]/*x*/,[86]/*v*/,[78]/*n*/,[188,44]/*,*/,[191,47]/*/*/,[40]/*down arrow*/,
    [17]/*Ctrl*/,[65]/*a*/,[68]/*d*/,[71]/*g*/,[74]/*j*/,[76]/*l*/,[222,39]/*'*/,[39]/*right arrow*/,
    [192,96]/*`*/,[87]/*w*/,[82]/*r*/,[89]/*y*/,[73]/*i*/,[80]/*p*/,[221,93]/*]*/,[13]/*Enter*/,
    [49]/*1*/,[51]/*3*/,[53]/*5*/,[55]/*7*/,[57]/*9*/,[189,109]/*-*/,[220,92]/*\*/,[8]/*Backspace*/];
}


function keyDown(e) {
if (e && e.preventDefault)
    e.preventDefault(); // DOM style
	applyKey(document.all? event.keyCode:e.which,false);
return false;
}

function keyUp(e) {
if (e && e.preventDefault)
    e.preventDefault(); // DOM style
	applyKey(document.all? event.keyCode:e.which,true);
return false;
}  

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 || sym==96)
			fire = !keyup;
		else
			isJoystick = false;
			
		if (isJoystick) {
			updateJoystickAndKeyboard();	
			return;
		}
  }
  
	for(var i=0; i<64; i++) {
	 for(var j=0; j<keymap[i].length; j++) {
			if(keymap[i][j]==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();	
		}
}

