<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -78,7 +78,7 @@ APE.namespace(&quot;APE.drag&quot;&lt;!--necessary space --&gt; );&lt;/header&gt;
             &lt;fileset dir=&quot;${build}&quot; includes=&quot;**/*.js&quot;/&gt;
             &lt;arg line=&quot;-jar&quot;/&gt;
             &lt;arg path=&quot;yuicompressor-2.4\build\yuicompressor-2.4.jar&quot;/&gt;
-            &lt;!--arg line=&quot;-v&quot;/--&gt;
+            &lt;arg line=&quot;-v&quot;/&gt;
             &lt;srcfile/&gt;
             &lt;arg line=&quot;-o&quot;/&gt;
             &lt;mapper type=&quot;glob&quot; from=&quot;*.js&quot; to=&quot;*-min.js&quot;/&gt;</diff>
      <filename>build.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,3 @@
 (function(){if(typeof APE!==&quot;undefined&quot;){throw Error(&quot;APE is already defined.&quot;)}self.APE={namespace:J,mixin:M,extend:R,createFactory:Q,getById:P,deferError:D,toString:function(){return&quot;[APE JavaScript Library]&quot;}};function I(){}var A=0,T=&quot;instances&quot;,N=&quot;prototype&quot;,B=Object[N],L=B.hasOwnProperty,C=Function[N].toString,V=[&quot;toString&quot;,&quot;valueOf&quot;];function J(Z){var a=Z.split(&quot;.&quot;),X=self,Y=0,F=a.length,W;for(;Y&lt;F;Y++){W=a[Y];if(!U(X,W)){X[W]=new O((X.qualifiedName||&quot;APE&quot;)+&quot;.&quot;+W)}X=X[W]}return X}function M(Y,X){var Z,W=0,F;for(Z in X){if(U(X,Z)){Y[Z]=X[Z]}}for(;W&lt;V.length;W++){F=V[W];if(U(X,F)){Y[F]=X[F]}}return Y}function R(F,Y,W){I[N]=Y[N];var X=F[N]=new I;if(typeof W==&quot;object&quot;){APE.mixin(X,W)}X.constructor=F;return F}function D(F){self.setTimeout(function(){throw F},1)}function Q(F,X){return{getById:W,getByNode:W};function W(Y){if(typeof Y.id==&quot;string&quot;){arguments[0]=H(F,Y)}if(!(T in this)){if(typeof X===&quot;function&quot;){F[N]=X()}}return E.call(this,F,arguments)}}function E(W,F){var X=F[0];if(!U(this,T)){this[T]={}}return this[T][X]||(this[T][X]=G(W,F))}function P(F){return E.call(this,this,arguments)}function H(W,F){var Y=F.id,X;if(!Y){X=S(W)||&quot;APE&quot;;Y=F.id=X+&quot;_&quot;+(A++)}return Y}function S(F){if(typeof F.name===&quot;string&quot;){return F.name}var W=C.call(F).match(/\s([a-z]+)\(/i);return W&amp;&amp;W[1]||&quot;&quot;}function G(Y,W){var X,F=I[N]=Y[N];F.constructor=Y;X=new I;Y.apply(X,W);return X}O[N].toString=function(){return&quot;[&quot;+this.qualifiedName+&quot;]&quot;};function O(F){this.qualifiedName=F}function U(X,W){if(W in X){if(L){return L.call(X,W)}var F=X.__proto__;if(F){return !(W in F)||F[W]!==X[W]}return B[W]!==X[W]}return false}if(L&amp;&amp;!L.call(self,&quot;Object&quot;)){var K=L;L=B.hasOwnProperty=function(F){return(this===self)?(F in this&amp;&amp;this[F]!==B[F]):K.call(this,F)}}})();(function(){var APE=self.APE,Registry={};APE.EventPublisher=EventPublisher;APE.mixin(EventPublisher,{get:get,add:add,fire:fire,cleanUp:cleanUp});function EventPublisher(src,type){this.src=src;this._callStack=[];this.type=type}EventPublisher.prototype={add:function(fp,thisArg){this._callStack.push([fp,thisArg||this.src]);return this},addBefore:function(f,thisArg){return add(this,&quot;beforeFire&quot;,f,thisArg||this.src)},addAfter:function(f,thisArg){return add(this,&quot;afterFire&quot;,f,thisArg||this.src)},getEvent:function(type){return get(this,type)},remove:function(fp,thisArg){var cs=this._callStack,i,call;thisArg=thisArg||this.src;for(i=0;i&lt;cs.length;i++){call=cs[i];if(call[0]===fp&amp;&amp;call[1]===thisArg){return cs.splice(i,1)}}return null},removeBefore:function(fp,thisArg){return get(this,&quot;beforeFire&quot;).remove(fp,thisArg||this.src)},removeAfter:function(fp,thisArg){return get(this,&quot;afterFire&quot;).remove(fp,thisArg||this.src)},fire:function(payload){return fire(this)(payload)},toString:function(){return&quot;APE.EventPublisher: {src=&quot;+this.src+&quot;, type=&quot;+this.type+&quot;, length=&quot;+this._callStack.length+&quot;}&quot;}};function cleanUp(){var type,publisherList,publisher,i,len;for(type in Registry){publisherList=Registry[type];for(i=0,len=publisherList.length;i&lt;len;i++){publisher=publisherList[i];publisher.src[publisher.type]=null}}Registry={}}function add(src,sEvent,fp,thisArg){return get(src,sEvent).add(fp,thisArg)}function fire(publisher){return fireEvent;function fireEvent(e){var preventDefault=false,i,cs=publisher._callStack,csi;if(typeof publisher.beforeFire==&quot;function&quot;){try{if(publisher.beforeFire(e)==false){preventDefault=true}}catch(ex){APE.deferError(ex)}}for(i=0;i&lt;cs.length;i++){csi=cs[i];try{if(csi[0].call(csi[1],e)==false){preventDefault=true}}catch(ex){APE.deferError(ex)}}if(typeof publisher.afterFire==&quot;function&quot;){if(publisher.afterFire(e)==false){preventDefault=true}}return !preventDefault}}function get(src,sEvent){var publisherList=Registry[sEvent]||(Registry[sEvent]=[]),i,len,publisher;for(i=0,len=publisherList.length;i&lt;len;i++){publisher=publisherList[i];if(publisher.src===src){return publisher}}publisher=new EventPublisher(src,sEvent);if(src[sEvent]){publisher.add(src[sEvent],src)}src[sEvent]=fire(publisher);publisherList[len]=publisher;return publisher}var isMaybeLeak
 /*@cc_on=(@_jscript_version&lt;5.7)@*/
