/*
 * jQuery Gallery Fader v1.0 (whatever)
 * ---
 * Copyright (C) 2010 MyNorth Media
 * For licensing information:
 *     http://www.mynorthmedia.com
 */

(function($) {
  $.fn.galleryFader = function(settings) {
    this.each(function() {
      var lib = {
        'autoPlay': true,
        'baseClass': 'fader',
        'clickDelay': 100,
        'fxDuration': 300,
        'resumeDuration': 5000,
        'showDuration': 2000,
        'html': {
          'control': '<li><a href="#%s%i">%i</a></li>'
        }
      };

      var config = {
        'backZIndex': 99,
        'frontZIndex': 999,
        'clickTimeout': null,
        'slideCount': 0,
        'slideIndex': 1,
        'slideInt': null,
        'slideTimeout': null
      }

      if (settings.baseClass) {
        lib.baseClass = settings.baseClass;
      }

      $.extend(lib, settings, config, {
        'classes': {
          'base': lib.baseClass,
          'controls': {
            'base': lib.baseClass + '_controls',
            'active': lib.baseClass + '_active'
          },
          'slide': {
            'active': lib.baseClass + '_active',
            'caption': lib.baseClass + '_caption',
            'image': lib.baseClass + '_image',
            'index': lib.baseClass + '_index',
            'start': lib.baseClass + '_start'
          }
        }
      });

      var fader    = $('.' + lib.classes.base);

      /* cheap trick: use onChange for a div! */
      fader.change(function() {
        lib.slideCount = fader.find('ul li').length;
      });

      lib.slideCount = fader.find('ul li').length;

      $start = fader.find('.' + lib.classes.slide.start);

      if ($start.get(0)) {
        $start.addClass(lib.classes.slide.active);
      } else {
        fader.find('li:eq(0)')
          .addClass(lib.classes.slide.start)
          .addClass(lib.classes.slide.active)
      }

      function fadeIt() {
        if (lib.slideIndex >= lib.slideCount) lib.slideIndex = 0;

        var old_slide = fader.find('ul:first li.' + lib.classes.slide.active);
        var new_slide = fader.find('ul:first li:eq(' + (lib.slideIndex) + ')');

        old_slide.css('z-index', lib.backZIndex).removeClass(lib.classes.slide.active);
        new_slide.css('z-index', lib.frontZIndex).addClass(lib.classes.slide.active).hide();

        new_slide.fadeIn(lib.fxDuration, function() {
          old_slide.hide();
        });

        lib.slideIndex++;
      };

      function resumeFx(timeoutOverride) {
        lib.slideTimeout = setTimeout(function() {
          lib.slideInt = setInterval(fadeIt, lib.showDuration);
        }, timeoutOverride || lib.resumeDuration);
      };

      function stopFx() {
        clearInterval(lib.slideInt);
        clearTimeout(lib.slideTimeout);
      };


      if (!lib.autoPlay || (lib.slideCount <= 1)) {
        stopFx();
      } else {
        resumeFx(1);
      }

      return this;
    });
  };

})(jQuery);


/*
 * Get this show started!
 * (keeping this here removed on extraneous HTTP requests)
 */

$(function() {

  $('#fader').galleryFader({
    'showDuration': 3200,
    'slideWidth': 965
  });

});
