Template:SUSTC-B1

From 2012.igem.org

(Difference between revisions)
Line 320: Line 320:
  * jQuery Cycle Plugin (with Transition Definitions)
  * jQuery Cycle Plugin (with Transition Definitions)
  */
  */
-
(function($, undefined) {
 
-
"use strict";
 
-
 
-
var ver = '2.9999.6';
 
-
 
-
// if $.support is not defined (pre jQuery 1.3) add what I need
 
-
if ($.support === undefined) {
 
-
  $.support = {
 
-
    opacity: !($.browser.msie)
 
-
  };
 
-
}
 
-
 
-
function debug(s) {
 
-
  if ($.fn.cycle.debug)
 
-
    log(s);
 
-
 
-
function log() {
 
-
  if (window.console) if (console.log)
 
-
    console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));
 
-
}
 
-
$.expr[':'].paused = function(el) {
 
-
  return el.cyclePause;
 
-
};
 
-
 
-
 
-
// the options arg can be...
 
-
//  a number  - indicates an immediate transition should occur to the given slide index
 
-
//  a string  - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc)
 
-
//  an object - properties to control the slideshow
 
-
//
 
-
// the arg2 arg can be...
 
-
//  the name of an fx (only used in conjunction with a numeric value for 'options')
 
-
//  the value true (only used in first arg == 'resume') and indicates
 
-
//  that the resume should occur immediately (not wait for next timeout)
 
-
 
-
$.fn.cycle = function(options, arg2) {
 
-
  var o = { s: this.selector, c: this.context };
 
-
 
-
  // in 1.3+ we can fix mistakes with the ready state
 
-
  if (this.length === 0) if (options != 'stop') {
 
-
    if (!$.isReady) if (o.s) {
 
-
      log('DOM not ready, queuing slideshow');
 
-
      $(function() {
 
-
        $(o.s,o.c).cycle(options,arg2);
 
-
      });
 
-
      return this;
 
-
    }
 
-
    // is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
 
-
    log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
 
-
    return this;
 
-
  }
 
-
 
-
  // iterate the matched nodeset
 
-
  return this.each(function() {
 
-
    var opts = handleArguments(this, options, arg2);
 
-
    if (opts === false)
 
-
      return;
 
-
 
-
    opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;
 
-
   
 
-
    // stop existing slideshow for this container (if there is one)
 
-
    if (this.cycleTimeout)
 
-
      clearTimeout(this.cycleTimeout);
 
-
    this.cycleTimeout = this.cyclePause = 0;
 
-
    this.cycleStop = 0; // issue #108
 
-
 
-
    var $cont = $(this);
 
-
    var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
 
-
    var els = $slides.get();
 
-
 
-
    if (els.length < 2) {
 
-
      log('terminating; too few slides: ' + els.length);
 
-
      return;
 
-
    }
 
-
 
-
    var opts2 = buildOptions($cont, $slides, els, opts, o);
 
-
    if (opts2 === false)
 
-
      return;
 
-
 
-
    var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards);
 
-
 
-
    // if it's an auto slideshow, kick it off
 
-
    if (startTime) {
 
-
      startTime += (opts2.delay || 0);
 
-
      if (startTime < 10)
 
-
        startTime = 10;
 
-
      debug('first timeout: ' + startTime);
 
-
      this.cycleTimeout = setTimeout(function(){go(els,opts2,0,!opts.backwards);}, startTime);
 
-
    }
 
-
  });
 
-
};
 
-
 
-
function triggerPause(cont, byHover, onPager) {
 
-
  var opts = $(cont).data('cycle.opts');
 
-
  var paused = !!cont.cyclePause;
 
-
  if (paused) if (opts.paused)
 
-
    opts.paused(cont, opts, byHover, onPager);
 
-
  else if (!paused) if (opts.resumed)
 
-
    opts.resumed(cont, opts, byHover, onPager);
 
-
}
 
-
 
-
// process the args that were passed to the plugin fn
 
-
function handleArguments(cont, options, arg2) {
 
-
  if (cont.cycleStop === undefined)
 
-
    cont.cycleStop = 0;
 
-
  if (options === undefined || options === null)
 
-
    options = {};
 
-
  if (options.constructor == String) {
 
-
    switch(options) {
 
-
    case 'destroy':
 
-
    case 'stop':
 
-
      var opts = $(cont).data('cycle.opts');
 
-
      if (!opts)
 
-
        return false;
 
-
      cont.cycleStop++; // callbacks look for change
 
-
      if (cont.cycleTimeout)
 
-
        clearTimeout(cont.cycleTimeout);
 
-
      cont.cycleTimeout = 0;
 
-
      if (opts.elements)
 
-
        $(opts.elements).stop();
 
-
      $(cont).removeData('cycle.opts');
 
-
      if (options == 'destroy')
 
-
        destroy(cont, opts);
 
-
      return false;
 
-
    case 'toggle':
 
-
      cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;
 
-
      checkInstantResume(cont.cyclePause, arg2, cont);
 
-
      triggerPause(cont);
 
-
      return false;
 
-
    case 'pause':
 
-
      cont.cyclePause = 1;
 
-
      triggerPause(cont);
 
-
      return false;
 
-
    case 'resume':
 
-
      cont.cyclePause = 0;
 
-
      checkInstantResume(false, arg2, cont);
 
-
      triggerPause(cont);
 
-
      return false;
 
-
    case 'prev':
 
-
    case 'next':
 
-
      opts = $(cont).data('cycle.opts');
 
-
      if (!opts) {
 
-
        log('options not found, "prev/next" ignored');
 
-
        return false;
 
-
      }
 
-
      $.fn.cycle[options](opts);
 
-
      return false;
 
-
    default:
 
-
      options = { fx: options };
 
-
    }
 
-
    return options;
 
-
  }
 
-
  else if (options.constructor == Number) {
 
-
    // go to the requested slide
 
-
    var num = options;
 
-
    options = $(cont).data('cycle.opts');
 
-
    if (!options) {
 
-
      log('options not found, can not advance slide');
 
-
      return false;
 
-
    }
 
-
    if (num < 0 || num >= options.elements.length) {
 
-
      log('invalid slide index: ' + num);
 
-
      return false;
 
-
    }
 
-
    options.nextSlide = num;
 
-
    if (cont.cycleTimeout) {
 
-
      clearTimeout(cont.cycleTimeout);
 
-
      cont.cycleTimeout = 0;
 
-
    }
 
-
    if (typeof arg2 == 'string')
 
-
      options.oneTimeFx = arg2;
 
-
    go(options.elements, options, 1, num >= options.currSlide);
 
-
    return false;
 
-
  }
 
-
  return options;
 
-
 
 
-
  function checkInstantResume(isPaused, arg2, cont) {
 
-
    if (!isPaused) if (arg2 === true) { // resume now!
 
-
      var options = $(cont).data('cycle.opts');
 
-
      if (!options) {
 
-
        log('options not found, can not resume');
 
-
        return false;
 
-
      }
 
-
      if (cont.cycleTimeout) {
 
-
        clearTimeout(cont.cycleTimeout);
 
-
        cont.cycleTimeout = 0;
 
-
      }
 
-
      go(options.elements, options, 1, !options.backwards);
 
-
    }
 
-
  }
 
-
}
 
-
 
-
function removeFilter(el, opts) {
 
-
  if (!$.support.opacity) if (opts.cleartype) if (el.style.filter) {
 
-
    try { el.style.removeAttribute('filter'); }
 
-
    catch(smother) {} // handle old opera versions
 
-
  }
 
-
}
 
-
 
-
// unbind event handlers
 
-
function destroy(cont, opts) {
 
-
  if (opts.next)
 
-
    $(opts.next).unbind(opts.prevNextEvent);
 
-
  if (opts.prev)
 
-
    $(opts.prev).unbind(opts.prevNextEvent);
 
-
 
 
-
  if (opts.pager || opts.pagerAnchorBuilder)
 
-
    $.each(opts.pagerAnchors || [], function() {
 
-
      this.unbind().remove();
 
-
    });
 
-
  opts.pagerAnchors = null;
 
-
  $(cont).unbind('mouseenter.cycle mouseleave.cycle');
 
-
  if (opts.destroy) // callback
 
-
    opts.destroy(opts);
 
-
}
 
-
 
-
// one-time initialization
 
-
function buildOptions($cont, $slides, els, options, o) {
 
-
  var startingSlideSpecified;
 
-
  // support metadata plugin (v1.0 and v2.0)
 
-
  var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
 
-
  var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
 
-
  if (meta)
 
-
    opts = $.extend(opts, meta);
 
-
  if (opts.autostop)
 
-
    opts.countdown = opts.autostopCount || els.length;
 
-
 
-
  var cont = $cont[0];
 
-
  $cont.data('cycle.opts', opts);
 
-
  opts.$cont = $cont;
 
-
  opts.stopCount = cont.cycleStop;
 
-
  opts.elements = els;
 
-
  opts.before = opts.before ? [opts.before] : [];
 
-
  opts.after = opts.after ? [opts.after] : [];
 
-
 
-
  // push some after callbacks
 
-
  if (!$.support.opacity) if (opts.cleartype)
 
-
    opts.after.push(function() { removeFilter(this, opts); });
 
-
  if (opts.continuous)
 
-
    opts.after.push(function() { go(els,opts,0,!opts.backwards); });
 
-
 
-
  saveOriginalOpts(opts);
 
-
 
-
  // clearType corrections
 
-
  if (!$.support.opacity) if (opts.cleartype) if (!opts.cleartypeNoBg)
 
-
    clearTypeFix($slides);
 
-
 
-
  // container requires non-static position so that slides can be position within
 
-
  if ($cont.css('position') == 'static')
 
-
    $cont.css('position', 'relative');
 
-
  if (opts.width)
 
-
    $cont.width(opts.width);
 
-
  if (opts.height) if (opts.height != 'auto')
 
-
    $cont.height(opts.height);
 
-
 
-
  if (opts.startingSlide !== undefined) {
 
-
    opts.startingSlide = parseInt(opts.startingSlide,10);
 
-
    if (opts.startingSlide >= els.length || opts.startSlide < 0)
 
-
      opts.startingSlide = 0; // catch bogus input
 
-
    else
 
-
      startingSlideSpecified = true;
 
-
  }
 
-
  else if (opts.backwards)
 
-
    opts.startingSlide = els.length - 1;
 
-
  else
 
-
    opts.startingSlide = 0;
 
-
 
-
  // if random, mix up the slide array
 
-
  if (opts.random) {
 
-
    opts.randomMap = [];
 
-
    for (var i = 0; i < els.length; i++)
 
-
      opts.randomMap.push(i);
 
-
    opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
 
-
    if (startingSlideSpecified) {
 
-
      // try to find the specified starting slide and if found set start slide index in the map accordingly
 
-
      for ( var cnt = 0; cnt < els.length; cnt++ ) {
 
-
        if ( opts.startingSlide == opts.randomMap[cnt] ) {
 
-
          opts.randomIndex = cnt;
 
-
        }
 
-
      }
 
-
    }
 
-
    else {
 
-
      opts.randomIndex = 1;
 
-
      opts.startingSlide = opts.randomMap[1];
 
-
    }
 
-
  }
 
-
  else if (opts.startingSlide >= els.length)
 
-
    opts.startingSlide = 0; // catch bogus input
 
-
  opts.currSlide = opts.startingSlide || 0;
 
-
  var first = opts.startingSlide;
 
-
 
-
  // set position and zIndex on all the slides
 
-
  $slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) {
 
-
    var z;
 
-
    if (opts.backwards)
 
-
      z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i;
 
-
    else
 
-
      z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;
 
-
    $(this).css('z-index', z);
 
-
  });
 
-
 
-
  // make sure first slide is visible
 
-
  $(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case
 
-
  removeFilter(els[first], opts);
 
-
 
-
  // stretch slides
 
-
  if (opts.fit) {
 
-
    if (!opts.aspect) {
 
-
          if (opts.width)
 
-
              $slides.width(opts.width);
 
-
          if (opts.height) if (opts.height != 'auto')
 
-
              $slides.height(opts.height);
 
-
    } else {
 
-
      $slides.each(function(){
 
-
        var $slide = $(this);
 
-
        var ratio = (opts.aspect === true) ? $slide.width()/$slide.height() : opts.aspect;
 
-
        if ( opts.width) if ($slide.width() != opts.width ) {
 
-
          $slide.width( opts.width );
 
-
          $slide.height( opts.width / ratio );
 
-
        }
 
-
 
-
        if ( opts.height) if ($slide.height() < opts.height ) {
 
-
          $slide.height( opts.height );
 
-
          $slide.width( opts.height * ratio );
 
-
        }
 
-
      });
 
-
    }
 
-
  }
 
-
 
-
  if (opts.center) if (((!opts.fit) || opts.aspect)) {
 
-
    $slides.each(function(){
 
-
      var $slide = $(this);
 
-
      $slide.css({
 
-
        "margin-left": opts.width ?
 
-
          ((opts.width - $slide.width()) / 2) + "px" :
 
-
          0,
 
-
        "margin-top": opts.height ?
 
-
          ((opts.height - $slide.height()) / 2) + "px" :
 
-
          0
 
-
      });
 
-
    });
 
-
  }
 
-
 
-
  if (opts.center) if (!opts.fit) if (!opts.slideResize) {
 
-
    $slides.each(function(){
 
-
      var $slide = $(this);
 
-
      $slide.css({
 
-
        "margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0,
 
-
        "margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0
 
-
      });
 
-
    });
 
-
  }
 
-
   
 
-
  // stretch container
 
-
  var reshape = !(!(opts.containerResize || opts.containerResizeHeight) || $cont.innerHeight());
 
-
  if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9
 
-
    var maxw = 0, maxh = 0;
 
-
    for(var j=0; j < els.length; j++) {
 
-
      var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight();
 
-
      if (!w) w = e.offsetWidth || e.width || $e.attr('width');
 
-
      if (!h) h = e.offsetHeight || e.height || $e.attr('height');
 
-
      maxw = w > maxw ? w : maxw;
 
-
      maxh = h > maxh ? h : maxh;
 
-
    }
 
-
    if (opts.containerResize) if (maxw > 0) if (maxh > 0)
 
-
      $cont.css({width:maxw+'px',height:maxh+'px'});
 
-
    if (opts.containerResizeHeight) if (maxh > 0)
 
-
      $cont.css({height:maxh+'px'});
 
-
  }
 
