/**

Hotkey, v. 1.7
(c) 2005, Ivan Shumkov (ivan@shumkov.ru)
http://forum.dklab.ru/js/advises/Hotkei.html

Может: 
1. Создовать хотхеи функцией addHotKey('ид элемента', код символа) (срабатывает без Ctrl) 
2. Удалять хоткеи функцией remHotKey(код символа) 
3. Создавать "одноразовые" хоткеи (срабатывают только один раз) oneHotKey('ид элемента', код символа) 
Проверено в IE 6.0, Firefox 1.0.3, Opera 7.54 

*/

(Hotkey = {

_hotKeys : {},
hotElements : ['a', 'input'],

Init : function() {
	for (i = 0; i < this.hotElements.length;i++) {
		var e = document.getElementsByTagName(this.hotElements[i]);
		if (e) 
			for (var j = 0; j< e.length; j++) 
				if (e[j].accessKey) this.AddKeyCode(e[j], e[j].accessKey);
    }
    if (document.attachEvent) document.attachEvent('onkeydown', function(){return Hotkey.KeyDown(event)});
    else document.addEventListener('keypress', function(ev){Hotkey.KeyDown(ev)}, true);
},
AddKeyCode : function(obj, keycode) {
	if (typeof(obj) == 'function' || typeof(obj) == 'object') {
		this._hotKeys[keycode] = obj;
		return keycode;
	} else return false;
},
KeyDown : function (event) {
	if (event.ctrlKey) {
		var key = event.keyCode || event.charCode;
		if (this._hotKeys[key]) {
			if (navigator.appName == 'Microsoft Internet Explorer') this._hotKeys[key].click();
			else {
				event.cancelBubble = true;
				event.preventDefault();
				event.stopPropagation();
				if (this._hotKeys[key].nodeName == 'INPUT') this._hotKeys[key].click();
				else if (this._hotKeys[key].onclick) this._hotKeys[key].onclick();
				else window.location = this._hotKeys[key].href;
			}
			event.returnValue = false;
			return false;
		}
	}
}
});
