b=document;n=false;q=true;bj=window;cz=navigator.userAgent;Zoomtra.util.CustomEvent=function(type,bq){this.type=type;this.scope=bq||bj;this.subscribers=[];if(Zoomtra.util["Event"]){Zoomtra.util.Event.regCE(this);}};Zoomtra.util.CustomEvent.prototype={subscribe:function(fn,obj,br){this.subscribers.push(new Zoomtra.util.Subscriber(fn,obj,br));},hf:function(fn,obj){var found=n;for(var i=0;i<this.subscribers.length;++i){var s=this.subscribers[i];if(s&&s.contains(fn,obj)){this._delete(i);found=q}}return found},fire:function(){for(var i=0;i<this.subscribers.length;++i){var s=this.subscribers[i];if(s){var scope=(s.override)?s.obj:this.scope;s.fn.call(scope,this.type,arguments,s.obj);}}},unsubscribeAll:function(){for(var i=0;i<this.subscribers.length;++i){this._delete(i);}},_delete:function(index){var s=this.subscribers[index];if(s){delete s.fn;delete s.obj}delete this.subscribers[index]}};Zoomtra.util.Subscriber=function(fn,obj,br){this.fn=fn;this.obj=obj||null;this.override=(br);};Zoomtra.util.Subscriber.prototype.contains=function(fn,obj){return(this.fn==fn&&this.obj==obj);};if(!Zoomtra.util.Event){Zoomtra.util.Event=function(){var loadComplete=n;var bg=[];var delayedListeners=[];var unloadListeners=[];var ck=[];var bv=[];var cs=[];return{EL:0,TYPE:1,FN:2,WFN:3,SCOPE:3,ADJ_SCOPE:4,isSafari:(cz.match(/safari/gi)),isIE:(!this.isSafari&&cz.match(/msie/gi)),addListener:function(el,sType,fn,bq,br){if(this._isValidCollection(el)){var bi=q;for(var i=0;i<el.length;++i){bi=(this.on(el[i],sType,fn,bq,br)&&bi);}return bi}else if(typeof el=="string"){if(loadComplete){el=this.getEl(el);}else{delayedListeners[delayedListeners.length]=[el,sType,fn,bq,br];return q}}if(!el){return n}if("unload"==sType&&bq!==this){unloadListeners[unloadListeners.length]=[el,sType,fn,bq,br];return q}var scope=(br)?bq:el;var wrappedFn=function(e){return fn.call(scope,Zoomtra.util.Event.getEvent(e),bq);};var bm=[el,sType,fn,wrappedFn,scope];var index=bg.length;bg[index]=bm;if(this.useLegacyEvent(el,sType)){var bs=this.getLegacyIndex(el,sType);if(bs==-1){bs=bv.length;bv[bs]=[el,sType,el["on"+sType]];cs[bs]=[];el["on"+sType]=function(e){Zoomtra.util.Event.fireLegacyEvent(Zoomtra.util.Event.getEvent(e),bs);}}cs[bs].push(index);}else if(el.addEventListener){el.addEventListener(sType,wrappedFn,n);}else if(el.attachEvent){el.attachEvent("on"+sType,wrappedFn);}return q},fireLegacyEvent:function(e,bs){var bi=q;var by=cs[bs];for(i=0;i<by.length;++i){var index=by[i];if(index){var bm=bg[index];var scope=bm[this.ADJ_SCOPE];var ret=bm[this.WFN].call(scope,e);bi=(bi&&ret);}}return bi},getLegacyIndex:function(el,sType){for(var i=0;i<bv.length;++i){var by=bv[i];if(by&&by[0]==el&&by[1]==sType){return i}}return-1},useLegacyEvent:function(el,sType){return((!el.addEventListener&&!el.attachEvent)||(sType=="click"&&this.isSafari));},removeListener:function(el,sType,fn){if(typeof el=="string"){el=this.getEl(el);}else if(this._isValidCollection(el)){var bi=q;for(var i=0;i<el.length;++i){bi=(this.removeListener(el[i],sType,fn)&&bi);}return bi}var cl=null;var index=this._getCacheIndex(el,sType,fn);if(index>=0){cl=bg[index]}if(!el||!cl){return n}if(el.removeEventListener){el.removeEventListener(sType,cl[this.WFN],n);}else if(el.detachEvent){el.detachEvent("on"+sType,cl[this.WFN]);}delete bg[index][this.WFN];delete bg[index][this.FN];delete bg[index];return q},hg:function(ev,resolveTextNode){var t=ev.target||ev.srcElement;if(resolveTextNode&&t&&"#text"==t.nodeName){return t.parentNode}else{return t}},hh:function(ev){var x=ev.pageX;if(!x&&0!==x){x=ev.clientX||0;if(this.isIE){x+=this._getScrollLeft();}}return x},hi:function(ev){var y=ev.pageY;if(!y&&0!==y){y=ev.clientY||0;if(this.isIE){y+=this._getScrollTop();}}return y},hj:function(ev){var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement}else if(ev.type=="mouseover"){t=ev.fromElement}}return t},getTime:function(ev){if(!ev.time){var t=new Date().getTime();try{ev.time=t}catch(e){return t}}return ev.time},stopEvent:function(ev){this.stopPropagation(ev);this.preventDefault(ev);},stopPropagation:function(ev){if(ev.stopPropagation){ev.stopPropagation();}else{ev.cancelBubble=q}},preventDefault:function(ev){if(ev.preventDefault){ev.preventDefault();}else{ev.returnValue=n}},getEvent:function(e){var ev=e||bj.event;if(!ev){var c=this.getEvent.caller;while(c){ev=c.arguments[0];if(ev&&Event==ev.constructor){break}c=c.caller}}return ev},hk:function(ev){return ev.charCode||(ev.type=="keypress")?ev.keyCode:0},_getCacheIndex:function(el,sType,fn){for(var i=0;i<bg.length;++i){var bm=bg[i];if(bm&&bm[this.FN]==fn&&bm[this.EL]==el&&bm[this.TYPE]==sType){return i}}return-1},_isValidCollection:function(o){return(o&&o.length&&typeof o!="string"&&!o.tagName&&!o.alert&&typeof o[0]!="undefined");},elCache:{},getEl:function(id){return b.getElementById(id);},clearCache:function(){for(i in this.elCache){delete this.elCache[i]}},regCE:function(gl){ck.push(gl);},_load:function(e){loadComplete=q},_tryPreloadAttach:function(){var tryAgain=!loadComplete;for(var i=0;i<delayedListeners.length;++i){var d=delayedListeners[i];if(d){var el=this.getEl(d[this.EL]);if(el){this.on(el,d[this.TYPE],d[this.FN],d[this.SCOPE],d[this.ADJ_SCOPE]);delete delayedListeners[i]}}}if(tryAgain){setTimeout("Zoomtra.util.Event._tryPreloadAttach()",50);}},_unload:function(e,me){for(var i=0;i<unloadListeners.length;++i){var l=unloadListeners[i];if(l){var scope=(l[this.ADJ_SCOPE])?l[this.SCOPE]:bj;l[this.FN].call(scope,this.getEvent(e),l[this.SCOPE]);}}if(bg&&bg.length>0){for(i=0;i<bg.length;++i){l=bg[i];if(l){this.removeListener(l[this.EL],l[this.TYPE],l[this.FN]);}}this.clearCache();}for(i=0;i<ck.length;++i){ck[i].unsubscribeAll();delete ck[i]}for(i=0;i<bv.length;++i){delete bv[i][0];delete bv[i]}},_getScrollLeft:function(){return this._getScroll()[1]},_getScrollTop:function(){return this._getScroll()[0]},_getScroll:function(){var dd=b.documentElement;db=b.body;if(dd&&dd.scrollTop){return[dd.scrollTop,dd.scrollLeft]}else if(db){return[db.scrollTop,db.scrollLeft]}else{return[0,0]}}}}();Zoomtra.util.Event.on=Zoomtra.util.Event.addListener;if(b&&b.body){Zoomtra.util.Event._load();}else{Zoomtra.util.Event.on(bj,"load",Zoomtra.util.Event._load,Zoomtra.util.Event,q);}Zoomtra.util.Event.on(bj,"unload",Zoomtra.util.Event._unload,Zoomtra.util.Event,q);Zoomtra.util.Event._tryPreloadAttach();}