-
 
-
  var pauseFlag = false;  // https://github.com/malsup/cycle/issues/44
 
-
  if (opts.pause)
 
-
    $cont.bind('mouseenter.cycle', function(){
 
-
      pauseFlag = true;
 
-
      this.cyclePause++;
 
-
      triggerPause(cont, true);
 
-
    }).bind('mouseleave.cycle', function(){
 
-
        if (pauseFlag)
 
-
          this.cyclePause--;
 
-
        triggerPause(cont, true);
 
-
    });
 
-
 
-
  if (supportMultiTransitions(opts) === false)
 
-
    return false;
 
-
 
-
  // apparently a lot of people use image slideshows without height/width attributes on the images.
 
-
  // Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.
 
-
  var requeue = false;
 
-
  options.requeueAttempts = options.requeueAttempts || 0;
 
-
  $slides.each(function() {
 
-
    // try to get height/width of each slide
 
-
    var $el = $(this);
 
-
    this.cycleH = (!(!opts.fit || !opts.height)) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0);
 
-
    this.cycleW = (!(!opts.fit || !opts.width)) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0);
 
-
 
-
    if ( $el.is('img') ) {
 
-
      // sigh..  sniffing, hacking, shrugging...  this crappy hack tries to account for what browsers do when
 
-
      // an image is being downloaded and the markup did not include sizing info (height/width attributes);
 
-
      // there seems to be some "default" sizes used in this situation
 
-
      var loadingIE = !(!$.browser.msie || this.cycleW != 28 || this.cycleH != 30 || this.complete);
 
-
      var loadingFF = !(!$.browser.mozilla || this.cycleW != 34 || this.cycleH != 19 || this.complete);
 
-
      var loadingOp = !(!$.browser.opera || ((this.cycleW != 42 || this.cycleH != 19) || (this.cycleW != 37 || this.cycleH != 17)) || this.complete);
 
-
      var loadingOther = !(!(this.cycleH === 0) || !(this.cycleW === 0) || this.complete);
 
-
      // don't requeue for images that are still loading but have a valid size
 
-
      if (loadingIE || loadingFF || loadingOp || loadingOther) {
 
-
        if (o.s) if (opts.requeueOnImageNotLoaded) if (++options.requeueAttempts < 100) { // track retry count so we don't loop forever
 
-
          log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);
 
-
          setTimeout(function() {$(o.s,o.c).cycle(options);}, opts.requeueTimeout);
 
-
          requeue = true;
 
-
          return false; // break each loop
 
-
        }
 
-
        else {
 
-
          log('could not determine size of image: '+this.src, this.cycleW, this.cycleH);
 
-
        }
 
-
      }
 
-
    }
 
-
    return true;
 
-
  });
 
-
 
-
  if (requeue)
 
-
    return false;
 
-
 
-
  opts.cssBefore = opts.cssBefore || {};
 
-
  opts.cssAfter = opts.cssAfter || {};
 
-
  opts.cssFirst = opts.cssFirst || {};
 
-
  opts.animIn = opts.animIn || {};
 
-
  opts.animOut = opts.animOut || {};
 
-
 
-
  $slides.not(':eq('+first+')').css(opts.cssBefore);
 
-
  $($slides[first]).css(opts.cssFirst);
 
-
 
-
  if (opts.timeout) {
 
-
    opts.timeout = parseInt(opts.timeout,10);
 
-
    // ensure that timeout and speed settings are sane
 
-
    if (opts.speed.constructor == String)
 
-
      opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed,10);
 
-
    if (!opts.sync)
 
-
      opts.speed = opts.speed / 2;
 
-
   
 
-
    var buffer = opts.fx == 'none' ? 0 : opts.fx == 'shuffle' ? 500 : 250;
 
-
    while((opts.timeout - opts.speed) < buffer) // sanitize timeout
 
-
      opts.timeout += opts.speed;
 
-
  }
 
-
  if (opts.easing)
 
-
    opts.easeIn = opts.easeOut = opts.easing;
 
-
  if (!opts.speedIn)
 
-
    opts.speedIn = opts.speed;
 
-
  if (!opts.speedOut)
 
-
    opts.speedOut = opts.speed;
 
-
 
-
  opts.slideCount = els.length;
 
-
  opts.currSlide = opts.lastSlide = first;
 
-
  if (opts.random) {
 
-
    if (++opts.randomIndex == els.length)
 
-
      opts.randomIndex = 0;
 
-
    opts.nextSlide = opts.randomMap[opts.randomIndex];
 
-
  }
 
-
  else if (opts.backwards)
 
-
    opts.nextSlide = opts.startingSlide === 0 ? (els.length-1) : opts.startingSlide-1;
 
-
  else
 
-
    opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;
 
-
 
-
  // run transition init fn
 
-
  if (!opts.multiFx) {
 
-
    var init = $.fn.cycle.transitions[opts.fx];
 
-
    if ($.isFunction(init))
 
-
      init($cont, $slides, opts);
 
-
    else if (opts.fx != 'custom') if (!opts.multiFx) {
 
-
      log('unknown transition: ' + opts.fx,'; slideshow terminating');
 
-
      return false;
 
-
    }
 
-
  }
 
-
 
-
  // fire artificial events
 
-
  var e0 = $slides[first];
 
-
  if (!opts.skipInitializationCallbacks) {
 
-
    if (opts.before.length)
 
-
      opts.before[0].apply(e0, [e0, e0, opts, true]);
 
-
    if (opts.after.length)
 
-
      opts.after[0].apply(e0, [e0, e0, opts, true]);
 
-
  }
 
-
  if (opts.next)
 
-
    $(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,1);});
 
-
  if (opts.prev)
 
-
    $(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,0);});
 
-
  if (opts.pager || opts.pagerAnchorBuilder)
 
-
    buildPager(els,opts);
 
-
 
-
  exposeAddSlide(opts, els);
 
-
 
-
  return opts;
 
-
}
 
-
 
-
// save off original opts so we can restore after clearing state
 
-
function saveOriginalOpts(opts) {
 
-
  opts.original = { before: [], after: [] };
 
-
  opts.original.cssBefore = $.extend({}, opts.cssBefore);
 
-
  opts.original.cssAfter  = $.extend({}, opts.cssAfter);
 
-
  opts.original.animIn  = $.extend({}, opts.animIn);
 
-
  opts.original.animOut  = $.extend({}, opts.animOut);
 
-
  $.each(opts.before, function() { opts.original.before.push(this); });
 
-
  $.each(opts.after,  function() { opts.original.after.push(this); });
 
-
}
 
-
 
-
function supportMultiTransitions(opts) {
 
-
  var i, tx, txs = $.fn.cycle.transitions;
 
-
  // look for multiple effects
 
-
  if (opts.fx.indexOf(',') > 0) {
 
-
    opts.multiFx = true;
 
-
    opts.fxs = opts.fx.replace(/\s*/g,'').split(',');
 
-
    // discard any bogus effect names
 
-
    for (i=0; i < opts.fxs.length; i++) {
 
-
      var fx = opts.fxs[i];
 
-
      tx = txs[fx];
 
-
      if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
 
-
        log('discarding unknown transition: ',fx);
 
-
        opts.fxs.splice(i,1);
 
-
        i--;
 
-
      }
 
-
    }
 
-
    // if we have an empty list then we threw everything away!
 
-
    if (!opts.fxs.length) {
 
-
      log('No valid transitions named; slideshow terminating.');
 
-
      return false;
 
-
    }
 
-
  }
 
-
  else if (opts.fx == 'all') {  // auto-gen the list of transitions
 
-
    opts.multiFx = true;
 
-
    opts.fxs = [];
 
-
    for (var p in txs) {
 
-
      if (txs.hasOwnProperty(p)) {
 
-
        tx = txs[p];
 
-
        if (txs.hasOwnProperty(p)) if ($.isFunction(tx))
 
-
          opts.fxs.push(p);
 
-
      }
 
-
    }
 
-
  }
 
-
  if (opts.multiFx) if (opts.randomizeEffects) {
 
-
    // munge the fxs array to make effect selection random
 
-
    var r1 = Math.floor(Math.random() * 20) + 30;
 
-
    for (i = 0; i < r1; i++) {
 
-
      var r2 = Math.floor(Math.random() * opts.fxs.length);
 
-
      opts.fxs.push(opts.fxs.splice(r2,1)[0]);
 
-
    }
 
-
    debug('randomized fx sequence: ',opts.fxs);
 
-
  }
 
-
  return true;
 
-
}
 
-
 
-
// provide a mechanism for adding slides after the slideshow has started
 
-
function exposeAddSlide(opts, els) {
 
-
  opts.addSlide = function(newSlide, prepend) {
 
-
    var $s = $(newSlide), s = $s[0];
 
-
    if (!opts.autostopCount)
 
-
      opts.countdown++;
 
-
    els[prepend?'unshift':'push'](s);
 
-
    if (opts.els)
 
-
      opts.els[prepend?'unshift':'push'](s); // shuffle needs this
 
-
    opts.slideCount = els.length;
 
-
 
-
    // add the slide to the random map and resort
 
-
    if (opts.random) {
 
-
      opts.randomMap.push(opts.slideCount-1);
 
-
      opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
 
-
    }
 
-
 
-
    $s.css('position','absolute');
 
-
    $s[prepend?'prependTo':'appendTo'](opts.$cont);
 
-
 
-
    if (prepend) {
 
-
      opts.currSlide++;
 
-
      opts.nextSlide++;
 
-
    }
 
-
 
-
    if (!$.support.opacity) if (opts.cleartype) if (!opts.cleartypeNoBg)
 
-
      clearTypeFix($s);
 
-
 
-
    if (opts.fit) if (opts.width)
 
-
      $s.width(opts.width);
 
-
    if (opts.fit) if (opts.height) if (opts.height != 'auto')
 
-
      $s.height(opts.height);
 
-
    s.cycleH = (!(!opts.fit || !opts.height)) ? opts.height : $s.height();
 
-
    s.cycleW = (!(!opts.fit || !opts.width)) ? opts.width : $s.width();
 
-
 
-
    $s.css(opts.cssBefore);
 
-
 
-
    if (opts.pager || opts.pagerAnchorBuilder)
 
-
      $.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);
 
-
 
-
    if ($.isFunction(opts.onAddSlide))
 
-
      opts.onAddSlide($s);
 
-
    else
 
-
      $s.hide(); // default behavior
 
-
  };
 
-
}
 
-
 
-
// reset internal state; we do this on every pass in order to support multiple effects
 
-
$.fn.cycle.resetState = function(opts, fx) {
 
-
  fx = fx || opts.fx;
 
-
  opts.before = []; opts.after = [];
 
-
  opts.cssBefore = $.extend({}, opts.original.cssBefore);
 
-
  opts.cssAfter  = $.extend({}, opts.original.cssAfter);
 
-
  opts.animIn = $.extend({}, opts.original.animIn);
 
-
  opts.animOut  = $.extend({}, opts.original.animOut);
 
-
  opts.fxFn = null;
 
-
  $.each(opts.original.before, function() { opts.before.push(this); });
 
-
  $.each(opts.original.after,  function() { opts.after.push(this); });
 
-
 
-
  // re-init
 
-
  var init = $.fn.cycle.transitions[fx];
 
-
  if ($.isFunction(init))
 
-
    init(opts.$cont, $(opts.elements), opts);
 
-
};
 
-
 
-
// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt
 
-
function go(els, opts, manual, fwd) {
 
-
  var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide];
 
-
 
-
  // opts.busy is true if we're in the middle of an animation
 
-
  if (manual) if (opts.busy) if (opts.manualTrump) {
 
-
    // let manual transitions requests trump active ones
 
-
    debug('manualTrump in go(), stopping active transition');
 
-
    $(els).stop(true,true);
 
-
    opts.busy = 0;
 
-
    clearTimeout(p.cycleTimeout);
 
-
  }
 
-
 
-
  // don't begin another timeout-based transition if there is one active
 