-;if(isMaybeLeak){EventPublisher.get(self,&quot;onunload&quot;).addAfter(cleanUp,EventPublisher)}})();APE.namespace(&quot;APE.dom&quot;);(function(){var E=APE.dom,A=&quot;ownerDocument&quot;,D=document,F=D.documentElement,C=F&amp;&amp;typeof F[A]!==&quot;undefined&quot;?A:&quot;document&quot;,B=D.defaultView;E.OWNER_DOCUMENT=C;E.IS_COMPUTED_STYLE=(typeof B!=&quot;undefined&quot;&amp;&amp;&quot;getComputedStyle&quot; in B)})();(function(){APE.mixin(APE.dom,{getScrollOffsets:A,getViewportDimensions:C});var B=&quot;documentElement&quot;,E=document[B],D=E&amp;&amp;E.clientWidth===0;E=null;function A(H){H=H||window;var G,I=H.document,F=I[B];if(&quot;pageXOffset&quot; in H){G=function(){return{left:H.pageXOffset,top:H.pageYOffset}}}else{if(D){F=I.body}G=function(){return{left:F.scrollLeft,top:F.scrollTop}}}I=null;this.getScrollOffsets=G;return G()}function C(J){J=J||window;var G=J.document,K=G,I=&quot;client&quot;,L,H;if(typeof K.clientWidth==&quot;number&quot;){}else{if(D||F(J)){G=K.body}else{if(K[B].clientHeight&gt;0){G=K[B]}else{if(typeof innerHeight==&quot;number&quot;){G=J;I=&quot;inner&quot;}}}}L=I+&quot;Width&quot;;H=I+&quot;Height&quot;;return(this.getViewportDimensions=function(){return{width:G[L],height:G[H]}})();function F(N){var O=N.document,P=O.createElement(&quot;div&quot;);P.style.height=&quot;2500px&quot;;O.body.insertBefore(P,O.body.firstChild);var M=O[B].clientHeight&gt;2400;O.body.removeChild(P);return M}}})();(function(){var B=APE.dom,N=typeof document.createElement(&quot;p&quot;).scrollLeft==&quot;number&quot;;APE.mixin(B,{getOffsetCoords:J,isAboveElement:U,isBelowElement:D,isInsideElement:P,IS_SCROLL_SUPPORTED:N});var I=this.document,c,O=I.documentElement,f=Math.round,W=Math.max,S=self.parseFloat,k=&quot;getComputedStyle&quot;,Z=&quot;defaultView&quot;,e=O&amp;&amp;O.clientWidth===0,Q=&quot;clientTop&quot; in O,X=/^h/.test(O.tagName)?&quot;table&quot;:&quot;TABLE&quot;,j=&quot;currentStyle&quot; in O,K,C,b,L,i,g,d,T,Y,F,A,H=I[Z]&amp;&amp;typeof I[Z][k]!=&quot;undefined&quot;,G=&quot;getBoundingClientRect&quot;,M=&quot;relative&quot;,R=&quot;borderTopWidth&quot;,a=&quot;borderLeftWidth&quot;,E=/^(?:r|a)/,V=/^(?:a|f)/;I=O=null;function J(m,AE,AK){var AQ=m[B.OWNER_DOCUMENT],AO=AQ.documentElement,AB=AQ.body;if(!AE){AE=AQ}if(!AK){AK={x:0,y:0}}AK.x=AK.y=0;if(m===AE){return AK}if(G in m){var AM=e?AB:AO,z=m[G](),w=z.left+W(AO.scrollLeft,AB.scrollLeft),u=z.top+W(AO.scrollTop,AB.scrollTop),AJ,AG=AM.clientTop,n=AM.clientLeft;if(Q){w-=n;u-=AG}if(AE!==AQ){z=J(AE,null);w-=z.x;u-=z.y;if(Q){if(e&amp;&amp;AE===AB){w-=n;u-=AG}else{if(AE!==AQ&amp;&amp;AE!==AO&amp;&amp;AE!==AB){w-=AE.clientLeft;u-=AE.clientTop}}}}if(e&amp;&amp;j&amp;&amp;AE!=AQ&amp;&amp;AE!==AB){AJ=AB.currentStyle;w+=S(AJ.marginLeft)||0+S(AJ.left)||0;u+=S(AJ.marginTop)||0+S(AJ.top)||0}AK.x=w;AK.y=u;return AK}else{if(H){if(!c){h()}var s=m.offsetLeft,AL=m.offsetTop,AH=AQ[Z],r=AH[k](m,&quot;&quot;)||m.style;if(r.position==&quot;fixed&quot;&amp;&amp;N){AK.x=s+AO.scrollLeft;AK.y=AL+AO.scrollTop;return AK}var AA=AH[k](AB,&quot;&quot;),AC=!E.test(AA.position),q=m,t=m.parentNode,l=m.offsetParent;for(;t&amp;&amp;t!==AE;t=t.parentNode){if(t!==AB&amp;&amp;t!==AO&amp;&amp;N){s-=t.scrollLeft;AL-=t.scrollTop}if(t===l){if(t===AB&amp;&amp;AC){}else{if(!K&amp;&amp;!(t.tagName===X&amp;&amp;i)){var p=AH[k](t,&quot;&quot;);s+=S(p[a])||0;AL+=S(p[R])||0}if(t!==AB){s+=l.offsetLeft;AL+=l.offsetTop;q=l;l=t.offsetParent}}}}var v=0,AI=0,AP,AD,AN=AE===AQ||AE===AO,AF,o;if(q!=AQ){r=AH[k](q,&quot;&quot;);if(r){o=r.position;AP=V.test(o);AD=AP||E.test(o)}}if((q===m&amp;&amp;m.offsetParent===AB&amp;&amp;!C&amp;&amp;AE!==AB&amp;&amp;!(AC&amp;&amp;L))||(C&amp;&amp;q===m&amp;&amp;!AD)||!AC&amp;&amp;AD&amp;&amp;d&amp;&amp;AN){AI+=S(AA.marginTop)||0;v+=S(AA.marginLeft)||0}if(AE===AB){AF=AH[k](AO,&quot;&quot;);if((!AC&amp;&amp;((Y&amp;&amp;!AP)||(F&amp;&amp;AP)))||AC&amp;&amp;T){AI-=S(AF.paddingTop)||0;v-=S(AF.paddingLeft)||0}if(A){if(!AD||AD&amp;&amp;!AC){AI-=S(AF.marginTop)||0}v-=S(AF.marginLeft)||0}}if(AC){if(g||(!AP&amp;&amp;!K&amp;&amp;AN)){AI+=S(AA[R]);v+=S(AA[a])}}else{if(L){if(AN){if(!b){AI+=S(AA.top)||0;v+=S(AA.left)||0;if(AP&amp;&amp;K){AI+=S(AA[R]);v+=S(AA[a])}}if(AE===AQ&amp;&amp;!AC&amp;&amp;!Y){if(!AF){AF=AH[k](AO,&quot;&quot;)}AI+=S(AF.paddingTop)||0;v+=S(AF.paddingLeft)||0}}else{if(b){AI-=S(AA.top);v-=S(AA.left)}}if(C&amp;&amp;(!AD||AE===AB)){AI-=S(AA.marginTop)||0;v-=S(AA.marginLeft)||0}}}AK.x=f(s+v);AK.y=f(AL+AI);return AK}}}function h(){c=true;var AC=document,p=AC.body;if(!p){return}var l=&quot;marginTop&quot;,AE=&quot;position&quot;,r=&quot;padding&quot;,AB=&quot;static&quot;,v=&quot;border&quot;,q=p.style,AF=q.cssText,AA=&quot;1px solid transparent&quot;,m=&quot;0&quot;,u=&quot;1px&quot;,w=&quot;offsetTop&quot;,t=AC.documentElement.style,AD=t.cssText,o=AC.createElement(&quot;div&quot;),n=o.style,y=AC.createElement(X);q[r]=q[l]=q.top=m;t.position=AB;q[v]=AA;n.margin=m;n[AE]=AB;o=p.insertBefore(o,p.firstChild);K=(o[w]===1);q[v]=m;y.innerHTML=&quot;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;x&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&quot;;y.style[v]=&quot;7px solid&quot;;y.cellSpacing=y.cellPadding=m;p.insertBefore(y,p.firstChild);i=y.getElementsByTagName(&quot;td&quot;)[0].offsetLeft===7;p.removeChild(y);q[l]=u;q[AE]=M;C=(o[w]===1);L=p[w]===0;q[l]=m;q.top=u;b=o[w]===1;q.top=m;q[l]=u;q[AE]=n[AE]=M;d=o[w]===0;n[AE]=&quot;absolute&quot;;q[AE]=AB;if(o.offsetParent===p){q[v]=AA;n.top=&quot;2px&quot;;g=o[w]===1;q[v]=m;n[AE]=M;t[r]=u;q[l]=m;T=o[w]===3;q[AE]=M;Y=o[w]===3;n[AE]=&quot;absolute&quot;;F=o[w]===3;t[r]=m;t[l]=u;A=o[w]===3}p.removeChild(o);q.cssText=AF||&quot;&quot;;t.cssText=AD||&quot;&quot;}function P(m,l){var o=J(m).y,n=J(l).y;return o+m.offsetHeight&lt;=n+l.offsetHeight&amp;&amp;o&gt;=n}function U(m,l){return(J(m).y&lt;=J(l).y)}function D(m,l){return(J(m).y+m.offsetHeight&gt;=J(l).y+l.offsetHeight)}})();(function(){APE.mixin(APE.dom,{hasToken:E,removeClass:J,addClass:F,getElementsByClassName:K,findAncestorWithClass:H});var G=&quot;className&quot;;function E(M,L){return B(L,&quot;&quot;).test(M)}function J(M,L){var N=M[G];if(!N){return}if(N===L){M[G]=&quot;&quot;;return}M[G]=C(N.replace(B(L,&quot;g&quot;),&quot; &quot;))}function F(M,L){if(!M[G]){M[G]=L}if(!B(L).test(M[G])){M[G]+=&quot; &quot;+L}}var A={};function B(M,L){var N=M+&quot;$&quot;+L;return(A[N]||(A[N]=RegExp(&quot;(?:^|\\s)&quot;+M+&quot;(?:$|\\s)&quot;,L)))}function K(M,N,T){if(!T){return[]}N=N||&quot;*&quot;;if(M.getElementsByClassName&amp;&amp;(N===&quot;*&quot;)){return M.getElementsByClassName(T)}var O=B(T,&quot;&quot;),Q=M.getElementsByTagName(N),R=Q.length,L=0,P,S=Array(R);for(P=0;P&lt;R;P++){if(O.test(Q[P][G])){S[L++]=Q[P]}}S.length=L;return S}function H(O,L,M){if(O==null||O===M){return null}var P=B(L,&quot;&quot;),N;for(N=O.parentNode;N!=M;){if(P.test(N[G])){return N}N=N.parentNode}return null}var D=/^\s+|\s+$/g,I=/\s\s+/g;function C(L){return L.replace(D,&quot;&quot;).replace(I,&quot; &quot;)}})();(function(){var D=document.documentElement,B=&quot;getNamedItem&quot; in D.attributes,K=&quot;nodeType&quot;,L=&quot;compareDocumentPosition&quot;,I=&quot;parentNode&quot;,F=/^H/.test(D.tagName)?&quot;toUpperCase&quot;:&quot;toLowerCase&quot;;APE.mixin(APE.dom,{contains:H(),findAncestorWithAttribute:A,findAncestorWithTagName:J,findNextSiblingElement:C,findPreviousSiblingElement:E,getChildElements:G});D=null;function H(){if(L in D){return function(N,M){return(N[L](M)&amp;16)!==0}}else{if(&quot;contains&quot; in D){return function(N,M){return N!==M&amp;&amp;N.contains(M)}}}return function(N,M){if(N===M){return false}while(N!==M&amp;&amp;(M=M[I])!==null){}return N===M}}function A(O,R,P){for(var M,Q,N=O[I];N!==null;){Q=N.attributes;if(!Q||!B){return null}M=Q.getNamedItem(R);if(M&amp;&amp;M.specified){if(M.value===P||(P===undefined)){return N}}N=N[I]}return null}function J(O,M){M=M[F]();for(var N=O[I];N!==null;){if(N.tagName===M){return N}N=N[I]}return null}function C(N){for(var M=N.nextSibling;M!==null;M=M.nextSibling){if(M[K]===1){return M}}return null}function E(M){for(var N=M.previousSibling;N!==null;N=N.previousSibling){if(N[K]===1){return N}}return null}function G(Q){var P,O,N=[],S=Q.childNodes,M=S.length,R;N.length=M;for(P=O=0;P&lt;M;P++){R=S[P];if(R[K]!==1){continue}N[O++]=R}N.length=O;return N}})();(function(){var A=&quot;addEventListener&quot; in this,F=A?&quot;target&quot;:&quot;srcElement&quot;;APE.mixin(APE.dom.Event={},{eventTarget:F,getTarget:D,addCallback:E,removeCallback:G,preventDefault:B});function D(H){return(H||window.event)[F]}function C(I,H){return A?H:function(J){H.call(I,J)}}function E(K,J,H){if(A){K.addEventListener(J,H,false)}else{var I=C(K,H);K.attachEvent(&quot;on&quot;+J,I)}return I||H}function G(J,I,H){if(A){J.removeEventListener(I,H,false)}else{J.detachEvent(&quot;on&quot;+I,H)}return H}function B(H){H=H||window.event;if(&quot;preventDefault&quot; in H){H.preventDefault()}else{if(&quot;returnValue&quot; in H){H.returnValue=false}}}})();APE.namespace(&quot;APE.dom.Event&quot;);(function(){var C=APE.dom,A=C.Event;A.getCoords=B;function B(E){var D;if(&quot;pageX&quot; in E){D=function(F){return{x:F.pageX,y:F.pageY}}}else{D=function(G){var F=C.getScrollOffsets();G=G||window.event;return{x:G.clientX+F.left,y:G.clientY+F.top}}}return(A.getCoords=D)(E)}})();(function(){var Q=APE.dom;Q.getStyle=D;Q.setOpacity=S;var R=&quot;getComputedStyle&quot;,E=Q.IS_COMPUTED_STYLE,P=&quot;currentStyle&quot;,O=&quot;opacity&quot;,F=&quot;style&quot;,G=&quot;px&quot;,J=&quot;filter&quot;,I=&quot;alpha(&quot;+O+&quot;=&quot;,M=/^(?:margin|(border)(Width|Color|Style)|padding)$/,N=/\Wopacity\s*=\s*([\d]+)/i,A=/^auto|\d%$/,L=&quot;cssFloat&quot;,C=[&quot;Top&quot;,&quot;Right&quot;,&quot;Bottom&quot;,&quot;Left&quot;];if(!(L in document.documentElement[F])){L=&quot;styleFloat&quot;}function K(V){var X,W=V[J];if(!N.test(W)){return 1}X=N.exec(W);return X[1]/100}function S(Y,V){var X=Y[F],W;if(O in X){X[O]=V}else{if(J in X){X[J]=I+(V*100)+&quot;)&quot;;W=Y[P];if(W&amp;&amp;!W.hasLayout){X.zoom=1}}}}function D(W,V){var d=&quot;&quot;,a,Z,X,Y,b,c=W[Q.OWNER_DOCUMENT];if(/float/.test(V)){V=L}if(E){a=c.defaultView[R](W,&quot;&quot;);if(!(V in a)){return&quot;&quot;}d=a[V];if(d===&quot;&quot;){d=T(a,V).join(&quot; &quot;)}if(V==&quot;zIndex&quot;&amp;&amp;d==&quot;normal&quot;){return&quot;0&quot;}if(A.test(d)){d=U(W,V)}}else{a=W[P];if(V===O){d=K(a)}else{d=a[V];if(A.test(d)){d=U(W,V)}else{if(!(V in a)){return&quot;&quot;}}}Z=H.exec(d);if(Z){X=d.split(&quot; &quot;);X[0]=B(W,Z[0]);for(Y=1,b=X.length;Y&lt;b;Y++){Z=H.exec(X[Y]);X[Y]=B(W,Z[0])}d=X.join(&quot; &quot;)}}return d}function U(X,W){var d=X[F],c,Y,V,Z,b,a;if(&quot;pixelWidth&quot; in d&amp;&amp;/width|height|top|left/.test(W)){Y=&quot;pixel&quot;+(W.charAt(0).toUpperCase())+W.substring(1);c=d[Y]}if(c){return c+G}if(W===&quot;width&quot;){b=X.clientLeft||0;V=parseFloat(D(X,&quot;borderRightWidth&quot;))||b;a=parseFloat(D(X,&quot;paddingLeft&quot;))||0+parseFloat(D(X,&quot;paddingRight&quot;))||0;return X.offsetWidth-b-V-a+G}else{if(W===&quot;height&quot;){Z=X.clientTop||0;V=parseFloat(D(X,&quot;borderBottomWidth&quot;))||Z;a=parseFloat(D(X,&quot;paddingTop&quot;))||0+parseFloat(D(X,&quot;paddingBottom&quot;))||0;return X.offsetHeight-Z-V+G}else{if(W==&quot;margin&quot;&amp;&amp;X[P].position!=&quot;absolute&quot;){c=parseFloat(D(X.parentNode,&quot;width&quot;))-X.offsetWidth;if(c===0){return&quot;0px&quot;}c=&quot;0px &quot;+c;return c+&quot; &quot;+c}}}return&quot;0&quot;}function T(b,W){var X=M.exec(W),Z,f,a,d,e,c=true,V,Y=1;if(X&amp;&amp;X[0]){V=C;Z=X[1]||X[0];f=X[2]||&quot;&quot;}else{return[&quot;&quot;]}a=b[Z+V[0]+f];e=[a];while(Y&lt;4){d=b[Z+V[Y]+f];c=c&amp;&amp;d==a;a=d;e[Y++]=d}if(c){return[a]}return e}var H=/(-?\d+|(?:-?\d*\.\d+))(?:em|ex|pt|pc|in|cm|mm\s*)/;function B(Z,a){if(Z.runtimeStyle){if(parseFloat(a)===0){return&quot;0px&quot;}var Y=Z[F],X=Y.left,W=Z.runtimeStyle,V=W.left;W.left=Z[P].left;Y.left=(a||0);a=Y.pixelLeft+G;Y.left=X;W.left=V;return a}}})();
\ No newline at end of file
+;if(isMaybeLeak){EventPublisher.get(self,&quot;onunload&quot;).addAfter(cleanUp,EventPublisher)}})();APE.namespace(&quot;APE.dom&quot;);(function(){var E=APE.dom,A=&quot;ownerDocument&quot;,D=document,F=D.documentElement,C=F&amp;&amp;typeof F[A]!==&quot;undefined&quot;?A:&quot;document&quot;,B=D.defaultView;E.OWNER_DOCUMENT=C;E.IS_COMPUTED_STYLE=(typeof B!=&quot;undefined&quot;&amp;&amp;&quot;getComputedStyle&quot; in B)})();(function(){APE.mixin(APE.dom,{getScrollOffsets:B,getViewportDimensions:C});var A=&quot;documentElement&quot;,D=document[A].clientWidth===0;function B(G){G=G||window;var F,E;if(&quot;pageXOffset&quot; in G){F=function(H){H=H||window;return{left:H.pageXOffset,top:H.pageYOffset}}}else{F=function(I){I=I||window;var H=I.document[D?&quot;body&quot;:A];return{left:H.scrollLeft,top:H.scrollTop}}}E=(this.getScrollOffsets=F)(G);G=null;return E}function C(I){I=I||window;var E=&quot;document&quot;,L=E,J=I[E],H=&quot;client&quot;,K,G;if(typeof J.clientWidth==&quot;number&quot;){E=&quot;window&quot;}else{if(D){E=A;L=&quot;body&quot;}else{if(J[A].clientHeight&gt;0){L=A}}}K=H+&quot;Width&quot;;G=H+&quot;Height&quot;;function F(N){var M=(N||window)[E][L];return{width:M[K],height:M[G]}}r=(this.getViewportDimensions=F)(I);I=J=null;return r}})();(function(){var B=APE.dom,N=typeof document.createElement(&quot;p&quot;).scrollLeft==&quot;number&quot;;APE.mixin(B,{getOffsetCoords:J,isAboveElement:U,isBelowElement:D,isInsideElement:P,IS_SCROLL_SUPPORTED:N});var I=this.document,c,O=I.documentElement,f=Math.round,W=Math.max,S=self.parseFloat,k=&quot;getComputedStyle&quot;,Z=&quot;defaultView&quot;,e=O&amp;&amp;O.clientWidth===0,Q=&quot;clientTop&quot; in O,X=/^h/.test(O.tagName)?&quot;table&quot;:&quot;TABLE&quot;,j=&quot;currentStyle&quot; in O,K,C,b,L,i,g,d,T,Y,F,A,H=I[Z]&amp;&amp;typeof I[Z][k]!=&quot;undefined&quot;,G=&quot;getBoundingClientRect&quot;,M=&quot;relative&quot;,R=&quot;borderTopWidth&quot;,a=&quot;borderLeftWidth&quot;,E=/^(?:r|a)/,V=/^(?:a|f)/;I=O=null;function J(m,AF,AL){var AR=m[B.OWNER_DOCUMENT],AP=AR.documentElement,AC=AR.body;if(!AF){AF=AR}if(!AL){AL={x:0,y:0}}AL.x=AL.y=0;if(m===AF){return AL}if(G in m){var AN=e?AC:AP,AA=m[G](),z=AA.left+W(AP.scrollLeft,AC.scrollLeft),v=AA.top+W(AP.scrollTop,AC.scrollTop),AK,AH=AN.clientTop,n=AN.clientLeft;if(Q){z-=n;v-=AH}if(AF!==AR){AA=J(AF,null);z-=AA.x;v-=AA.y;if(Q){if(e&amp;&amp;AF===AC){z-=n;v-=AH}else{if(AF!==AR&amp;&amp;AF!==AP&amp;&amp;AF!==AC){z-=AF.clientLeft;v-=AF.clientTop}}}}if(e&amp;&amp;j&amp;&amp;AF!=AR&amp;&amp;AF!==AC){AK=AC.currentStyle;z+=S(AK.marginLeft)||0+S(AK.left)||0;v+=S(AK.marginTop)||0+S(AK.top)||0}AL.x=z;AL.y=v;return AL}else{if(H){if(!c){h()}var t=m.offsetLeft,AM=m.offsetTop,AI=AR[Z],s=AI[k](m,&quot;&quot;)||m.style;if(s.position==&quot;fixed&quot;&amp;&amp;N){AL.x=t+AP.scrollLeft;AL.y=AM+AP.scrollTop;return AL}var AB=AI[k](AC,&quot;&quot;),AD=!E.test(AB.position),q=m,u=m.parentNode,l=m.offsetParent;for(;u&amp;&amp;u!==AF;u=u.parentNode){if(u!==AC&amp;&amp;u!==AP&amp;&amp;N){t-=u.scrollLeft;AM-=u.scrollTop}if(u===l){if(u===AC&amp;&amp;AD){}else{if(!K&amp;&amp;!(u.tagName===X&amp;&amp;i)){var p=AI[k](u,&quot;&quot;);t+=S(p[a])||0;AM+=S(p[R])||0}if(u!==AC){t+=l.offsetLeft;AM+=l.offsetTop;q=l;l=u.offsetParent}}}}var w=0,AJ=0,AQ,AE,AO=AF===AR||AF===AP,AG,o;if(q!=AR){s=AI[k](q,&quot;&quot;);if(s){o=s.position;AQ=V.test(o);AE=AQ||E.test(o)}}if((q===m&amp;&amp;m.offsetParent===AC&amp;&amp;!C&amp;&amp;AF!==AC&amp;&amp;!(AD&amp;&amp;L))||(C&amp;&amp;q===m&amp;&amp;!AE)||!AD&amp;&amp;AE&amp;&amp;d&amp;&amp;AO){AJ+=S(AB.marginTop)||0;w+=S(AB.marginLeft)||0}if(AF===AC){AG=AI[k](AP,&quot;&quot;);if((!AD&amp;&amp;((Y&amp;&amp;!AQ)||(F&amp;&amp;AQ)))||AD&amp;&amp;T){AJ-=S(AG.paddingTop)||0;w-=S(AG.paddingLeft)||0}if(A){if(!AE||AE&amp;&amp;!AD){AJ-=S(AG.marginTop)||0}w-=S(AG.marginLeft)||0}}if(AD){if(g||(!AQ&amp;&amp;!K&amp;&amp;AO)){AJ+=S(AB[R]);w+=S(AB[a])}}else{if(L){if(AO){if(!b){AJ+=S(AB.top)||0;w+=S(AB.left)||0;if(AQ&amp;&amp;K){AJ+=S(AB[R]);w+=S(AB[a])}}if(AF===AR&amp;&amp;!AD&amp;&amp;!Y){if(!AG){AG=AI[k](AP,&quot;&quot;)}AJ+=S(AG.paddingTop)||0;w+=S(AG.paddingLeft)||0}}else{if(b){AJ-=S(AB.top);w-=S(AB.left)}}if(C&amp;&amp;(!AE||AF===AC)){AJ-=S(AB.marginTop)||0;w-=S(AB.marginLeft)||0}}}AL.x=f(t+w);AL.y=f(AM+AJ);return AL}}}function h(){c=true;var AD=document,p=AD.body;if(!p){return}var l=&quot;marginTop&quot;,AF=&quot;position&quot;,t=&quot;padding&quot;,AC=&quot;static&quot;,w=&quot;border&quot;,q=p.style,AG=q.cssText,AB=&quot;1px solid transparent&quot;,m=&quot;0&quot;,v=&quot;1px&quot;,y=&quot;offsetTop&quot;,u=AD.documentElement.style,AE=u.cssText,o=AD.createElement(&quot;div&quot;),n=o.style,AA=AD.createElement(X);q[t]=q[l]=q.top=m;u.position=AC;q[w]=AB;n.margin=m;n[AF]=AC;o=p.insertBefore(o,p.firstChild);K=(o[y]===1);q[w]=m;AA.innerHTML=&quot;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;x&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&quot;;AA.style[w]=&quot;7px solid&quot;;AA.cellSpacing=AA.cellPadding=m;p.insertBefore(AA,p.firstChild);i=AA.getElementsByTagName(&quot;td&quot;)[0].offsetLeft===7;p.removeChild(AA);q[l]=v;q[AF]=M;C=(o[y]===1);L=p[y]===0;q[l]=m;q.top=v;b=o[y]===1;q.top=m;q[l]=v;q[AF]=n[AF]=M;d=o[y]===0;n[AF]=&quot;absolute&quot;;q[AF]=AC;if(o.offsetParent===p){q[w]=AB;n.top=&quot;2px&quot;;g=o[y]===1;q[w]=m;n[AF]=M;u[t]=v;q[l]=m;T=o[y]===3;q[AF]=M;Y=o[y]===3;n[AF]=&quot;absolute&quot;;F=o[y]===3;u[t]=m;u[l]=v;A=o[y]===3}p.removeChild(o);q.cssText=AG||&quot;&quot;;u.cssText=AE||&quot;&quot;}function P(m,l){var o=J(m).y,n=J(l).y;return o+m.offsetHeight&lt;=n+l.offsetHeight&amp;&amp;o&gt;=n}function U(m,l){return(J(m).y&lt;=J(l).y)}function D(m,l){return(J(m).y+m.offsetHeight&gt;=J(l).y+l.offsetHeight)}})();(function(){APE.mixin(APE.dom,{hasToken:E,removeClass:J,addClass:F,getElementsByClassName:K,findAncestorWithClass:H});var G=&quot;className&quot;;function E(M,L){return B(L,&quot;&quot;).test(M)}function J(M,L){var N=M[G];if(!N){return}if(N===L){M[G]=&quot;&quot;;return}M[G]=C(N.replace(B(L,&quot;g&quot;),&quot; &quot;))}function F(M,L){if(!M[G]){M[G]=L}if(!B(L).test(M[G])){M[G]+=&quot; &quot;+L}}var A={};function B(M,L){var N=M+&quot;$&quot;+L;return(A[N]||(A[N]=RegExp(&quot;(?:^|\\s)&quot;+M+&quot;(?:$|\\s)&quot;,L)))}function K(M,N,T){if(!T){return[]}N=N||&quot;*&quot;;if(M.getElementsByClassName&amp;&amp;(N===&quot;*&quot;)){return M.getElementsByClassName(T)}var O=B(T,&quot;&quot;),Q=M.getElementsByTagName(N),R=Q.length,L=0,P,S=Array(R);for(P=0;P&lt;R;P++){if(O.test(Q[P][G])){S[L++]=Q[P]}}S.length=L;return S}function H(O,L,M){if(O==null||O===M){return null}var P=B(L,&quot;&quot;),N;for(N=O.parentNode;N!=M;){if(P.test(N[G])){return N}N=N.parentNode}return null}var D=/^\s+|\s+$/g,I=/\s\s+/g;function C(L){return L.replace(D,&quot;&quot;).replace(I,&quot; &quot;)}})();(function(){var D=document.documentElement,B=&quot;getNamedItem&quot; in D.attributes,K=&quot;nodeType&quot;,L=&quot;compareDocumentPosition&quot;,I=&quot;parentNode&quot;,F=/^H/.test(D.tagName)?&quot;toUpperCase&quot;:&quot;toLowerCase&quot;;APE.mixin(APE.dom,{contains:H(),findAncestorWithAttribute:A,findAncestorWithTagName:J,findNextSiblingElement:C,findPreviousSiblingElement:E,getChildElements:G});D=null;function H(){if(L in D){return function(N,M){return(N[L](M)&amp;16)!==0}}else{if(&quot;contains&quot; in D){return function(N,M){return N!==M&amp;&amp;N.contains(M)}}}return function(N,M){if(N===M){return false}while(N!==M&amp;&amp;(M=M[I])!==null){}return N===M}}function A(O,R,P){for(var M,Q,N=O[I];N!==null;){Q=N.attributes;if(!Q||!B){return null}M=Q.getNamedItem(R);if(M&amp;&amp;M.specified){if(M.value===P||(P===undefined)){return N}}N=N[I]}return null}function J(O,M){M=M[F]();for(var N=O[I];N!==null;){if(N.tagName===M){return N}N=N[I]}return null}function C(N){for(var M=N.nextSibling;M!==null;M=M.nextSibling){if(M[K]===1){return M}}return null}function E(M){for(var N=M.previousSibling;N!==null;N=N.previousSibling){if(N[K]===1){return N}}return null}function G(Q){var P,O,N=[],S=Q.childNodes,M=S.length,R;N.length=M;for(P=O=0;P&lt;M;P++){R=S[P];if(R[K]!==1){continue}N[O++]=R}N.length=O;return N}})();(function(){var A=&quot;addEventListener&quot; in this,F=A?&quot;target&quot;:&quot;srcElement&quot;;APE.mixin(APE.dom.Event={},{eventTarget:F,getTarget:D,addCallback:E,removeCallback:G,preventDefault:B});function D(H){return(H||window.event)[F]}function C(I,H){return A?H:function(J){H.call(I,J)}}function E(K,J,H){if(A){K.addEventListener(J,H,false)}else{var I=C(K,H);K.attachEvent(&quot;on&quot;+J,I)}return I||H}function G(J,I,H){if(A){J.removeEventListener(I,H,false)}else{J.detachEvent(&quot;on&quot;+I,H)}return H}function B(H){H=H||window.event;if(&quot;preventDefault&quot; in H){H.preventDefault()}else{if(&quot;returnValue&quot; in H){H.returnValue=false}}}})();APE.namespace(&quot;APE.dom.Event&quot;);(function(){var C=APE.dom,A=C.Event;A.getCoords=B;function B(E){var D;if(&quot;pageX&quot; in E){D=function(F){return{x:F.pageX,y:F.pageY}}}else{D=function(G){var F=C.getScrollOffsets();G=G||window.event;return{x:G.clientX+F.left,y:G.clientY+F.top}}}return(A.getCoords=D)(E)}})();(function(){var Q=APE.dom;Q.getStyle=D;Q.setOpacity=S;var R=&quot;getComputedStyle&quot;,E=Q.IS_COMPUTED_STYLE,P=&quot;currentStyle&quot;,O=&quot;opacity&quot;,F=&quot;style&quot;,G=&quot;px&quot;,J=&quot;filter&quot;,I=&quot;alpha(&quot;+O+&quot;=&quot;,M=/^(?:margin|(border)(Width|Color|Style)|padding)$/,N=/\Wopacity\s*=\s*([\d]+)/i,A=/^auto|\d%$/,L=&quot;cssFloat&quot;,C=[&quot;Top&quot;,&quot;Right&quot;,&quot;Bottom&quot;,&quot;Left&quot;];if(!(L in document.documentElement[F])){L=&quot;styleFloat&quot;}function K(V){var X,W=V[J];if(!N.test(W)){return 1}X=N.exec(W);return X[1]/100}function S(Y,V){var X=Y[F],W;if(O in X){X[O]=V}else{if(J in X){X[J]=I+(V*100)+&quot;)&quot;;W=Y[P];if(W&amp;&amp;!W.hasLayout){X.zoom=1}}}}function D(W,V){var d=&quot;&quot;,a,Z,X,Y,b,c=W[Q.OWNER_DOCUMENT];if(/float/.test(V)){V=L}if(E){a=c.defaultView[R](W,&quot;&quot;);if(!(V in a)){return&quot;&quot;}d=a[V];if(d===&quot;&quot;){d=T(a,V).join(&quot; &quot;)}if(V==&quot;zIndex&quot;&amp;&amp;d==&quot;normal&quot;){return&quot;0&quot;}if(A.test(d)){d=U(W,V)}}else{a=W[P];if(V===O){d=K(a)}else{d=a[V];if(A.test(d)){d=U(W,V)}else{if(!(V in a)){return&quot;&quot;}}}Z=H.exec(d);if(Z){X=d.split(&quot; &quot;);X[0]=B(W,Z[0]);for(Y=1,b=X.length;Y&lt;b;Y++){Z=H.exec(X[Y]);X[Y]=B(W,Z[0])}d=X.join(&quot; &quot;)}}return d}function U(X,W){var d=X[F],c,Y,V,Z,b,a;if(&quot;pixelWidth&quot; in d&amp;&amp;/width|height|top|left/.test(W)){Y=&quot;pixel&quot;+(W.charAt(0).toUpperCase())+W.substring(1);c=d[Y]}if(c){return c+G}if(W===&quot;width&quot;){b=X.clientLeft||0;V=parseFloat(D(X,&quot;borderRightWidth&quot;))||b;a=parseFloat(D(X,&quot;paddingLeft&quot;))||0+parseFloat(D(X,&quot;paddingRight&quot;))||0;return X.offsetWidth-b-V-a+G}else{if(W===&quot;height&quot;){Z=X.clientTop||0;V=parseFloat(D(X,&quot;borderBottomWidth&quot;))||Z;a=parseFloat(D(X,&quot;paddingTop&quot;))||0+parseFloat(D(X,&quot;paddingBottom&quot;))||0;return X.offsetHeight-Z-V+G}else{if(W==&quot;margin&quot;&amp;&amp;X[P].position!=&quot;absolute&quot;){c=parseFloat(D(X.parentNode,&quot;width&quot;))-X.offsetWidth;if(c===0){return&quot;0px&quot;}c=&quot;0px &quot;+c;return c+&quot; &quot;+c}}}return&quot;0&quot;}function T(b,W){var X=M.exec(W),Z,f,a,d,e,c=true,V,Y=1;if(X&amp;&amp;X[0]){V=C;Z=X[1]||X[0];f=X[2]||&quot;&quot;}else{return[&quot;&quot;]}a=b[Z+V[0]+f];e=[a];while(Y&lt;4){d=b[Z+V[Y]+f];c=c&amp;&amp;d==a;a=d;e[Y++]=d}if(c){return[a]}return e}var H=/(-?\d+|(?:-?\d*\.\d+))(?:em|ex|pt|pc|in|cm|mm\s*)/;function B(Z,a){if(Z.runtimeStyle){if(parseFloat(a)===0){return&quot;0px&quot;}var Y=Z[F],X=Y.left,W=Z.runtimeStyle,V=W.left;W.left=Z[P].left;Y.left=(a||0);a=Y.pixelLeft+G;Y.left=X;W.left=V;return a}}})();
\ No newline at end of file</diff>
      <filename>build/ape-ep-dom-min.js</filename>
    </modified>
    <modified>
      <diff>@@ -512,10 +512,8 @@ APE.namespace(&quot;APE.dom&quot; );
     });
 
 
