(function(c){var p={backspace:8,tab:9,enter:13,pause:19,capslock:20,esc:27,space:32,pageup:33,pagedown:34,end:35,home:36,left:37,up:38,right:39,down:40,insert:45,"delete":46,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123,"?":191,minus:c.browser.opera?[109,45]:c.browser.mozilla?109:[189,109],plus:c.browser.opera?[61,43]:c.browser.mozilla?[61,107]:[187,107]},h={},j={},k=false,l,m=function(a,b){var e=a;if(b.ctrl)e+="_ctrl";if(b.alt)e+="_alt";if(b.shift)e+="_shift";var d=function(g,f){if(f&&f!==16&&f!==17&&f!==18)g+="_"+f;return g};if(c.isArray(b.which)){var i=[];c.each(b.which,function(g,f){i.push(d(e,f))});return i}else return d(e,b.which)},o=function(a){var b={};a=a.split("+");c.each(a,function(e,d){if(d==="ctrl"||d==="alt"||d==="shift")b[d]=true;else b.which=p[d]||d.toUpperCase().charCodeAt()});return b},q=function(a){var b=a.tagName.toLowerCase();a=a.type;return b==="input"&&(a==="text"||a==="password"||a==="file"||a==="search")||b==="textarea"?true:false},n=function(a,b){if(l){a=m(a,{ctrl:b.ctrlKey,alt:b.altKey,shift:b.shiftKey,which:b.which});if(a=l[a]){var e=q(b.target),d=false;c.each(a,function(i,g){if(!e||g.enableInInput){if(!d){b.preventDefault();d=true}g.handler(b)}})}}};c.Shortcuts={};c.Shortcuts.start=function(a){a=a||"default";l=h[a];if(!k){c(document).bind((c.browser.opera?"keypress":"keydown")+".shortcuts",function(b){if(b.type==="keypress"&&b.which>=97&&b.which<=122)b.which-=32;j[b.which]||n("down",b);j[b.which]=true;n("hold",b)});c(document).bind("keyup.shortcuts",function(b){j[b.which]=false;n("up",b)});k=true}};c.Shortcuts.stop=function(){c(document).unbind("keypress.shortcuts keydown.shortcuts keyup.shortcuts");k=false};c.Shortcuts.add=function(a){if(!a.mask)throw new Error("$.Shortcuts.add: required parameter 'params.mask' is undefined.");if(!a.handler)throw new Error("$.Shortcuts.add: required parameter 'params.handler' is undefined.");a.type=a.type||"down";a.list=a.list||"default";h[a.list]||(h[a.list]={});var b=h[a.list],e=a.mask.toLowerCase().replace(/\s+/g,"").split(",");c.each(e,function(d,i){d=o(i);d=m(a.type,d);c.isArray(d)||(d=[d]);c.each(d,function(g,f){b[f]||(b[f]=[]);b[f].push(a)})})};c.Shortcuts.remove=function(a){if(!a.mask)throw new Error("$.Shortcuts.remove: required parameter 'params.mask' is undefined.");a.type=a.type||"down";a.list=a.list||"default";if(h[a.list]){var b=a.mask.toLowerCase().replace(/\s+/g,"").split(",");c.each(b,function(e,d){e=o(d);e=m(a.type,e);c.isArray(e)||(e=[e]);c.each(e,function(i,g){delete h[a.list][g]})})}}})(jQuery);