-
  if (opts.busy) {
 
-
    debug('transition active, ignoring new tx request');
 
-
    return;
 
-
  }
 
-
 
-
 
-
  // stop cycling if we have an outstanding stop request
 
-
  if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0) if (!manual)
 
-
    return;
 
-
 
-
  // check to see if we should stop cycling based on autostop options
 
-
  if (!manual) if (!p.cyclePause) if (!opts.bounce) if (((opts.autostop) if ((--opts.countdown <= 0) ||
 
-
    !(!opts.nowrap || opts.random || !(opts.nextSlide < opts.currSlide))) {
 
-
    if (opts.end)
 
-
      opts.end(opts);
 
-
    return;
 
-
  }
 
-
 
-
  // if slideshow is paused, only transition on a manual trigger
 
-
  var changed = false;
 
-
  if ((manual || !p.cyclePause)) if ((opts.nextSlide != opts.currSlide)) {
 
-
    changed = true;
 
-
    var fx = opts.fx;
 
-
    // keep trying to get the slide size if we don't have it yet
 
-
    curr.cycleH = curr.cycleH || $(curr).height();
 
-
    curr.cycleW = curr.cycleW || $(curr).width();
 
-
    next.cycleH = next.cycleH || $(next).height();
 
-
    next.cycleW = next.cycleW || $(next).width();
 
-
 
-
    // support multiple transition types
 
-
    if (opts.multiFx) {
 
-
      if (fwd) if ((opts.lastFx === undefined || ++opts.lastFx >= opts.fxs.length))
 
-
        opts.lastFx = 0;
 
-
      else if (!fwd) if ((opts.lastFx === undefined || --opts.lastFx < 0))
 
-
        opts.lastFx = opts.fxs.length - 1;
 
-
      fx = opts.fxs[opts.lastFx];
 
-
    }
 
-
 
-
    // one-time fx overrides apply to:  $('div').cycle(3,'zoom');
 
-
    if (opts.oneTimeFx) {
 
-
      fx = opts.oneTimeFx;
 
-
      opts.oneTimeFx = null;
 
-
    }
 
-
 
-
    $.fn.cycle.resetState(opts, fx);
 
-
 
-
    // run the before callbacks
 
-
    if (opts.before.length)
 
-
      $.each(opts.before, function(i,o) {
 
-
        if (p.cycleStop != opts.stopCount) return;
 
-
        o.apply(next, [curr, next, opts, fwd]);
 
-
      });
 
-
 
-
    // stage the after callacks
 
-
    var after = function() {
 
-
      opts.busy = 0;
 
-
      $.each(opts.after, function(i,o) {
 
-
        if (p.cycleStop != opts.stopCount) return;
 
-
        o.apply(next, [curr, next, opts, fwd]);
 
-
      });
 
-
      if (!p.cycleStop) {
 
-
        // queue next transition
 
-
        queueNext();
 
-
      }
 
-
    };
 
-
 
-
    debug('tx firing('+fx+'); currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide);
 
-
   
 
-
    // get ready to perform the transition
 
-
    opts.busy = 1;
 
-
    if (opts.fxFn) // fx function provided?
 
-
      opts.fxFn(curr, next, opts, after, fwd, !(!manual || !opts.fastOnEvent));
 
-
    else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
 
-
      $.fn.cycle[opts.fx](curr, next, opts, after, fwd, !(!manual || !opts.fastOnEvent));
 
-
    else
 
-
      $.fn.cycle.custom(curr, next, opts, after, fwd, !(!manual || !opts.fastOnEvent));
 
-
  }
 
-
  else {
 
-
    queueNext();
 
-
  }
 
-
 
-
  if (changed || opts.nextSlide == opts.currSlide) {
 
-
    // calculate the next slide
 
-
    var roll;
 
-
    opts.lastSlide = opts.currSlide;
 
-
    if (opts.random) {
 
-
      opts.currSlide = opts.nextSlide;
 
-
      if (++opts.randomIndex == els.length) {
 
-
        opts.randomIndex = 0;
 
-
        opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
 
-
      }
 
-
      opts.nextSlide = opts.randomMap[opts.randomIndex];
 
-
      if (opts.nextSlide == opts.currSlide)
 
-
        opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;
 
-
    }
 
-
    else if (opts.backwards) {
 
-
      roll = (opts.nextSlide - 1) < 0;
 
-
      if (roll) if (opts.bounce) {
 
-
        opts.backwards = !opts.backwards;
 
-
        opts.nextSlide = 1;
 
-
        opts.currSlide = 0;
 
-
      }
 
-
      else {
 
-
        opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1;
 
-
        opts.currSlide = roll ? 0 : opts.nextSlide+1;
 
-
      }
 
-
    }
 
-
    else { // sequence
 
-
      roll = (opts.nextSlide + 1) == els.length;
 
-
      if (roll) if (opts.bounce) {
 
-
        opts.backwards = !opts.backwards;
 
-
        opts.nextSlide = els.length-2;
 
-
        opts.currSlide = els.length-1;
 
-
      }
 
-
      else {
 
-
        opts.nextSlide = roll ? 0 : opts.nextSlide+1;
 
-
        opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
 
-
      }
 
-
    }
 
-
  }
 
-
  if (changed) if (opts.pager)
 
-
    opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);
 
-
 
 
-
  function queueNext() {
 
-
    // stage the next transition
 
-
    var ms = 0, timeout = opts.timeout;
 
-
    if (opts.timeout) if (!opts.continuous) {
 
-
      ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);
 
-
        if (opts.fx == 'shuffle')
 
-
            ms -= opts.speedOut;
 
-
      }
 
-
    else if (opts.continuous) if (p.cyclePause) // continuous shows work off an after callback, not this timer logic
 
-
      ms = 10;
 
-
    if (ms > 0)
 
-
      p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, !opts.backwards); }, ms);
 
-
  }
 
-
}
 
-
 
-
// invoked after transition
 
-
$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {
 
-
  $(pager).each(function() {
 
-
      $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);
 
-
  });
 
-
};
 
-
 
-
// calculate timeout value for current transition
 
-
function getTimeout(curr, next, opts, fwd) {
 
-
  if (opts.timeoutFn) {
 
-
    // call user provided calc fn
 
-
    var t = opts.timeoutFn.call(curr,curr,next,opts,fwd);
 
-
    while (!(!(opts.fx != 'none') || !((t - opts.speed) < 250))) // sanitize timeout
 
-
      t += opts.speed;
 
-
    debug('calculated timeout: ' + t + '; speed: ' + opts.speed);
 
-
    if (t !== false)
 
-
      return t;
 
-
  }
 
-
  return opts.timeout;
 
-
}
 
-
 
-
// expose next/prev function, caller must pass in state
 
-
$.fn.cycle.next = function(opts) { advance(opts,1); };
 
-
$.fn.cycle.prev = function(opts) { advance(opts,0);};
 
-
 
-
// advance slide forward or back
 
-
function advance(opts, moveForward) {
 
-
  var val = moveForward ? 1 : -1;
 
-
  var els = opts.elements;
 
-
  var p = opts.$cont[0], timeout = p.cycleTimeout;
 
-
  if (timeout) {
 
-
    clearTimeout(timeout);
 
-
    p.cycleTimeout = 0;
 
-
  }
 
-
  if (opts.random) if (val < 0) {
 
-
    // move back to the previously display slide
 
-
    opts.randomIndex--;
 
-
    if (--opts.randomIndex == -2)
 
-
      opts.randomIndex = els.length-2;
 
-
    else if (opts.randomIndex == -1)
 
-
      opts.randomIndex = els.length-1;
 
-
    opts.nextSlide = opts.randomMap[opts.randomIndex];
 
-
  }
 
-
  else if (opts.random) {
 
-
    opts.nextSlide = opts.randomMap[opts.randomIndex];
 
-
  }
 
-
  else {
 
-
    opts.nextSlide = opts.currSlide + val;
 
-
    if (opts.nextSlide < 0) {
 
-
      if (opts.nowrap) return false;
 
-
      opts.nextSlide = els.length - 1;
 
-
    }
 
-
    else if (opts.nextSlide >= els.length) {
 
-
      if (opts.nowrap) return false;
 
-
      opts.nextSlide = 0;
 
-
    }
 
-
  }
 
-
 
-
  var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated
 
-
  if ($.isFunction(cb))
 
-
    cb(val > 0, opts.nextSlide, els[opts.nextSlide]);
 
-
  go(els, opts, 1, moveForward);
 
-
  return false;
 
-
}
 
-
 
-
function buildPager(els, opts) {
 
-
  var $p = $(opts.pager);
 
-
  $.each(els, function(i,o) {
 
-
    $.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
 
-
  });
 
-
  opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);
 
-
}
 
-
 
-
$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
 
-
  var a;
 
-
  if ($.isFunction(opts.pagerAnchorBuilder)) {
 
-
    a = opts.pagerAnchorBuilder(i,el);
 
-
    debug('pagerAnchorBuilder('+i+', el) returned: ' + a);
 
-
  }
 
-
  else
 
-
    a = '<a href="#">'+(i+1)+'</a>';
 
-
   
 
-
  if (!a)
 
-
    return;
 
-
  var $a = $(a);
 
-
  // don't reparent if anchor is in the dom
 
-
  if ($a.parents('body').length === 0) {
 
-
    var arr = [];
 
-
    if ($p.length > 1) {
 
-
      $p.each(function() {
 
-
        var $clone = $a.clone(true);
 
-
        $(this).append($clone);
 
-
        arr.push($clone[0]);
 
-
      });
 
-
      $a = $(arr);
 
-
    }
 
-
    else {
 
-
      $a.appendTo($p);
 
-
    }
 
-
  }
 
-
 
-
  opts.pagerAnchors =  opts.pagerAnchors || [];
 
-
  opts.pagerAnchors.push($a);
 
-
 
 
-
  var pagerFn = function(e) {
 
-
    e.preventDefault();
 
-
    opts.nextSlide = i;
 
-
    var p = opts.$cont[0], timeout = p.cycleTimeout;
 
-
    if (timeout) {
 
-
      clearTimeout(timeout);
 
-
      p.cycleTimeout = 0;
 
-
    }
 
-
    var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated
 
-
    if ($.isFunction(cb))
 
-
      cb(opts.nextSlide, els[opts.nextSlide]);
 
-
    go(els,opts,1,opts.currSlide < i); // trigger the trans
 
-
//    return false; // <== allow bubble
 
-
  };
 
-
 
 
-
  if ( /mouseenter|mouseover/i.test(opts.pagerEvent) ) {
 
-
    $a.hover(pagerFn, function(){/* no-op */} );
 
-
  }
 
-
  else {
 
-
    $a.bind(opts.pagerEvent, pagerFn);
 
-
  }
 
-
 
 
-
  if ( ! /^click/.test(opts.pagerEvent)) if (!opts.allowPagerClickBubble)
 
-
    $a.bind('click.cycle', function(){return false;}); // suppress click
 
-
 
 
-
  var cont = opts.$cont[0];
 
-
  var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
 
-
  if (opts.pauseOnPagerHover) {
 
-
    $a.hover(
 
-
      function() {
 
-
        pauseFlag = true;
 
-
        cont.cyclePause++;
 
-
        triggerPause(cont,true,true);
 
-
      }, function() {
 
-
        if (pauseFlag)
 
-
          cont.cyclePause--;
 
-
        triggerPause(cont,true,true);
 
-
      }
 
-
    );
 
-
  }
 
-
};
 
-
 
-
// helper fn to calculate the number of slides between the current and the next
 
-
$.fn.cycle.hopsFromLast = function(opts, fwd) {
 
-
  var hops, l = opts.lastSlide, c = opts.currSlide;
 
-
  if (fwd)
 
-
    hops = c > l ? c - l : opts.slideCount - l;
 
-
  else
 
-
    hops = c < l ? l - c : l + opts.slideCount - c;
 
-
  return hops;
 
-
};
 
-
 
-
// fix clearType problems in ie6 by setting an explicit bg color
 
-
// (otherwise text slides look horrible during a fade transition)
 
-
function clearTypeFix($slides) {
 
-
  debug('applying clearType background-color hack');
 
-
  function hex(s) {
 
-
    s = parseInt(s,10).toString(16);
 
-
    return s.length < 2 ? '0'+s : s;
 
-
  }
 
-
  function getBg(e) {
 
-
    for ( ; !(!e || !(e.nodeName.toLowerCase() != 'html')); e = e.parentNode) {
 
-
      var v = $.css(e,'background-color');
 
-
      if (v) if (v.indexOf('rgb') >= 0 ) {
 
-
        var rgb = v.match(/\d+/g);
 
-
        return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
 
-
      }
 
-
      if (v) if (v != 'transparent')
 
-
        return v;
 
-
    }
 
-
    return '#ffffff';
 
-
  }
 
-
  $slides.each(function() { $(this).css('background-color', getBg(this)); });
 
-
}
 
-
 
-
// reset common props before the next transition
 
