/**
 * .simpleFader - jQuery Fader Plugin
 *
 * Version: 2.4.2
 * Updated: 2011-05-11
 *
 * Generates an automated image rotator from an element with child images, complete with crossfade animation.
 *
 * Copyright (c) 2011 digital_ice
 *
 * Licensed for use under the LGPL v3.0 Licence (LISCENCE.txt)
 *
 * Version History:
 * 0.9b   -  Basic rotation of elements child images.
 * 1.0    -  Added support for Microsoft Internet Explorer.
 * 1.1    -  Added in crossfade animation to smooth out transition.
 * 1.2    -  Minor Bug Fixing.
 * 1.2.1  -  Changed css resets to avoid z-index conficts
 *
 * 2.0b   -  Changed delay code to be per-slide
 * 2.0.1b -  Stability bug fixes
 * 2.1    -  Added optional label flag
 * 2.2    -  Added slide progression indicators
 * 2.3    -  Disabled text selection on slide controls
 * 2.4    -  Added ability to change slides manually
 * 2.4.1  -  Added code to return object at end of function, to allow chaining
 * 2.4.2  -  Stopped multiple clicks from triggering more than one transition at once
 **/

(function($){
  $.fn.simpleFader = function(showControls, showLabel) {
    var defaultdelay = 5000;
    var obj          = $(this);

    function skipToSlide() {
      clearTimeout(timeout);
      currentSlide = obj.children('img:visible');
      if (currentSlide.length > 1) { return false; }
      currentSlide.css('z-index', '-3');
      slideIndex   = $(this).attr('slideIndex');
      obj.children('img').each(function(index) {
        if (index == slideIndex) {
          $(this).css('z-index', '-5').show();
          return false;
        }
      });
      currentSlide.fadeOut('slow', function() {
        updateControls();
        updateLabel();
        createTimeout();
      });
    }

    function updateControls() {
      obj.children('img').each(function(index) {
        $('.simpleFader-slideControls div[slideIndex='+index+']').unbind('click');
        if($(this).is(':visible')) {
          $('.simpleFader-slideControls div[slideIndex='+index+']').removeClass('simpleFader-slideButtonOff').addClass('simpleFader-slideButtonOn');
        } else {
          $('.simpleFader-slideControls div[slideIndex='+index+']').removeClass('simpleFader-slideButtonOn').addClass('simpleFader-slideButtonOff').bind('click', skipToSlide);
        }
      });
    }

    function updateLabel() {
      var label = obj.children('img:visible').attr('alt');
      $('.simpleFader-slideLabel').html(label);
    }

    function cycleSlide() {
      currentSlide = obj.children('img:visible');
      currentSlide.css('z-index', '-3');
      if (currentSlide.next().attr('src')) {
        currentSlide.next().css('z-index', '-5').show();
      } else {
        obj.children('img:first').css('z-index', '-5').show();
      }
      currentSlide.fadeOut('slow', function() {
        updateControls();
        updateLabel();
        createTimeout();
      });
    }

    function createTimeout() {
      var delay = obj.children('img:visible').attr('slidedelay');
      if (!delay) { var delay = defaultdelay; }
      timeout = setTimeout(cycleSlide, delay);
    }

    if (obj.children('img').length > 1) {
      var timeout;
      obj.children('img:not(:first)').hide();
      createTimeout();
      if (showLabel) {
        obj.append('<div class="simpleFader-slideLabel"></div>');
        updateLabel();
      }
      if (showControls) {
        obj.append('<div class="simpleFader-slideControls"></div>').disableTextSelect();
        obj.children('img').each(function(index) {
          $('.simpleFader-slideControls').append('<div class="simpleFader-slideButtonOff" slideIndex="'+index+'">'+(index+1)+'</div>');
        });
        updateControls();
      }
    }
  return obj;
  };
})(jQuery);
