/* =========================================================

// jquery.innercycle.js
// Version: 1.0

// Author: Darren Krape
// Web: http://www.darrenkrape.com

// Based on the work of:
//   Matt Oakes: http://portfolio.gizone.co.uk/applications/slideshow/
//   Torsten Baldes: http://medienfreunde.com/lab/innerfade/

// ========================================================= */

(function($) {

$.fn.innercycle = function(options) {

  this.each(function(){
	
    var settings = {
      animationtype: 'fade',
      speed: 1000,
      timeout: 8000,
      type: 'sequence', //sequence, random
      status: 'counter',
      nav: 'on',
      containerheight: 'auto',
      runningclass: 'innercycle',
      playState: 'play'
    };

    if(options) $.extend(settings, options);
    var elements = $(this).find('ul').children();
  
    if (elements.length > 1) {

    //$(".enlarge_large_image").load(

      $(this).find('ul').css('position', 'relative');
      $(this).addClass(settings.runningclass);
      $(this).find('ul').css('height', settings.containerheight);
	  
      $(this).find('li').eq(0).css('display','block');
      
      $(this).append('<div class="nav"><a href="#" class="btn_previous">Previous</a><a href="#" class="btn_pause">Pause</a><a href="#" class="btn_next">Next</a></div>');
      $(this).find(".nav").append('<div class="status"></div>');

      for ( var i = 0; i < elements.length; i++ ) {
        $(elements[i]).css('z-index', String(elements.length-i)).css('position', 'absolute');
        $(elements[i]).hide();
		
        if(settings.status == 'numbers') {
          $(this).find(".status").append('<a href="">' + (i + 1) + '</a>');
          if(i == 0) { $(this).find(".status a").contains(i + 1).addClass('numActive'); }
        }
      };
      
      if ( settings.type == 'sequence' ) {
        settings.next = 1; settings.current = 0;
      } else if ( settings.type == 'random' ) {
        settings.current = 0;
        do { settings.next = Math.floor ( Math.random ( ) * ( elements.length ) ); } while ( settings.next == 0 )
      };

      setTimeout(function(){$.innercycle.next(elements, settings);}, settings.timeout);
      $(elements[0]).show();

	  if(settings.status == 'counter') { $(this).find('.status').append('1 of ' + elements.length); }
      
      if(settings.nav == 'off') {
        $(this).find(".nav").empty().addClass("nav_hidden");
      }

      if(settings.containerheight == 'auto' && !($.browser.msie)) {
        var marginTop = $(this).find('li').eq(0).height();
        $(this).find(".nav").css("margin-top", marginTop);
      } else if (!($.browser.msie)){
        var marginTop = parseFloat(settings.containerheight);
        $(this).find(".nav").css("margin-top", marginTop);
      }

    };
	
  //Number Buttons
    $(this).find('.status a').click(function() {

      settings.playState = "pause";
	  $(this).parent(".status").parent(".nav").find(".btn_pause").addClass("btn_play");
 
	  settings.next = $(this).html() - 1;
	  
	  $.innercycle.transition(settings, elements);
      return false;
    });

  //Pause Button	
    $(this).find('.btn_pause').click(function() {
      settings.playState = (settings.playState == "pause") ? "play" : "pause";
	  $(this).toggleClass("btn_play");
      return false;
    });

  //Next Button
    $(this).find('.btn_next').click(function() {

      settings.playState = "pause";
	  $(this).parent(".nav").find(".btn_pause").addClass("btn_play");
	  
      $.innercycle.transition(settings, elements);
      return false;
    });

  //Previous Button
    $(this).find('.btn_previous').click(function(next, current) {
      
      settings.playState = "pause";
	  $(this).parent(".nav").find(".btn_pause").addClass("btn_play");

      if ( settings.type == 'sequence' ) {            
        if ( settings.current == 0 ) { settings.next = elements.length - 1; } else { settings.next = settings.current - 1; };
      } else if ( settings.type == 'random' ) {
        do { settings.next = Math.floor ( Math.random ( ) * ( elements.length ) ); } while ( settings.next == settings.current )
      }
      
      $.innercycle.transition(settings, elements);
      return false;
    });

  });
};

$.innercycle = function() {}
  $.innercycle.next = function (elements, settings) {
    if ( settings.playState == 'play' ) { $.innercycle.transition(settings, elements); };
     setTimeout((function(){$.innercycle.next(elements, settings);}), settings.timeout);
  };

  $.innercycle.transition = function (settings, elements) {

    if ( settings.animationtype == 'slide' ) {
      $(elements[settings.current]).slideUp(settings.speed, $(elements[settings.next]).slideDown(settings.speed));
    } else if ( settings.animationtype == 'fade' ) {
      $(elements[settings.current]).fadeOut(settings.speed);
      $(elements[settings.next]).fadeIn(settings.speed);
    };

    if ( settings.type == 'sequence' ) {
      if ( ( settings.next + 1 ) < elements.length ) {
        settings.next = settings.next + 1;
        settings.current = settings.next - 1;
      } else {
        settings.next = 0;
        settings.current = elements.length - 1;
      };
    }  else if ( settings.type == 'random' ) {
      settings.current = settings.next;
      while ( settings.next == settings.current ) {
        settings.next = Math.floor ( Math.random ( ) * ( elements.length ) );
      };
    };

	var counterCurrent = settings.current + 1;

    // Resizes the gallery height based on existing content
    // Not MSIE since it handles the floats improperly
    if (!($.browser.msie)){
      var marginTop = $(elements[settings.next]).height();
      $(elements[settings.next]).parent().parent().find(".nav").css("margin-top", marginTop);
    }
    
    if ( settings.status == 'numbers' ) {
	  $(elements[0]).parent("ul").parent(".innercycle").find(".status a").removeClass();
	  $(elements[0]).parent("ul").parent(".innercycle").find(".status a").contains(counterCurrent).addClass('numActive');
	} else if ( settings.status == 'counter' ) {
	  $(elements[0]).parent("ul").parent(".innercycle").find(".status").empty().append(counterCurrent + " of " + elements.length);
	}
  };
})(jQuery);