-
$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {
 
-
  $(opts.elements).not(curr).hide();
 
-
  if (typeof opts.cssBefore.opacity == 'undefined')
 
-
    opts.cssBefore.opacity = 1;
 
-
  opts.cssBefore.display = 'block';
 
-
  if (opts.slideResize) if (w !== false) if (next.cycleW > 0)
 
-
    opts.cssBefore.width = next.cycleW;
 
-
  if (opts.slideResize) if (h !== false) if (next.cycleH > 0)
 
-
    opts.cssBefore.height = next.cycleH;
 
-
  opts.cssAfter = opts.cssAfter || {};
 
-
  opts.cssAfter.display = 'none';
 
-
  $(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0));
 
-
  $(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1));
 
-
};
 
-
 
-
// the actual fn for effecting a transition
 
-
$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) {
 
-
  var $l = $(curr), $n = $(next);
 
-
  var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut;
 
-
  $n.css(opts.cssBefore);
 
-
  if (speedOverride) {
 
-
    if (typeof speedOverride == 'number')
 
-
      speedIn = speedOut = speedOverride;
 
-
    else
 
-
      speedIn = speedOut = 1;
 
-
    easeIn = easeOut = null;
 
-
  }
 
-
  var fn = function() {
 
-
    $n.animate(opts.animIn, speedIn, easeIn, function() {
 
-
      cb();
 
-
    });
 
-
  };
 
-
  $l.animate(opts.animOut, speedOut, easeOut, function() {
 
-
    $l.css(opts.cssAfter);
 
-
    if (!opts.sync)
 
-
      fn();
 
-
  });
 
-
  if (opts.sync) fn();
 
-
};
 
-
 
-
// transition definitions - only fade is defined here, transition pack defines the rest
 
-
$.fn.cycle.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 };
 
-
  }
 
-
};
 
-
 
-
$.fn.cycle.ver = function() { return ver; };
 
-
 
-
// override these globally if you like (they are all optional)
 
-
$.fn.cycle.defaults = {
 
-
    activePagerClass: 'activeSlide', // class name used for the active pager link
 
-
    after:            null,    // transition callback (scope set to element that was shown):  function(currSlideElement, nextSlideElement, options, forwardFlag)
 
-
    allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling
 
-
    animIn:          null,    // properties that define how the slide animates in
 
-
    animOut:          null,    // properties that define how the slide animates out
 
-
    aspect:          false,    // preserve aspect ratio during fit resizing, cropping if necessary (must be used with fit option)
 
-
    autostop:        0,        // true to end slideshow after X transitions (where X == slide count)
 
-
    autostopCount:    0,        // number of transitions (optionally used with autostop to define X)
 
-
    backwards:        false,    // true to start slideshow at last slide and move backwards through the stack
 
-
    before:          null,    // transition callback (scope set to element to be shown):    function(currSlideElement, nextSlideElement, options, forwardFlag)
 
-
    center:          null,    // set to true to have cycle add top/left margin to each slide (use with width and height options)
 
-
    cleartype:        !$.support.opacity,  // true if clearType corrections should be applied (for IE)
 
-
    cleartypeNoBg:    false,    // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
 
-
    containerResize:  1,        // resize container to fit largest slide
 
-
    containerResizeHeight:  0,  // resize containers height to fit the largest slide but leave the width dynamic
 
-
    continuous:      0,        // true to start next transition immediately after current one completes
 
-
    cssAfter:        null,    // properties that defined the state of the slide after transitioning out
 
-
    cssBefore:        null,    // properties that define the initial state of the slide before transitioning in
 
-
    delay:            0,        // additional delay (in ms) for first transition (hint: can be negative)
 
-
    easeIn:          null,    // easing for "in" transition
 
-
    easeOut:          null,    // easing for "out" transition
 
-
    easing:          null,    // easing method for both in and out transitions
 
-
    end:              null,    // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
 
-
    fastOnEvent:      0,        // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
 
-
    fit:              0,        // force slides to fit container
 
-
    fx:              'fade',  // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle')
 
-
    fxFn:            null,    // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
 
-
    height:          'auto',  // container height (if the 'fit' option is true, the slides will be set to this height as well)
 
-
    manualTrump:      true,    // causes manual transition to stop an active transition instead of being ignored
 
-
    metaAttr:        'cycle',  // data- attribute that holds the option data for the slideshow
 
-
    next:            null,    // element, jQuery object, or jQuery selector string for the element to use as event trigger for next slide
 
-
    nowrap:          0,        // true to prevent slideshow from wrapping
 
-
    onPagerEvent:    null,    // callback fn for pager events: function(zeroBasedSlideIndex, slideElement)
 
-
    onPrevNextEvent:  null,    // callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement)
 
-
    pager:            null,    // element, jQuery object, or jQuery selector string for the element to use as pager container
 
-
    pagerAnchorBuilder: null,  // callback fn for building anchor links:  function(index, DOMelement)
 
-
    pagerEvent:      'click.cycle', // name of event which drives the pager navigation
 
-
    pause:            0,        // true to enable "pause on hover"
 
-
    pauseOnPagerHover: 0,      // true to pause when hovering over pager link
 
-
    prev:            null,    // element, jQuery object, or jQuery selector string for the element to use as event trigger for previous slide
 
-
    prevNextEvent:    'click.cycle',// event which drives the manual transition to the previous or next slide
 
-
    random:          0,        // true for random, false for sequence (not applicable to shuffle fx)
 
-
    randomizeEffects: 1,        // valid when multiple effects are used; true to make the effect sequence random
 
-
    requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
 
-
    requeueTimeout:  250,      // ms delay for requeue
 
-
    rev:              0,        // causes animations to transition in reverse (for effects that support it such as scrollHorz/scrollVert/shuffle)
 
-
    shuffle:          null,    // coords for shuffle animation, ex: { top:15, left: 200 }
 
-
    skipInitializationCallbacks: false, // set to true to disable the first before/after callback that occurs prior to any transition
 
-
    slideExpr:        null,    // expression for selecting slides (if something other than all children is required)
 
-
    slideResize:      1,        // force slide width/height to fixed size before every transition
 
-
    speed:            1000,    // speed of the transition (any valid fx speed value)
 
-
    speedIn:          null,    // speed of the 'in' transition
 
-
    speedOut:        null,    // speed of the 'out' transition
 
-
    startingSlide:    undefined,// zero-based index of the first slide to be displayed
 
-
    sync:            1,        // true if in/out transitions should occur simultaneously
 
-
    timeout:          4000,    // milliseconds between slide transitions (0 to disable auto advance)
 
-
    timeoutFn:        null,    // callback for determining per-slide timeout value:  function(currSlideElement, nextSlideElement, options, forwardFlag)
 
-
    updateActivePagerLink: null,// callback fn invoked to update the active pager link (adds/removes activePagerClass style)
 
-
    width:            null      // container width (if the 'fit' option is true, the slides will be set to this width as well)
 
-
};
 
-
 
-
})(jQuery);
 
-
 
-
 
-
/*!
 
-
* jQuery Cycle Plugin Transition Definitions
 
-
* This script is a plugin for the jQuery Cycle Plugin
 
-
* Examples and documentation at: http://malsup.com/jquery/cycle/
 
-
* Copyright (c) 2007-2010 M. Alsup
 
-
* Version:  2.73
 
-
* Dual licensed under the MIT and GPL licenses:
 
-
* http://www.opensource.org/licenses/mit-license.php
 
-
* http://www.gnu.org/licenses/gpl.html
 
-
*/
 
-
(function($) {
 
-
"use strict";
 
-
 
-
//
 
-
// These functions define slide initialization and properties for the named
 
-
// transitions. To save file size feel free to remove any of these that you
 
-
// don't need.
 
-
//
 
-
$.fn.cycle.transitions.none = function($cont, $slides, opts) {
 
-
  opts.fxFn = function(curr,next,opts,after){
 
-
    $(next).show();
 
-
    $(curr).hide();
 
-
    after();
 
-
  };
 
-
};
 
-
 
-
// not a cross-fade, fadeout only fades out the top slide
 
-
$.fn.cycle.transitions.fadeout = function($cont, $slides, opts) {
 
-
  $slides.not(':eq('+opts.currSlide+')').css({ display: 'block', 'opacity': 1 });
 
-
  opts.before.push(function(curr,next,opts,w,h,rev) {
 
-
    $(curr).css('zIndex',opts.slideCount + (rev !== true ? 1 : 0));
 
-
    $(next).css('zIndex',opts.slideCount + (rev !== true ? 0 : 1));
 
-
  });
 
-
  opts.animIn.opacity = 1;
 
-
  opts.animOut.opacity = 0;
 
-
  opts.cssBefore.opacity = 1;
 
-
  opts.cssBefore.display = 'block';
 
-
  opts.cssAfter.zIndex = 0;
 
-
};
 
-
 
-
// scrollUp/Down/Left/Right
 
-
$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
 
-
  $cont.css('overflow','hidden');
 
-
  opts.before.push($.fn.cycle.commonReset);
 
-
  var h = $cont.height();
 
-
  opts.cssBefore.top = h;
 
-
  opts.cssBefore.left = 0;
 
-
  opts.cssFirst.top = 0;
 
-
  opts.animIn.top = 0;
 
-
  opts.animOut.top = -h;
 
-
};
 
-
$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
 
-
  $cont.css('overflow','hidden');
 
-
  opts.before.push($.fn.cycle.commonReset);
 
-
  var h = $cont.height();
 
-
  opts.cssFirst.top = 0;
 
-
  opts.cssBefore.top = -h;
 
-
  opts.cssBefore.left = 0;
 
-
  opts.animIn.top = 0;
 
-
  opts.animOut.top = h;
 
-
};
 
-
$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
 
-
  $cont.css('overflow','hidden');
 
-
  opts.before.push($.fn.cycle.commonReset);
 
-
  var w = $cont.width();
 
-
  opts.cssFirst.left = 0;
 
-
  opts.cssBefore.left = w;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.animIn.left = 0;
 
-
  opts.animOut.left = 0-w;
 
-
};
 
-
$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
 
-
  $cont.css('overflow','hidden');
 
-
  opts.before.push($.fn.cycle.commonReset);
 
-
  var w = $cont.width();
 
-
  opts.cssFirst.left = 0;
 
-
  opts.cssBefore.left = -w;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.animIn.left = 0;
 
-
  opts.animOut.left = w;
 
-
};
 
-
$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
 
-
  $cont.css('overflow','hidden').width();
 
-
  opts.before.push(function(curr, next, opts, fwd) {
 
-
    if (opts.rev)
 
-
      fwd = !fwd;
 
-
    $.fn.cycle.commonReset(curr,next,opts);
 
-
    opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW);
 
-
    opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
 
-
  });
 
-
  opts.cssFirst.left = 0;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.animIn.left = 0;
 
-
  opts.animOut.top = 0;
 
-
};
 
-
$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
 
-
  $cont.css('overflow','hidden');
 
-
  opts.before.push(function(curr, next, opts, fwd) {
 
-
    if (opts.rev)
 
-
      fwd = !fwd;
 
-
    $.fn.cycle.commonReset(curr,next,opts);
 
-
    opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1);
 
-
    opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
 
-
  });
 
-
  opts.cssFirst.top = 0;
 
-
  opts.cssBefore.left = 0;
 
-
  opts.animIn.top = 0;
 
-
  opts.animOut.left = 0;
 
-
};
 
-
 
-
// slideX/slideY
 
-
$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $(opts.elements).not(curr).hide();
 
-
    $.fn.cycle.commonReset(curr,next,opts,false,true);
 
-
    opts.animIn.width = next.cycleW;
 
-
  });
 
-
  opts.cssBefore.left = 0;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.cssBefore.width = 0;
 
-
  opts.animIn.width = 'show';
 
-
  opts.animOut.width = 0;
 
-
};
 
-
$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $(opts.elements).not(curr).hide();
 
-
    $.fn.cycle.commonReset(curr,next,opts,true,false);
 
-
    opts.animIn.height = next.cycleH;
 
-
  });
 
-
  opts.cssBefore.left = 0;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.cssBefore.height = 0;
 
-
  opts.animIn.height = 'show';
 
-
  opts.animOut.height = 0;
 
-
};
 
-
 
-
// shuffle
 
-
$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
 
-
  var i, w = $cont.css('overflow', 'visible').width();
 
-
  $slides.css({left: 0, top: 0});
 
-
  opts.before.push(function(curr,next,opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,true,true,true);
 
-
  });
 
-
  // only adjust speed once!
 
-
  if (!opts.speedAdjusted) {
 
-
    opts.speed = opts.speed / 2; // shuffle has 2 transitions
 
-
    opts.speedAdjusted = true;
 
-
  }
 
-
  opts.random = 0;
 
-
  opts.shuffle = opts.shuffle || {left:-w, top:15};
 
-
  opts.els = [];
 
-
  for (i=0; i < $slides.length; i++)
 
-
    opts.els.push($slides[i]);
 
-
 
-
  for (i=0; i < opts.currSlide; i++)
 
-
    opts.els.push(opts.els.shift());
 
-
 
-
  // custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
 
