function Scroller(list, speed) {    
   this.speed = speed;
   this.list = $(list);
   this.listElements = $$('#' + this.list.id + ' li');
   this.listLength = this.listElements.length;
   this.totalHeight = 0;
   for(var i = 0; i < this.listLength; i++) {
     this.listElements[i].style.top = this.totalHeight + 'px';
	 this.listElements[i].show()
     this.totalHeight = this.totalHeight +  this.listElements[i].offsetHeight;
   }
   Event.observe(this.list, 'mouseover', this.onMouseOver.bindAsEventListener(this));
   Event.observe(this.list, 'mouseout', this.onMouseOut.bindAsEventListener(this));
}
    
Scroller.prototype = {
  speed:0,
  currPos:-1,
  totalHeight:'0px',  
  scrollList : function () {
    this.currPos++;
    for (var i = 0; i < this.listLength; i++) {
       if (this.currPos == i) {
          new Effect.Opacity(this.listElements[i], { from: 1.0, to: 0, duration: 0.5,
             afterFinish : function(element) {
                element.style.top = this.totalHeight - element.offsetHeight + 'px';
                if (Prototype.Browser.IE) {
                   element.style.filter = "alpha(opacity=100)";
                }else{
                   element.style.opacity = 1;
                }
             }.bind(this, this.listElements[i])
          });
          if (i == this.listLength - 1)
            this.currPos = -1;
       } else {
          new Effect.Move(this.listElements[i], { x: 0, y: -this.listElements[this.currPos].offsetHeight, mode: 'relative'});
       }
    }
  },          
  startScrolling : function (speed){
    if (speed) {
      this.speed = speed;
    }
    this.interval = setInterval(this.scrollList.bind(this), this.speed);
  },
  stopScrolling : function() {
     clearInterval(this.interval);
  },
  onMouseOver : function(e){
     this.stopScrolling();
  },
  onMouseOut : function(e){
     this.startScrolling();
  }
}

Event.observe(document, 'dom:loaded', function() {
	var dedications = new Scroller('dedications', 4000)
	dedications.startScrolling();
}.bind(this));
