/**

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;
			}
		}
	}
});