-
  opts.fxFn = function(curr, next, opts, cb, fwd) {
 
-
    if (opts.rev)
 
-
      fwd = !fwd;
 
-
    var $el = fwd ? $(curr) : $(next);
 
-
    $(next).css(opts.cssBefore);
 
-
    var count = opts.slideCount;
 
-
    $el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
 
-
      var hops = $.fn.cycle.hopsFromLast(opts, fwd);
 
-
      for (var k=0; k < hops; k++) {
 
-
        if (fwd)
 
-
          opts.els.push(opts.els.shift());
 
-
        else
 
-
          opts.els.unshift(opts.els.pop());
 
-
      }
 
-
      if (fwd) {
 
-
        for (var i=0, len=opts.els.length; i < len; i++)
 
-
          $(opts.els[i]).css('z-index', len-i+count);
 
-
      }
 
-
      else {
 
-
        var z = $(curr).css('z-index');
 
-
        $el.css('z-index', parseInt(z,10)+1+count);
 
-
      }
 
-
      $el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
 
-
        $(fwd ? this : curr).hide();
 
-
        if (cb) cb();
 
-
      });
 
-
    });
 
-
  };
 
-
  $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
 
-
};
 
-
 
-
// turnUp/Down/Left/Right
 
-
$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,true,false);
 
-
    opts.cssBefore.top = next.cycleH;
 
-
    opts.animIn.height = next.cycleH;
 
-
    opts.animOut.width = next.cycleW;
 
-
  });
 
-
  opts.cssFirst.top = 0;
 
-
  opts.cssBefore.left = 0;
 
-
  opts.cssBefore.height = 0;
 
-
  opts.animIn.top = 0;
 
-
  opts.animOut.height = 0;
 
-
};
 
-
$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,true,false);
 
-
    opts.animIn.height = next.cycleH;
 
-
    opts.animOut.top  = curr.cycleH;
 
-
  });
 
-
  opts.cssFirst.top = 0;
 
-
  opts.cssBefore.left = 0;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.cssBefore.height = 0;
 
-
  opts.animOut.height = 0;
 
-
};
 
-
$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,false,true);
 
-
    opts.cssBefore.left = next.cycleW;
 
-
    opts.animIn.width = next.cycleW;
 
-
  });
 
-
  opts.cssBefore.top = 0;
 
-
  opts.cssBefore.width = 0;
 
-
  opts.animIn.left = 0;
 
-
  opts.animOut.width = 0;
 
-
};
 
-
$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,false,true);
 
-
    opts.animIn.width = next.cycleW;
 
-
    opts.animOut.left = curr.cycleW;
 
-
  });
 
-
  $.extend(opts.cssBefore, { top: 0, left: 0, width: 0 });
 
-
  opts.animIn.left = 0;
 
-
  opts.animOut.width = 0;
 
-
};
 
-
 
-
// zoom
 
-
$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,false,false,true);
 
-
    opts.cssBefore.top = next.cycleH/2;
 
-
    opts.cssBefore.left = next.cycleW/2;
 
-
    $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
 
-
    $.extend(opts.animOut, { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 });
 
-
  });
 
-
  opts.cssFirst.top = 0;
 
-
  opts.cssFirst.left = 0;
 
-
  opts.cssBefore.width = 0;
 
-
  opts.cssBefore.height = 0;
 
-
};
 
-
 
-
// fadeZoom
 
-
$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,false,false);
 
-
    opts.cssBefore.left = next.cycleW/2;
 
-
    opts.cssBefore.top = next.cycleH/2;
 
-
    $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
 
-
  });
 
-
  opts.cssBefore.width = 0;
 
-
  opts.cssBefore.height = 0;
 
-
  opts.animOut.opacity = 0;
 
-
};
 
-
 
-
// blindX
 
-
$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
 
-
  var w = $cont.css('overflow','hidden').width();
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts);
 
-
    opts.animIn.width = next.cycleW;
 
-
    opts.animOut.left  = curr.cycleW;
 
-
  });
 
-
  opts.cssBefore.left = w;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.animIn.left = 0;
 
-
  opts.animOut.left = w;
 
-
};
 
-
// blindY
 
-
$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
 
-
  var h = $cont.css('overflow','hidden').height();
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts);
 
-
    opts.animIn.height = next.cycleH;
 
-
    opts.animOut.top  = curr.cycleH;
 
-
  });
 
-
  opts.cssBefore.top = h;
 
-
  opts.cssBefore.left = 0;
 
-
  opts.animIn.top = 0;
 
-
  opts.animOut.top = h;
 
-
};
 
-
// blindZ
 
-
$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
 
-
  var h = $cont.css('overflow','hidden').height();
 
-
  var w = $cont.width();
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts);
 
-
    opts.animIn.height = next.cycleH;
 
-
    opts.animOut.top  = curr.cycleH;
 
-
  });
 
-
  opts.cssBefore.top = h;
 
-
  opts.cssBefore.left = w;
 
-
  opts.animIn.top = 0;
 
-
  opts.animIn.left = 0;
 
-
  opts.animOut.top = h;
 
-
  opts.animOut.left = w;
 
-
};
 
-
 
-
// growX - grow horizontally from centered 0 width
 
-
$.fn.cycle.transitions.growX = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,false,true);
 
-
    opts.cssBefore.left = this.cycleW/2;
 
-
    opts.animIn.left = 0;
 
-
    opts.animIn.width = this.cycleW;
 
-
    opts.animOut.left = 0;
 
-
  });
 
-
  opts.cssBefore.top = 0;
 
-
  opts.cssBefore.width = 0;
 
-
};
 
-
// growY - grow vertically from centered 0 height
 
-
$.fn.cycle.transitions.growY = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,true,false);
 
-
    opts.cssBefore.top = this.cycleH/2;
 
-
    opts.animIn.top = 0;
 
-
    opts.animIn.height = this.cycleH;
 
-
    opts.animOut.top = 0;
 
-
  });
 
-
  opts.cssBefore.height = 0;
 
-
  opts.cssBefore.left = 0;
 
-
};
 
-
 
-
// curtainX - squeeze in both edges horizontally
 
-
$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,false,true,true);
 
-
    opts.cssBefore.left = next.cycleW/2;
 
-
    opts.animIn.left = 0;
 
-
    opts.animIn.width = this.cycleW;
 
-
    opts.animOut.left = curr.cycleW/2;
 
-
    opts.animOut.width = 0;
 
-
  });
 
-
  opts.cssBefore.top = 0;
 
-
  opts.cssBefore.width = 0;
 
-
};
 
-
// curtainY - squeeze in both edges vertically
 
-
$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,true,false,true);
 
-
    opts.cssBefore.top = next.cycleH/2;
 
-
    opts.animIn.top = 0;
 
-
    opts.animIn.height = next.cycleH;
 
-
    opts.animOut.top = curr.cycleH/2;
 
-
    opts.animOut.height = 0;
 
-
  });
 
-
  opts.cssBefore.height = 0;
 
-
  opts.cssBefore.left = 0;
 
-
};
 
-
 
-
// cover - curr slide covered by next slide
 
-
$.fn.cycle.transitions.cover = function($cont, $slides, opts) {
 
-
  var d = opts.direction || 'left';
 
-
  var w = $cont.css('overflow','hidden').width();
 
-
  var h = $cont.height();
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts);
 
-
    if (d == 'right')
 
-
      opts.cssBefore.left = -w;
 
-
    else if (d == 'up')
 
-
      opts.cssBefore.top = h;
 
-
    else if (d == 'down')
 
-
      opts.cssBefore.top = -h;
 
-
    else
 
-
      opts.cssBefore.left = w;
 
-
  });
 
-
  opts.animIn.left = 0;
 
-
  opts.animIn.top = 0;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.cssBefore.left = 0;
 
-
};
 
-
 
-
// uncover - curr slide moves off next slide
 
-
$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
 
-
  var d = opts.direction || 'left';
 
-
  var w = $cont.css('overflow','hidden').width();
 
-
  var h = $cont.height();
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,true,true,true);
 
-
    if (d == 'right')
 
-
      opts.animOut.left = w;
 
-
    else if (d == 'up')
 
-
      opts.animOut.top = -h;
 
-
    else if (d == 'down')
 
-
      opts.animOut.top = h;
 
-
    else
 
-
      opts.animOut.left = -w;
 
-
  });
 
-
  opts.animIn.left = 0;
 
-
  opts.animIn.top = 0;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.cssBefore.left = 0;
 
-
};
 
-
 
-
// toss - move top slide and fade away
 
-
$.fn.cycle.transitions.toss = function($cont, $slides, opts) {
 
-
  var w = $cont.css('overflow','visible').width();
 
-
  var h = $cont.height();
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    $.fn.cycle.commonReset(curr,next,opts,true,true,true);
 
-
    // provide default toss settings if animOut not provided
 
-
    if (!opts.animOut.left) if (!opts.animOut.top)
 
-
      $.extend(opts.animOut, { left: w*2, top: -h/2, opacity: 0 });
 
-
    else
 
-
      opts.animOut.opacity = 0;
 
-
  });
 
-
  opts.cssBefore.left = 0;
 
-
  opts.cssBefore.top = 0;
 
-
  opts.animIn.left = 0;
 
-
};
 
-
 
-
// wipe - clip animation
 
-
$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
 
-
  var w = $cont.css('overflow','hidden').width();
 
-
  var h = $cont.height();
 
-
  opts.cssBefore = opts.cssBefore || {};
 
-
  var clip;
 
-
  if (opts.clip) {
 
-
    if (/l2r/.test(opts.clip))
 
-
      clip = 'rect(0px 0px '+h+'px 0px)';
 
-
    else if (/r2l/.test(opts.clip))
 
-
      clip = 'rect(0px '+w+'px '+h+'px '+w+'px)';
 
-
    else if (/t2b/.test(opts.clip))
 
-
      clip = 'rect(0px '+w+'px 0px 0px)';
 
-
    else if (/b2t/.test(opts.clip))
 
-
      clip = 'rect('+h+'px '+w+'px '+h+'px 0px)';
 
-
    else if (/zoom/.test(opts.clip)) {
 
-
      var top = parseInt(h/2,10);
 
-
      var left = parseInt(w/2,10);
 
-
      clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)';
 
-
    }
 
-
  }
 
-
 
-
  opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';
 
-
 
-
  var d = opts.cssBefore.clip.match(/(\d+)/g);
 
-
  var t = parseInt(d[0],10), r = parseInt(d[1],10), b = parseInt(d[2],10), l = parseInt(d[3],10);
 
-
 
-
  opts.before.push(function(curr, next, opts) {
 
-
    if (curr == next) return;
 
-
    var $curr = $(curr), $next = $(next);
 
-
    $.fn.cycle.commonReset(curr,next,opts,true,true,false);
 
-
    opts.cssAfter.display = 'block';
 
-
 
-
    var step = 1, count = parseInt((opts.speedIn / 13),10) - 1;
 
-
    (function f() {
 
-
      var tt = t ? t - parseInt(step * (t/count),10) : 0;
 
-
      var ll = l ? l - parseInt(step * (l/count),10) : 0;
 
-
      var bb = b < h ? b + parseInt(step * ((h-b)/count || 1),10) : h;
 
-
      var rr = r < w ? r + parseInt(step * ((w-r)/count || 1),10) : w;
 
-
      $next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
 
-
      (step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
 
-
    })();
 
-
  });
 
-
  $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
 
-
  opts.animIn    = { left: 0 };
 
-
  opts.animOut  = { left: 0 };
 
-
};
 
-
 
-
})(jQuery);
 
</script>
</script>
<script type="text/javascript">
<script type="text/javascript">
/* jCarousel */
/* jCarousel */
-
/*!
 
-
* jCarousel - Riding carousels with jQuery
 
-
*  http://sorgalla.com/jcarousel/
 
-
*
 
-
* Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
 
-
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 
-
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 
-
*
 
-
* Built on top of the jQuery library
 
-
*  http://jquery.com
 
-
*
 
-
* Inspired by the "Carousel Component" by Bill Scott
 
-
*  http://billwscott.com/carousel/
 
-
*/
 
-
 
-
/*global window, jQuery */
 
