/*
 * jQuery Cycle Plugin (with Transition Definitions)
 * Examples and documentation at: http://jquery.malsup.com/cycle/
 * Copyright (c) 2007-2009 M. Alsup
 * Version: 2.51 (16-FEB-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.3 or later
 *
 * Originally based on the work of:
 *	1) Matt Oakes (http://portfolio.gizone.co.uk/applications/slideshow/)
 *	2) Torsten Baldes (http://medienfreunde.com/lab/innerfade/)
 *	3) Benjamin Sterling (http://www.benjaminsterling.com/experiments/jqShuffle/)
 */
;
(function($) {
	var ver = "2.51";
	if ($.support == undefined) {
		$.support = {
			opacity : !($.browser.msie && /MSIE 6.0/.test(navigator.userAgent))
		};
	}
	function log() {
		if (window.console && window.console.log) {
			window.console.log("[cycle] "
					+ Array.prototype.join.call(arguments, ""));
		}
	}
	$.fn.cycle = function(options) {
		if (this.length == 0) {
			log("terminating; zero elements found by selector"
					+ ($.isReady ? "" : " (DOM not ready)"));
			return this;
		}
		var opt2 = arguments[1];
		return this
				.each(function() {
					if (this.cycleStop == undefined) {
						this.cycleStop = 0;
					}
					if (options === undefined || options === null) {
						options = {};
					}
					if (options.constructor == String) {
						switch (options) {
						case "stop":
							this.cycleStop++;
							if (this.cycleTimeout) {
								clearTimeout(this.cycleTimeout);
							}
							this.cycleTimeout = 0;
							$(this).removeData("cycle.opts");
							return;
						case "pause":
							this.cyclePause = 1;
							return;
						case "resume":
							this.cyclePause = 0;
							if (opt2 === true) {
								options = $(this).data("cycle.opts");
								if (!options) {
									log("options not found, can not resume");
									return;
								}
								if (this.cycleTimeout) {
									clearTimeout(this.cycleTimeout);
									this.cycleTimeout = 0;
								}
								go(options.elements, options, 1, 1);
							}
							return;
						default:
							options = {
								fx : options
							};
						}
					} else {
						if (options.constructor == Number) {
							var num = options;
							options = $(this).data("cycle.opts");
							if (!options) {
								log("options not found, can not advance slide");
								return;
							}
							if (num < 0 || num >= options.elements.length) {
								log("invalid slide index: " + num);
								return;
							}
							options.nextSlide = num;
							if (this.cycleTimeout) {
								clearTimeout(this.cycleTimeout);
								this.cycleTimeout = 0;
							}
							go(options.elements, options, 1,
									num >= options.currSlide);
							return;
						}
					}
					if (this.cycleTimeout) {
						clearTimeout(this.cycleTimeout);
					}
					this.cycleTimeout = 0;
					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 = $.extend( {}, $.fn.cycle.defaults,
							options || {}, $.metadata ? $cont.metadata()
									: $.meta ? $cont.data() : {});
					if (opts.autostop) {
						opts.countdown = opts.autostopCount || els.length;
					}
					$cont.data("cycle.opts", opts);
					opts.container = this;
					opts.stopCount = this.cycleStop;
					opts.elements = els;
					opts.before = opts.before ? [ opts.before ] : [];
					opts.after = opts.after ? [ opts.after ] : [];
					opts.after.unshift(function() {
						opts.busy = 0;
					});
					if (opts.continuous) {
						opts.after.push(function() {
							go(els, opts, 0, !opts.rev);
						});
					}
					opts.originalBefore = opts.before;
					opts.originalAfter = opts.after;
					if (!$.support.opacity && opts.cleartype
							&& !opts.cleartypeNoBg) {
						clearTypeFix($slides);
					}
					var cls = this.className;
					opts.width = parseInt((cls.match(/w:(\d+)/) || [])[1])
							|| opts.width;
					opts.height = parseInt((cls.match(/h:(\d+)/) || [])[1])
							|| opts.height;
					opts.timeout = parseInt((cls.match(/t:(\d+)/) || [])[1])
							|| opts.timeout;
					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();
					if ($.browser.msie) {
						els[first].style.removeAttribute("filter");
					}
					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]), w = $e.outerWidth(), h = $e
									.outerHeight();
							maxw = w > maxw ? w : maxw;
							maxh = h > maxh ? h : maxh;
						}
						$cont.css( {
							width : maxw + "px",
							height : maxh + "px"
						});
					}
					if (opts.pause) {
						$cont.hover(function() {
							this.cyclePause++;
						}, function() {
							this.cyclePause--;
						});
					}
					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 unknowtn transition: ", fx);
								opts.fxs.splice(i, 1);
								i--;
							}
						}
						if (!opts.fxs.length) {
							log("No valid transitions named; slideshow terminating.");
							return;
						}
					} 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) + 20;
						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);
					}
					if (!opts.multiFx) {
						var init = txs[opts.fx];
						if ($.isFunction(init)) {
							init($cont, $slides, opts);
						} else {
							if (opts.fx != "custom" && !opts.multiFx) {
								log("unknown transition: " + opts.fx,
										"; slideshow terminating");
								return;
							}
						}
					}
					$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();
					});
					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.click && !opts.next) {
						opts.next = opts.click;
					}
					if (opts.next) {
						$(opts.next).bind("click", function() {
							return advance(els, opts, opts.rev ? -1 : 1);
						});
					}
					if (opts.prev) {
						$(opts.prev).bind("click", function() {
							return advance(els, opts, opts.rev ? 1 : -1);
						});
					}
					if (opts.pager) {
						buildPager(els, opts);
					}
					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"]($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 (typeof opts.onAddSlide == "function") {
							opts.onAddSlide($s);
						} else {
							$s.hide();
						}
					};
					if (opts.timeout || opts.continuous) {
						this.cycleTimeout = setTimeout(function() {
							go(els, opts, 0, !opts.rev);
						}, opts.continuous ? 10 : opts.timeout
								+ (opts.delay || 0));
					}
				});
	};
	function go(els, opts, manual, fwd) {
		if (manual && opts.busy) {
			$(els).stop(true, true);
			opts.busy = false;
		}
		if (opts.busy) {
			return;
		}
		var p = opts.container, 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) {
			curr.cycleH = curr.cycleH || curr.offsetHeight;
			curr.cycleW = curr.cycleW || curr.offsetWidth;
			next.cycleH = next.cycleH || next.offsetHeight;
			next.cycleW = next.cycleW || next.offsetWidth;
			if (opts.multiFx) {
				if (opts.lastFx == undefined
						|| ++opts.lastFx >= opts.fxs.length) {
					opts.lastFx = 0;
				}
				var fx = opts.fxs[opts.lastFx];
				opts.currFx = fx;
				opts.before = [];
				opts.after = [];
				opts.cssBefore = {};
				opts.cssAfter = {};
				opts.animIn = {};
				opts.animOut = {};
				opts.fxFn = null;
				$.each(opts.originalBefore, function() {
					opts.before.push(this);
				});
				$.each(opts.originalAfter, function() {
					opts.after.push(this);
				});
				var init = $.fn.cycle.transitions[fx];
				if ($.isFunction(init)) {
					init($(opts.container), $(opts.elements), opts);
				}
			}
			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() {
				if ($.browser.msie && opts.cleartype) {
					this.style.removeAttribute("filter");
				}
				$.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);
			}
		}
		if (opts.timeout && !opts.continuous) {
			p.cycleTimeout = setTimeout(function() {
				go(els, opts, 0, !opts.rev);
			}, getTimeout(curr, next, opts, fwd));
		} else {
			if (opts.continuous && p.cyclePause) {
				p.cycleTimeout = setTimeout(function() {
					go(els, opts, 0, !opts.rev);
				}, 10);
			}
		}
	}
	$.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;
	}
	function advance(els, opts, val) {
		var p = opts.container, 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 (opts.prevNextClick && typeof opts.prevNextClick == "function") {
			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 = (typeof opts.pagerAnchorBuilder == "function") ? 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.container, timeout = p.cycleTimeout;
			if (timeout) {
				clearTimeout(timeout);
				p.cycleTimeout = 0;
			}
			if (typeof opts.pagerClick == "function") {
				opts.pagerClick(opts.nextSlide, els[opts.nextSlide]);
			}
			go(els, opts, 1, opts.currSlide < i);
			return false;
		});
		if (opts.pauseOnPagerHover) {
			$a.hover(function() {
				opts.container.cyclePause++;
			}, function() {
				opts.container.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) {
			var 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) {
			opts.cssBefore.width = next.cycleW;
		}
		if (h !== false) {
			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);
		$n.css(opts.cssBefore);
		var speedIn = opts.speedIn;
		var speedOut = opts.speedOut;
		var easeIn = opts.easeIn;
		var easeOut = opts.easeOut;
		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 : 0,
		nowrap : 0,
		fastOnEvent : 0,
		randomizeEffects : 1
	};
})(jQuery);
(function($) {
	$.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,
			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,
			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,
			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,
			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) {
			$.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) {
			$.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
		};
	};
	$.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,
			top : 0,
			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,
			top : 0,
			height : 0
		};
		opts.animIn = {
			height : "show"
		};
		opts.animOut = {
			height : 0
		};
	};
	$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
		var 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);
		});
		opts.speed = opts.speed / 2;
		opts.random = 0;
		opts.shuffle = opts.shuffle || {
			left : -w,
			top : 15
		};
		opts.els = [];
		for ( var i = 0; i < $slides.length; i++) {
			opts.els.push($slides[i]);
		}
		for ( var i = 0; i < opts.currSlide; i++) {
			opts.els.push(opts.els.shift());
		}
		opts.fxFn = function(curr, next, opts, cb, 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++) {
					fwd ? opts.els.push(opts.els.shift()) : 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) + 1 + count);
				}
				$el.animate( {
					left : 0,
					top : 0
				}, opts.speedOut, opts.easeOut, function() {
					$(fwd ? this : curr).hide();
					if (cb) {
						cb();
					}
				});
			});
		};
		opts.cssBefore = {
			display : "block",
			opacity : 1,
			top : 0,
			left : 0
		};
	};
	$.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.cssFirst = {
			top : 0
		};
		opts.cssBefore = {
			left : 0,
			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,
			top : 0,
			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,
			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;
		});
		opts.cssBefore = {
			top : 0,
			left : 0,
			width : 0
		};
		opts.animIn = {
			left : 0
		};
		opts.animOut = {
			width : 0
		};
	};
	$.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;
			opts.animIn = {
				top : 0,
				left : 0,
				width : next.cycleW,
				height : next.cycleH
			};
			opts.animOut = {
				width : 0,
				height : 0,
				top : curr.cycleH / 2,
				left : curr.cycleW / 2
			};
		});
		opts.cssFirst = {
			top : 0,
			left : 0
		};
		opts.cssBefore = {
			width : 0,
			height : 0
		};
	};
	$.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;
			opts.animIn = {
				top : 0,
				left : 0,
				width : next.cycleW,
				height : next.cycleH
			};
		});
		opts.cssBefore = {
			width : 0,
			height : 0
		};
		opts.animOut = {
			opacity : 0
		};
	};
	$.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,
			top : 0
		};
		opts.animIn = {
			left : 0
		};
		opts.animOut = {
			left : w
		};
	};
	$.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,
			left : 0
		};
		opts.animIn = {
			top : 0
		};
		opts.animOut = {
			top : h
		};
	};
	$.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,
			left : w
		};
		opts.animIn = {
			top : 0,
			left : 0
		};
		opts.animOut = {
			top : h,
			left : w
		};
	};
	$.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,
				width : this.cycleW
			};
			opts.animOut = {
				left : 0
			};
		});
		opts.cssBefore = {
			width : 0,
			top : 0
		};
	};
	$.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,
				height : this.cycleH
			};
			opts.animOut = {
				top : 0
			};
		});
		opts.cssBefore = {
			height : 0,
			left : 0
		};
	};
	$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
		opts.before.push(function(curr, next, opts) {
			$.fn.cycle.commonReset(curr, next, opts, false, true);
			opts.cssBefore.left = next.cycleW / 2;
			opts.animIn = {
				left : 0,
				width : this.cycleW
			};
			opts.animOut = {
				left : curr.cycleW / 2,
				width : 0
			};
		});
		opts.cssBefore = {
			top : 0,
			width : 0
		};
	};
	$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
		opts.before.push(function(curr, next, opts) {
			$.fn.cycle.commonReset(curr, next, opts, true, false);
			opts.cssBefore.top = next.cycleH / 2;
			opts.animIn = {
				top : 0,
				height : next.cycleH
			};
			opts.animOut = {
				top : curr.cycleH / 2,
				height : 0
			};
		});
		opts.cssBefore = {
			left : 0,
			height : 0
		};
	};
	$.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,
			top : 0
		};
		opts.animOut = {
			opacity : 1
		};
		opts.cssBefore = {
			top : 0,
			left : 0
		};
	};
	$.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,
			top : 0
		};
		opts.animOut = {
			opacity : 1
		};
		opts.cssBefore = {
			top : 0,
			left : 0
		};
	};
	$.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);
			if (!opts.animOut.left && !opts.animOut.top) {
				opts.animOut = {
					left : w * 2,
					top : -h / 2,
					opacity : 0
				};
			} else {
				opts.animOut.opacity = 0;
			}
		});
		opts.cssBefore = {
			left : 0,
			top : 0
		};
		opts.animIn = {
			left : 0
		};
	};
	$.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 t = parseInt(h / 2);
								var l = parseInt(w / 2);
								clip = "rect(" + t + "px " + l + "px " + t
										+ "px " + l + "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]), r = parseInt(d[1]), b = parseInt(d[2]), l = parseInt(d[3]);
		opts.before.push(function(curr, next, opts) {
			if (curr == next) {
				return;
			}
			var $curr = $(curr), $next = $(next);
			$.fn.cycle.commonReset(curr, next, opts);
			var step = 1, count = parseInt((opts.speedIn / 13)) - 1;
			(function f() {
				var tt = t ? t - parseInt(step * (t / count)) : 0;
				var ll = l ? l - parseInt(step * (l / count)) : 0;
				var bb = b < h ? b + parseInt(step * ((h - b) / count || 1))
						: h;
				var rr = r < w ? r + parseInt(step * ((w - r) / count || 1))
						: w;
				$next.css( {
					clip : "rect(" + tt + "px " + rr + "px " + bb + "px " + ll
							+ "px)"
				});
				(step++ <= count) ? setTimeout(f, 13) : $curr.css("display",
						"none");
			})();
		});
		opts.cssBefore = {
			display : "block",
			opacity : 1,
			top : 0,
			left : 0
		};
		opts.animIn = {
			left : 0
		};
		opts.animOut = {
			left : 0
		};
	};
})(jQuery);
