(function(jQuery){var hotkeys={version:"0.8",specialKeys:{8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",190:".",191:"/",220:"\\",224:"meta"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":": ","'":'"',",":"<",".":">","/":"?","\\":"|"},keymap:{}};var interval=800,special=false;var key="",modifier=[],match=false;jQuery.fn.hotKeys=function(keymap){var $this=jQuery(this);hotkeys.keymap=keymap;setInterval(function(){key="";special=match=false;modifier=[]},interval);$this.unbind("keydown",keyHandler).bind("keydown","*",keyHandler)};jQuery.extend({evalHotKey:function(evKey){key=evKey;return execHandler()}});function execHandler(el){if(hotkeys.keymap[key]!=undefined&&typeof hotkeys.keymap[key]=="function"){modifier=[];special=match=false;hotkeys.keymap[key](el);key="";return true}return false}function keyHandler(event){if(typeof event.data!=="string"){return}evAttr=$(event.target).attr("hotkeys");if(this!==event.target&&!evAttr&&(/textarea|select/i.test(event.target.nodeName)||event.target.type==="text"||event.target.type==="password")){return}special=hotkeys.specialKeys[event.which]||false;key=hotkeys.specialKeys[event.which]||String.fromCharCode(event.which).toLowerCase();if(!special){modifier.push(key)}if(modifier.length>0){key=modifier.join("+")}if(event.altKey){key="alt+"+key}if(event.ctrlKey){key="ctrl+"+key}if(event.shiftKey){if(hotkeys.shiftNums[key]!=undefined){key=hotkeys.shiftNums[key]}else{key="shift+"+key}}if(evAttr){var commands=evAttr.split(/\s+/);var matches=0;for(var i=0,l=commands.length;i<l;i++){if(commands[i]==key){matches++}}if(matches==0){return}}var el=(evAttr&&event.target)?event.target:null;match=execHandler(el);if(match){event.preventDefault()}}})(jQuery);
