/* ----------------------------------------------------------- 
 | capture key events
 ------------------------------------------------------------- */
var SHIFT_KEYCODE = 16;
var CTRL_KEYCODE = 17;
var ALT_KEYCODE = 18;
var SHIFT_KEYNAME = "shift";
var CTRL_KEYNAME = "ctrl";
var ALT_KEYNAME = "alt";


function keyEvents() {
	this.id = "keyevnt" + keyEvents.count++;
	eval(this.id + "=this");
	this.keys = new Array();
	this.shift = 0;
	this.ctrl = 0;
	this.alt = 0;
	this.addKey = keyEvents_addKey;
	this.keyEvent = keyEvents_keyevent;
	this.checkModKeys = keyEvents_checkModKeys;
};

function keyEvents_addKey(cdom, cns4, a, m) {
	if(oBw.ie||oBw.dom) this.keys[cdom] = [a,m];
	else this.keys[cns4] = [a,m];
};

function keyEvents_keyevent(evt) {
	if(oBw.ie||oBw.op) evt=event;
	var k = (oBw.ie || oBw.op || oBw.ns6) ? evt.keyCode : evt.which;
	this.checkModKeys(evt,k);
	if(this.keys[k] == null) return false;
	var m = this.keys[k][1];
	if((this.shift && (m.indexOf(SHIFT_KEYNAME) != -1) 
			|| !this.shift && (m.indexOf(SHIFT_KEYNAME) == -1)) && (this.ctrl && (m.indexOf(CTRL_KEYNAME) != -1) 
			|| !this.ctrl && (m.indexOf(CTRL_KEYNAME) == -1)) && (this.alt && (m.indexOf(ALT_KEYNAME) != -1) 
			|| !this.alt && (m.indexOf(ALT_KEYNAME) == -1))) {
		var a = this.keys[k][0];
		a = eval(a); 
		if(typeof a == "function") a();
	}
}

function keyEvents_checkModKeys(e,k) {
	if(oBw.dom) { 
		this.shift = e.shiftKey;
		this.ctrl = e.ctrlKey;
		this.alt = e.altKey;
	} else {
		// for opera
		this.shift = (k == SHIFT_KEYCODE) ? 1 : 0;
		this.ctrl = (k == CTRL_KEYCODE) ? 1 : 0;
		this.alt = (k == ALT_KEYCODE) ? 1 : 0;
	}
}

keyEvents.count = 0;

