var mooTickSlide = new Class({
  Implements: Options,
  options: {
    groupBy: 1,
    interval: 5000,
    fadeSpeed: 1000
  },

  initialize: function(ElementsToTick,options) {
		var params = Array.link(arguments, {'container': Element.type, 'options': Object.type});
		var styles = {'display': 'block'};
    this.setOptions(options);
    this.groupBy = this.options.groupBy;
    this.interval = this.options.interval;
    this.fadeSpeed = this.options.fadeSpeed;
    this.tickElements = ElementsToTick;
    if($type(ElementsToTick) != 'array') this.tickElements = ElementsToTick.getChildren();
    this.number_of_elements = this.tickElements.length - 1;
    this.group = new Array(this.groupBy);
		this.container = $(params.container);
    this.start_element = 0;
    if(this.number_of_elements > this.groupBy) {
      this.hideAllElements();
			this.container.setStyles(styles);
      this.showElements();
      if(this.interval > 0) this.displayElements.periodical(this.interval,this);
    }
  },

  displayElements: function() {
    this.fadeElements();
    this.showElements.delay(this.interval - (this.interval - this.fadeSpeed),this);
  },
  
  showElements: function() {
    for(var i = 0; i < this.groupBy; i++) {
      if(this.start_element > this.number_of_elements) {
        this.start_element = 0;
      }
      this.group[i] = this.tickElements[this.start_element];
      this.start_element += 1;
    }
    
    this.group.each(function(item) {
      item.get('tween',{property:'opacity', duration:this.fadeSpeed, onStart:function(item) {
        item.setStyle('display','inline');
      }}).start(0,1);
    }.bind(this));
  },

  fadeElements: function() { 
    this.group.each(function(item) {
      item.get('tween',{property:'opacity', duration:this.fadeSpeed, onComplete:function(item) {
        item.setStyle('display','none');
      }}).start(1,0);
    }.bind(this));
  },

  hideAllElements: function() {
    this.tickElements.each(function(el) {
      el.setStyles({
        'display':'none',
        'opacity':0
      });
    });
  }
});

