// following code is MIT licensed (C) Gary Haran 2007

/**
* Provide the same behavior as window.scrollTo to divs with overflow without removing
* the ability to scroll a page to a given element.
*/
Element.addMethods({
 scrollTo: function(element, left, top){
 var element = $(element);
 if (arguments.length == 1){
 var pos = element.cumulativeOffset();
 window.scrollTo(pos[0], pos[1]);
 } else {
 element.scrollLeft = left;
 element.scrollTop = top;
 }
 return element;
 }
});

/**
* Effect.Scroll allows you to animate scrolling on a page (or div w/ overflow: scroll || auto)
*/
Effect.Scroll = Class.create();
Object.extend(Object.extend(Effect.Scroll.prototype, Effect.Base.prototype), {
 initialize: function(element) {
 this.element = $(element);
 if(!this.element) throw(Effect._elementDoesNotExistError);
 this.start(Object.extend({x: 0, y: 0}, arguments[1] || {}));
 },
 setup: function() {
 var scrollOffsets = (this.element == window)
 ? document.viewport.getScrollOffsets()
 : Element._returnOffset(this.element.scrollLeft, this.element.scrollTop) ;
 this.originalScrollLeft = scrollOffsets.left;
 this.originalScrollTop = scrollOffsets.top;
 },
 update: function(pos) {
 this.element.scrollTo(Math.round(this.options.x * pos + this.originalScrollLeft), Math.round(this.options.y * pos + this.originalScrollTop));
 }
});