/**
 * Create a slideshow with pager 
 * @author    Jacob Stellingwerf <jacob.stellingwerf@infoprojects.nl>
 */
(function($){
 /*
  Chain functions down here
  */

 /*
  Function description here
  */
  $.fn.slideshow = function(options) {
    var cfg = $.extend({
      speed: 2000,
      elements: [ ".slidethis" ], // Multiple elements to slide simultaniously can be set here.
      pager: ".pager"
    }, options||{});
  
    var slideshow = $(this);
    var index = 1;
    var currentIndex = 1;
    var max = 0;
    var slidethese = new Array();    
    
    var previous = function() {
      index--;
      if (index < 1) {
        index = max;
      }
      show();
    }
    
    var next = function() {
      index++;
      if (index > max) {
        index = 1;
      }
      show();
    }
    
    // Initialize slides
    for (var i = 0; i < cfg.elements.length; i++) {
      index = 1;
      max = $(cfg.elements[i]).size();
      slideshow.find(cfg.elements[i]).each(function() {
        $(this).attr("slideindex", index++);
      }).filter(":gt(0)").hide();
    }
    
    // Initialize pager
    var pager = slideshow.find(cfg.pager);
    index = 1;
    pager.find(".pager_page").each(function() {
      $(this).attr("slideindex", index++).click(function() {
        clearInterval(interval);
        index = $(this).attr("slideindex");
        show();
      });
    });
    pager.find(".pager_prev").click(previous);
    pager.find(".pager_next").click(next);

    var interval = null;
    var show = function() {
      clearInterval(interval);
      for (var i = 0; i < cfg.elements.length; i++) {
        if (currentIndex != index) {
          slideshow.find(cfg.elements[i]).filter("[slideindex="+currentIndex+"]").hide();
        }
        slideshow.find(cfg.elements[i]).filter("[slideindex="+index+"]").show();
      }
      
      // Set pager image
      if (currentIndex != index) {
        var srcselected = pager.find(".pager_page[slideindex="+currentIndex+"]").attr("src");
        var src = pager.find(".pager_page[slideindex="+index+"]").attr("src");
        pager.find(".pager_page[slideindex="+currentIndex+"]").attr("src", src);
        pager.find(".pager_page[slideindex="+index+"]").attr("src", srcselected);
      }
      currentIndex = index;
      starttimer();
    }
    
    var starttimer = function() {
      clearInterval(interval);
      interval = window.setInterval(next, cfg.speed);
    }
    index = 1;
    currentIndex = 1;
    show();
    $(window).unload(function() { clearInterval(interval); });
     
    return $(this);
  };
})(jQuery);
