//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(B,A){this.element=this.subject=$(B);this.parent(A);var D=this.cancel.bind(this,false);
if($type(this.element)!="element"){this.element=$(this.element.getDocument().body);}var C=this.element;if(this.options.wheelStops){this.addEvent("start",function(){C.addEvent("mousewheel",D);
},true);this.addEvent("complete",function(){C.removeEvent("mousewheel",D);},true);}},set:function(){var A=Array.flatten(arguments);this.element.scrollTo(A[0],A[1]);
},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B.push(Fx.compute(E[F],D[F],C));});return B;},start:function(C,H){if(!this.check(arguments.callee,C,H)){return this;
}var E=this.element.getSize(),F=this.element.getScrollSize();var B=this.element.getScroll(),D={x:C,y:H};for(var G in D){var A=F[G]-E[G];if($chk(D[G])){D[G]=($type(D[G])=="number")?D[G].limit(0,A):A;
}else{D[G]=B[G];}D[G]+=this.options.offset[G];}return this.parent([B.x,B.y],[D.x,D.y]);},toTop:function(){return this.start(false,0);},toLeft:function(){return this.start(0,false);
},toRight:function(){return this.start("right",false);},toBottom:function(){return this.start(false,"bottom");},toElement:function(B){var A=$(B).getPosition(this.element);
return this.start(A.x,A.y);}});

Fx.Scroll2=new Class({Extends:Fx.Scroll,'styleString':Element.getComputedStyle,'styleNumber':function(element,style){return this.styleString(element,style).toInt()||0;},'borderBox':function(element){return this.styleString(element,'-moz-box-sizing')=='border-box';},'topBorder':function(element){return this.styleNumber(element,'border-top-width');},'leftBorder':function(element){return this.styleNumber(element,'border-left-width');},'isBody':function(element){return(/^(?:body|html)$/i).test(element.tagName);},'toElement':function(el){var offset={x:0,y:0};var element=$(el);if(this.isBody(element)){return offset;}
var scroll=element.getScrolls();while(element&&!this.isBody(element)){offset.x+=element.offsetLeft;offset.y+=element.offsetTop;if(Browser.Engine.gecko){if(!this.borderBox(element)){offset.x+=this.leftBorder(element);offset.y+=this.topBorder(element);}
var parent=element.parentNode;if(parent&&this.styleString(parent,'overflow')!='visible'){offset.x+=this.leftBorder(parent);offset.y+=this.topBorder(parent);}}else if(Browser.Engine.trident||Browser.Engine.webkit){offset.x+=this.leftBorder(element);offset.y+=this.topBorder(element);}
element=element.offsetParent;if(Browser.Engine.trident){while(element&&!element.currentStyle.hasLayout){element=element.offsetParent;}}}
if(Browser.Engine.gecko&&!this.borderBox(element)){offset.x-=this.leftBorder(element);offset.y-=this.topBorder(element);}
var relative=this.element;var relativePosition=(relative&&(relative=$(relative)))?relative.getPosition():{x:0,y:0};var position={x:offset.x-scroll.x,y:offset.y-scroll.y};return this.start(position.x-relativePosition.x,position.y-relativePosition.y);}});