-
(function($) {
 
-
    // Default configuration properties.
 
-
    var defaults = {
 
-
        vertical: false,
 
-
        rtl: false,
 
-
        start: 1,
 
-
        offset: 1,
 
-
        size: null,
 
-
        scroll: 3,
 
-
        visible: null,
 
-
        animation: 'normal',
 
-
        easing: 'swing',
 
-
        auto: 0,
 
-
        wrap: null,
 
-
        initCallback: null,
 
-
        setupCallback: null,
 
-
        reloadCallback: null,
 
-
        itemLoadCallback: null,
 
-
        itemFirstInCallback: null,
 
-
        itemFirstOutCallback: null,
 
-
        itemLastInCallback: null,
 
-
        itemLastOutCallback: null,
 
-
        itemVisibleInCallback: null,
 
-
        itemVisibleOutCallback: null,
 
-
        animationStepCallback: null,
 
-
        buttonNextHTML: '<div></div>',
 
-
        buttonPrevHTML: '<div></div>',
 
-
        buttonNextEvent: 'click',
 
-
        buttonPrevEvent: 'click',
 
-
        buttonNextCallback: null,
 
-
        buttonPrevCallback: null,
 
-
        itemFallbackDimension: null
 
-
    }, windowLoaded = false;
 
-
 
-
    $(window).bind('load.jcarousel', function() { windowLoaded = true; });
 
-
 
-
    /**
 
-
    * The jCarousel object.
 
-
    *
 
-
    * @constructor
 
-
    * @class jcarousel
 
-
    * @param e {HTMLElement} The element to create the carousel for.
 
-
    * @param o {Object} A set of key/value pairs to set as configuration properties.
 
-
    * @cat Plugins/jCarousel
 
-
    */
 
-
    $.jcarousel = function(e, o) {
 
-
        this.options    = $.extend({}, defaults, o || {});
 
-
 
-
        this.locked          = false;
 
-
        this.autoStopped    = false;
 
-
 
-
        this.container      = null;
 
-
        this.clip            = null;
 
-
        this.list            = null;
 
-
        this.buttonNext      = null;
 
-
        this.buttonPrev      = null;
 
-
        this.buttonNextState = null;
 
-
        this.buttonPrevState = null;
 
-
 
-
        // Only set if not explicitly passed as option
 
-
        if (!o || o.rtl === undefined) {
 
-
            this.options.rtl = ($(e).attr('dir') || $('html').attr('dir') || '').toLowerCase() == 'rtl';
 
-
        }
 
-
 
-
        this.wh = !this.options.vertical ? 'width' : 'height';
 
-
        this.lt = !this.options.vertical ? (this.options.rtl ? 'right' : 'left') : 'top';
 
-
 
-
        // Extract skin class
 
-
        var skin = '', split = e.className.split(' ');
 
-
 
-
        for (var i = 0; i < split.length; i++) {
 
-
            if (split[i].indexOf('jcarousel-skin') != -1) {
 
-
                $(e).removeClass(split[i]);
 
-
                skin = split[i];
 
-
                break;
 
-
            }
 
-
        }
 
-
 
-
        if (e.nodeName.toUpperCase() == 'UL' || e.nodeName.toUpperCase() == 'OL') {
 
-
            this.list      = $(e);
 
-
            this.clip      = this.list.parents('.jcarousel-clip');
 
-
            this.container = this.list.parents('.jcarousel-container');
 
-
        } else {
 
-
            this.container = $(e);
 
-
            this.list      = this.container.find('ul,ol').eq(0);
 
-
            this.clip      = this.container.find('.jcarousel-clip');
 
-
        }
 
-
 
-
        if (this.clip.size() === 0) {
 
-
            this.clip = this.list.wrap('<div></div>').parent();
 
-
        }
 
-
 
-
        if (this.container.size() === 0) {
 
-
            this.container = this.clip.wrap('<div></div>').parent();
 
-
        }
 
-
 
-
        if (skin !== '') if (this.container.parent()[0].className.indexOf('jcarousel-skin') == -1) {
 
-
            this.container.wrap('<div class=" '+ skin + '"></div>');
 
-
        }
 
-
 
-
        this.buttonPrev = $('.jcarousel-prev', this.container);
 
-
 
-
        if (this.buttonPrev.size() === 0) if (this.options.buttonPrevHTML !== null) {
 
-
            this.buttonPrev = $(this.options.buttonPrevHTML).appendTo(this.container);
 
-
        }
 
-
 
-
        this.buttonPrev.addClass(this.className('jcarousel-prev'));
 
-
 
-
        this.buttonNext = $('.jcarousel-next', this.container);
 
-
 
-
        if (this.buttonNext.size() === 0) if (this.options.buttonNextHTML !== null) {
 
-
            this.buttonNext = $(this.options.buttonNextHTML).appendTo(this.container);
 
-
        }
 
-
 
-
        this.buttonNext.addClass(this.className('jcarousel-next'));
 
-
 
-
        this.clip.addClass(this.className('jcarousel-clip')).css({
 
-
            position: 'relative'
 
-
        });
 
-
 
-
        this.list.addClass(this.className('jcarousel-list')).css({
 
-
            overflow: 'hidden',
 
-
            position: 'relative',
 
-
            top: 0,
 
-
            margin: 0,
 
-
            padding: 0
 
-
        }).css((this.options.rtl ? 'right' : 'left'), 0);
 
-
 
-
        this.container.addClass(this.className('jcarousel-container')).css({
 
-
            position: 'relative'
 
-
        });
 
-
 
-
        if (!this.options.vertical) if (this.options.rtl) {
 
-
            this.container.addClass('jcarousel-direction-rtl').attr('dir', 'rtl');
 
-
        }
 
-
 
-
        var di = this.options.visible !== null ? Math.ceil(this.clipping() / this.options.visible) : null;
 
-
        var li = this.list.children('li');
 
-
 
-
        var self = this;
 
-
 
-
        if (li.size() > 0) {
 
-
            var wh = 0, j = this.options.offset;
 
-
            li.each(function() {
 
-
                self.format(this, j++);
 
-
                wh += self.dimension(this, di);
 
-
            });
 
-
 
-
            this.list.css(this.wh, (wh + 100) + 'px');
 
-
 
-
            // Only set if not explicitly passed as option
 
-
            if (!o || o.size === undefined) {
 
-
                this.options.size = li.size();
 
-
            }
 
-
        }
 
-
 
-
        // For whatever reason, .show() does not work in Safari...
 
-
        this.container.css('display', 'block');
 
-
        this.buttonNext.css('display', 'block');
 
-
        this.buttonPrev.css('display', 'block');
 
-
 
-
        this.funcNext  = function() { self.next(); };
 
-
        this.funcPrev  = function() { self.prev(); };
 
-
        this.funcResize = function() {
 
-
            if (self.resizeTimer) {
 
-
                clearTimeout(self.resizeTimer);
 
-
            }
 
-
 
-
            self.resizeTimer = setTimeout(function() {
 
-
                self.reload();
 
-
            }, 100);
 
-
        };
 
-
 
-
        if (this.options.initCallback !== null) {
 
-
            this.options.initCallback(this, 'init');
 
-
        }
 
-
 
-
        if (!windowLoaded) if ($.browser.safari) {
 
-
            this.buttons(false, false);
 
-
            $(window).bind('load.jcarousel', function() { self.setup(); });
 
-
        } else {
 
-
            this.setup();
 
-
        }
 
-
    };
 
-
 
-
    // Create shortcut for internal use
 
-
    var $jc = $.jcarousel;
 
-
 
-
    $jc.fn = $jc.prototype = {
 
-
        jcarousel: '0.2.8'
 
-
    };
 
-
 
-
    $jc.fn.extend = $jc.extend = $.extend;
 
-
 
-
    $jc.fn.extend({
 
-
        /**
 
-
        * Setups the carousel.
 
-
        *
 
-
        * @method setup
 
-
        * @return undefined
 
-
        */
 
-
        setup: function() {
 
-
            this.first      = null;
 
-
            this.last        = null;
 
-
            this.prevFirst  = null;
 
-
            this.prevLast    = null;
 
-
            this.animating  = false;
 
-
            this.timer      = null;
 
-
            this.resizeTimer = null;
 
-
            this.tail        = null;
 
-
            this.inTail      = false;
 
-
 
-
            if (this.locked) {
 
-
                return;
 
-
            }
 
-
 
-
            this.list.css(this.lt, this.pos(this.options.offset) + 'px');
 
-
            var p = this.pos(this.options.start, true);
 
-
            this.prevFirst = this.prevLast = null;
 
-
            this.animate(p, false);
 
-
 
-
            $(window).unbind('resize.jcarousel', this.funcResize).bind('resize.jcarousel', this.funcResize);
 
-
 
-
            if (this.options.setupCallback !== null) {
 
-
                this.options.setupCallback(this);
 
-
            }
 
-
        },
 
-
 
-
        /**
 
-
        * Clears the list and resets the carousel.
 
-
        *
 
-
        * @method reset
 
-
        * @return undefined
 
-
        */
 
-
        reset: function() {
 
-
            this.list.empty();
 
-
 
-
            this.list.css(this.lt, '0px');
 
-
            this.list.css(this.wh, '10px');
 
-
 
-
            if (this.options.initCallback !== null) {
 
-
                this.options.initCallback(this, 'reset');
 
-
            }
 
-
 
-
            this.setup();
 
-
        },
 
-
 
-
        /**
 
-
        * Reloads the carousel and adjusts positions.
 
-
        *
 
-
        * @method reload
 
-
        * @return undefined
 
-
        */
 
-
        reload: function() {
 
-
            if (this.tail !== null) if (this.inTail) {
 
-
                this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) + this.tail);
 
-
            }
 
-
 
-
            this.tail  = null;
 
-
            this.inTail = false;
 
-
 
-
            if (this.options.reloadCallback !== null) {
 
-
                this.options.reloadCallback(this);
 
-
            }
 
-
 
-
            if (this.options.visible !== null) {
 
-
                var self = this;
 
-
                var di = Math.ceil(this.clipping() / this.options.visible), wh = 0, lt = 0;
 
-
                this.list.children('li').each(function(i) {
 
-
                    wh += self.dimension(this, di);
 
-
                    if (i + 1 < self.first) {
 
-
                        lt = wh;
 
-
                    }
 
-
                });
 
-
 
-
                this.list.css(this.wh, wh + 'px');
 
-
                this.list.css(this.lt, -lt + 'px');
 
-
            }
 
-
 
-
            this.scroll(this.first, false);
 
-
        },
 
-
 
-
        /**
 
-
        * Locks the carousel.
 
-
        *
 
-
        * @method lock
 
-
        * @return undefined
 
-
        */
 
-
        lock: function() {
 
-
            this.locked = true;
 
-
            this.buttons();
 
-
        },
 
-
 
-
        /**
 
-
        * Unlocks the carousel.
 
-
        *
 
-
        * @method unlock
 
-
        * @return undefined
 
-
        */
 
-
        unlock: function() {
 
-
            this.locked = false;
 
-
            this.buttons();
 
-
        },
 
-
 
-
        /**
 
-
        * Sets the size of the carousel.
 
-
        *
 
-
        * @method size
 
-
        * @return undefined
 
-
        * @param s {Number} The size of the carousel.
 
-
        */
 
-
        size: function(s) {
 
-
            if (s !== undefined) {
 
-
                this.options.size = s;
 
-
                if (!this.locked) {
 
-
                    this.buttons();
 
-
                }
 
-
            }
 
-
 
-
            return this.options.size;
 
-
        },
 
-
 
-
        /**
 
-
        * Checks whether a list element exists for the given index (or index range).
 
-
        *
 
-
        * @method get
 
-
        * @return bool
 
-
        * @param i {Number} The index of the (first) element.
 
-
        * @param i2 {Number} The index of the last element.
 
-
        */
 
-
        has: function(i, i2) {
 
-
            if (i2 === undefined || !i2) {
 
-
                i2 = i;
 
-
            }
 
-
 
-
            if (this.options.size !== null) if (i2 > this.options.size) {
 
-
                i2 = this.options.size;
 
-
            }
 
-
 
-
            for (var j = i; j <= i2; j++) {
 
-
                var e = this.get(j);
 
-
                if (!e.length || e.hasClass('jcarousel-item-placeholder')) {
 
-
                    return false;
 
-
                }
 
-
            }
 
-
 
-
            return true;
 
-
        },
 
-
 
-
        /**
 
-
        * Returns a jQuery object with list element for the given index.
 
-
        *
 
-
        * @method get
 
-
        * @return jQuery
 
-
        * @param i {Number} The index of the element.
 
-
        */
 
-
        get: function(i) {
 
-
            return $('>.jcarousel-item-' + i, this.list);
 
-
        },
 
-
 
-
        /**
 
-
        * Adds an element for the given index to the list.
 
-
        * If the element already exists, it updates the inner html.
 
-
        * Returns the created element as jQuery object.
 
-
        *
 
-
        * @method add
 
-
        * @return jQuery
 
-
        * @param i {Number} The index of the element.
 
-
        * @param s {String} The innerHTML of the element.
 
-
        */
 
-
        add: function(i, s) {
 
-
            var e = this.get(i), old = 0, n = $(s);
 
-
 
-
            if (e.length === 0) {
 
-
                var c, j = $jc.intval(i);
 
-
                e = this.create(i);
 
-
                while (true) {
 
-
                    c = this.get(--j);
 
-
                    if (j <= 0 || c.length) {
 
-
                        if (j <= 0) {
 
-
                            this.list.prepend(e);
 
-
                        } else {
 
-
                            c.after(e);
 
-
                        }
 
-
                        break;
 
-
                    }
 
-
                }
 
-
            } else {
 
-
                old = this.dimension(e);
 
-
            }
 
-
 
-
            if (n.get(0).nodeName.toUpperCase() == 'LI') {
 
-
                e.replaceWith(n);
 
-
                e = n;
 
-
            } else {
 
-
                e.empty().append(s);
 
-
            }
 
-
 
-
            this.format(e.removeClass(this.className('jcarousel-item-placeholder')), i);
 
-
 
-
            var di = this.options.visible !== null ? Math.ceil(this.clipping() / this.options.visible) : null;
 
-
            var wh = this.dimension(e, di) - old;
 
-
 
-
            if (i > 0) if (i < this.first) {
 
-
                this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) - wh + 'px');
 
-
            }
 
-
 
-
            this.list.css(this.wh, $jc.intval(this.list.css(this.wh)) + wh + 'px');
 
-
 
-
            return e;
 
-
        },
 
