/*
 * jQuery Cycle Plugin (core logic only)
 * Examples and documentation at: http://jquery.malsup.com/cycle/
 * Copyright (c) 2007-2009 M. Alsup
 * Version: 2.63 (17-MAR-2009)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * Requires: jQuery v1.2.6 or later
 *
 * Originally based on the work of:
 *	1) Matt Oakes
 *	2) Torsten Baldes (http://medienfreunde.com/lab/innerfade/)
 *	3) Benjamin Sterling (http://www.benjaminsterling.com/experiments/jqShuffle/)
 */
;
(function($) {
  var ver = "2.63";
  if ($.support == undefined) {$.support = {opacity:!($.browser.msie)};}
  function log() {if (window.console && window.console.log) {window.console.log("[cycle] " + Array.prototype.join.call(arguments, " "));}}

  $.fn.cycle = function(options, arg2) {
    var o = {s:this.selector,c:this.context};
    if (this.length == 0 && options != "stop") {
      if (!$.isReady && o.s) {
        log("DOM not ready, queuing slideshow");
        $(function() {$(o.s, o.c).cycle(options, arg2);});
        return this;
      }
      log("terminating; zero elements found by selector" + ($.isReady ? "" : " (DOM not ready)"));
      return this;
    }
    return this.each(function() {
      options = handleArguments(this, options, arg2);
      if (options === false) {return;}
      if (this.cycleTimeout) {clearTimeout(this.cycleTimeout);}
      this.cycleTimeout = this.cyclePause = 0;
      var $cont = $(this);
      var $slides = options.slideExpr ? $(options.slideExpr, this) : $cont.children();
      var els = $slides.get();
      if (els.length < 2) {
        log("terminating; too few slides: " + els.length);
        return;
      }
      var opts = buildOptions($cont, $slides, els, options, o);
      if (opts === false) {return;}
      if (opts.timeout || opts.continuous) {
        this.cycleTimeout = setTimeout(function() {go(els, opts, 0, !opts.rev);}, opts.continuous ? 10 : opts.timeout + (opts.delay ||
                                                                                                                         0));
      }
    });
  };
  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"stop":cont.cycleStop++;if (cont.cycleTimeout) {clearTimeout(cont.cycleTimeout);}cont.cycleTimeout = 0;$(cont).removeData("cycle.opts");return false;case"pause":cont.cyclePause =
                                                                                                                                                                                             1;return false;case"resume":cont.cyclePause =
                                                                                                                                                                                                                         0;if (arg2 ===
                                                                                                                                                                                                                               true) {
        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, 1);
      }return false;default:options = {fx:options};}
    } else {
      if (options.constructor == Number) {
        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(this.cycleTimeout);
          cont.cycleTimeout = 0;
        }
        if (typeof arg2 == "string") {options.oneTimeFx = arg2;}
        go(options.elements, options, 1, num >= options.currSlide);
        return false;
      }
    }
    return options;
  }

  function removeFilter(el, opts) {if (!$.support.opacity && opts.cleartype && el.style.filter) {try {el.style.removeAttribute("filter");} catch(smother) {}}}

  function buildOptions($cont, $slides, els, options, o) {
    var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
    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] : [];
    opts.after.unshift(function() {opts.busy = 0;});
    if (!$.support.opacity && opts.cleartype) {opts.after.push(function() {removeFilter(this, opts);});}
    if (opts.continuous) {opts.after.push(function() {go(els, opts, 0, !opts.rev);});}
    saveOriginalOpts(opts);
    if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) {clearTypeFix($slides);}
    if ($cont.css("position") == "static") {$cont.css("position", "relative");}
    if (opts.width) {$cont.width(opts.width);}
    if (opts.height && opts.height != "auto") {$cont.height(opts.height);}
    if (opts.startingSlide) {opts.startingSlide = parseInt(opts.startingSlide);}
    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;});
      opts.randomIndex = 0;
      opts.startingSlide = opts.randomMap[0];
    } else {if (opts.startingSlide >= els.length) {opts.startingSlide = 0;}}
    opts.currSlide = opts.startingSlide = opts.startingSlide || 0;
    var first = opts.startingSlide;
    $slides.css({position:"absolute",top:0,left:0}).hide().each(function(i) {
      var z = first ? i >= first ? els.length - (i - first) : first - i : els.length - i;
      $(this).css("z-index", z);
    });
    $(els[first]).css("opacity", 1).show();
    removeFilter(els[first], opts);
    if (opts.fit && opts.width) {$slides.width(opts.width);}
    if (opts.fit && opts.height && opts.height != "auto") {$slides.height(opts.height);}
    var reshape = opts.containerResize && !$cont.innerHeight();
    if (reshape) {
      var maxw = 0,maxh = 0;
      for (var i = 0; i < els.length; i++) {
        var $e = $(els[i]),e = $e[0],w = $e.outerWidth(),h = $e.outerHeight();
        if (!w) {w = e.offsetWidth;}
        if (!h) {h = e.offsetHeight;}
        maxw = w > maxw ? w : maxw;
        maxh = h > maxh ? h : maxh;
      }
      if (maxw > 0 && maxh > 0) {$cont.css({width:maxw + "px",height:maxh + "px"});}
    }
    if (opts.pause) {$cont.hover(function() {this.cyclePause++;}, function() {this.cyclePause--;});}
    if (supportMultiTransitions(opts) === false) {return false;}
    if (!opts.multiFx) {
      var init = $.fn.cycle.transitions[opts.fx];
      if ($.isFunction(init)) {init($cont, $slides, opts);} else {
        if (opts.fx != "custom" && !opts.multiFx) {
          log("unknown transition: " + opts.fx, "; slideshow terminating");
          return false;
        }
      }
    }
    var requeue = false;
    options.requeueAttempts = options.requeueAttempts || 0;
    $slides.each(function() {
      var $el = $(this);
      this.cycleH = (opts.fit && opts.height) ? opts.height : $el.height();
      this.cycleW = (opts.fit && opts.width) ? opts.width : $el.width();
      if ($el.is("img")) {
        var loadingIE = ($.browser.msie && this.cycleW == 28 && this.cycleH == 30 && !this.complete);
        var loadingOp = ($.browser.opera && this.cycleW == 42 && this.cycleH == 19 && !this.complete);
        var loadingOther = (this.cycleH == 0 && this.cycleW == 0 && !this.complete);
        if (loadingIE || loadingOp || loadingOther) {
          if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) {
            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;
          } 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.animIn = opts.animIn || {};
    opts.animOut = opts.animOut || {};
    $slides.not(":eq(" + first + ")").css(opts.cssBefore);
    if (opts.cssFirst) {$($slides[first]).css(opts.cssFirst);}
    if (opts.timeout) {
      opts.timeout = parseInt(opts.timeout);
      if (opts.speed.constructor == String) {opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed);}
      if (!opts.sync) {opts.speed = opts.speed / 2;}
      while ((opts.timeout - opts.speed) < 250) {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) {
      opts.nextSlide = opts.currSlide;
      if (++opts.randomIndex == els.length) {opts.randomIndex = 0;}
      opts.nextSlide = opts.randomMap[opts.randomIndex];
    } else {opts.nextSlide = opts.startingSlide >= (els.length - 1) ? 0 : opts.startingSlide + 1;}
    var e0 = $slides[first];
    if (opts.before.length) {opts.before[0].apply(e0, [e0,e0,opts,true]);}
    if (opts.after.length > 1) {opts.after[1].apply(e0, [e0,e0,opts,true]);}
    if (opts.next) {$(opts.next).click(function() {return advance(opts, opts.rev ? -1 : 1);});}
    if (opts.prev) {$(opts.prev).click(function() {return advance(opts, opts.rev ? 1 : -1);});}
    if (opts.pager) {buildPager(els, opts);}
    exposeAddSlide(opts, els);
    return opts;
  }

  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 txs = $.fn.cycle.transitions;
    if (opts.fx.indexOf(",") > 0) {
      opts.multiFx = true;
      opts.fxs = opts.fx.replace(/\s*/g, "").split(",");
      for (var i = 0; i < opts.fxs.length; i++) {
        var fx = opts.fxs[i];
        var tx = txs[fx];
        if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
          log("discarding unknown transition: ", fx);
          opts.fxs.splice(i, 1);
          i--;
        }
      }
      if (!opts.fxs.length) {
        log("No valid transitions named; slideshow terminating.");
        return false;
      }
    } else {
      if (opts.fx == "all") {
        opts.multiFx = true;
        opts.fxs = [];
        for (p in txs) {
          var tx = txs[p];
          if (txs.hasOwnProperty(p) && $.isFunction(tx)) {opts.fxs.push(p);}
        }
      }
    }
    if (opts.multiFx && opts.randomizeEffects) {
      var r1 = Math.floor(Math.random() * 20) + 30;
      for (var i = 0; i < r1; i++) {
        var r2 = Math.floor(Math.random() * opts.fxs.length);
        opts.fxs.push(opts.fxs.splice(r2, 1)[0]);
      }
      log("randomized fx sequence: ", opts.fxs);
    }
    return true;
  }

  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);}
      opts.slideCount = els.length;
      $s.css("position", "absolute");
      $s[prepend ? "prependTo" : "appendTo"](opts.$cont);
      if (prepend) {
        opts.currSlide++;
        opts.nextSlide++;
      }
      if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) {clearTypeFix($s);}
      if (opts.fit && opts.width) {$s.width(opts.width);}
      if (opts.fit && opts.height && opts.height != "auto") {$slides.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) {$.fn.cycle.createPagerAnchor(els.length - 1, s, $(opts.pager), els, opts);}
      if ($.isFunction(opts.onAddSlide)) {opts.onAddSlide($s);} else {$s.hide();}
    };
  }

  $.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);});
    var init = $.fn.cycle.transitions[fx];
    if ($.isFunction(init)) {init(opts.$cont, $(opts.elements), opts);}
  };
  function go(els, opts, manual, fwd) {
    if (manual && opts.busy && opts.manualTrump) {
      $(els).stop(true, true);
      opts.busy = false;
    }
    if (opts.busy) {return;}
    var p = opts.$cont[0],curr = els[opts.currSlide],next = els[opts.nextSlide];
    if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual) {return;}
    if (!manual && !p.cyclePause && ((opts.autostop && (--opts.countdown <= 0)) || (opts.nowrap && !opts.random && opts.nextSlide <
                                                                                                                   opts.currSlide))) {
      if (opts.end) {opts.end(opts);}
      return;
    }
    if (manual || !p.cyclePause) {
      var fx = opts.fx;
      curr.cycleH = curr.cycleH || $(curr).height();
      curr.cycleW = curr.cycleW || $(curr).width();
      next.cycleH = next.cycleH || $(next).height();
      next.cycleW = next.cycleW || $(next).width();
      if (opts.multiFx) {
        if (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length) {opts.lastFx = 0;}
        fx = opts.fxs[opts.lastFx];
        opts.currFx = fx;
      }
      if (opts.oneTimeFx) {
        fx = opts.oneTimeFx;
        opts.oneTimeFx = null;
      }
      $.fn.cycle.resetState(opts, fx);
      if (opts.before.length) {
        $.each(opts.before, function(i, o) {
          if (p.cycleStop != opts.stopCount) {return;}
          o.apply(next, [curr,next,opts,fwd]);
        });
      }
      var after = function() {
        $.each(opts.after, function(i, o) {
          if (p.cycleStop != opts.stopCount) {return;}
          o.apply(next, [curr,next,opts,fwd]);
        });
      };
      if (opts.nextSlide != opts.currSlide) {
        opts.busy = 1;
        if (opts.fxFn) {opts.fxFn(curr, next, opts, after, fwd);} else {
          if ($.isFunction($.fn.cycle[opts.fx])) {$.fn.cycle[opts.fx](curr, next, opts, after);} else {
            $.fn.cycle.custom(curr, next, opts, after, manual && opts.fastOnEvent);
          }
        }
      }
      opts.lastSlide = opts.currSlide;
      if (opts.random) {
        opts.currSlide = opts.nextSlide;
        if (++opts.randomIndex == els.length) {opts.randomIndex = 0;}
        opts.nextSlide = opts.randomMap[opts.randomIndex];
      } else {
        var roll = (opts.nextSlide + 1) == els.length;
        opts.nextSlide = roll ? 0 : opts.nextSlide + 1;
        opts.currSlide = roll ? els.length - 1 : opts.nextSlide - 1;
      }
      if (opts.pager) {$.fn.cycle.updateActivePagerLink(opts.pager, opts.currSlide);}
    }
    var ms = 0;
    if (opts.timeout && !opts.continuous) {ms = getTimeout(curr, next, opts, fwd);} else {
      if (opts.continuous && p.cyclePause) {
        ms = 10;
      }
    }
    if (ms > 0) {p.cycleTimeout = setTimeout(function() {go(els, opts, 0, !opts.rev);}, ms);}
  }

  $.fn.cycle.updateActivePagerLink = function(pager, currSlide) {
    $(pager).find("a").removeClass("activeSlide").filter("a:eq(" + currSlide + ")").addClass("activeSlide");
  };
  function getTimeout(curr, next, opts, fwd) {
    if (opts.timeoutFn) {
      var t = opts.timeoutFn(curr, next, opts, fwd);
      if (t !== false) {return t;}
    }
    return opts.timeout;
  }

  $.fn.cycle.next = function(opts) {advance(opts, opts.rev ? -1 : 1);};
  $.fn.cycle.prev = function(opts) {advance(opts, opts.rev ? 1 : -1);};
  function advance(opts, val) {
    var els = opts.elements;
    var p = opts.$cont[0],timeout = p.cycleTimeout;
    if (timeout) {
      clearTimeout(timeout);
      p.cycleTimeout = 0;
    }
    if (opts.random && val < 0) {
      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) {
        if (++opts.randomIndex == els.length) {opts.randomIndex = 0;}
        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;
          }
        }
      }
    }
    if ($.isFunction(opts.prevNextClick)) {opts.prevNextClick(val > 0, opts.nextSlide, els[opts.nextSlide]);}
    go(els, opts, 1, val >= 0);
    return false;
  }

  function buildPager(els, opts) {
    var $p = $(opts.pager);
    $.each(els, function(i, o) {$.fn.cycle.createPagerAnchor(i, o, $p, els, opts);});
    $.fn.cycle.updateActivePagerLink(opts.pager, opts.startingSlide);
  }

  $.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
    var a = ($.isFunction(opts.pagerAnchorBuilder)) ? opts.pagerAnchorBuilder(i, el) : '<a href="#">' + (i + 1) + "</a>";
    if (!a) {return;}
    var $a = $(a);
    if ($a.parents("body").length == 0) {$a.appendTo($p);}
    $a.bind(opts.pagerEvent, function() {
      opts.nextSlide = i;
      var p = opts.$cont[0],timeout = p.cycleTimeout;
      if (timeout) {
        clearTimeout(timeout);
        p.cycleTimeout = 0;
      }
      if ($.isFunction(opts.pagerClick)) {opts.pagerClick(opts.nextSlide, els[opts.nextSlide]);}
      go(els, opts, 1, opts.currSlide < i);
      return false;
    });
    if (opts.pauseOnPagerHover) {$a.hover(function() {opts.$cont[0].cyclePause++;}, function() {opts.$cont[0].cyclePause--;});}
  };
  $.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;
  };
  function clearTypeFix($slides) {
    function hex(s) {
      s = parseInt(s).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.indexOf("rgb") >= 0) {
          var rgb = v.match(/\d+/g);
          return"#" + hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
        }
        if (v && v != "transparent") {return v;}
      }
      return"#ffffff";
    }

    $slides.each(function() {$(this).css("background-color", getBg(this));});
  }

  $.fn.cycle.commonReset = function(curr, next, opts, w, h, rev) {
    $(opts.elements).not(curr).hide();
    opts.cssBefore.opacity = 1;
    opts.cssBefore.display = "block";
    if (w !== false && next.cycleW > 0) {opts.cssBefore.width = next.cycleW;}
    if (h !== false && 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));
  };
  $.fn.cycle.custom = function(curr, next, opts, cb, 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, cb);};
    $l.animate(opts.animOut, speedOut, easeOut, function() {
      if (opts.cssAfter) {$l.css(opts.cssAfter);}
      if (!opts.sync) {fn();}
    });
    if (opts.sync) {fn();}
  };
  $.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;};
  $.fn.cycle.defaults = {fx:"fade",timeout:4000,timeoutFn:null,continuous:0,speed:1000,speedIn:null,speedOut:null,next:null,prev:null,prevNextClick:null,pager:null,pagerClick:null,pagerEvent:"click",pagerAnchorBuilder:null,before:null,after:null,end:null,easing:null,easeIn:null,easeOut:null,shuffle:null,animIn:null,animOut:null,cssBefore:null,cssAfter:null,fxFn:null,height:"auto",startingSlide:0,sync:1,random:0,fit:0,containerResize:1,pause:0,pauseOnPagerHover:0,autostop:0,autostopCount:0,delay:0,slideExpr:null,cleartype:!$.support.opacity,nowrap:0,fastOnEvent:0,randomizeEffects:1,rev:0,manualTrump:true,requeueOnImageNotLoaded:true,requeueTimeout:250};
})(jQuery);
