/*-------------------------------------------
Slideshow functionality
---------------------------------------------

Code to enable the rotating news slideshows. To alter the slide timing,
change the "slide_delay" variable.

Original author: Ben Sturmfels, Boojum, January 2009
Modified By: James Healy, November 2009

------------------------------------------*/

var Slideshow = {
  slide_delay: 4, // seconds between slides
  cur_slide: 0,
  auto_play: null,
  slides: null,

  init: function() {
    $('slideshow-controls').setStyle({display: 'block'});

    Slideshow.slides = $$(".slideshow .slide");
    Slideshow.hide_all_slides();
    Slideshow.show_slide(Slideshow.cur_slide);
    Slideshow.start_observers();
    Slideshow.play(true);
  },

  hide_all_slides: function() {
    Slideshow.slides.each(function(s){ s.hide(); });
  },

  start_observers: function() {
    $('button-prev').observe('click', Slideshow.prev);
    $('button-next').observe('click', Slideshow.next);
    $('button-pause').observe('click', Slideshow.toggle);
    $('button-play').observe('click', Slideshow.toggle);
  },

  size: function() {
    return Slideshow.slides.size();
  },

  show_slide: function(index) {
    Slideshow.slides[index].show();
  },

  next: function() {
    if (Slideshow.cur_slide + 1 < Slideshow.size()) {
      Slideshow.pause();
      Slideshow.switch_slides(Slideshow.cur_slide, Slideshow.cur_slide + 1);
    }
  },

  prev: function() {
    if (Slideshow.cur_slide - 1 >= 0) {
      Slideshow.pause();
      Slideshow.switch_slides(Slideshow.cur_slide, Slideshow.cur_slide - 1);
    }
  },

  playing: function() {
    if (Slideshow.auto_play == null)
      return false;
    else
      return true;
  },

  toggle: function() {
    if (Slideshow.playing())
      Slideshow.pause();
    else
      Slideshow.play();
  },

  rotate: function() {
    Slideshow.switch_slides(Slideshow.cur_slide, (Slideshow.cur_slide + 1) % Slideshow.size());
  },

  pause: function() {
    if (Slideshow.playing()) {
      Slideshow.auto_play.stop();
      Slideshow.auto_play = null;
    }
    $("button-pause").hide();
    $("button-play").show();
  },

  play: function(skip_rotate) {
    if (!skip_rotate)
      Slideshow.rotate();

    $("button-pause").show();
    $("button-play").hide();
    Slideshow.auto_play = new PeriodicalExecuter(Slideshow.rotate, Slideshow.slide_delay);
  },

  switch_slides: function(c,d) {
    /* Switch the slides and update the status information. */
    if (c != d) {
      Effect.Fade(Slideshow.slides[c], { duration: 0.2 });
      Effect.Appear(Slideshow.slides[d], { duration: 0.2 });

      Slideshow.cur_slide = d;
    }
  },
}

document.observe("dom:loaded", function() {
  Slideshow.init();
});
