// 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));

  }

});
