/* jQuery Carousel 0.9.5
Copyright 2008-2009 Thomas Lanciaux and Pierre Bertet.
This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
 */
(function(c) {
	c.fn.carousel = function(j) {
		var j = c.extend( {
			direction : "horizontal",
			loop : false,
			dispItems : 1,
			pagination : false,
			paginationPosition : "inside",
			nextBtn : '<div><a id="bntr" role="button"></a></div>',
			prevBtn : '<a id="btnl" role="button" ></a>',
			btnsPosition : "inside",
			nextBtnInsert : "appendTo",
			prevBtnInsert : "prependTo",
			nextBtnInsertFn : false,
			prevBtnInsertFn : false,
			autoSlide : false,
			autoSlideInterval : 3000,
			delayAutoSlide : false,
			combinedClasses : false,
			effect : "slide",
			slideEasing : "swing",
			animSpeed : "normal",
			equalWidths : "true",
			verticalMargin : 0,
			callback : function() {
			},
			useAddress : false,
			adressIdentifier : "carousel",
			tabLabel : function(k) {
				return k
			},
			showEmptyItems : true
		}, j);
		if (j.btnsPosition == "outside") {
			j.prevBtnInsert = "insertBefore";
			j.nextBtnInsert = "insertAfter"
		}
		j.delayAutoSlide = j.delayAutoSlide || j.autoSlideInterval;
		return this.each(function() {
			var k = {
				$elts : {},
				params : j,
				launchOnLoad : []
			};
			k.$elts.carousel = c(this).addClass("js");
			k.$elts.content = c(this).children().css( {
				position : "absolute",
				top : 0
			});
			k.$elts.wrap = k.$elts.content.wrap(
					'<div class="carousel-wrap"></div>').parent().css( {
				overflow : "hidden",
				position : "relative"
			});
			k.steps = {
				first : 0,
				count : k.$elts.content.children().length
			};
			k.steps.last = k.steps.count - 1;
			if (c.isFunction(k.params.prevBtnInsertFn)) {
				k.$elts.prevBtn = k.params.prevBtnInsertFn(k.$elts)
			} else {
				k.$elts.prevBtn = c(j.prevBtn)[j.prevBtnInsert]
						(k.$elts.carousel)
			}
			if (c.isFunction(k.params.nextBtnInsertFn)) {
				k.$elts.nextBtn = k.params.nextBtnInsertFn(k.$elts)
			} else {
				k.$elts.nextBtn = c(j.nextBtn)[j.nextBtnInsert]
						(k.$elts.carousel)
			}
			k.$elts.nextBtn.addClass("carousel-control next carousel-next");
			k.$elts.prevBtn
					.addClass("carousel-control previous carousel-previous");
			a(k);
			if (k.params.pagination) {
				i(k)
			}
			h(k);
			c(function() {
				var n = k.$elts.content.children();
				var m = 0;
				n.each(function() {
					$item = c(this);
					$itemHeight = $item.outerHeight();
					if ($itemHeight > m) {
						m = $itemHeight
					}
				});
				if (k.params.verticalMargin > 0) {
					m = m + k.params.verticalMargin
				}
				n.height(m);
				var l = k.$elts.content.children(":first");
				k.itemWidth = l.outerWidth();
				if (j.direction == "vertical") {
					k.contentWidth = k.itemWidth
				} else {
					if (j.equalWidths) {
						k.contentWidth = k.itemWidth * k.steps.count
					} else {
						k.contentWidth = (function() {
							var o = 0;
							k.$elts.content.children().each(function() {
								o += c(this).outerWidth()
							});
							return o
						})()
					}
				}
				k.$elts.content.width(k.contentWidth);
				k.itemHeight = m;
				if (j.direction == "vertical") {
					k.$elts.content.css( {
						height : k.itemHeight * k.steps.count + "px"
					});
					k.$elts.content.parent().css( {
						height : k.itemHeight * k.params.dispItems + "px"
					})
				} else {
					k.$elts.content.parent().css( {
						height : k.itemHeight + "px"
					})
				}
				d(k);
				c.each(k.launchOnLoad, function(o, p) {
					p()
				});
				if (k.params.autoSlide) {
					window.setTimeout(function() {
						k.autoSlideInterval = window.setInterval(function() {
							b(k, e(k, "next"))
						}, k.params.autoSlideInterval)
					}, k.params.delayAutoSlide)
				}
			})
		})
	};
	function a(j) {
		j.$elts.nextBtn.add(j.$elts.prevBtn).bind("enable", function() {
			var k = c(this).unbind("click").bind("click", function() {
				b(j, e(j, (k.is(".next") ? "next" : "prev")));
				g(j)
			}).removeClass("disabled");
			if (j.params.combinedClasses) {
				k.removeClass("next-disabled previous-disabled")
			}
		}).bind("disable", function() {
			var k = c(this).unbind("click").addClass("disabled");
			if (j.params.combinedClasses) {
				if (k.is(".next")) {
					k.addClass("next-disabled")
				} else {
					if (k.is(".previous")) {
						k.addClass("previous-disabled")
					}
				}
			}
		}).hover(function() {
			c(this).toggleClass("hover")
		})
	}
	function i(j) {
		j.$elts.pagination = c('<div class="center-wrap"><div class="carousel-pagination"><p></p></div></div>')[((j.params.paginationPosition == "outside") ? "insertAfter"
				: "appendTo")](j.$elts.carousel).find("p");
		j.$elts.paginationBtns = c( []);
		j.$elts.content
				.find("li")
				.each(
						function(k) {
							if (k % j.params.dispItems == 0) {
								j.$elts.paginationBtns = j.$elts.paginationBtns
										.add(c(
												'<a id="btnr" role="button"><span>'
														+ j.params
																.tabLabel(j.$elts.paginationBtns.length + 1)
														+ "</span></a>").data(
												"firstStep", k))
							}
						});
		j.$elts.paginationBtns.each(function() {
			c(this).appendTo(j.$elts.pagination)
		});
		j.$elts.paginationBtns.slice(0, 1).addClass("active");
		j.launchOnLoad.push(function() {
			j.$elts.paginationBtns.click(function(k) {
				b(j, c(this).data("firstStep"));
				g(j)
			})
		})
	}
	function h(j) {
		if (j.params.useAddress && c.isFunction(c.fn.address)) {
			c.address.init(function(l) {
				var k = c.address.pathNames();
				if (k[0] === j.params.adressIdentifier && !!k[1]) {
					b(j, k[1] - 1)
				} else {
					c.address.value("/" + j.params.adressIdentifier + "/1")
				}
			}).change(function(l) {
				var k = c.address.pathNames();
				if (k[0] === j.params.adressIdentifier && !!k[1]) {
					b(j, k[1] - 1)
				}
			})
		} else {
			j.params.useAddress = false
		}
	}
	function b(j, k) {
		j.params.callback(k);
		f(j, k);
		j.steps.first = k;
		d(j);
		if (j.params.useAddress) {
			c.address.value("/" + j.params.adressIdentifier + "/" + (k + 1))
		}
	}
	function e(k, j) {
		if (j == "prev") {
			if (!k.params.showEmptyItems) {
				if (k.steps.first == 0) {
					return ((k.params.loop) ? (k.steps.count - k.params.dispItems)
							: false)
				} else {
					return Math.max(0, k.steps.first - k.params.dispItems)
				}
			} else {
				if ((k.steps.first - k.params.dispItems) >= 0) {
					return k.steps.first - k.params.dispItems
				} else {
					return ((k.params.loop) ? (k.steps.count - k.params.dispItems)
							: false)
				}
			}
		} else {
			if (j == "next") {
				if ((k.steps.first + k.params.dispItems) < k.steps.count) {
					if (!k.params.showEmptyItems) {
						return Math.min(k.steps.first + k.params.dispItems,
								k.steps.count - k.params.dispItems)
					} else {
						return k.steps.first + k.params.dispItems
					}
				} else {
					return ((k.params.loop) ? 0 : false)
				}
			}
		}
	}
	function f(j, k) {
		switch (j.params.effect) {
		case "no":
			if (j.params.direction == "vertical") {
				j.$elts.content.css("top", -(j.itemHeight * k) + "px")
			} else {
				j.$elts.content.css("left", -(j.itemWidth * k) + "px")
			}
			break;
		case "fade":
			if (j.params.direction == "vertical") {
				j.$elts.content.hide().css("top", -(j.itemHeight * k) + "px")
						.fadeIn(j.params.animSpeed)
			} else {
				j.$elts.content.hide().css("left", -(j.itemWidth * k) + "px")
						.fadeIn(j.params.animSpeed)
			}
			break;
		default:
			if (j.params.direction == "vertical") {
				j.$elts.content.stop().animate( {
					top : -(j.itemHeight * k) + "px"
				}, j.params.animSpeed, j.params.slideEasing)
			} else {
				j.$elts.content.stop().animate( {
					left : -(j.itemWidth * k) + "px"
				}, j.params.animSpeed, j.params.slideEasing)
			}
			break
		}
	}
	function d(j) {
		if (e(j, "prev") !== false) {
			j.$elts.prevBtn.trigger("enable")
		} else {
			j.$elts.prevBtn.trigger("disable")
		}
		if (e(j, "next") !== false) {
			j.$elts.nextBtn.trigger("enable")
		} else {
			j.$elts.nextBtn.trigger("disable")
		}
		if (j.params.pagination) {
			j.$elts.paginationBtns.removeClass("active").filter(function() {
				return (c(this).data("firstStep") == j.steps.first)
			}).addClass("active")
		}
	}
	function g(j) {
		if (!!j.autoSlideInterval) {
			window.clearInterval(j.autoSlideInterval)
		}
	}
})(jQuery);
