﻿function bitSw(bits, f, b) {
  if (f) bits |= b;
  else   bits &= ~b;
  return bits;
}

var Pad = Class.create();
Pad.prototype = {
	initialize : function() {
		this.lev   = 0;		// パッドレベル
		this.trg   = 0;		// パッドトリガ
		this.LEFT  = 1;
		this.RIGHT = 2;
		this.UP    = 4;
		this.DOWN  = 8;
		this.A     = 16;
		this.B     = 32;
		this.ONE   = 64;
		this.TWO   = 128;
		this.THREE = 256;
		this.FOUR  = 512;
		this._raw  = 0;
		this._pre  = 0;
	},

	update : function() {
		this.lev = this._raw;
		this.trg = this._raw & (~this._pre);
		this._pre = this._raw;
	}
};

var pad = new Pad();


function onkeydownHandler(e) { return keyHandler(e, true); }
function onkeyupHandler(e) { return keyHandler(e, false); }

function keyHandler(e, flag)
{
	var evt = e ? e : window.event;
	var keyCode = evt.keyCode ? evt.keyCode : evt.which;

	switch(keyCode) {
		case Event.KEY_LEFT:  pad._raw = bitSw(pad._raw, flag, pad.LEFT ); break;
		case Event.KEY_RIGHT: pad._raw = bitSw(pad._raw, flag, pad.RIGHT); break;
		case Event.KEY_UP:    pad._raw = bitSw(pad._raw, flag, pad.UP   ); break;
		case Event.KEY_DOWN:  pad._raw = bitSw(pad._raw, flag, pad.DOWN ); break;
		case 88:              pad._raw = bitSw(pad._raw, flag, pad.A    ); break;
		case 90:              pad._raw = bitSw(pad._raw, flag, pad.B    ); break;
		case 49:case 97:      pad._raw = bitSw(pad._raw, flag, pad.ONE  ); break;
		case 50:case 98:      pad._raw = bitSw(pad._raw, flag, pad.TWO  ); break;
		case 51:case 99:      pad._raw = bitSw(pad._raw, flag, pad.THREE); break;
		case 52:case 100:     pad._raw = bitSw(pad._raw, flag, pad.FOUR ); break;
	}
	return false;
}

function freeKey() {
	document.onkeydown = null;
	document.onkeyup   = null;
}

function bindKey() {
	document.onkeydown = onkeydownHandler;
	document.onkeyup   = onkeyupHandler;
}