-
 
-
        /**
 
-
        * Removes an element for the given index from the list.
 
-
        *
 
-
        * @method remove
 
-
        * @return undefined
 
-
        * @param i {Number} The index of the element.
 
-
        */
 
-
        remove: function(i) {
 
-
            var e = this.get(i);
 
-
 
-
            // Check if item exists and is not currently visible
 
-
            if (!e.length || !(i < this.first || i > this.last)) {
 
-
                return;
 
-
            }
 
-
 
-
            var d = this.dimension(e);
 
-
 
-
            if (i < this.first) {
 
-
                this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) + d + 'px');
 
-
            }
 
-
 
-
            e.remove();
 
-
 
-
            this.list.css(this.wh, $jc.intval(this.list.css(this.wh)) - d + 'px');
 
-
        },
 
-
 
-
        /**
 
-
        * Moves the carousel forwards.
 
-
        *
 
-
        * @method next
 
-
        * @return undefined
 
-
        */
 
-
        next: function() {
 
-
            if (this.tail !== null) if (!this.inTail) {
 
-
                this.scrollTail(false);
 
-
            } else {
 
-
                this.scroll((!(this.options.wrap == 'both' || this.options.wrap == 'last') || !(this.options.size !== null) || !(this.last == this.options.size)) ? 1 : this.first + this.options.scroll);
 
-
            }
 
-
        },
 
-
 
-
        /**
 
-
        * Moves the carousel backwards.
 
-
        *
 
-
        * @method prev
 
-
        * @return undefined
 
-
        */
 
-
        prev: function() {
 
-
            if (this.tail !== null) if (this.inTail) {
 
-
                this.scrollTail(true);
 
-
            } else {
 
-
                this.scroll((!(this.options.wrap == 'both' || this.options.wrap == 'first') || !(this.options.size !== null) || !(this.first == 1)) ? this.options.size : this.first - this.options.scroll);
 
-
            }
 
-
        },
 
-
 
-
        /**
 
-
        * Scrolls the tail of the carousel.
 
-
        *
 
-
        * @method scrollTail
 
-
        * @return undefined
 
-
        * @param b {Boolean} Whether scroll the tail back or forward.
 
-
        */
 
-
        scrollTail: function(b) {
 
-
            if (this.locked || this.animating || !this.tail) {
 
-
                return;
 
-
            }
 
-
 
-
            this.pauseAuto();
 
-
 
-
            var pos  = $jc.intval(this.list.css(this.lt));
 
-
 
-
            pos = !b ? pos - this.tail : pos + this.tail;
 
-
            this.inTail = !b;
 
-
 
-
            // Save for callbacks
 
-
            this.prevFirst = this.first;
 
-
            this.prevLast  = this.last;
 
-
 
-
            this.animate(pos);
 
-
        },
 
-
 
-
        /**
 
-
        * Scrolls the carousel to a certain position.
 
-
        *
 
-
        * @method scroll
 
-
        * @return undefined
 
-
        * @param i {Number} The index of the element to scoll to.
 
-
        * @param a {Boolean} Flag indicating whether to perform animation.
 
-
        */
 
-
        scroll: function(i, a) {
 
-
            if (this.locked || this.animating) {
 
-
                return;
 
-
            }
 
-
 
-
            this.pauseAuto();
 
-
            this.animate(this.pos(i), a);
 
-
        },
 
-
 
-
        /**
 
-
        * Prepares the carousel and return the position for a certian index.
 
-
        *
 
-
        * @method pos
 
-
        * @return {Number}
 
-
        * @param i {Number} The index of the element to scoll to.
 
-
        * @param fv {Boolean} Whether to force last item to be visible.
 
-
        */
 
-
        pos: function(i, fv) {
 
-
            var pos  = $jc.intval(this.list.css(this.lt));
 
-
 
-
            if (this.locked || this.animating) {
 
-
                return pos;
 
-
            }
 
-
 
-
            if (this.options.wrap != 'circular') {
 
-
                i = i < 1 ? 1 : ((!(this.options.size) || !(i > this.options.size)) ? this.options.size : i);
 
-
            }
 
-
 
-
            var back = this.first > i;
 
-
 
-
            // Create placeholders, new list width/height
 
-
            // and new list position
 
-
            var f = (!(this.options.wrap != 'circular') || !(this.first <= 1)) ? 1 : this.first;
 
-
            var c = back ? this.get(f) : this.get(this.last);
 
-
            var j = back ? f : f - 1;
 
-
            var e = null, l = 0, p = false, d = 0, g;
 
-
 
-
            while (back ? --j >= i : ++j < i) {
 
-
                e = this.get(j);
 
-
                p = !e.length;
 
-
                if (e.length === 0) {
 
-
                    e = this.create(j).addClass(this.className('jcarousel-item-placeholder'));
 
-
                    c[back ? 'before' : 'after' ](e);
 
-
 
-
                    if (this.first !== null) if (this.options.wrap == 'circular') if (this.options.size !== null) if ((j <= 0 || j > this.options.size)) {
 
-
                        g = this.get(this.index(j));
 
-
                        if (g.length) {
 
-
                            e = this.add(j, g.clone(true));
 
-
                        }
 
-
                    }
 
-
                }
 
-
 
-
                c = e;
 
-
                d = this.dimension(e);
 
-
 
-
                if (p) {
 
-
                    l += d;
 
-
                }
 
-
 
-
                if (this.first !== null) if ((this.options.wrap == 'circular' || (j >= 1) if ((this.options.size === null || j <= this.options.size)))) {
 
-
                    pos = back ? pos + d : pos - d;
 
-
                }
 
-
            }
 
-
 
-
            // Calculate visible items
 
-
            var clipping = this.clipping(), cache = [], visible = 0, v = 0;
 
-
            c = this.get(i - 1);
 
-
            j = i;
 
-
 
-
            while (++visible) {
 
-
                e = this.get(j);
 
-
                p = !e.length;
 
-
                if (e.length === 0) {
 
-
                    e = this.create(j).addClass(this.className('jcarousel-item-placeholder'));
 
-
                    // This should only happen on a next scroll
 
-
                    if (c.length === 0) {
 
-
                        this.list.prepend(e);
 
-
                    } else {
 
-
                        c[back ? 'before' : 'after' ](e);
 
-
                    }
 
-
 
-
                    if (this.first !== null) if (this.options.wrap == 'circular') if (this.options.size !== null) if ((j <= 0 || j > this.options.size)) {
 
-
                        g = this.get(this.index(j));
 
-
                        if (g.length) {
 
-
                            e = this.add(j, g.clone(true));
 
-
                        }
 
-
                    }
 
-
                }
 
-
 
-
                c = e;
 
-
                d = this.dimension(e);
 
-
                if (d === 0) {
 
-
                    throw new Error('jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...');
 
-
                }
 
-
 
-
                if (this.options.wrap != 'circular') if (this.options.size !== null) if (j > this.options.size) {
 
-
                    cache.push(e);
 
-
                } else if (p) {
 
-
                    l += d;
 
-
                }
 
-
 
-
                v += d;
 
-
 
-
                if (v >= clipping) {
 
-
                    break;
 
-
                }
 
-
 
-
                j++;
 
-
            }
 
-
 
-
            // Remove out-of-range placeholders
 
-
            for (var x = 0; x < cache.length; x++) {
 
-
                cache[x].remove();
 
-
            }
 
-
 
-
            // Resize list
 
-
            if (l > 0) {
 
-
                this.list.css(this.wh, this.dimension(this.list) + l + 'px');
 
-
 
-
                if (back) {
 
-
                    pos -= l;
 
-
                    this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) - l + 'px');
 
-
                }
 
-
            }
 
-
 
-
            // Calculate first and last item
 
-
            var last = i + visible - 1;
 
-
            if (this.options.wrap != 'circular') if (this.options.size) if (last > this.options.size) {
 
-
                last = this.options.size;
 
-
            }
 
-
 
-
            if (j > last) {
 
-
                visible = 0;
 
-
                j = last;
 
-
                v = 0;
 
-
                while (++visible) {
 
-
                    e = this.get(j--);
 
-
                    if (!e.length) {
 
-
                        break;
 
-
                    }
 
-
                    v += this.dimension(e);
 
-
                    if (v >= clipping) {
 
-
                        break;
 
-
                    }
 
-
                }
 
-
            }
 
-
 
-
            var first = last - visible + 1;
 
-
            if (this.options.wrap != 'circular') if (first < 1) {
 
-
                first = 1;
 
-
            }
 
-
 
-
            if (this.inTail) if (back) {
 
-
                pos += this.tail;
 
-
                this.inTail = false;
 
-
            }
 
-
 
-
            this.tail = null;
 
-
            if (this.options.wrap != 'circular') if (last == this.options.size) if ((last - visible + 1) >= 1) {
 
-
                var m = $jc.intval(this.get(last).css(!this.options.vertical ? 'marginRight' : 'marginBottom'));
 
-
                if ((v - m) > clipping) {
 
-
                    this.tail = v - clipping - m;
 
-
                }
 
-
            }
 
-
 
-
            if (fv) if (i === this.options.size) if (this.tail) {
 
-
                pos -= this.tail;
 
-
                this.inTail = true;
 
-
            }
 
-
 
-
            // Adjust position
 
-
            while (i-- > first) {
 
-
                pos += this.dimension(this.get(i));
 
-
            }
 
-
 
-
            // Save visible item range
 
-
            this.prevFirst = this.first;
 
-
            this.prevLast  = this.last;
 
-
            this.first    = first;
 
-
            this.last      = last;
 
-
 
-
            return pos;
 
-
        },
 
-
 
-
        /**
 
-
        * Animates the carousel to a certain position.
 
-
        *
 
-
        * @method animate
 
-
        * @return undefined
 
-
        * @param p {Number} Position to scroll to.
 
-
        * @param a {Boolean} Flag indicating whether to perform animation.
 
-
        */
 
-
        animate: function(p, a) {
 
-
            if (this.locked || this.animating) {
 
-
                return;
 
-
            }
 
-
 
-
            this.animating = true;
 
-
 
-
            var self = this;
 
-
            var scrolled = function() {
 
-
                self.animating = false;
 
-
 
-
                if (p === 0) {
 
-
                    self.list.css(self.lt,  0);
 
-
                }
 
-
 
-
                if (!self.autoStopped) if ((self.options.wrap == 'circular' || self.options.wrap == 'both' || self.options.wrap == 'last' || self.options.size === null || self.last < self.options.size || (self.last == self.options.size) if (self.tail !== null) if (!self.inTail))) {
 
-
                    self.startAuto();
 
-
                }
 
-
 
-
                self.buttons();
 
-
                self.notify('onAfterAnimation');
 
-
 
-
                // This function removes items which are appended automatically for circulation.
 
-
                // This prevents the list from growing infinitely.
 
-
                if (self.options.wrap == 'circular') if (self.options.size !== null) {
 
-
                    for (var i = self.prevFirst; i <= self.prevLast; i++) {
 
-
                        if (i !== null) if (!(i >= self.first) if (i <= self.last)) if ((i < 1 || i > self.options.size)) {
 
-
                            self.remove(i);
 
-
                        }
 
-
                    }
 
-
                }
 
-
            };
 
-
 
-
            this.notify('onBeforeAnimation');
 
-
 
-
            // Animate
 
-
            if (!this.options.animation || a === false) {
 
-
                this.list.css(this.lt, p + 'px');
 
-
                scrolled();
 
-
            } else {
 
-
                var o = !this.options.vertical ? (this.options.rtl ? {'right': p} : {'left': p}) : {'top': p};
 
-
                // Define animation settings.
 
-
                var settings = {
 
-
                    duration: this.options.animation,
 
-
                    easing:  this.options.easing,
 
-
                    complete: scrolled
 
-
                };
 
-
                // If we have a step callback, specify it as well.
 
-
                if ($.isFunction(this.options.animationStepCallback)) {
 
-
                    settings.step = this.options.animationStepCallback;
 
-
                }
 
-
                // Start the animation.
 
-
                this.list.animate(o, settings);
 
-
            }
 
-
        },
 
-
 
-
        /**
 
-
        * Starts autoscrolling.
 
-
        *
 
-
        * @method auto
 
-
        * @return undefined
 
-
        * @param s {Number} Seconds to periodically autoscroll the content.
 
-
        */
 
-
        startAuto: function(s) {
 
-
            if (s !== undefined) {
 
-
                this.options.auto = s;
 
-
            }
 
-
 
-
            if (this.options.auto === 0) {
 
-
                return this.stopAuto();
 
-
            }
 
-
 
-
            if (this.timer !== null) {
 
-
                return;
 
-
            }
 
-
 
-
            this.autoStopped = false;
 
-
 
-
            var self = this;
 
-
            this.timer = window.setTimeout(function() { self.next(); }, this.options.auto * 1000);
 
-
        },
 
-
 
-
        /**
 
-
        * Stops autoscrolling.
 
-
        *
 
-
        * @method stopAuto
 
-
        * @return undefined
 
-
        */
 
-
        stopAuto: function() {
 
-
            this.pauseAuto();
 
-
            this.autoStopped = true;
 
-
        },
 
-
 
