﻿/*
MooCarousel - a simple carousel. In MooTools.

License:
  MIT-style license.

Credits:
  posttoast ( <http://posttoast.nl> ) 2010-03-19
*/

var mooCarousel = new Class({

  Implements: [Options, Events],
  options: {
    slideContainer: '',
    slideClass: '.slide',
    controlContainer: '',
    timed: false,
    interval: 1000,
    openOnControlClick: false
  },

  initialize: function(options){

    this.setOptions(options);
    // Activate first slide
    this.slides = this.options.slideContainer.getElements(this.options.slideClass);
    if (this.slides.length > 1){
      this.slides[0].addClass('active');
      this.slides.setStyle('display', 'none');
      this.slides[0].setStyle('display', 'block');
      this.currentSlide = 0;
    }

    if (this.options.controlContainer != ''){
      this.activateControls();
    }

    if (this.options.timed == true){

      this.start();

      $$(this.options.slideClass).addEvents({
        mouseenter: function() { this.stop(); }.bind(this),
        mouseleave: function() { this.start(); }.bind(this)
      });
    }

  },

  start: function(){
    var slideIt = function(){
      if (this.currentSlide + 1 < this.slides.length){
        var nextSlide = this.currentSlide + 1;
      }else {
        var nextSlide = 0
      }
      this.showSlide(nextSlide);
    };
    this.timer = slideIt.periodical(this.options.interval, this);
  },

  stop: function(){
    $clear(this.timer);
  },

  activateControls: function(){
    // Create controls
    var controlBox = new Element('div');
    controlBox.setProperty('class', 'controlbox');
    var openOnControlClick = this.options.openOnControlClick;
    this.slides.each(function(el){
      var slide = el;
      var controlButton = new Element('a');
      controlButton.setProperties({
        'class': 'controlbutton',
        'href': '#'
      });
      controlButton.addEvents({
        'mouseover': function(){
          this.slides.removeClass('active');
          this.slides.setStyle('display', 'none');
          el.addClass('active');
          el.setStyle('display', 'block');
          controlBox.getElements('.controlbutton').removeClass('active');
          this.addClass('active');
        },
        'click': function(el){
          el.stop();
          if (openOnControlClick && slide.getParent('a')){
            slide.getParent('a').fireEvent('click');
          }
        }
      });
      controlButton.inject(controlBox);
    });
    controlBox.inject(this.options.controlContainer);
    controlBox.getFirst('a.controlbutton').addClass('active');
  },

  showSlide: function(slide){
    this.currentSlide = slide;
    this.slides[this.currentSlide].addClass('active');
    this.slides.setStyle('display', 'none');
    this.slides[this.currentSlide].setStyle('display', 'block');
  }

});