/*
 * Slides, A Slideshow Plugin for jQuery
 * Intructions: http://slidesjs.com
 * By: Nathan Searles, http://nathansearles.com
 * Version: 1.1.8
 * Updated: June 1st, 2011
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */	
(function (A) {
	A.fn.slides = function (B) {
		B = A.extend({}, A.fn.slides.option, B);
		return this.each(function () {
			A("." + B.container, A(this)).children().wrapAll('<div class="slides_control"/>');
			var V = A(this),
				J = A(".slides_control", V),
				Z = J.children().size(),
				Q = J.children().outerWidth(),
				M = J.children().outerHeight(),
				D = B.start - 1,
				L = B.effect.indexOf(",") < 0 ? B.effect : B.effect.replace(" ", "").split(",")[0],
				S = B.effect.indexOf(",") < 0 ? L : B.effect.replace(" ", "").split(",")[1],
				O = 0,
				N = 0,
				C = 0,
				P = 0,
				U, H, I, X, W, T, K, F;

			function E(c, b, a) {
				if (!H && U) {
					H = true;
					B.animationStart(P + 1);
					switch (c) {
					case "next":
						N = P;
						O = P + 1;
						O = Z === O ? 0 : O;
						X = Q * 2;
						c = -Q * 2;
						P = O;
						break;
					case "prev":
						N = P;
						O = P - 1;
						O = O === -1 ? Z - 1 : O;
						X = 0;
						c = 0;
						P = O;
						break;
					case "pagination":
						O = parseInt(a, 10);
						N = A("." + B.paginationClass + " li." + B.currentClass + " a", V).attr("href").match("[^#/]+$");
						if (O > N) {
							X = Q * 2;
							c = -Q * 2;
						} else {
							X = 0;
							c = 0;
						}
						P = O;
						break;
					}
					if (b === "fade") {
						if (B.crossfade) {
							J.children(":eq(" + O + ")", V).css({
								zIndex: 10
							}).fadeIn(B.fadeSpeed, B.fadeEasing, function () {
								if (B.autoHeight) {
									J.animate({
										height: J.children(":eq(" + O + ")", V).outerHeight()
									}, B.autoHeightSpeed, function () {
										J.children(":eq(" + N + ")", V).css({
											display: "none",
											zIndex: 0
										});
										J.children(":eq(" + O + ")", V).css({
											zIndex: 0
										});
										B.animationComplete(O + 1);
										H = false;
									});
								} else {
									J.children(":eq(" + N + ")", V).css({
										display: "none",
										zIndex: 0
									});
									J.children(":eq(" + O + ")", V).css({
										zIndex: 0
									});
									B.animationComplete(O + 1);
									H = false;
								}
							});
						} else {
							J.children(":eq(" + N + ")", V).fadeOut(B.fadeSpeed, B.fadeEasing, function () {
								if (B.autoHeight) {
									J.animate({
										height: J.children(":eq(" + O + ")", V).outerHeight()
									}, B.autoHeightSpeed, function () {
										J.children(":eq(" + O + ")", V).fadeIn(B.fadeSpeed, B.fadeEasing);
									});
								} else {
									J.children(":eq(" + O + ")", V).fadeIn(B.fadeSpeed, B.fadeEasing, function () {
										if (A.browser.msie) {
											A(this).get(0).style.removeAttribute("filter");
										}
									});
								}
								B.animationComplete(O + 1);
								H = false;
							});
						}
					} else {
						J.children(":eq(" + O + ")").css({
							left: X,
							display: "block"
						});
						if (B.autoHeight) {
							J.animate({
								left: c,
								height: J.children(":eq(" + O + ")").outerHeight()
							}, B.slideSpeed, B.slideEasing, function () {
								J.css({
									left: -Q
								});
								J.children(":eq(" + O + ")").css({
									left: Q,
									zIndex: 5
								});
								J.children(":eq(" + N + ")").css({
									left: Q,
									display: "none",
									zIndex: 0
								});
								B.animationComplete(O + 1);
								H = false;
							});
						} else {
							J.animate({
								left: c
							}, B.slideSpeed, B.slideEasing, function () {
								J.css({
									left: -Q
								});
								J.children(":eq(" + O + ")").css({
									left: Q,
									zIndex: 5
								});
								J.children(":eq(" + N + ")").css({
									left: Q,
									display: "none",
									zIndex: 0
								});
								B.animationComplete(O + 1);
								H = false;
							});
						}
					}
					if (B.pagination) {
						A("." + B.paginationClass + " li." + B.currentClass, V).removeClass(B.currentClass);
						A("." + B.paginationClass + " li:eq(" + O + ")", V).addClass(B.currentClass);
					}
				}
			}
			function R() {
				clearInterval(V.data("interval"));
			}
			function G() {
				if (B.pause) {
					clearTimeout(V.data("pause"));
					clearInterval(V.data("interval"));
					K = setTimeout(function () {
						clearTimeout(V.data("pause"));
						F = setInterval(function () {
							E("next", L);
						}, B.play);
						V.data("interval", F);
					}, B.pause);
					V.data("pause", K);
				} else {
					R();
				}
			}
			if (Z < 2) {
				return;
			}
			if (D < 0) {
				D = 0;
			}
			if (D > Z) {
				D = Z - 1;
			}
			if (B.start) {
				P = D;
			}
			if (B.randomize) {
				J.randomize();
			}
			A("." + B.container, V).css({
				overflow: "hidden",
				position: "relative"
			});
			J.children().css({
				position: "absolute",
				top: 0,
				left: J.children().outerWidth(),
				zIndex: 0,
				display: "none"
			});
			J.css({
				position: "relative",
				width: (Q * 3),
				height: M,
				left: -Q
			});
			A("." + B.container, V).css({
				display: "block"
			});
			if (B.autoHeight) {
				J.children().css({
					height: "auto"
				});
				J.animate({
					height: J.children(":eq(" + D + ")").outerHeight()
				}, B.autoHeightSpeed);
			}
			if (B.preload && J.find("img:eq(" + D + ")").length) {
				A("." + B.container, V).css({
					background: "url(" + B.preloadImage + ") no-repeat 50% 50%"
				});
				var Y = J.find("img:eq(" + D + ")").attr("src") + "?" + (new Date()).getTime();
				if (A("img", V).parent().attr("class") != "slides_control") {
					T = J.children(":eq(0)")[0].tagName.toLowerCase();
				} else {
					T = J.find("img:eq(" + D + ")");
				}
				J.find("img:eq(" + D + ")").attr("src", Y).load(function () {
					J.find(T + ":eq(" + D + ")").fadeIn(B.fadeSpeed, B.fadeEasing, function () {
						A(this).css({
							zIndex: 5
						});
						A("." + B.container, V).css({
							background: ""
						});
						U = true;
						B.slidesLoaded();
					});
				});
			} else {
				J.children(":eq(" + D + ")").fadeIn(B.fadeSpeed, B.fadeEasing, function () {
					U = true;
					B.slidesLoaded();
				});
			}
			if (B.bigTarget) {
				J.children().css({
					cursor: "pointer"
				});
				J.children().click(function () {
					E("next", L);
					return false;
				});
			}
			if (B.hoverPause && B.play) {
				J.bind("mouseover", function () {
					R();
				});
				J.bind("mouseleave", function () {
					G();
				});
			}
			if (B.generateNextPrev) {
				A("." + B.container, V).after('<a href="#" class="' + B.prev + '">Prev</a>');
				A("." + B.prev, V).after('<a href="#" class="' + B.next + '">Next</a>');
			}
			A("." + B.next, V).click(function (a) {
				a.preventDefault();
				if (B.play) {
					G();
				}
				E("next", L);
			});
			A("." + B.prev, V).click(function (a) {
				a.preventDefault();
				if (B.play) {
					G();
				}
				E("prev", L);
			});
			if (B.generatePagination) {
				if (B.prependPagination) {
					V.prepend("<ul class=" + B.paginationClass + "></ul>");
				} else {
					V.append("<ul class=" + B.paginationClass + "></ul>");
				}
				J.children().each(function () {
					A("." + B.paginationClass, V).append('<li><a href="#' + C + '">' + (C + 1) + "</a></li>");
					C++;
				});
			} else {
				A("." + B.paginationClass + " li a", V).each(function () {
					A(this).attr("href", "#" + C);
					C++;
				});
			}
			A("." + B.paginationClass + " li:eq(" + D + ")", V).addClass(B.currentClass);
			A("." + B.paginationClass + " li a", V).click(function () {
				if (B.play) {
					G();
				}
				I = A(this).attr("href").match("[^#/]+$");
				if (P != I) {
					E("pagination", S, I);
				}
				return false;
			});
			A("a.link", V).click(function () {
				if (B.play) {
					G();
				}
				I = A(this).attr("href").match("[^#/]+$") - 1;
				if (P != I) {
					E("pagination", S, I);
				}
				return false;
			});
			if (B.play) {
				F = setInterval(function () {
					E("next", L);
				}, B.play);
				V.data("interval", F);
			}
		});
	};
	A.fn.slides.option = {
		preload: false,
		preloadImage: "/images/loading.gif",
		container: "slides_container",
		generateNextPrev: false,
		next: "next",
		prev: "prev",
		pagination: true,
		generatePagination: true,
		prependPagination: false,
		paginationClass: "pagination",
		currentClass: "current",
		fadeSpeed: 350,
		fadeEasing: "",
		slideSpeed: 350,
		slideEasing: "",
		start: 1,
		effect: "slide",
		crossfade: false,
		randomize: false,
		play: 0,
		pause: 0,
		hoverPause: false,
		autoHeight: false,
		autoHeightSpeed: 350,
		bigTarget: false,
		animationStart: function () {},
		animationComplete: function () {},
		slidesLoaded: function () {}
	};
	A.fn.randomize = function (C) {
		function B() {
			return (Math.round(Math.random()) - 0.5);
		}
		return (A(this).each(function () {
			var F = A(this);
			var E = F.children();
			var D = E.length;
			if (D > 1) {
				E.hide();
				var G = [];
				for (i = 0; i < D; i++) {
					G[G.length] = i;
				}
				G = G.sort(B);
				A.each(G, function (I, H) {
					var K = E.eq(H);
					var J = K.clone(true);
					J.show().appendTo(F);
					if (C !== undefined) {
						C(K, J);
					}
					K.remove();
				});
			}
		}));
	};
})(jQuery);
