Ext.Element.addMethods({getAnchorXY:function(e,k,p){e=(e||"tl").toLowerCase();p=p||{};var j=this,b=j.dom==document.body||j.dom==document,m=p.width||b?Ext.lib.Dom.getViewWidth():j.getWidth(),g=p.height||b?Ext.lib.Dom.getViewHeight():j.getHeight(),n,a=Math.round,c=j.getXY(),l=j.getScroll(),i=b?l.left:!k?c[0]:0,f=b?l.top:!k?c[1]:0,d={c:[a(m*0.5),a(g*0.5)],t:[a(m*0.5),0],l:[0,a(g*0.5)],r:[m,a(g*0.5)],b:[a(m*0.5),g],tl:[0,0],bl:[0,g],br:[m,g],tr:[m,0]};n=d[e];return[n[0]+i,n[1]+f]},anchorTo:function(c,h,e,a,b,g){var d=this;function f(){this.alignTo(c,h,e,a);Ext.callback(g,this)}Ext.EventManager.onWindowResize(f,d);if(!Ext.isEmpty(b)){Ext.EventManager.on(window,"scroll",f,d,{buffer:!isNaN(b)?b:50})}f.call(d);return d},getAlignToXY:function(f,z,A){f=Ext.get(f);if(!f||!f.dom){throw"Element.alignToXY with an element that doesn't exist"}A=A||[0,0];z=(z=="?"?"tl-bl?":(!/-/.test(z)&&z!=""?"tl-"+z:z||"tl-bl")).toLowerCase();var J=this,G=J.dom,L,K,l,k,q,E,u,s=Ext.lib.Dom.getViewWidth()-10,F=Ext.lib.Dom.getViewHeight()-10,b,g,i,j,t,v,M=document,I=M.documentElement,n=M.body,D=(I.scrollLeft||n.scrollLeft||0)+5,C=(I.scrollTop||n.scrollTop||0)+5,H=false,e="",a="",B=z.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!B){throw"Element.alignTo with an invalid alignment "+z}e=B[1];a=B[2];H=!!B[3];L=J.getAnchorXY(e,true);K=f.getAnchorXY(a,false);l=K[0]-L[0]+A[0];k=K[1]-L[1]+A[1];if(H){q=J.getWidth();E=J.getHeight();u=f.getRegion();b=e.charAt(0);g=e.charAt(e.length-1);i=a.charAt(0);j=a.charAt(a.length-1);t=((b=="t"&&i=="b")||(b=="b"&&i=="t"));v=((g=="r"&&j=="l")||(g=="l"&&j=="r"));if(l+q>s+D){l=v?u.left-q:s+D-q}if(l<D){l=v?u.right:D}if(k+E>F+C){k=t?u.top-E:F+C-E}if(k<C){k=t?u.bottom:C}}return[l,k]},alignTo:function(c,a,e,b){var d=this;return d.setXY(d.getAlignToXY(c,a,e),d.preanim&&!!b?d.preanim(arguments,3):false)},adjustForConstraints:function(c,a,b){return this.getConstrainToXY(a||document,false,b,c)||c},getConstrainToXY:function(b,a,c,e){var d={top:0,left:0,bottom:0,right:0};return function(g,v,j,l){g=Ext.get(g);j=j?Ext.applyIf(j,d):d;var u,B,t=0,r=0;if(g.dom==document.body||g.dom==document){u=Ext.lib.Dom.getViewWidth();B=Ext.lib.Dom.getViewHeight()}else{u=g.dom.clientWidth;B=g.dom.clientHeight;if(!v){var q=g.getXY();t=q[0];r=q[1]}}var p=g.getScroll();t+=j.left+p.left;r+=j.top+p.top;u-=j.right;B-=j.bottom;var z=t+u;var f=r+B;var i=l||(!v?this.getXY():[this.getLeft(true),this.getTop(true)]);var n=i[0],m=i[1];var o=this.dom.offsetWidth,A=this.dom.offsetHeight;var k=false;if((n+o)>z){n=z-o;k=true}if((m+A)>f){m=f-A;k=true}if(n<t){n=t;k=true}if(m<r){m=r;k=true}return k?[n,m]:false}}(),getCenterXY:function(){return this.getAlignToXY(document,"c-c")},center:function(a){return this.alignTo(a||document,"c-c")}});
