// mom Plugin: slideshow
(function( $ ){
  // settings
  var settings = {
    duration: 3000,
    bg: true  
  };

  // methods available for slideshow
  var methods = {
    init : function( options ) {
      var stage = this;
      var currentSlide = 0;
      var slides = [];
      var captions = [];
      var slide = $("<div class='slide'>");
      
      return this.each(function() {
        if ( options ) { 
          $.extend( settings, options );
        }
        // Populate arrays
        $(this).find("a").each(function(){
          var content = $(this).attr("href");
          slides.push(content);
          var text = $(this).attr("title");
          captions.push(text);
          // alert(text);
        });
        var numberOfSlides = slides.length;
        
        // Make sure to start with an empty stage
        stage.empty();
        
        // Add first slide
        stage.append(slide).ready(function(){
          if (settings.bg == true) {
            $(slide).css({opacity: 0.0, position: 'absolute', 'background-image': 'url('+slides[currentSlide]+')', 'z-index':currentSlide}).append("<caption>"+captions[currentSlide]+"</caption>").animate({opacity: 1.0}, 1000);
            currentSlide++;
          } else {
            var i = new Image();
            $(i).attr('src', slides[currentSlide]).load(function(){
              $(slide).append(this).append("<caption>"+captions[currentSlide]+"</caption>").css({opacity: 0.0, position: 'absolute', 'z-index':currentSlide}).animate({opacity: 1.0}, 1000);
              currentSlide++;
            });
          }
        });
        // Rotate through slides
        if (numberOfSlides > 1){
          setInterval( function(){
            if (currentSlide == numberOfSlides) {
              currentSlide = 0;
            }
            var slide = $("<div class='slide'>");
            stage.append(slide).ready(function(){

              if (settings.bg == true) {
                $(stage).find('.slide:last').css({
                  opacity: 0.0, 
                  position: 'absolute', 
                  'background-image': 'url('+slides[currentSlide]+')', 
                  'z-index':currentSlide
                  }).animate({opacity: 1.0}, 1000, function() {
                    $(stage).find('.slide:first').remove();
                });
                $(slide).append("<caption>"+captions[currentSlide]+"</caption>");
              } else {
                var i = new Image();
                $(i).attr('src', slides[currentSlide]);
                $(stage).find('.slide:last').css({
                  opacity: 0.0, 
                  position: 'absolute', 
                  'z-index':currentSlide
                }).append(i).append("<caption>"+captions[currentSlide]+"</caption>").animate({opacity: 1.0}, 3000, function() {
                  $(stage).find('.slide:first').remove();
                });
              }
            });
            currentSlide++;
          }, settings.duration);
          
        }
      
      });
    },
    transition : function() {},
    start : function() {},
    stop : function() {},
    update : function() {}
  };
  
  $.fn.slideshow = function(method) {
    // method calling logic
    if ( methods[method] ) {
      return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'This method: ' + method + ' does not exist on this plugin' );
    }
  };
  // transition definitions - only fade is defined here, transition pack defines the rest
  $.fn.slideshow.transitions = {
    fade: function($cont, $slides, opts) {
      $slides.not(':eq('+opts.currSlide+')').css('opacity',0);
      opts.before.push(function(curr,next,opts) {
        $.fn.cycle.commonReset(curr,next,opts);
        opts.cssBefore.opacity = 0;
      });
      opts.animIn    = { opacity: 1 };
      opts.animOut   = { opacity: 0 };
      opts.cssBefore = { top: 0, left: 0 };
    }
  };
})( jQuery );
