var shortcuts = {};
var registeredShortcuts = [];

window.addEvent('domready', function(){
shortcuts = new Shortcuts();
});


var Shortcuts = new Class({
    initialize: function(){
		document.addEvent(window.ie ? 'keydown' : 'keypress',function(event) {
			var target = event || window.event;
			target = target.target || target.srcElement;

			/*console.log(event.code+' -> '+event.key);
			console.log('Shift -> '+event.shift);
			console.log('Alt -> '+event.alt);
			console.log('Ctrl -> '+event.control);/**/
			//console.log(target.nodeName);
			if ((target.type && target.type == "text") || target.nodeName.toLowerCase() == "textarea" || target.nodeName.toLowerCase() == "input" || target.nodeName.toLowerCase() == "select") {
				//console.log('only shortcut without echo can treated');
				if(event.alt || event.control) {
					//console.log('Shortcuts can be treated');
					shortcuts.executeShortcut(event);
				}
			}
			else {
				//console.log('All shortcuts can be treated');
				shortcuts.executeShortcut(event);
			}
			
		});
		//console.log('Keypress event handler added');
	},
	
	
	executeShortcut: function(event){
		var code = event.code;
		if(code >= 65 && code <= 90)
			code = code + 32;
		
		var index = code*1000+(event.shift?100:0)+(event.alt?10:0)+(event.control?1:0);
		//console.log('ShorcutId: '+index);	
		registeredShortcuts.each(function(item, idx){
			if(item.index == index || (event.key.length == 1 && (code < 97 || code > 122) && item.index == (index+(event.shift?-100:100))) ){
				item.fct(event, item.context);
				event.stop();
			}
		});
	}
	
});


function registerShortcut(key, shift, alt, ctrl, target, context, fct){
	//console.log('Keypress event handler added');
	if(key.length ==1){
		registerShortcutCode(key.toLowerCase().charCodeAt(0), shift, alt, ctrl, target, context, fct)
	}
	else {
		//console.log('Warning non valid shortcut. Use the registerShortcutCode');
	}
}

function registerShortcutCode(code, shift, alt, ctrl, target, context, fct){
	//console.log('Keypress event handler added');
	var index = code*1000+(shift?100:0)+(alt?10:0)+(ctrl?1:0);
	//console.log('ShorcutId: '+index);	

	registeredShortcuts.push({'index': index, 'target': target, 'fct': fct, 'context': context});
}

function unregisterShortcut(key, shift, alt, ctrl, target, context, fct){
	if(key.length ==1){
		unregisterShortcutCode(key.toLowerCase().charCodeAt(0), shift, alt, ctrl, target, context, fct)
	}
	else {
		//console.log('Warning non valid shortcut. Use the registerShortcutCode');
	}
}

function clearAllShortCutsFor(target){
	registeredShortcuts = registeredShortcuts.filter(function(item, index){
		return item.target != target;
	});
}

function unregisterShortcutCode(code, shift, alt, ctrl, target, context, fct){
	var index = code*1000+(shift?100:0)+(alt?10:0)+(ctrl?1:0);
	registeredShortcuts = registeredShortcuts.filter(function(item, index){
		return item.index != index;
	});
}


