var Ticker = new Class({
  setOptions: function(options) {
    this.options = Object.extend({
      speed: 1500,
      delay: 5000,
      direction: 'vertical',
      onComplete: Class.empty,
      onStart: Class.empty
    }, options || {});
  },
  forward: true,
  initialize: function(el,options){
    this.setOptions(options);
    this.el = $(el);
    this.items = this.el.getElements('li');
    var w = 0;
    var h = 0;
    if(this.options.direction.toLowerCase()=='horizontal') {
      h = this.el.getSize().y;
      this.items.each(function(li,index) {
        w += li.getSize().x;
      });
    } else {
      w = this.el.getSize().x;
      this.items.each(function(li,index) {
        h += li.getSize().y;
      });
    }
    this.el.setStyles({
      position: 'absolute',
      top: 0,
      left: 0,
      width: w,
        height: h
    });
    this.fx = new Fx.Morph(this.el,{
      duration:this.options.speed,
      onStart:function() {
        this.active = true;
      }.bind(this),
      onComplete:function() {
        this.moveItemToBottom();
        this.active = false;
      }.bind(this)
    });
    this.current = 0;
  },
  moveItemToTop: function() {
    this.items[this.current].inject( this.el, 'top' );
    var pos = this.items[ (this.current+1) % this.items.length];
    this.el.setStyles({
      top: -pos.offsetTop + 'px',
      left: -pos.offsetLeft + 'px'
    });
  },
  moveItemToBottom: function() {
    if( this.forward ) {
      var i = (this.current==0)?this.items.length:this.current;
      this.items[i-1].injectInside(this.el);
      this.el.setStyles({
        left:0,
        top:0
      });
    }
    this.forward = true;
  },
  pause: function() {
      $clear(mytimer);
      mytimer = null;
  },
  resume: function() {
      if (mytimer == null) {
      mytimer = this.next.bind(this).delay(this.options.speed);
      }
  },
  next: function() {
    if( this.active )
      return;
    $clear( mytimer );
    this.current++;
    if (this.current >= this.items.length) this.current = 0;
    var pos = this.items[this.current];
    this.fx.start({
      top: -pos.offsetTop,
      left: -pos.offsetLeft
    });
    mytimer = this.next.bind(this).delay(this.options.delay+this.options.speed);
  },
  prev: function() {
    if( this.active )
      return;
    $clear( mytimer );
    this.current--;
    if (this.current < 0) this.current = this.items.length - 1;
    this.moveItemToTop();
    this.fx.start({
      top: 0,
      left: 0
    });
    mytimer = this.next.bind(this).delay(this.options.delay+this.options.speed);
  }
});
var mytimer = null;
window.addEvent('domready', function() {
    var newsTicker = new Ticker('TickerVertical', {
        speed : 500, delay : 5000, direction : 'vertical'
    });
    var startTicker = function() {
      newsTicker.next();
    };
    $('NewsTicker').addEvent('mouseenter', function() {
        newsTicker.pause();
    });
    $('NewsTicker').addEvent('mouseleave', function() {
        newsTicker.resume();
    });
    $('prev').addEvent('click', function() {
        newsTicker.prev();
    });
    $('next').addEvent('click', function() {
        newsTicker.next();
    });
    mytimer = startTicker.delay( 5000 );
});
