shortcut={all_shortcuts:{},add:function(f,h,c){var g={type:"keydown",propagate:false,disable_in_input:false,target:document,keycode:false};if(!c){c=g}else{for(var a in g){if(typeof c[a]=="undefined"){c[a]=g[a]}}}var e=c.target;if(typeof c.target=="string"){e=document.getElementById(c.target)}var b=this;f=f.toLowerCase();var d=function(o){o=o||window.event;if(c.disable_in_input){var l;if(o.target){l=o.target}else{if(o.srcElement){l=o.srcElement}}if(l.nodeType==3){l=l.parentNode}if(l.tagName=="INPUT"||l.tagName=="TEXTAREA"){return}}if(o.keyCode){code=o.keyCode}else{if(o.which){code=o.which}}var n=String.fromCharCode(code).toLowerCase();if(code==188){n=","}if(code==190){n="."}var s=f.split("+");var q=0;var p={"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":'"',",":"<",".":">","/":"?","\\":"|"};var j={esc:27,escape:27,tab:9,space:32,"return":13,enter:13,backspace:8,scrolllock:145,scroll_lock:145,scroll:145,capslock:20,caps_lock:20,caps:20,numlock:144,num_lock:144,num:144,pause:19,"break":19,insert:45,home:36,"delete":46,end:35,pageup:33,page_up:33,pu:33,pagedown:34,page_down:34,pd:34,left:37,up:38,right:39,down:40,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123};var r={shift:{wanted:false,pressed:false},ctrl:{wanted:false,pressed:false},alt:{wanted:false,pressed:false},meta:{wanted:false,pressed:false}};if(o.ctrlKey){r.ctrl.pressed=true}if(o.shiftKey){r.shift.pressed=true}if(o.altKey){r.alt.pressed=true}if(o.metaKey){r.meta.pressed=true}for(var m=0;k=s[m],m<s.length;m++){if(k=="ctrl"||k=="control"){q++;r.ctrl.wanted=true}else{if(k=="shift"){q++;r.shift.wanted=true}else{if(k=="alt"){q++;r.alt.wanted=true}else{if(k=="meta"){q++;r.meta.wanted=true}else{if(k.length>1){if(j[k]==code){q++}}else{if(c.keycode){if(c.keycode==code){q++}}else{if(n==k){q++}else{if(p[n]&&o.shiftKey){n=p[n];if(n==k){q++}}}}}}}}}}if(q==s.length&&r.ctrl.pressed==r.ctrl.wanted&&r.shift.pressed==r.shift.wanted&&r.alt.pressed==r.alt.wanted&&r.meta.pressed==r.meta.wanted){h(o);if(!c.propagate){o.cancelBubble=true;o.returnValue=false;if(o.stopPropagation){o.stopPropagation();o.preventDefault()}return false}}};this.all_shortcuts[f]={callback:d,target:e,event:c.type};if(e.addEventListener){e.addEventListener(c.type,d,false)}else{if(e.attachEvent){e.attachEvent("on"+c.type,d)}else{e["on"+c.type]=d}}},remove:function(c){c=c.toLowerCase();var e=this.all_shortcuts[c];delete (this.all_shortcuts[c]);if(!e){return}var a=e.event;var b=e.target;var d=e.callback;if(b.detachEvent){b.detachEvent("on"+a,d)}else{if(b.removeEventListener){b.removeEventListener(a,d,false)}else{b["on"+a]=false}}}};