(function(jQuery){jQuery.fn.__bind__=jQuery.fn.bind;jQuery.fn.__unbind__=jQuery.fn.unbind;jQuery.fn.__find__=jQuery.fn.find;var loadedChar,loadedModifier;var hotkeys={version:"0.7.9",override:/keypress|keydown|keyup/g,triggersMap:{},specialKeys:{27:"esc",9:"tab",32:"space",13:"return",8:"backspace",145:"scroll",20:"capslock",144:"numlock",19:"pause",45:"insert",36:"home",46:"del",35:"end",33:"pageup",34:"pagedown",37:"left",38:"up",39:"right",40:"down",109:"-",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",191:"/"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":'"',",":"<",".":">","/":"?","\\":"|"},shiftNumsKeyup:["`","1","2","3","4","5","6","7","8","9","0","-","=",";",'"',"<",">","?","|"],newTrigger:function(type,combi,callback){var result={};result[type]={};result[type][combi]={cb:callback,disableInInput:true};return result}};hotkeys.specialKeys=jQuery.extend(hotkeys.specialKeys,{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:"/"});function loadModifier(c){loadedModifier=c;window.setTimeout(function(){loadedModifier=null},200)}jQuery(document).keyup(function(e){if(e.keyCode===17||e.keyCode===224){loadModifier("ctrl+")}else{if(e.keyCode===18){loadModifier("alt+")}else{if(e.keyCode===16){loadModifier("shift+")}}}});function loadChar(c){loadedChar=c;window.setTimeout(function(){loadedChar=null},1000)}jQuery.fn.find=function(selector){this.query=selector;return jQuery.fn.__find__.apply(this,arguments)};jQuery.fn.unbind=function(type,combi,fn){if(jQuery.isFunction(combi)){fn=combi;combi=null}if(combi&&typeof combi==="string"){var selectorId=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();var hkTypes=type.split(" ");for(var x=0;x<hkTypes.length;x++){delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi]}}return this.__unbind__(type,fn)};jQuery.fn.bind=function(type,data,fn){var handle=type.match(hotkeys.override);if(jQuery.isFunction(data)||!handle){return this.__bind__(type,data,fn)}else{var result=null,pass2jq=jQuery.trim(type.replace(hotkeys.override,""));if(pass2jq){result=this.__bind__(pass2jq,data,fn)}if(typeof data==="string"){data={"combi":data}}if(data.combi){for(var x=0;x<handle.length;x++){var eventType=handle[x];var combi=data.combi.toLowerCase(),trigger=hotkeys.newTrigger(eventType,combi,fn),selectorId=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();trigger[eventType][combi].disableInInput=data.disableInInput;if(!hotkeys.triggersMap[selectorId]){hotkeys.triggersMap[selectorId]=trigger}else{if(!hotkeys.triggersMap[selectorId][eventType]){hotkeys.triggersMap[selectorId][eventType]=trigger[eventType]}}var mapPoint=hotkeys.triggersMap[selectorId][eventType][combi];if(!mapPoint){hotkeys.triggersMap[selectorId][eventType][combi]=[trigger[eventType][combi]]}else{if(mapPoint.constructor!==Array){hotkeys.triggersMap[selectorId][eventType][combi]=[mapPoint]}else{hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length]=trigger[eventType][combi]}}this.each(function(){var jqElem=jQuery(this);if(jqElem.attr("hkId")&&jqElem.attr("hkId")!==selectorId){selectorId=jqElem.attr("hkId")+";"+selectorId}jqElem.attr("hkId",selectorId)});result=this.__bind__(handle.join(" "),data,hotkeys.handler)}}return result}};hotkeys.findElement=function(elem){if(!jQuery(elem).attr("hkId")){if(jQuery.browser.opera||jQuery.browser.safari){while(!jQuery(elem).attr("hkId")&&elem.parentNode){elem=elem.parentNode}}}return elem};hotkeys.handler=function(event){var target=hotkeys.findElement(event.currentTarget),jTarget=jQuery(target),ids=jTarget.attr("hkId");if(ids){ids=ids.split(";");var code=event.which,type=event.type;if(type==="keypress"&&code===0){code=event.keyCode}var special=hotkeys.specialKeys[code],character=!special&&String.fromCharCode(code).toLowerCase(),shift=event.shiftKey,ctrl=event.ctrlKey,alt=event.altKey||event.originalEvent.altKey,mapPoint=null;for(var x=0;x<ids.length;x++){if(hotkeys.triggersMap[ids[x]][type]){mapPoint=hotkeys.triggersMap[ids[x]][type];break}}if(mapPoint){var trigger;if(!shift&&!ctrl&&!alt&&!loadedModifier){if(!loadedChar){jQuery.each(mapPoint,function(name){if(name.length>1&&name.charAt(0)===character){loadChar(character)}})}else{jQuery.each(mapPoint,function(name){if(name.length>1&&name.charAt(0)===loadedChar&&name.charAt(1)===character){trigger=this}})}if(!trigger){trigger=mapPoint[special]||(character&&mapPoint[character])}}else{var modif="";if(loadedModifier){modif=loadedModifier}else{if(alt){modif+="alt+"}if(ctrl){modif+="ctrl+"}if(shift){modif+="shift+"}}trigger=mapPoint[modif+special];if(!trigger){if(character){trigger=mapPoint[modif+character]||mapPoint[modif+hotkeys.shiftNums[character]]||(modif==="shift+"&&mapPoint[hotkeys.shiftNums[character]])||(modif==="shift+"&&jQuery.inArray(character,hotkeys.shiftNumsKeyup)!==-1&&mapPoint[character])}}}if(trigger){var result=false;for(x=0;x<trigger.length;x++){if(trigger[x].disableInInput){var elem=jQuery(event.target);if(jTarget.is("input")||jTarget.is("textarea")||jTarget.is("select")||elem.is("input")||elem.is("textarea")||elem.is("select")){return true}}result=result||trigger[x].cb.apply(this,[event])}return result}}}};window.hotkeys=hotkeys;return jQuery})(jQuery);
jQuery(document).bind("iframeAppended",function(e,iframe){jQuery(iframe).load(function(){var target=jQuery(iframe).contents();target.bind("keyup keydown keypress",function(e){if(jQuery.browser.safari&&e.type==="keypress"){return}if(!jQuery(e.target).is(":input")){jQuery(document).trigger(e)}})})});AJS.whenIType=function(keys){var executer,bindKeys=function(keys){if(/\?/.test(keys)){jQuery(document).bind("keypress",{combi:keys,disableInInput:true},function(){if(!AJS.popup.current&&executer){executer()}})}else{if(keys=="/"){jQuery(document).bind("keypress keydown",{combi:keys,disableInInput:true},function(e){e.preventDefault()})}jQuery(document).bind("keyup",{combi:keys,disableInInput:true},function(){if(!AJS.popup.current&&executer){executer()}})}},addShortcutTitle=function(selector){var elem=jQuery(selector),title=elem.attr("title")||"",keyArr=keys.split("");if(elem.data("kbShortcutAppended")){appendShortcutTitle(elem,keyArr,title);return}title+=" ( "+AJS.params.keyType+" '"+keyArr.shift()+"'";jQuery.each(keyArr,function(){title+=" "+AJS.params.keyThen+" '"+this+"'"});title+=" )";elem.attr("title",title);elem.data("kbShortcutAppended",true)},appendShortcutTitle=function(elem,keyArr,title){title=title.replace(/\)$/," OR ");title+="'"+keyArr.shift()+"'";jQuery.each(keyArr,function(){title+=" "+AJS.params.keyThen+" '"+this+"'"});title+=" )";elem.attr("title",title)};bindKeys(keys);return{moveToNextItem:function(selector){executer=function(){var index,transition=true,items=jQuery(selector),focusedElem=jQuery(selector+".focused");if(!executer.blurHandler){jQuery(document).one("keypress",function(e){if(e.keyCode===27&&focusedElem){focusedElem.removeClass("focused")}})}if(focusedElem.length===0){transition=false;focusedElem=jQuery(selector).eq(0)}else{focusedElem.removeClass("focused");index=jQuery.inArray(focusedElem.get(0),items);if(index<items.length-1){index=index+1;focusedElem=items.eq(index)}else{focusedElem.removeClass("focused");focusedElem=jQuery(selector).eq(0);transition=false}}if(focusedElem&&focusedElem.length>0){focusedElem.addClass("focused");focusedElem.moveTo(transition);focusedElem.find("a:first").focus()}}},moveToPrevItem:function(selector){executer=function(){var index,transition=true,items=jQuery(selector),focusedElem=jQuery(selector+".focused");if(!executer.blurHandler){jQuery(document).one("keypress",function(e){if(e.keyCode===27&&focusedElem){focusedElem.removeClass("focused")}})}if(focusedElem.length===0){transition=false;focusedElem=jQuery(selector+":last")}else{focusedElem.removeClass("focused");index=jQuery.inArray(focusedElem.get(0),items);if(index>0){index=index-1;focusedElem=items.eq(index)}else{focusedElem.removeClass("focused");focusedElem=jQuery(selector+":last");transition=false}}if(focusedElem&&focusedElem.length>0){focusedElem.addClass("focused");focusedElem.moveTo(transition);focusedElem.find("a:first").focus()}}},click:function(selector){addShortcutTitle(selector);executer=function(){var elem=jQuery(selector);if(elem.length>0){elem.click()}}},goTo:function(location){executer=function(){window.location.href=contextPath+location}},followLink:function(selector){addShortcutTitle(selector);executer=function(){var elem=jQuery(selector);if(elem.length>0&&elem.attr("nodeName").toLowerCase()==="a"){window.location.href=elem.attr("href")}}},execute:function(func){executer=function(){func()}},moveToAndClick:function(selector){addShortcutTitle(selector);executer=function(){var elem=jQuery(selector);if(elem.length>0){elem.click();elem.moveTo()}}},moveToAndFocus:function(selector){addShortcutTitle(selector);executer=function(){var elem=jQuery(selector);if(elem.length>0){elem.focus();elem.moveTo()}}},or:function(keys){bindKeys(keys);return this}}};
jQuery(function(){function blurTargetField(e){if(e.keyCode===27&&jQuery(e.target).is(":input")){jQuery(e.target).blur()}}if(AJS.keys){jQuery(document).keyup(blurTargetField);jQuery(document).bind("iframeAppended",function(e,iframe){jQuery(iframe).load(function(){var jQuery;if(iframe.contentWindow&&iframe.contentWindow.jQuery){jQuery=iframe.contentWindow.jQuery;jQuery("body").keyup(blurTargetField)}})});jQuery.each(AJS.keys.shortcuts,function(){var operation=this.op,param=this.param;jQuery.each(this.keys,function(){if(operation==="execute"){param=new Function(param)}AJS.whenIType(this)[operation](param)})})}});

