(function(e) {
	e.fn.orbit = function(a) {
		a = e.extend( {
			animation : "fade",
			animationSpeed : 800,
			timer : true,
			advanceSpeed : 12E3,
			pauseOnHover : false,
			startClockOnMouseOut : false,
			startClockOnMouseOutAfter : 1E3,
			directionalNav : false,
			captions : true,
			captionAnimation : "fade",
			captionAnimationSpeed : 800,
			bullets : false,
			bulletThumbs : false,
			bulletThumbLocation : "",
			afterSlideChange : function() {
			}
		}, a);
		return this
				.each(function() {
					function t() {
						if (a.timer)
							if (u.is(":hidden"))
								v = setInterval(function() {
									o("next")
								}, a.advanceSpeed);
							else {
								r = true;
								A.removeClass("active");
								v = setInterval(function() {
									var c = "rotate(" + p + "deg)";
									p += 2;
									w.css( {
										"-webkit-transform" : c,
										"-moz-transform" : c,
										"-o-transform" : c
									});
									if (p > 180) {
										w.addClass("move");
										B.addClass("move")
									}
									if (p > 360) {
										w.removeClass("move");
										B.removeClass("move");
										p = 0;
										o("next")
									}
								}, a.advanceSpeed / 180)
							}
						else
							return false
					}
					function q() {
						if (a.timer) {
							r = false;
							clearInterval(v);
							A.addClass("active")
						} else
							return false
					}
					function C() {
						if (a.captions) {
							var c = d.eq(b).data("caption");
							if (_captionHTML = e(c).html()) {
								l.attr("id", c).html(_captionHTML);
								a.captionAnimation == "none" && l.show();
								a.captionAnimation == "fade" && l.fadeIn();
								a.captionAnimation == "slideOpen"
										&& l.slideDown()
							} else {
								a.captionAnimation == "none" && l.hide();
								a.captionAnimation == "fade" && l.fadeOut();
								a.captionAnimation == "slideOpen"
										&& l.slideUp()
							}
						} else
							return false
					}
					function D() {
						if (a.bullets)
							F.children("li").removeClass("active").eq(b)
									.addClass("active");
						else
							return false
					}
					function o(c) {
						function g() {
							d.eq(m).css( {
								"z-index" : 1
							});
							x = false;
							a.afterSlideChange.call(this)
						}
						var m = b, h = c;
						if (m == h)
							return false;
						if (!x) {
							x = true;
							if (c == "next") {
								b++;
								if (b == s)
									b = 0
							} else if (c == "prev") {
								b--;
								if (b < 0)
									b = s - 1
							} else {
								b = c;
								if (m < b)
									h = "next";
								else if (m > b)
									h = "prev"
							}
							D();
							d.eq(m).css( {
								"z-index" : 2
							});
							a.animation == "fade" && d.eq(b).css( {
								opacity : 0,
								"z-index" : 3
							}).animate( {
								opacity : 1
							}, a.animationSpeed, g);
							if (a.animation == "horizontal-slide") {
								h == "next" && d.eq(b).css( {
									left : k,
									"z-index" : 3
								}).animate( {
									left : 0
								}, a.animationSpeed, g);
								h == "prev" && d.eq(b).css( {
									left : -k,
									"z-index" : 3
								}).animate( {
									left : 0
								}, a.animationSpeed, g)
							}
							if (a.animation == "vertical-slide") {
								h == "prev" && d.eq(b).css( {
									top : y,
									"z-index" : 3
								}).animate( {
									top : 0
								}, a.animationSpeed, g);
								h == "next" && d.eq(b).css( {
									top : -y,
									"z-index" : 3
								}).animate( {
									top : 0
								}, a.animationSpeed, g)
							}
							if (a.animation == "horizontal-push") {
								if (h == "next") {
									d.eq(b).css( {
										left : k,
										"z-index" : 3
									}).animate( {
										left : 0
									}, a.animationSpeed, g);
									d.eq(m).animate( {
										left : -k
									}, a.animationSpeed)
								}
								if (h == "prev") {
									d.eq(b).css( {
										left : -k,
										"z-index" : 3
									}).animate( {
										left : 0
									}, a.animationSpeed, g);
									d.eq(m).animate( {
										left : k
									}, a.animationSpeed)
								}
							}
							C()
						}
					}
					var b = 0, s = 0, k, y, x, j = e(this).addClass("orbit"), f = j
							.wrap('<div class="orbit-wrapper" />').parent();
					j.add(k).width("1px").height("1px");
					var d = j.find("img, a img, div");
					d.each(function() {
						var c = e(this), g = c.width();
						c = c.height();
						if (g > j.width()) {
							j.add(f).width(g);
							k = j.width()
						}
						if (c > j.height()) {
							j.add(f).height(c);
							y = j.height()
						}
						s++
					});
					d.eq(b).css( {
						"z-index" : 3
					}).fadeIn(function() {
						d.css( {
                                                    display : "block"
						})
					});
					if (a.timer) {
						f.append('<div class="timer"><span class="mask"><span class="rotator"></span></span><span class="pause"></span></div>');
						var u = e("div.timer"), r;
						if (u.length != 0) {
							var w = e("div.timer span.rotator"), B = e("div.timer span.mask"), A = e("div.timer span.pause"), p = 0, v;
							t();
							u.click(function() {
								r ? q() : t()
							});
							if (a.startClockOnMouseOut) {
								var E;
								f.mouseleave(function() {
									E = setTimeout(function() {
										r || t()
									}, a.startClockOnMouseOutAfter)
								});
								f.mouseenter(function() {
									clearTimeout(E)
								})
							}
						}
					}
					a.pauseOnHover && f.mouseenter(function() {
						q()
					});
					if (a.captions) {
						f.append('<div class="orbit-caption"></div>');
						var l = f.children(".orbit-caption");
						C()
					}
					if (a.directionalNav) {
						f
								.append('<div class="slider-nav"><span class="right">Right</span><span class="left">Left</span></div>');
						var n = f.children("div.slider-nav").children(
								"span.left"), z = f.children("div.slider-nav")
								.children("span.right");
						n.click(function() {
							q();
							o("prev")
						});
						z.click(function() {
							q();
							o("next")
						})
					}
					if (a.bullets) {
						f.append('<ul class="orbit-bullets"></ul>');
						var F = e("ul.orbit-bullets");
						for (i = 0; i < s; i++) {
							n = e("<li>" + (i + 1) + "</li>");
							if (a.bulletThumbs)
								if (z = d.eq(i).data("thumb")) {
									n = e('<li class="has-thumb">' + i
											+ "</li>");
									n.css( {
										background : "url("
												+ a.bulletThumbLocation + z
												+ ") no-repeat"
									})
								}
							e("ul.orbit-bullets").append(n);
							n.data("index", i);
							n.click(function() {
								q();
								o(e(this).data("index"))
							})
						}
						D()
					}
				})
	}
})(jQuery);