-    var documentElement = &quot;documentElement&quot;, 
-        docEl = document[documentElement],
-        IS_BODY_ACTING_ROOT = docEl &amp;&amp; docEl.clientWidth === 0;
-    docEl = null;
+    var DOCUMENT_ELEMENT = &quot;documentElement&quot;, 
+        IS_BODY_ACTING_ROOT = document[DOCUMENT_ELEMENT].clientWidth === 0;
 
     /** @memberOf APE.dom
      * @name getScrollOffsets
@@ -525,20 +523,22 @@ APE.namespace(&quot;APE.dom&quot; );
      */
     function getScrollOffsets(win) {
         win = win || window;
-        var f, d = win.document, node = d[documentElement];
+        var f, r;
         if(&quot;pageXOffset&quot;in win)
-            f = function() {
+            f = function(win) {
+                win = win||window;
                 return{ left:win.pageXOffset, top: win.pageYOffset};
             };
         else {
-            if(IS_BODY_ACTING_ROOT) node = d.body;
-            f = function() {
+            f = function(win) {
+              win = win || window;
+              var node = win.document[IS_BODY_ACTING_ROOT ? &quot;body&quot; : DOCUMENT_ELEMENT];
               return{ left : node.scrollLeft, top : node.scrollTop };
             };
         }
-        d = null;
-        this.getScrollOffsets = f;
-        return f();
+        r = (this.getScrollOffsets = f)(win);
+        win = null;
+        return r;
     }
 
     /** @memberOf APE.dom
@@ -548,44 +548,37 @@ APE.namespace(&quot;APE.dom&quot; );
      */
     function getViewportDimensions(win) {
         win = win || window;
-        var node = win.document, d = node, propPrefix = &quot;client&quot;,
+        var baseName = &quot;document&quot;,
+            nodeName = baseName, 
+            d = win[baseName], 
+            propPrefix = &quot;client&quot;,
             wName, hName;
 
     // Safari 2 uses document.clientWidth (default).
-        if(typeof d.clientWidth == &quot;number&quot;);
+        if(typeof d.clientWidth == &quot;number&quot;){
+            baseName = &quot;window&quot;;
+        }
 
     // Opera &lt; 9.5, or IE in quirks mode.
-        else if(IS_BODY_ACTING_ROOT || isDocumentElementHeightOff(win)) {
-            node = d.body;
+        else if(IS_BODY_ACTING_ROOT) {
+            baseName = DOCUMENT_ELEMENT;
+            nodeName = &quot;body&quot;;
 
     // Modern Webkit, Firefox, IE.
     // Might be undefined. 0 in older mozilla.
-        } else if(d[documentElement].clientHeight &gt; 0){
-            node = d[documentElement];
-
-    // For older versions of Mozilla.
-        } else if(typeof innerHeight == &quot;number&quot;) {
-            node = win;
-            propPrefix = &quot;inner&quot;;
+        } else if(d[DOCUMENT_ELEMENT].clientHeight &gt; 0){
+            nodeName = DOCUMENT_ELEMENT;
         }
         wName = propPrefix + &quot;Width&quot;;
         hName = propPrefix + &quot;Height&quot;;
-
-        return (this.getViewportDimensions = function() {
+        function getViewportDimensions(win){
+            var node = (win || window)[baseName][nodeName];
             return{width: node[wName], height: node[hName]};
-        })();
-
-    // Used to feature test Opera returning wrong values
-    // for documentElement.clientHeight.
-        function isDocumentElementHeightOff(win){
-            var d = win.document,
-                div = d.createElement('div');
-            div.style.height = &quot;2500px&quot;;
-            d.body.insertBefore(div, d.body.firstChild);
-            var r = d[documentElement].clientHeight &gt; 2400;
-            d.body.removeChild(div);
-            return r;
         }
+
+        r = (this.getViewportDimensions = getViewportDimensions)(win);
+        win = d = null;
+        return r;
     }
 })();/**
  * @fileoverview</diff>
      <filename>build/ape-ep-dom.js</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-APE.namespace(&quot;APE.dom&quot;);(function(){var E=APE.dom,A=&quot;ownerDocument&quot;,D=document,F=D.documentElement,C=F&amp;&amp;typeof F[A]!==&quot;undefined&quot;?A:&quot;document&quot;,B=D.defaultView;E.OWNER_DOCUMENT=C;E.IS_COMPUTED_STYLE=(typeof B!=&quot;undefined&quot;&amp;&amp;&quot;getComputedStyle&quot; in B)})();(function(){APE.mixin(APE.dom,{getScrollOffsets:A,getViewportDimensions:C});var B=&quot;documentElement&quot;,E=document[B],D=E&amp;&amp;E.clientWidth===0;E=null;function A(H){H=H||window;var G,I=H.document,F=I[B];if(&quot;pageXOffset&quot; in H){G=function(){return{left:H.pageXOffset,top:H.pageYOffset}}}else{if(D){F=I.body}G=function(){return{left:F.scrollLeft,top:F.scrollTop}}}I=null;this.getScrollOffsets=G;return G()}function C(J){J=J||window;var G=J.document,K=G,I=&quot;client&quot;,L,H;if(typeof K.clientWidth==&quot;number&quot;){}else{if(D||F(J)){G=K.body}else{if(K[B].clientHeight&gt;0){G=K[B]}else{if(typeof innerHeight==&quot;number&quot;){G=J;I=&quot;inner&quot;}}}}L=I+&quot;Width&quot;;H=I+&quot;Height&quot;;return(this.getViewportDimensions=function(){return{width:G[L],height:G[H]}})();function F(N){var O=N.document,P=O.createElement(&quot;div&quot;);P.style.height=&quot;2500px&quot;;O.body.insertBefore(P,O.body.firstChild);var M=O[B].clientHeight&gt;2400;O.body.removeChild(P);return M}}})();(function(){var B=APE.dom,N=typeof document.createElement(&quot;p&quot;).scrollLeft==&quot;number&quot;;APE.mixin(B,{getOffsetCoords:J,isAboveElement:U,isBelowElement:D,isInsideElement:P,IS_SCROLL_SUPPORTED:N});var I=this.document,c,O=I.documentElement,f=Math.round,W=Math.max,S=self.parseFloat,k=&quot;getComputedStyle&quot;,Z=&quot;defaultView&quot;,e=O&amp;&amp;O.clientWidth===0,Q=&quot;clientTop&quot; in O,X=/^h/.test(O.tagName)?&quot;table&quot;:&quot;TABLE&quot;,j=&quot;currentStyle&quot; in O,K,C,b,L,i,g,d,T,Y,F,A,H=I[Z]&amp;&amp;typeof I[Z][k]!=&quot;undefined&quot;,G=&quot;getBoundingClientRect&quot;,M=&quot;relative&quot;,R=&quot;borderTopWidth&quot;,a=&quot;borderLeftWidth&quot;,E=/^(?:r|a)/,V=/^(?:a|f)/;I=O=null;function J(m,AE,AK){var AQ=m[B.OWNER_DOCUMENT],AO=AQ.documentElement,AB=AQ.body;if(!AE){AE=AQ}if(!AK){AK={x:0,y:0}}AK.x=AK.y=0;if(m===AE){return AK}if(G in m){var AM=e?AB:AO,z=m[G](),w=z.left+W(AO.scrollLeft,AB.scrollLeft),u=z.top+W(AO.scrollTop,AB.scrollTop),AJ,AG=AM.clientTop,n=AM.clientLeft;if(Q){w-=n;u-=AG}if(AE!==AQ){z=J(AE,null);w-=z.x;u-=z.y;if(Q){if(e&amp;&amp;AE===AB){w-=n;u-=AG}else{if(AE!==AQ&amp;&amp;AE!==AO&amp;&amp;AE!==AB){w-=AE.clientLeft;u-=AE.clientTop}}}}if(e&amp;&amp;j&amp;&amp;AE!=AQ&amp;&amp;AE!==AB){AJ=AB.currentStyle;w+=S(AJ.marginLeft)||0+S(AJ.left)||0;u+=S(AJ.marginTop)||0+S(AJ.top)||0}AK.x=w;AK.y=u;return AK}else{if(H){if(!c){h()}var s=m.offsetLeft,AL=m.offsetTop,AH=AQ[Z],r=AH[k](m,&quot;&quot;)||m.style;if(r.position==&quot;fixed&quot;&amp;&amp;N){AK.x=s+AO.scrollLeft;AK.y=AL+AO.scrollTop;return AK}var AA=AH[k](AB,&quot;&quot;),AC=!E.test(AA.position),q=m,t=m.parentNode,l=m.offsetParent;for(;t&amp;&amp;t!==AE;t=t.parentNode){if(t!==AB&amp;&amp;t!==AO&amp;&amp;N){s-=t.scrollLeft;AL-=t.scrollTop}if(t===l){if(t===AB&amp;&amp;AC){}else{if(!K&amp;&amp;!(t.tagName===X&amp;&amp;i)){var p=AH[k](t,&quot;&quot;);s+=S(p[a])||0;AL+=S(p[R])||0}if(t!==AB){s+=l.offsetLeft;AL+=l.offsetTop;q=l;l=t.offsetParent}}}}var v=0,AI=0,AP,AD,AN=AE===AQ||AE===AO,AF,o;if(q!=AQ){r=AH[k](q,&quot;&quot;);if(r){o=r.position;AP=V.test(o);AD=AP||E.test(o)}}if((q===m&amp;&amp;m.offsetParent===AB&amp;&amp;!C&amp;&amp;AE!==AB&amp;&amp;!(AC&amp;&amp;L))||(C&amp;&amp;q===m&amp;&amp;!AD)||!AC&amp;&amp;AD&amp;&amp;d&amp;&amp;AN){AI+=S(AA.marginTop)||0;v+=S(AA.marginLeft)||0}if(AE===AB){AF=AH[k](AO,&quot;&quot;);if((!AC&amp;&amp;((Y&amp;&amp;!AP)||(F&amp;&amp;AP)))||AC&amp;&amp;T){AI-=S(AF.paddingTop)||0;v-=S(AF.paddingLeft)||0}if(A){if(!AD||AD&amp;&amp;!AC){AI-=S(AF.marginTop)||0}v-=S(AF.marginLeft)||0}}if(AC){if(g||(!AP&amp;&amp;!K&amp;&amp;AN)){AI+=S(AA[R]);v+=S(AA[a])}}else{if(L){if(AN){if(!b){AI+=S(AA.top)||0;v+=S(AA.left)||0;if(AP&amp;&amp;K){AI+=S(AA[R]);v+=S(AA[a])}}if(AE===AQ&amp;&amp;!AC&amp;&amp;!Y){if(!AF){AF=AH[k](AO,&quot;&quot;)}AI+=S(AF.paddingTop)||0;v+=S(AF.paddingLeft)||0}}else{if(b){AI-=S(AA.top);v-=S(AA.left)}}if(C&amp;&amp;(!AD||AE===AB)){AI-=S(AA.marginTop)||0;v-=S(AA.marginLeft)||0}}}AK.x=f(s+v);AK.y=f(AL+AI);return AK}}}function h(){c=true;var AC=document,p=AC.body;if(!p){return}var l=&quot;marginTop&quot;,AE=&quot;position&quot;,r=&quot;padding&quot;,AB=&quot;static&quot;,v=&quot;border&quot;,q=p.style,AF=q.cssText,AA=&quot;1px solid transparent&quot;,m=&quot;0&quot;,u=&quot;1px&quot;,w=&quot;offsetTop&quot;,t=AC.documentElement.style,AD=t.cssText,o=AC.createElement(&quot;div&quot;),n=o.style,y=AC.createElement(X);q[r]=q[l]=q.top=m;t.position=AB;q[v]=AA;n.margin=m;n[AE]=AB;o=p.insertBefore(o,p.firstChild);K=(o[w]===1);q[v]=m;y.innerHTML=&quot;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;x&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&quot;;y.style[v]=&quot;7px solid&quot;;y.cellSpacing=y.cellPadding=m;p.insertBefore(y,p.firstChild);i=y.getElementsByTagName(&quot;td&quot;)[0].offsetLeft===7;p.removeChild(y);q[l]=u;q[AE]=M;C=(o[w]===1);L=p[w]===0;q[l]=m;q.top=u;b=o[w]===1;q.top=m;q[l]=u;q[AE]=n[AE]=M;d=o[w]===0;n[AE]=&quot;absolute&quot;;q[AE]=AB;if(o.offsetParent===p){q[v]=AA;n.top=&quot;2px&quot;;g=o[w]===1;q[v]=m;n[AE]=M;t[r]=u;q[l]=m;T=o[w]===3;q[AE]=M;Y=o[w]===3;n[AE]=&quot;absolute&quot;;F=o[w]===3;t[r]=m;t[l]=u;A=o[w]===3}p.removeChild(o);q.cssText=AF||&quot;&quot;;t.cssText=AD||&quot;&quot;}function P(m,l){var o=J(m).y,n=J(l).y;return o+m.offsetHeight&lt;=n+l.offsetHeight&amp;&amp;o&gt;=n}function U(m,l){return(J(m).y&lt;=J(l).y)}function D(m,l){return(J(m).y+m.offsetHeight&gt;=J(l).y+l.offsetHeight)}})();(function(){APE.mixin(APE.dom,{hasToken:E,removeClass:J,addClass:F,getElementsByClassName:K,findAncestorWithClass:H});var G=&quot;className&quot;;function E(M,L){return B(L,&quot;&quot;).test(M)}function J(M,L){var N=M[G];if(!N){return}if(N===L){M[G]=&quot;&quot;;return}M[G]=C(N.replace(B(L,&quot;g&quot;),&quot; &quot;))}function F(M,L){if(!M[G]){M[G]=L}if(!B(L).test(M[G])){M[G]+=&quot; &quot;+L}}var A={};function B(M,L){var N=M+&quot;$&quot;+L;return(A[N]||(A[N]=RegExp(&quot;(?:^|\\s)&quot;+M+&quot;(?:$|\\s)&quot;,L)))}function K(M,N,T){if(!T){return[]}N=N||&quot;*&quot;;if(M.getElementsByClassName&amp;&amp;(N===&quot;*&quot;)){return M.getElementsByClassName(T)}var O=B(T,&quot;&quot;),Q=M.getElementsByTagName(N),R=Q.length,L=0,P,S=Array(R);for(P=0;P&lt;R;P++){if(O.test(Q[P][G])){S[L++]=Q[P]}}S.length=L;return S}function H(O,L,M){if(O==null||O===M){return null}var P=B(L,&quot;&quot;),N;for(N=O.parentNode;N!=M;){if(P.test(N[G])){return N}N=N.parentNode}return null}var D=/^\s+|\s+$/g,I=/\s\s+/g;function C(L){return L.replace(D,&quot;&quot;).replace(I,&quot; &quot;)}})();(function(){var D=document.documentElement,B=&quot;getNamedItem&quot; in D.attributes,K=&quot;nodeType&quot;,L=&quot;compareDocumentPosition&quot;,I=&quot;parentNode&quot;,F=/^H/.test(D.tagName)?&quot;toUpperCase&quot;:&quot;toLowerCase&quot;;APE.mixin(APE.dom,{contains:H(),findAncestorWithAttribute:A,findAncestorWithTagName:J,findNextSiblingElement:C,findPreviousSiblingElement:E,getChildElements:G});D=null;function H(){if(L in D){return function(N,M){return(N[L](M)&amp;16)!==0}}else{if(&quot;contains&quot; in D){return function(N,M){return N!==M&amp;&amp;N.contains(M)}}}return function(N,M){if(N===M){return false}while(N!==M&amp;&amp;(M=M[I])!==null){}return N===M}}function A(O,R,P){for(var M,Q,N=O[I];N!==null;){Q=N.attributes;if(!Q||!B){return null}M=Q.getNamedItem(R);if(M&amp;&amp;M.specified){if(M.value===P||(P===undefined)){return N}}N=N[I]}return null}function J(O,M){M=M[F]();for(var N=O[I];N!==null;){if(N.tagName===M){return N}N=N[I]}return null}function C(N){for(var M=N.nextSibling;M!==null;M=M.nextSibling){if(M[K]===1){return M}}return null}function E(M){for(var N=M.previousSibling;N!==null;N=N.previousSibling){if(N[K]===1){return N}}return null}function G(Q){var P,O,N=[],S=Q.childNodes,M=S.length,R;N.length=M;for(P=O=0;P&lt;M;P++){R=S[P];if(R[K]!==1){continue}N[O++]=R}N.length=O;return N}})();(function(){var A=&quot;addEventListener&quot; in this,F=A?&quot;target&quot;:&quot;srcElement&quot;;APE.mixin(APE.dom.Event={},{eventTarget:F,getTarget:D,addCallback:E,removeCallback:G,preventDefault:B});function D(H){return(H||window.event)[F]}function C(I,H){return A?H:function(J){H.call(I,J)}}function E(K,J,H){if(A){K.addEventListener(J,H,false)}else{var I=C(K,H);K.attachEvent(&quot;on&quot;+J,I)}return I||H}function G(J,I,H){if(A){J.removeEventListener(I,H,false)}else{J.detachEvent(&quot;on&quot;+I,H)}return H}function B(H){H=H||window.event;if(&quot;preventDefault&quot; in H){H.preventDefault()}else{if(&quot;returnValue&quot; in H){H.returnValue=false}}}})();APE.namespace(&quot;APE.dom.Event&quot;);(function(){var C=APE.dom,A=C.Event;A.getCoords=B;function B(E){var D;if(&quot;pageX&quot; in E){D=function(F){return{x:F.pageX,y:F.pageY}}}else{D=function(G){var F=C.getScrollOffsets();G=G||window.event;return{x:G.clientX+F.left,y:G.clientY+F.top}}}return(A.getCoords=D)(E)}})();(function(){var Q=APE.dom;Q.getStyle=D;Q.setOpacity=S;var R=&quot;getComputedStyle&quot;,E=Q.IS_COMPUTED_STYLE,P=&quot;currentStyle&quot;,O=&quot;opacity&quot;,F=&quot;style&quot;,G=&quot;px&quot;,J=&quot;filter&quot;,I=&quot;alpha(&quot;+O+&quot;=&quot;,M=/^(?:margin|(border)(Width|Color|Style)|padding)$/,N=/\Wopacity\s*=\s*([\d]+)/i,A=/^auto|\d%$/,L=&quot;cssFloat&quot;,C=[&quot;Top&quot;,&quot;Right&quot;,&quot;Bottom&quot;,&quot;Left&quot;];if(!(L in document.documentElement[F])){L=&quot;styleFloat&quot;}function K(V){var X,W=V[J];if(!N.test(W)){return 1}X=N.exec(W);return X[1]/100}function S(Y,V){var X=Y[F],W;if(O in X){X[O]=V}else{if(J in X){X[J]=I+(V*100)+&quot;)&quot;;W=Y[P];if(W&amp;&amp;!W.hasLayout){X.zoom=1}}}}function D(W,V){var d=&quot;&quot;,a,Z,X,Y,b,c=W[Q.OWNER_DOCUMENT];if(/float/.test(V)){V=L}if(E){a=c.defaultView[R](W,&quot;&quot;);if(!(V in a)){return&quot;&quot;}d=a[V];if(d===&quot;&quot;){d=T(a,V).join(&quot; &quot;)}if(V==&quot;zIndex&quot;&amp;&amp;d==&quot;normal&quot;){return&quot;0&quot;}if(A.test(d)){d=U(W,V)}}else{a=W[P];if(V===O){d=K(a)}else{d=a[V];if(A.test(d)){d=U(W,V)}else{if(!(V in a)){return&quot;&quot;}}}Z=H.exec(d);if(Z){X=d.split(&quot; &quot;);X[0]=B(W,Z[0]);for(Y=1,b=X.length;Y&lt;b;Y++){Z=H.exec(X[Y]);X[Y]=B(W,Z[0])}d=X.join(&quot; &quot;)}}return d}function U(X,W){var d=X[F],c,Y,V,Z,b,a;if(&quot;pixelWidth&quot; in d&amp;&amp;/width|height|top|left/.test(W)){Y=&quot;pixel&quot;+(W.charAt(0).toUpperCase())+W.substring(1);c=d[Y]}if(c){return c+G}if(W===&quot;width&quot;){b=X.clientLeft||0;V=parseFloat(D(X,&quot;borderRightWidth&quot;))||b;a=parseFloat(D(X,&quot;paddingLeft&quot;))||0+parseFloat(D(X,&quot;paddingRight&quot;))||0;return X.offsetWidth-b-V-a+G}else{if(W===&quot;height&quot;){Z=X.clientTop||0;V=parseFloat(D(X,&quot;borderBottomWidth&quot;))||Z;a=parseFloat(D(X,&quot;paddingTop&quot;))||0+parseFloat(D(X,&quot;paddingBottom&quot;))||0;return X.offsetHeight-Z-V+G}else{if(W==&quot;margin&quot;&amp;&amp;X[P].position!=&quot;absolute&quot;){c=parseFloat(D(X.parentNode,&quot;width&quot;))-X.offsetWidth;if(c===0){return&quot;0px&quot;}c=&quot;0px &quot;+c;return c+&quot; &quot;+c}}}return&quot;0&quot;}function T(b,W){var X=M.exec(W),Z,f,a,d,e,c=true,V,Y=1;if(X&amp;&amp;X[0]){V=C;Z=X[1]||X[0];f=X[2]||&quot;&quot;}else{return[&quot;&quot;]}a=b[Z+V[0]+f];e=[a];while(Y&lt;4){d=b[Z+V[Y]+f];c=c&amp;&amp;d==a;a=d;e[Y++]=d}if(c){return[a]}return e}var H=/(-?\d+|(?:-?\d*\.\d+))(?:em|ex|pt|pc|in|cm|mm\s*)/;function B(Z,a){if(Z.runtimeStyle){if(parseFloat(a)===0){return&quot;0px&quot;}var Y=Z[F],X=Y.left,W=Z.runtimeStyle,V=W.left;W.left=Z[P].left;Y.left=(a||0);a=Y.pixelLeft+G;Y.left=X;W.left=V;return a}}})();
\ No newline at end of file
+APE.namespace(&quot;APE.dom&quot;);(function(){var E=APE.dom,A=&quot;ownerDocument&quot;,D=document,F=D.documentElement,C=F&amp;&amp;typeof F[A]!==&quot;undefined&quot;?A:&quot;document&quot;,B=D.defaultView;E.OWNER_DOCUMENT=C;E.IS_COMPUTED_STYLE=(typeof B!=&quot;undefined&quot;&amp;&amp;&quot;getComputedStyle&quot; in B)})();(function(){APE.mixin(APE.dom,{getScrollOffsets:B,getViewportDimensions:C});var A=&quot;documentElement&quot;,D=document[A].clientWidth===0;function B(G){G=G||window;var F,E;if(&quot;pageXOffset&quot; in G){F=function(H){H=H||window;return{left:H.pageXOffset,top:H.pageYOffset}}}else{F=function(I){I=I||window;var H=I.document[D?&quot;body&quot;:A];return{left:H.scrollLeft,top:H.scrollTop}}}E=(this.getScrollOffsets=F)(G);G=null;return E}function C(I){I=I||window;var E=&quot;document&quot;,L=E,J=I[E],H=&quot;client&quot;,K,G;if(typeof J.clientWidth==&quot;number&quot;){E=&quot;window&quot;}else{if(D){E=A;L=&quot;body&quot;}else{if(J[A].clientHeight&gt;0){L=A}}}K=H+&quot;Width&quot;;G=H+&quot;Height&quot;;function F(N){var M=(N||window)[E][L];return{width:M[K],height:M[G]}}r=(this.getViewportDimensions=F)(I);I=J=null;return r}})();(function(){var B=APE.dom,N=typeof document.createElement(&quot;p&quot;).scrollLeft==&quot;number&quot;;APE.mixin(B,{getOffsetCoords:J,isAboveElement:U,isBelowElement:D,isInsideElement:P,IS_SCROLL_SUPPORTED:N});var I=this.document,c,O=I.documentElement,f=Math.round,W=Math.max,S=self.parseFloat,k=&quot;getComputedStyle&quot;,Z=&quot;defaultView&quot;,e=O&amp;&amp;O.clientWidth===0,Q=&quot;clientTop&quot; in O,X=/^h/.test(O.tagName)?&quot;table&quot;:&quot;TABLE&quot;,j=&quot;currentStyle&quot; in O,K,C,b,L,i,g,d,T,Y,F,A,H=I[Z]&amp;&amp;typeof I[Z][k]!=&quot;undefined&quot;,G=&quot;getBoundingClientRect&quot;,M=&quot;relative&quot;,R=&quot;borderTopWidth&quot;,a=&quot;borderLeftWidth&quot;,E=/^(?:r|a)/,V=/^(?:a|f)/;I=O=null;function J(m,AF,AL){var AR=m[B.OWNER_DOCUMENT],AP=AR.documentElement,AC=AR.body;if(!AF){AF=AR}if(!AL){AL={x:0,y:0}}AL.x=AL.y=0;if(m===AF){return AL}if(G in m){var AN=e?AC:AP,AA=m[G](),z=AA.left+W(AP.scrollLeft,AC.scrollLeft),v=AA.top+W(AP.scrollTop,AC.scrollTop),AK,AH=AN.clientTop,n=AN.clientLeft;if(Q){z-=n;v-=AH}if(AF!==AR){AA=J(AF,null);z-=AA.x;v-=AA.y;if(Q){if(e&amp;&amp;AF===AC){z-=n;v-=AH}else{if(AF!==AR&amp;&amp;AF!==AP&amp;&amp;AF!==AC){z-=AF.clientLeft;v-=AF.clientTop}}}}if(e&amp;&amp;j&amp;&amp;AF!=AR&amp;&amp;AF!==AC){AK=AC.currentStyle;z+=S(AK.marginLeft)||0+S(AK.left)||0;v+=S(AK.marginTop)||0+S(AK.top)||0}AL.x=z;AL.y=v;return AL}else{if(H){if(!c){h()}var t=m.offsetLeft,AM=m.offsetTop,AI=AR[Z],s=AI[k](m,&quot;&quot;)||m.style;if(s.position==&quot;fixed&quot;&amp;&amp;N){AL.x=t+AP.scrollLeft;AL.y=AM+AP.scrollTop;return AL}var AB=AI[k](AC,&quot;&quot;),AD=!E.test(AB.position),q=m,u=m.parentNode,l=m.offsetParent;for(;u&amp;&amp;u!==AF;u=u.parentNode){if(u!==AC&amp;&amp;u!==AP&amp;&amp;N){t-=u.scrollLeft;AM-=u.scrollTop}if(u===l){if(u===AC&amp;&amp;AD){}else{if(!K&amp;&amp;!(u.tagName===X&amp;&amp;i)){var p=AI[k](u,&quot;&quot;);t+=S(p[a])||0;AM+=S(p[R])||0}if(u!==AC){t+=l.offsetLeft;AM+=l.offsetTop;q=l;l=u.offsetParent}}}}var w=0,AJ=0,AQ,AE,AO=AF===AR||AF===AP,AG,o;if(q!=AR){s=AI[k](q,&quot;&quot;);if(s){o=s.position;AQ=V.test(o);AE=AQ||E.test(o)}}if((q===m&amp;&amp;m.offsetParent===AC&amp;&amp;!C&amp;&amp;AF!==AC&amp;&amp;!(AD&amp;&amp;L))||(C&amp;&amp;q===m&amp;&amp;!AE)||!AD&amp;&amp;AE&amp;&amp;d&amp;&amp;AO){AJ+=S(AB.marginTop)||0;w+=S(AB.marginLeft)||0}if(AF===AC){AG=AI[k](AP,&quot;&quot;);if((!AD&amp;&amp;((Y&amp;&amp;!AQ)||(F&amp;&amp;AQ)))||AD&amp;&amp;T){AJ-=S(AG.paddingTop)||0;w-=S(AG.paddingLeft)||0}if(A){if(!AE||AE&amp;&amp;!AD){AJ-=S(AG.marginTop)||0}w-=S(AG.marginLeft)||0}}if(AD){if(g||(!AQ&amp;&amp;!K&amp;&amp;AO)){AJ+=S(AB[R]);w+=S(AB[a])}}else{if(L){if(AO){if(!b){AJ+=S(AB.top)||0;w+=S(AB.left)||0;if(AQ&amp;&amp;K){AJ+=S(AB[R]);w+=S(AB[a])}}if(AF===AR&amp;&amp;!AD&amp;&amp;!Y){if(!AG){AG=AI[k](AP,&quot;&quot;)}AJ+=S(AG.paddingTop)||0;w+=S(AG.paddingLeft)||0}}else{if(b){AJ-=S(AB.top);w-=S(AB.left)}}if(C&amp;&amp;(!AE||AF===AC)){AJ-=S(AB.marginTop)||0;w-=S(AB.marginLeft)||0}}}AL.x=f(t+w);AL.y=f(AM+AJ);return AL}}}function h(){c=true;var AD=document,p=AD.body;if(!p){return}var l=&quot;marginTop&quot;,AF=&quot;position&quot;,t=&quot;padding&quot;,AC=&quot;static&quot;,w=&quot;border&quot;,q=p.style,AG=q.cssText,AB=&quot;1px solid transparent&quot;,m=&quot;0&quot;,v=&quot;1px&quot;,y=&quot;offsetTop&quot;,u=AD.documentElement.style,AE=u.cssText,o=AD.createElement(&quot;div&quot;),n=o.style,AA=AD.createElement(X);q[t]=q[l]=q.top=m;u.position=AC;q[w]=AB;n.margin=m;n[AF]=AC;o=p.insertBefore(o,p.firstChild);K=(o[y]===1);q[w]=m;AA.innerHTML=&quot;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;x&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&quot;;AA.style[w]=&quot;7px solid&quot;;AA.cellSpacing=AA.cellPadding=m;p.insertBefore(AA,p.firstChild);i=AA.getElementsByTagName(&quot;td&quot;)[0].offsetLeft===7;p.removeChild(AA);q[l]=v;q[AF]=M;C=(o[y]===1);L=p[y]===0;q[l]=m;q.top=v;b=o[y]===1;q.top=m;q[l]=v;q[AF]=n[AF]=M;d=o[y]===0;n[AF]=&quot;absolute&quot;;q[AF]=AC;if(o.offsetParent===p){q[w]=AB;n.top=&quot;2px&quot;;g=o[y]===1;q[w]=m;n[AF]=M;u[t]=v;q[l]=m;T=o[y]===3;q[AF]=M;Y=o[y]===3;n[AF]=&quot;absolute&quot;;F=o[y]===3;u[t]=m;u[l]=v;A=o[y]===3}p.removeChild(o);q.cssText=AG||&quot;&quot;;u.cssText=AE||&quot;&quot;}function P(m,l){var o=J(m).y,n=J(l).y;return o+m.offsetHeight&lt;=n+l.offsetHeight&amp;&amp;o&gt;=n}function U(m,l){return(J(m).y&lt;=J(l).y)}function D(m,l){return(J(m).y+m.offsetHeight&gt;=J(l).y+l.offsetHeight)}})();(function(){APE.mixin(APE.dom,{hasToken:E,removeClass:J,addClass:F,getElementsByClassName:K,findAncestorWithClass:H});var G=&quot;className&quot;;function E(M,L){return B(L,&quot;&quot;).test(M)}function J(M,L){var N=M[G];if(!N){return}if(N===L){M[G]=&quot;&quot;;return}M[G]=C(N.replace(B(L,&quot;g&quot;),&quot; &quot;))}function F(M,L){if(!M[G]){M[G]=L}if(!B(L).test(M[G])){M[G]+=&quot; &quot;+L}}var A={};function B(M,L){var N=M+&quot;$&quot;+L;return(A[N]||(A[N]=RegExp(&quot;(?:^|\\s)&quot;+M+&quot;(?:$|\\s)&quot;,L)))}function K(M,N,T){if(!T){return[]}N=N||&quot;*&quot;;if(M.getElementsByClassName&amp;&amp;(N===&quot;*&quot;)){return M.getElementsByClassName(T)}var O=B(T,&quot;&quot;),Q=M.getElementsByTagName(N),R=Q.length,L=0,P,S=Array(R);for(P=0;P&lt;R;P++){if(O.test(Q[P][G])){S[L++]=Q[P]}}S.length=L;return S}function H(O,L,M){if(O==null||O===M){return null}var P=B(L,&quot;&quot;),N;for(N=O.parentNode;N!=M;){if(P.test(N[G])){return N}N=N.parentNode}return null}var D=/^\s+|\s+$/g,I=/\s\s+/g;function C(L){return L.replace(D,&quot;&quot;).replace(I,&quot; &quot;)}})();(function(){var D=document.documentElement,B=&quot;getNamedItem&quot; in D.attributes,K=&quot;nodeType&quot;,L=&quot;compareDocumentPosition&quot;,I=&quot;parentNode&quot;,F=/^H/.test(D.tagName)?&quot;toUpperCase&quot;:&quot;toLowerCase&quot;;APE.mixin(APE.dom,{contains:H(),findAncestorWithAttribute:A,findAncestorWithTagName:J,findNextSiblingElement:C,findPreviousSiblingElement:E,getChildElements:G});D=null;function H(){if(L in D){return function(N,M){return(N[L](M)&amp;16)!==0}}else{if(&quot;contains&quot; in D){return function(N,M){return N!==M&amp;&amp;N.contains(M)}}}return function(N,M){if(N===M){return false}while(N!==M&amp;&amp;(M=M[I])!==null){}return N===M}}function A(O,R,P){for(var M,Q,N=O[I];N!==null;){Q=N.attributes;if(!Q||!B){return null}M=Q.getNamedItem(R);if(M&amp;&amp;M.specified){if(M.value===P||(P===undefined)){return N}}N=N[I]}return null}function J(O,M){M=M[F]();for(var N=O[I];N!==null;){if(N.tagName===M){return N}N=N[I]}return null}function C(N){for(var M=N.nextSibling;M!==null;M=M.nextSibling){if(M[K]===1){return M}}return null}function E(M){for(var N=M.previousSibling;N!==null;N=N.previousSibling){if(N[K]===1){return N}}return null}function G(Q){var P,O,N=[],S=Q.childNodes,M=S.length,R;N.length=M;for(P=O=0;P&lt;M;P++){R=S[P];if(R[K]!==1){continue}N[O++]=R}N.length=O;return N}})();(function(){var A=&quot;addEventListener&quot; in this,F=A?&quot;target&quot;:&quot;srcElement&quot;;APE.mixin(APE.dom.Event={},{eventTarget:F,getTarget:D,addCallback:E,removeCallback:G,preventDefault:B});function D(H){return(H||window.event)[F]}function C(I,H){return A?H:function(J){H.call(I,J)}}function E(K,J,H){if(A){K.addEventListener(J,H,false)}else{var I=C(K,H);K.attachEvent(&quot;on&quot;+J,I)}return I||H}function G(J,I,H){if(A){J.removeEventListener(I,H,false)}else{J.detachEvent(&quot;on&quot;+I,H)}return H}function B(H){H=H||window.event;if(&quot;preventDefault&quot; in H){H.preventDefault()}else{if(&quot;returnValue&quot; in H){H.returnValue=false}}}})();APE.namespace(&quot;APE.dom.Event&quot;);(function(){var C=APE.dom,A=C.Event;A.getCoords=B;function B(E){var D;if(&quot;pageX&quot; in E){D=function(F){return{x:F.pageX,y:F.pageY}}}else{D=function(G){var F=C.getScrollOffsets();G=G||window.event;return{x:G.clientX+F.left,y:G.clientY+F.top}}}return(A.getCoords=D)(E)}})();(function(){var Q=APE.dom;Q.getStyle=D;Q.setOpacity=S;var R=&quot;getComputedStyle&quot;,E=Q.IS_COMPUTED_STYLE,P=&quot;currentStyle&quot;,O=&quot;opacity&quot;,F=&quot;style&quot;,G=&quot;px&quot;,J=&quot;filter&quot;,I=&quot;alpha(&quot;+O+&quot;=&quot;,M=/^(?:margin|(border)(Width|Color|Style)|padding)$/,N=/\Wopacity\s*=\s*([\d]+)/i,A=/^auto|\d%$/,L=&quot;cssFloat&quot;,C=[&quot;Top&quot;,&quot;Right&quot;,&quot;Bottom&quot;,&quot;Left&quot;];if(!(L in document.documentElement[F])){L=&quot;styleFloat&quot;}function K(V){var X,W=V[J];if(!N.test(W)){return 1}X=N.exec(W);return X[1]/100}function S(Y,V){var X=Y[F],W;if(O in X){X[O]=V}else{if(J in X){X[J]=I+(V*100)+&quot;)&quot;;W=Y[P];if(W&amp;&amp;!W.hasLayout){X.zoom=1}}}}function D(W,V){var d=&quot;&quot;,a,Z,X,Y,b,c=W[Q.OWNER_DOCUMENT];if(/float/.test(V)){V=L}if(E){a=c.defaultView[R](W,&quot;&quot;);if(!(V in a)){return&quot;&quot;}d=a[V];if(d===&quot;&quot;){d=T(a,V).join(&quot; &quot;)}if(V==&quot;zIndex&quot;&amp;&amp;d==&quot;normal&quot;){return&quot;0&quot;}if(A.test(d)){d=U(W,V)}}else{a=W[P];if(V===O){d=K(a)}else{d=a[V];if(A.test(d)){d=U(W,V)}else{if(!(V in a)){return&quot;&quot;}}}Z=H.exec(d);if(Z){X=d.split(&quot; &quot;);X[0]=B(W,Z[0]);for(Y=1,b=X.length;Y&lt;b;Y++){Z=H.exec(X[Y]);X[Y]=B(W,Z[0])}d=X.join(&quot; &quot;)}}return d}function U(X,W){var d=X[F],c,Y,V,Z,b,a;if(&quot;pixelWidth&quot; in d&amp;&amp;/width|height|top|left/.test(W)){Y=&quot;pixel&quot;+(W.charAt(0).toUpperCase())+W.substring(1);c=d[Y]}if(c){return c+G}if(W===&quot;width&quot;){b=X.clientLeft||0;V=parseFloat(D(X,&quot;borderRightWidth&quot;))||b;a=parseFloat(D(X,&quot;paddingLeft&quot;))||0+parseFloat(D(X,&quot;paddingRight&quot;))||0;return X.offsetWidth-b-V-a+G}else{if(W===&quot;height&quot;){Z=X.clientTop||0;V=parseFloat(D(X,&quot;borderBottomWidth&quot;))||Z;a=parseFloat(D(X,&quot;paddingTop&quot;))||0+parseFloat(D(X,&quot;paddingBottom&quot;))||0;return X.offsetHeight-Z-V+G}else{if(W==&quot;margin&quot;&amp;&amp;X[P].position!=&quot;absolute&quot;){c=parseFloat(D(X.parentNode,&quot;width&quot;))-X.offsetWidth;if(c===0){return&quot;0px&quot;}c=&quot;0px &quot;+c;return c+&quot; &quot;+c}}}return&quot;0&quot;}function T(b,W){var X=M.exec(W),Z,f,a,d,e,c=true,V,Y=1;if(X&amp;&amp;X[0]){V=C;Z=X[1]||X[0];f=X[2]||&quot;&quot;}else{return[&quot;&quot;]}a=b[Z+V[0]+f];e=[a];while(Y&lt;4){d=b[Z+V[Y]+f];c=c&amp;&amp;d==a;a=d;e[Y++]=d}if(c){return[a]}return e}var H=/(-?\d+|(?:-?\d*\.\d+))(?:em|ex|pt|pc|in|cm|mm\s*)/;function B(Z,a){if(Z.runtimeStyle){if(parseFloat(a)===0){return&quot;0px&quot;}var Y=Z[F],X=Y.left,W=Z.runtimeStyle,V=W.left;W.left=Z[P].left;Y.left=(a||0);a=Y.pixelLeft+G;Y.left=X;W.left=V;return a}}})();
\ No newline at end of file</diff>
      <filename>build/dom/dom-min.js</filename>
    </modified>
    <modified>
      <diff>@@ -25,10 +25,8 @@ APE.namespace(&quot;APE.dom&quot; );
     });
 
 
-    var documentElement = &quot;documentElement&quot;, 
-        docEl = document[documentElement],
-        IS_BODY_ACTING_ROOT = docEl &amp;&amp; docEl.clientWidth === 0;
-    docEl = null;
+    var DOCUMENT_ELEMENT = &quot;documentElement&quot;, 
+        IS_BODY_ACTING_ROOT = document[DOCUMENT_ELEMENT].clientWidth === 0;
 
     /** @memberOf APE.dom
      * @name getScrollOffsets
@@ -38,20 +36,22 @@ APE.namespace(&quot;APE.dom&quot; );
      */
     function getScrollOffsets(win) {
         win = win || window;
-        var f, d = win.document, node = d[documentElement];
+        var f, r;
         if(&quot;pageXOffset&quot;in win)
-            f = function() {
+            f = function(win) {
+                win = win||window;
                 return{ left:win.pageXOffset, top: win.pageYOffset};
             };
         else {
-            if(IS_BODY_ACTING_ROOT) node = d.body;
-            f = function() {
+            f = function(win) {
+              win = win || window;
+              var node = win.document[IS_BODY_ACTING_ROOT ? &quot;body&quot; : DOCUMENT_ELEMENT];
               return{ left : node.scrollLeft, top : node.scrollTop };
             };
         }
-        d = null;
-        this.getScrollOffsets = f;
-        return f();
+        r = (this.getScrollOffsets = f)(win);
+        win = null;
+        return r;
     }
 
     /** @memberOf APE.dom
@@ -61,44 +61,37 @@ APE.namespace(&quot;APE.dom&quot; );
      */
     function getViewportDimensions(win) {
         win = win || window;
-        var node = win.document, d = node, propPrefix = &quot;client&quot;,
+        var baseName = &quot;document&quot;,
+            nodeName = baseName, 
+            d = win[baseName], 
+            propPrefix = &quot;client&quot;,
             wName, hName;
 
     // Safari 2 uses document.clientWidth (default).
-        if(typeof d.clientWidth == &quot;number&quot;);
+        if(typeof d.clientWidth == &quot;number&quot;){
+            baseName = &quot;window&quot;;
+        }
 
     // Opera &lt; 9.5, or IE in quirks mode.
-        else if(IS_BODY_ACTING_ROOT || isDocumentElementHeightOff(win)) {
-            node = d.body;
+        else if(IS_BODY_ACTING_ROOT) {
+            baseName = DOCUMENT_ELEMENT;
+            nodeName = &quot;body&quot;;
 
     // Modern Webkit, Firefox, IE.
     // Might be undefined. 0 in older mozilla.
-        } else if(d[documentElement].clientHeight &gt; 0){
-            node = d[documentElement];
-
-    // For older versions of Mozilla.
-        } else if(typeof innerHeight == &quot;number&quot;) {
-            node = win;
-            propPrefix = &quot;inner&quot;;
+        } else if(d[DOCUMENT_ELEMENT].clientHeight &gt; 0){
+            nodeName = DOCUMENT_ELEMENT;
         }
         wName = propPrefix + &quot;Width&quot;;
         hName = propPrefix + &quot;Height&quot;;
-
-        return (this.getViewportDimensions = function() {
+        function getViewportDimensions(win){
+            var node = (win || window)[baseName][nodeName];
             return{width: node[wName], height: node[hName]};
-        })();
-
-    // Used to feature test Opera returning wrong values
-    // for documentElement.clientHeight.
-        function isDocumentElementHeightOff(win){
-            var d = win.document,
-                div = d.createElement('div');
-            div.style.height = &quot;2500px&quot;;
-            d.body.insertBefore(div, d.body.firstChild);
-            var r = d[documentElement].clientHeight &gt; 2400;
-            d.body.removeChild(div);
-            return r;
         }
+
+        r = (this.getViewportDimensions = getViewportDimensions)(win);
+        win = d = null;
+        return r;
     }
 })();/**
  * @fileoverview</diff>
      <filename>build/dom/dom.js</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-APE.namespace(&quot;APE.dom&quot;);(function(){APE.mixin(APE.dom,{getScrollOffsets:A,getViewportDimensions:C});var B=&quot;documentElement&quot;,E=document[B],D=E&amp;&amp;E.clientWidth===0;E=null;function A(H){H=H||window;var G,I=H.document,F=I[B];if(&quot;pageXOffset&quot; in H){G=function(){return{left:H.pageXOffset,top:H.pageYOffset}}}else{if(D){F=I.body}G=function(){return{left:F.scrollLeft,top:F.scrollTop}}}I=null;this.getScrollOffsets=G;return G()}function C(J){J=J||window;var G=J.document,K=G,I=&quot;client&quot;,L,H;if(typeof K.clientWidth==&quot;number&quot;){}else{if(D||F(J)){G=K.body}else{if(K[B].clientHeight&gt;0){G=K[B]}else{if(typeof innerHeight==&quot;number&quot;){G=J;I=&quot;inner&quot;}}}}L=I+&quot;Width&quot;;H=I+&quot;Height&quot;;return(this.getViewportDimensions=function(){return{width:G[L],height:G[H]}})();function F(N){var O=N.document,P=O.createElement(&quot;div&quot;);P.style.height=&quot;2500px&quot;;O.body.insertBefore(P,O.body.firstChild);var M=O[B].clientHeight&gt;2400;O.body.removeChild(P);return M}}})();
\ No newline at end of file
+APE.namespace(&quot;APE.dom&quot;);(function(){APE.mixin(APE.dom,{getScrollOffsets:B,getViewportDimensions:C});var A=&quot;documentElement&quot;,D=document[A].clientWidth===0;function B(G){G=G||window;var F,E;if(&quot;pageXOffset&quot; in G){F=function(H){H=H||window;return{left:H.pageXOffset,top:H.pageYOffset}}}else{F=function(I){I=I||window;var H=I.document[D?&quot;body&quot;:A];return{left:H.scrollLeft,top:H.scrollTop}}}E=(this.getScrollOffsets=F)(G);G=null;return E}function C(I){I=I||window;var E=&quot;document&quot;,L=E,J=I[E],H=&quot;client&quot;,K,G;if(typeof J.clientWidth==&quot;number&quot;){E=&quot;window&quot;}else{if(D){E=A;L=&quot;body&quot;}else{if(J[A].clientHeight&gt;0){L=A}}}K=H+&quot;Width&quot;;G=H+&quot;Height&quot;;function F(N){var M=(N||window)[E][L];return{width:M[K],height:M[G]}}r=(this.getViewportDimensions=F)(I);I=J=null;return r}})();
\ No newline at end of file</diff>
      <filename>build/dom/viewport-f-min.js</filename>
    </modified>
    <modified>
      <diff>@@ -12,10 +12,8 @@ APE.namespace(&quot;APE.dom&quot;);
     });
 
 
-    var documentElement = &quot;documentElement&quot;, 
-        docEl = document[documentElement],
-        IS_BODY_ACTING_ROOT = docEl &amp;&amp; docEl.clientWidth === 0;
-    docEl = null;
+    var DOCUMENT_ELEMENT = &quot;documentElement&quot;, 
+        IS_BODY_ACTING_ROOT = document[DOCUMENT_ELEMENT].clientWidth === 0;
 
     /** @memberOf APE.dom
      * @name getScrollOffsets
@@ -25,20 +23,22 @@ APE.namespace(&quot;APE.dom&quot;);
      */
     function getScrollOffsets(win) {
         win = win || window;
-        var f, d = win.document, node = d[documentElement];
+        var f, r;
         if(&quot;pageXOffset&quot;in win)
-            f = function() {
+            f = function(win) {
+                win = win||window;
                 return{ left:win.pageXOffset, top: win.pageYOffset};
             };
         else {
-            if(IS_BODY_ACTING_ROOT) node = d.body;
-            f = function() {
+            f = function(win) {
+              win = win || window;
+              var node = win.document[IS_BODY_ACTING_ROOT ? &quot;body&quot; : DOCUMENT_ELEMENT];
               return{ left : node.scrollLeft, top : node.scrollTop };
             };
         }
-        d = null;
-        this.getScrollOffsets = f;
-        return f();
+        r = (this.getScrollOffsets = f)(win);
+        win = null;
+        return r;
     }
 
     /** @memberOf APE.dom
@@ -48,43 +48,36 @@ APE.namespace(&quot;APE.dom&quot;);
      */
     function getViewportDimensions(win) {
         win = win || window;
-        var node = win.document, d = node, propPrefix = &quot;client&quot;,
+        var baseName = &quot;document&quot;,
+            nodeName = baseName, 
+            d = win[baseName], 
+            propPrefix = &quot;client&quot;,
             wName, hName;
 
     // Safari 2 uses document.clientWidth (default).
-        if(typeof d.clientWidth == &quot;number&quot;);
+        if(typeof d.clientWidth == &quot;number&quot;){
+            baseName = &quot;window&quot;;
+        }
 
     // Opera &lt; 9.5, or IE in quirks mode.
-        else if(IS_BODY_ACTING_ROOT || isDocumentElementHeightOff(win)) {
-            node = d.body;
+        else if(IS_BODY_ACTING_ROOT) {
+            baseName = DOCUMENT_ELEMENT;
+            nodeName = &quot;body&quot;;
 
     // Modern Webkit, Firefox, IE.
     // Might be undefined. 0 in older mozilla.
-        } else if(d[documentElement].clientHeight &gt; 0){
-            node = d[documentElement];
-
-    // For older versions of Mozilla.
-        } else if(typeof innerHeight == &quot;number&quot;) {
-            node = win;
-            propPrefix = &quot;inner&quot;;
+        } else if(d[DOCUMENT_ELEMENT].clientHeight &gt; 0){
+            nodeName = DOCUMENT_ELEMENT;
         }
         wName = propPrefix + &quot;Width&quot;;
         hName = propPrefix + &quot;Height&quot;;
-
-        return (this.getViewportDimensions = function() {
+        function getViewportDimensions(win){
+            var node = (win || window)[baseName][nodeName];
             return{width: node[wName], height: node[hName]};
-        })();
-
-    // Used to feature test Opera returning wrong values
-    // for documentElement.clientHeight.
-        function isDocumentElementHeightOff(win){
-            var d = win.document,
-                div = d.createElement('div');
-            div.style.height = &quot;2500px&quot;;
-            d.body.insertBefore(div, d.body.firstChild);
-            var r = d[documentElement].clientHeight &gt; 2400;
-            d.body.removeChild(div);
-            return r;
         }
+
+        r = (this.getViewportDimensions = getViewportDimensions)(win);
+        win = d = null;
+        return r;
     }
 })();
\ No newline at end of file</diff>
      <filename>build/dom/viewport-f.js</filename>
    </modified>
    <modified>
      <diff>@@ -39,7 +39,7 @@ and has &lt;a href=&quot;http://ape.lighthouseapp.com/projects/27412-ape-javascript-libr
 &lt;h2&gt;Features&lt;/h2&gt;
 &lt;ul&gt;
     &lt;li&gt;
-        &lt;a href=&quot;build/APE.js&quot;&gt;&lt;abbr title=&quot;AOP Pointcuts for EcmaScript&quot;&gt;APE&lt;/abbr&gt; Core&lt;/a&gt; (&lt;abbr title=&quot;less than three kilobytes&quot;&gt;&amp;lt; 3k&lt;/abbr&gt; minified) 
+        &lt;a href=&quot;build/APE.js&quot;&gt;&lt;abbr title=&quot;AOP Pointcuts for EcmaScript&quot;&gt;APE&lt;/abbr&gt; Core&lt;/a&gt; (&lt;abbr title=&quot;less than two kilobytes&quot;&gt;&amp;lt; 2k&lt;/abbr&gt; minified) 
         Namespacing and Object creational features.
     &lt;/li&gt;
     &lt;li&gt;
@@ -63,14 +63,14 @@ and has &lt;a href=&quot;http://ape.lighthouseapp.com/projects/27412-ape-javascript-libr
     &lt;a href=&quot;build/EventPublisher.js&quot;&gt;EventPublisher.js&lt;/a&gt;, 
     and &lt;a href=&quot;build/dom/dom.js&quot;&gt;dom.js&lt;/a&gt;, have been conveniently 
     packaged in to one rollup file, &lt;a href=&quot;build/ape-ep-dom.js&quot;&gt;ape-ep-dom.js&lt;/a&gt; 
-    (&lt;a href=&quot;build/ape-ep-dom-min.js&quot;&gt;&lt;abbr title=&quot;less than fourteen kilobytes&quot;&gt;&amp;lt; 14k&lt;/abbr&gt; 
+    (&lt;a href=&quot;build/ape-ep-dom-min.js&quot;&gt;&lt;abbr title=&quot;less than ten kilobytes&quot;&gt;&amp;lt; 10k&lt;/abbr&gt; 
     minified&lt;/a&gt;). 
 &lt;/p&gt;
 
 &lt;p&gt;
     For css-based animation, the files &lt;a href=&quot;build/anim/StyleTransition.js&quot;&gt;StyleTransition.js&lt;/a&gt; 
     and &lt;a href=&quot;build/anim/Animation.js&quot;&gt;Animation.js&lt;/a&gt; have been rolled up into 
-    &lt;a href=&quot;build/anim/anim.js&quot;&gt;anim.js&lt;/a&gt; (&lt;a href=&quot;build/anim/anim-min.js&quot;&gt;&lt;abbr title=&quot;less than fourteen kilobytes&quot;&gt;&amp;lt; 9k&lt;/abbr&gt; minified&lt;/a&gt;).
+    &lt;a href=&quot;build/anim/anim.js&quot;&gt;anim.js&lt;/a&gt; (&lt;a href=&quot;build/anim/anim-min.js&quot;&gt;&lt;abbr title=&quot;about six kilobytes&quot;&gt;&amp;lt; 7k&lt;/abbr&gt; minified&lt;/a&gt;).
 &lt;/p&gt;
 
 &lt;h3&gt;How APE is Built&lt;/h3&gt;</diff>
      <filename>index.html</filename>
    </modified>
    <modified>
      <diff>@@ -12,10 +12,8 @@ APE.namespace(&quot;APE.dom&quot;);
     });
 
 
-    var documentElement = &quot;documentElement&quot;, 
-        docEl = document[documentElement],
-        IS_BODY_ACTING_ROOT = docEl &amp;&amp; docEl.clientWidth === 0;
-    docEl = null;
+    var DOCUMENT_ELEMENT = &quot;documentElement&quot;, 
+        IS_BODY_ACTING_ROOT = document[DOCUMENT_ELEMENT].clientWidth === 0;
 
     /** @memberOf APE.dom
      * @name getScrollOffsets
@@ -25,20 +23,22 @@ APE.namespace(&quot;APE.dom&quot;);
      */
     function getScrollOffsets(win) {
         win = win || window;
-        var f, d = win.document, node = d[documentElement];
+        var f, r;
         if(&quot;pageXOffset&quot;in win)
-            f = function() {
+            f = function(win) {
+                win = win||window;
                 return{ left:win.pageXOffset, top: win.pageYOffset};
             };
         else {
-            if(IS_BODY_ACTING_ROOT) node = d.body;
-            f = function() {
+            f = function(win) {
+              win = win || window;
+              var node = win.document[IS_BODY_ACTING_ROOT ? &quot;body&quot; : DOCUMENT_ELEMENT];
               return{ left : node.scrollLeft, top : node.scrollTop };
             };
         }
-        d = null;
-        this.getScrollOffsets = f;
-        return f();
+        r = (this.getScrollOffsets = f)(win);
+        win = null;
+        return r;
     }
 
     /** @memberOf APE.dom
@@ -48,43 +48,36 @@ APE.namespace(&quot;APE.dom&quot;);
      */
     function getViewportDimensions(win) {
         win = win || window;
-        var node = win.document, d = node, propPrefix = &quot;client&quot;,
+        var baseName = &quot;document&quot;,
+            nodeName = baseName, 
+            d = win[baseName], 
+            propPrefix = &quot;client&quot;,
             wName, hName;
 
     // Safari 2 uses document.clientWidth (default).
-        if(typeof d.clientWidth == &quot;number&quot;);
+        if(typeof d.clientWidth == &quot;number&quot;){
+            baseName = &quot;window&quot;;
+        }
 
     // Opera &lt; 9.5, or IE in quirks mode.
-        else if(IS_BODY_ACTING_ROOT || isDocumentElementHeightOff(win)) {
-            node = d.body;
+        else if(IS_BODY_ACTING_ROOT) {
+            baseName = DOCUMENT_ELEMENT;
+            nodeName = &quot;body&quot;;
 
     // Modern Webkit, Firefox, IE.
     // Might be undefined. 0 in older mozilla.
-        } else if(d[documentElement].clientHeight &gt; 0){
-            node = d[documentElement];
-
-    // For older versions of Mozilla.
-        } else if(typeof innerHeight == &quot;number&quot;) {
-            node = win;
-            propPrefix = &quot;inner&quot;;
+        } else if(d[DOCUMENT_ELEMENT].clientHeight &gt; 0){
+            nodeName = DOCUMENT_ELEMENT;
         }
         wName = propPrefix + &quot;Width&quot;;
         hName = propPrefix + &quot;Height&quot;;
-
-        return (this.getViewportDimensions = function() {
+        function getViewportDimensions(win){
+            var node = (win || window)[baseName][nodeName];
             return{width: node[wName], height: node[hName]};
-        })();
-
-    // Used to feature test Opera returning wrong values
-    // for documentElement.clientHeight.
-        function isDocumentElementHeightOff(win){
-            var d = win.document,
-                div = d.createElement('div');
-            div.style.height = &quot;2500px&quot;;
-            d.body.insertBefore(div, d.body.firstChild);
-            var r = d[documentElement].clientHeight &gt; 2400;
-            d.body.removeChild(div);
-            return r;
         }
+
+        r = (this.getViewportDimensions = getViewportDimensions)(win);
+        win = d = null;
+        return r;
     }
 })();
\ No newline at end of file</diff>
      <filename>src/dom/viewport-f.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ce85200c55a9c23285610747ab7fc146a9c6c849</id>
    </parent>
  </parents>
  <author>
    <name>GarrettS</name>
    <email>dhtmlkitchen@gmail.com</email>
  </author>
  <url>http://github.com/GarrettS/ape-javascript-library/commit/590e0b6026d2985c744618996b8c3c18ca2996f6</url>
  <id>590e0b6026d2985c744618996b8c3c18ca2996f6</id>
  <committed-date>2009-11-05T11:43:48-08:00</committed-date>
  <authored-date>2009-11-05T11:43:48-08:00</authored-date>
  <message>Updated viewport-f to not account for Opera &lt; 9.25 bug.
ape-ep-dom.js now under 10k!</message>
  <tree>3204ef034110ccbe7a6bb20a0e3f2f70e929574d</tree>
  <committer>
    <name>GarrettS</name>
    <email>dhtmlkitchen@gmail.com</email>
  </committer>
</commit>