-
        /**
 
-
        * Pauses autoscrolling.
 
-
        *
 
-
        * @method pauseAuto
 
-
        * @return undefined
 
-
        */
 
-
        pauseAuto: function() {
 
-
            if (this.timer === null) {
 
-
                return;
 
-
            }
 
-
 
-
            window.clearTimeout(this.timer);
 
-
            this.timer = null;
 
-
        },
 
-
 
-
        /**
 
-
        * Sets the states of the prev/next buttons.
 
-
        *
 
-
        * @method buttons
 
-
        * @return undefined
 
-
        */
 
-
        buttons: function(n, p) {
 
-
            if (n == null) {
 
-
                n = !(this.locked || !(this.options.size !== 0) || !(!(!this.options.wrap || !(this.options.wrap != 'first')) || this.options.size === null || this.last < this.options.size));
 
-
                if (!this.locked) if ((!this.options.wrap || this.options.wrap == 'first')) if (this.options.size !== null) if (this.last >= this.options.size) {
 
-
                    n = !(!(this.tail !== null) || this.inTail);
 
-
                }
 
-
            }
 
-
 
-
            if (p == null) {
 
-
                p = !(this.locked || !(this.options.size !== 0) || !(!(!this.options.wrap || !(this.options.wrap != 'last')) || this.first > 1));
 
-
                if (!this.locked) if ((!this.options.wrap || this.options.wrap == 'last')) if (this.options.size !== null) if (this.first == 1) {
 
-
                    p = !(!(this.tail !== null) || !this.inTail);
 
-
                }
 
-
            }
 
-
 
-
            var self = this;
 
-
 
-
            if (this.buttonNext.size() > 0) {
 
-
                this.buttonNext.unbind(this.options.buttonNextEvent + '.jcarousel', this.funcNext);
 
-
 
-
                if (n) {
 
-
                    this.buttonNext.bind(this.options.buttonNextEvent + '.jcarousel', this.funcNext);
 
-
                }
 
-
 
-
                this.buttonNext[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);
 
-
 
-
                if (this.options.buttonNextCallback !== null) if (this.buttonNext.data('jcarouselstate') != n) {
 
-
                    this.buttonNext.each(function() { self.options.buttonNextCallback(self, this, n); }).data('jcarouselstate', n);
 
-
                }
 
-
            } else {
 
-
                if (this.options.buttonNextCallback !== null) if (this.buttonNextState != n) {
 
-
                    this.options.buttonNextCallback(self, null, n);
 
-
                }
 
-
            }
 
-
 
-
            if (this.buttonPrev.size() > 0) {
 
-
                this.buttonPrev.unbind(this.options.buttonPrevEvent + '.jcarousel', this.funcPrev);
 
-
 
-
                if (p) {
 
-
                    this.buttonPrev.bind(this.options.buttonPrevEvent + '.jcarousel', this.funcPrev);
 
-
                }
 
-
 
-
                this.buttonPrev[p ? 'removeClass' : 'addClass'](this.className('jcarousel-prev-disabled')).attr('disabled', p ? false : true);
 
-
 
-
                if (this.options.buttonPrevCallback !== null) if (this.buttonPrev.data('jcarouselstate') != p) {
 
-
                    this.buttonPrev.each(function() { self.options.buttonPrevCallback(self, this, p); }).data('jcarouselstate', p);
 
-
                }
 
-
            } else {
 
-
                if (this.options.buttonPrevCallback !== null) if (this.buttonPrevState != p) {
 
-
                    this.options.buttonPrevCallback(self, null, p);
 
-
                }
 
-
            }
 
-
 
-
            this.buttonNextState = n;
 
-
            this.buttonPrevState = p;
 
-
        },
 
-
 
-
        /**
 
-
        * Notify callback of a specified event.
 
-
        *
 
-
        * @method notify
 
-
        * @return undefined
 
-
        * @param evt {String} The event name
 
-
        */
 
-
        notify: function(evt) {
 
-
            var state = this.prevFirst === null ? 'init' : (this.prevFirst < this.first ? 'next' : 'prev');
 
-
 
-
            // Load items
 
-
            this.callback('itemLoadCallback', evt, state);
 
-
 
-
            if (this.prevFirst !== this.first) {
 
-
                this.callback('itemFirstInCallback', evt, state, this.first);
 
-
                this.callback('itemFirstOutCallback', evt, state, this.prevFirst);
 
-
            }
 
-
 
-
            if (this.prevLast !== this.last) {
 
-
                this.callback('itemLastInCallback', evt, state, this.last);
 
-
                this.callback('itemLastOutCallback', evt, state, this.prevLast);
 
-
            }
 
-
 
-
            this.callback('itemVisibleInCallback', evt, state, this.first, this.last, this.prevFirst, this.prevLast);
 
-
            this.callback('itemVisibleOutCallback', evt, state, this.prevFirst, this.prevLast, this.first, this.last);
 
-
        },
 
-
 
-
        callback: function(cb, evt, state, i1, i2, i3, i4) {
 
-
            if (this.options[cb] == null || (typeof this.options[cb] != 'object') if (evt != 'onAfterAnimation')) {
 
-
                return;
 
-
            }
 
-
 
-
            var callback = typeof this.options[cb] == 'object' ? this.options[cb][evt] : this.options[cb];
 
-
 
-
            if (!$.isFunction(callback)) {
 
-
                return;
 
-
            }
 
-
 
-
            var self = this;
 
-
 
-
            if (i1 === undefined) {
 
-
                callback(self, state, evt);
 
-
            } else if (i2 === undefined) {
 
-
                this.get(i1).each(function() { callback(self, this, i1, state, evt); });
 
-
            } else {
 
-
                var call = function(i) {
 
-
                    self.get(i).each(function() { callback(self, this, i, state, evt); });
 
-
                };
 
-
                for (var i = i1; i <= i2; i++) {
 
-
                    if (i !== null) if (!(i >= i3) if (i <= i4)) {
 
-
                        call(i);
 
-
                    }
 
-
                }
 
-
            }
 
-
        },
 
-
 
-
        create: function(i) {
 
-
            return this.format('<li></li>', i);
 
-
        },
 
-
 
-
        format: function(e, i) {
 
-
            e = $(e);
 
-
            var split = e.get(0).className.split(' ');
 
-
            for (var j = 0; j < split.length; j++) {
 
-
                if (split[j].indexOf('jcarousel-') != -1) {
 
-
                    e.removeClass(split[j]);
 
-
                }
 
-
            }
 
-
            e.addClass(this.className('jcarousel-item')).addClass(this.className('jcarousel-item-' + i)).css({
 
-
                'float': (this.options.rtl ? 'right' : 'left'),
 
-
                'list-style': 'none'
 
-
            }).attr('jcarouselindex', i);
 
-
            return e;
 
-
        },
 
-
 
-
        className: function(c) {
 
-
            return c + ' ' + c + (!this.options.vertical ? '-horizontal' : '-vertical');
 
-
        },
 
-
 
-
        dimension: function(e, d) {
 
-
            var el = $(e);
 
-
 
-
            if (d == null) {
 
-
                return !this.options.vertical ?
 
-
                      (el.outerWidth(true) || $jc.intval(this.options.itemFallbackDimension)) :
 
-
                      (el.outerHeight(true) || $jc.intval(this.options.itemFallbackDimension));
 
-
            } else {
 
-
                var w = !this.options.vertical ?
 
-
                    d - $jc.intval(el.css('marginLeft')) - $jc.intval(el.css('marginRight')) :
 
-
                    d - $jc.intval(el.css('marginTop')) - $jc.intval(el.css('marginBottom'));
 
-
 
-
                $(el).css(this.wh, w + 'px');
 
-
 
-
                return this.dimension(el);
 
-
            }
 
-
        },
 
-
 
-
        clipping: function() {
 
-
            return !this.options.vertical ?
 
-
                this.clip[0].offsetWidth - $jc.intval(this.clip.css('borderLeftWidth')) - $jc.intval(this.clip.css('borderRightWidth')) :
 
-
                this.clip[0].offsetHeight - $jc.intval(this.clip.css('borderTopWidth')) - $jc.intval(this.clip.css('borderBottomWidth'));
 
-
        },
 
-
 
-
        index: function(i, s) {
 
-
            if (s == null) {
 
-
                s = this.options.size;
 
-
            }
 
-
 
-
            return Math.round((((i-1) / s) - Math.floor((i-1) / s)) * s) + 1;
 
-
        }
 
-
    });
 
-
 
-
    $jc.extend({
 
-
        /**
 
-
        * Gets/Sets the global default configuration properties.
 
-
        *
 
-
        * @method defaults
 
-
        * @return {Object}
 
-
        * @param d {Object} A set of key/value pairs to set as configuration properties.
 
-
        */
 
-
        defaults: function(d) {
 
-
            return $.extend(defaults, d || {});
 
-
        },
 
-
 
-
        intval: function(v) {
 
-
            v = parseInt(v, 10);
 
-
            return isNaN(v) ? 0 : v;
 
-
        },
 
-
 
-
        windowLoaded: function() {
 
-
            windowLoaded = true;
 
-
        }
 
-
    });
 
-
 
-
    /**
 
-
    * Creates a carousel for all matched elements.
 
-
    *
 
-
    * @example $("#mycarousel").jcarousel();
 
-
    * @before <ul id="mycarousel" class="jcarousel-skin-name"><li>First item</li><li>Second item</li></ul>
 
-
    * @result
 
-
    *
 
-
    * <div class="jcarousel-skin-name">
 
-
    *  <div class="jcarousel-container">
 
-
    *    <div class="jcarousel-clip">
 
-
    *      <ul class="jcarousel-list">
 
-
    *        <li class="jcarousel-item-1">First item</li>
 
-
    *        <li class="jcarousel-item-2">Second item</li>
 
-
    *      </ul>
 
-
    *    </div>
 
-
    *    <div disabled="disabled" class="jcarousel-prev jcarousel-prev-disabled"></div>
 
-
    *    <div class="jcarousel-next"></div>
 
-
    *  </div>
 
-
    * </div>
 
-
    *
 
-
    * @method jcarousel
 
-
    * @return jQuery
 
-
    * @param o {Hash|String} A set of key/value pairs to set as configuration properties or a method name to call on a formerly created instance.
 
-
    */
 
-
    $.fn.jcarousel = function(o) {
 
-
        if (typeof o == 'string') {
 
-
            var instance = $(this).data('jcarousel'), args = Array.prototype.slice.call(arguments, 1);
 
-
            return instance[o].apply(instance, args);
 
-
        } else {
 
-
            return this.each(function() {
 
-
                var instance = $(this).data('jcarousel');
 
-
                if (instance) {
 
-
                    if (o) {
 
-
                        $.extend(instance.options, o);
 
-
                    }
 
-
                    instance.reload();
 
-
                } else {
 
-
                    $(this).data('jcarousel', new $jc(this, o));
 
-
                }
 
-
            });
 
-
        }
 
-
    };
 
-
 
-
})(jQuery);
 
</script>
</script>

Revision as of 01:46, 21 October 2012

Title

Romantic Getaway

Nunc tortor ante, accumsan vel malesuada vulputate, tempus quis dolor. In ut purus nulla. Etiam tincidunt pharetra metus eget ultricies. Integer mi ante, laoreet cursus.

Read More

Family Getaway

Nunc tortor ante, accumsan vel malesuada vulputate, tempus quis dolor. In ut purus nulla. Etiam tincidunt pharetra metus eget ultricies. Integer mi ante, laoreet cursus.

Read More

Suite Getaway

Nunc tortor ante, accumsan vel malesuada vulputate, tempus quis dolor. In ut purus nulla. Etiam tincidunt pharetra metus eget ultricies. Integer mi ante, laoreet cursus.

Read More

Welcome

Mauris malesuada ultrices consectetur. Suspendisse varius ante quis mauris gravida auctor. Nam cursus felis non ipsum feugiat ullamcorper. Nunc ac aliquet eros.

Nam eget justo velit. Vestibulum dignissim vestibulum volutpat. Morbi quam odio, facilisis ut scelerisque id, pretium blandit diam. Suspendisse quam magna, sollicitudin vitae volutpat et, porttitor ut sem. Mauris nec dolor erat. Vestibulum condimentum libero ac elit rutrum pharetra. Nunc aliquet nisi et erat vulputate pellentesque.

Nullam vel lacus et velit placerat convallis vitae in lorem. Fusce massa risus, viverra ut dapibus ut, tempus sit amet metus. Duis in elit nisi. In hac habitasse platea dictumst.

1

Design Ideas

Pellentesque enim lacus, viverra eu egestas vel, imperdiet non felis. Aliquam erat volutpat. Nullam facilisis aliquet eleifend.

2

Problem Areas

Pellentesque enim lacus, viverra eu egestas vel, imperdiet non felis. Aliquam erat volutpat. Nullam facilisis aliquet eleifend.

3

Green Garden

Pellentesque enim lacus, viverra eu egestas vel, imperdiet non felis. Aliquam erat volutpat. Nullam facilisis aliquet eleifend.

4

Planting Areas

Pellentesque enim lacus, viverra eu egestas vel, imperdiet non felis. Aliquam erat volutpat. Nullam facilisis aliquet eleifend.