/* jQuery Carousel 0.9.8
Copyright 2010 Thomas Lanciaux and Pierre Bertet.
This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
*/
(function(g) {
	g.fn.carousel = function(q) {
		var q = g.extend({
			direction: "horizontal",
			loop: false,
			dispItems: 1,
			pagination: false,
			paginationPosition: "inside",
			nextBtn: '<input type="button" value="Next" />',
			prevBtn: '<input type="button" value="Previous" />',
			btnsPosition: "inside",
			nextBtnInsert: "insertAfter",
			prevBtnInsert: "insertBefore",
			nextBtnInsertFn: false,
			prevBtnInsertFn: false,
			autoSlide: false,
			autoSlideInterval: 3000,
			delayAutoSlide: false,
			combinedClasses: false,
			effect: "slide",
			slideEasing: "swing",
			animSpeed: 300,
			equalWidths: "true",
			verticalMargin: 0,
			callback: function() {},
			useAddress: false,
			adressIdentifier: "carousel",
			tabLabel: function(r) {
				return r
			},
			showEmptyItems: true,
			ajaxMode: false,
			ajaxUrl: "",
			stopSlideBtn: false,
			stopSlideTextPause: "Pause",
			stopSlideTextPlay: "Play"
		}, q);
		if (q.btnsPosition == "outside") {
			q.prevBtnInsert = "insertBefore";
			q.nextBtnInsert = "insertAfter"
		}
		q.delayAutoSlide = 0 + q.delayAutoSlide;
		return this.each(function() {
			var r = {
				$elts: {},
				params: q,
				launchOnLoad: []
			};
			r.$elts.carousel = g(this).addClass("js");
			r.$elts.content = g(this).children().css({
				position: "absolute",
				top: 0
			});
			r.$elts.wrap = r.$elts.content.wrap('<div class="carousel-wrap"></div>').parent().css({
				overflow: "hidden",
				position: "relative"
			});
			r.steps = {
				first: 0,
				count: r.$elts.content.children().length
			};
			r.$elts.loader = g('<div class="loader"></div>').css({
				position: "absolute"
			});
			r.steps.last = r.steps.count - 1;
			if (r.params.pagination) {
				o(r)
			}
			if (g.isFunction(r.params.prevBtnInsertFn)) {
				r.$elts.prevBtn = r.params.prevBtnInsertFn(r.$elts)
			} else {
				if (q.btnsPosition == "outside") {
					r.$elts.prevBtn = g(q.prevBtn)[q.prevBtnInsert](r.$elts.carousel)
				} else {
					r.$elts.prevBtn = g(q.prevBtn)[q.prevBtnInsert](r.$elts.wrap)
				}
			}
			if (g.isFunction(r.params.nextBtnInsertFn)) {
				r.$elts.nextBtn = r.params.nextBtnInsertFn(r.$elts)
			} else {
				if (q.btnsPosition == "outside") {
					r.$elts.nextBtn = g(q.nextBtn)[q.nextBtnInsert](r.$elts.carousel)
				} else {
					r.$elts.nextBtn = g(q.nextBtn)[q.nextBtnInsert](r.$elts.wrap)
				}
			}
			r.$elts.nextBtn.addClass("carousel-control next carousel-next");
			r.$elts.prevBtn.addClass("carousel-control previous carousel-previous");
			r.lastItemsToLoad;
			d(r);
			r.$elts.carousel.attr("tabindex", 0).add(r.$elts.carousel.children()).bind({
				focus: function(s) {
					g(document).bind("keypress", function(t) {
						switch (t.keyCode) {
						case 39:
							r.$elts.nextBtn.click();
							break;
						case 37:
							r.$elts.prevBtn.click();
							break
						}
						switch (t.charCode) {
						case 110:
							r.$elts.nextBtn.click();
							break;
						case 112:
							r.$elts.prevBtn.click();
							break
						}
					})
				},
				blur: function() {
					g(document).unbind("keypress")
				}
			});
			n(r);
			g(function() {
				c(r);
				g.each(r.launchOnLoad, function(s, t) {
					t()
				});
				if (r.params.autoSlide) {
					f(r)
				}
				if (q.stopSlideBtn == true) {
					r.$elts.stopSlideBtn = g('<button type="button" class="slide-control play">' + q.stopSlideTextPause + "</button>");
					a(r)
				}
			})
		})
	};

	function c(s) {
		var t = s.$elts.content.children();
		var r = 0;
		t.each(function() {
			$item = g(this);
			$itemHeight = $item.outerHeight();
			if ($itemHeight > r) {
				r = $itemHeight
			}
		});
		if (s.params.verticalMargin > 0) {
			r = r + s.params.verticalMargin
		}
		t.height(r);
		var q = s.$elts.content.children(":first");
		s.itemWidth = q.outerWidth();
		if (s.params.direction == "vertical") {
			s.contentWidth = s.itemWidth
		} else {
			if (s.params.equalWidths) {
				s.contentWidth = s.itemWidth * s.steps.count
			} else {
				s.contentWidth = (function() {
					var u = 0;
					s.$elts.content.children().each(function() {
						u += g(this).outerWidth()
					});
					return u
				})()
			}
		}
		s.$elts.content.width(s.contentWidth);
		s.itemHeight = r;
		if (s.params.direction == "vertical") {
			s.$elts.content.css({
				height: s.itemHeight * s.steps.count + "px"
			});
			s.$elts.content.parent().css({
				height: s.itemHeight * s.params.dispItems + "px"
			})
		} else {
			s.$elts.content.parent().css({
				height: s.itemHeight + "px"
			})
		}
		i(s)
	}
	function d(q) {
		q.$elts.nextBtn.add(q.$elts.prevBtn).bind("enable", function() {
			var r = g(this).unbind("click").bind("click", function() {
				if (q.params.ajaxMode && r.is(".next") && b(q) == (p(q) - 1) && !q.lastItemsToLoad) {
					h(q);
					q.$elts.content.ajaxSuccess(function() {})
				} else {
					e(q, j(q, (r.is(".next") ? "next" : "prev")));
					if (q.params.stopSlideBtn == true) {
						q.$elts.stopSlideBtn.trigger("pause")
					} else {
						m(q)
					}
				}
			}).removeClass("disabled").removeAttr("disabled");
			if (q.params.combinedClasses) {
				r.removeClass("next-disabled previous-disabled").removeAttr("disabled")
			}
		}).bind("disable", function() {
			var r = g(this).unbind("click").addClass("disabled").attr("disabled", "disabled");
			if (q.params.combinedClasses) {
				if (r.is(".next")) {
					r.addClass("next-disabled")
				} else {
					if (r.is(".previous")) {
						r.addClass("previous-disabled")
					}
				}
			}
		}).hover(function() {
			g(this).toggleClass("hover")
		})
	}
	function o(q) {
		q.$elts.pagination = g('<div class="center-wrap"><div class="carousel-pagination"><p></p></div></div>')[((q.params.paginationPosition == "outside") ? "insertAfter" : "appendTo")](q.$elts.carousel).find("p");
		q.$elts.paginationBtns = g([]);
		q.$elts.content.find("li").each(function(r) {
			if (r % q.params.dispItems == 0) {
				k(q, r)
			}
		})
	}
	function k(r, q) {
		if (r.params.pagination) {
			r.$elts.paginationBtns = r.$elts.paginationBtns.add(g('<a role="button"><span>' + r.params.tabLabel(r.$elts.paginationBtns.length + 1) + "</span></a>").data("firstStep", q)).appendTo(r.$elts.pagination);
			r.$elts.paginationBtns.slice(0, 1).addClass("active");
			r.$elts.paginationBtns.click(function(s) {
				e(r, g(this).data("firstStep"));
				if (r.params.stopSlideBtn == true) {
					r.$elts.stopSlideBtn.trigger("pause")
				} else {
					m(r)
				}
			})
		}
	}
	function n(q) {
		if (q.params.useAddress && g.isFunction(g.fn.address)) {
			g.address.init(function(s) {
				var r = g.address.pathNames();
				if (r[0] === q.params.adressIdentifier && !! r[1]) {
					e(q, r[1] - 1)
				} else {
					g.address.value("/" + q.params.adressIdentifier + "/1")
				}
			}).change(function(s) {
				var r = g.address.pathNames();
				if (r[0] === q.params.adressIdentifier && !! r[1]) {
					e(q, r[1] - 1)
				}
			})
		} else {
			q.params.useAddress = false
		}
	}
	function e(q, r) {
		q.params.callback(r);
		l(q, r);
		q.steps.first = r;
		i(q);
		if (q.params.useAddress) {
			g.address.value("/" + q.params.adressIdentifier + "/" + (r + 1))
		}
	}
	function j(r, q) {
		if (q == "prev") {
			if (!r.params.showEmptyItems) {
				if (r.steps.first == 0) {
					return ((r.params.loop) ? (r.steps.count - r.params.dispItems) : false)
				} else {
					return Math.max(0, r.steps.first - r.params.dispItems)
				}
			} else {
				if ((r.steps.first - r.params.dispItems) >= 0) {
					return r.steps.first - r.params.dispItems
				} else {
					return ((r.params.loop) ? (r.steps.count - r.params.dispItems) : false)
				}
			}
		} else {
			if (q == "next") {
				if ((r.steps.first + r.params.dispItems) < r.steps.count) {
					if (!r.params.showEmptyItems) {
						return Math.min(r.steps.first + r.params.dispItems, r.steps.count - r.params.dispItems)
					} else {
						return r.steps.first + r.params.dispItems
					}
				} else {
					return ((r.params.loop) ? 0 : false)
				}
			}
		}
	}
	function l(q, r) {
		switch (q.params.effect) {
		case "no":
			if (q.params.direction == "vertical") {
				q.$elts.content.css("top", -(q.itemHeight * r) + "px")
			} else {
				q.$elts.content.css("left", -(q.itemWidth * r) + "px")
			}
			break;
		case "fade":
			if (q.params.direction == "vertical") {
				q.$elts.content.hide().css("top", -(q.itemHeight * r) + "px").fadeIn(q.params.animSpeed)
			} else {
				q.$elts.content.hide().css("left", -(q.itemWidth * r) + "px").fadeIn(q.params.animSpeed)
			}
			break;
		default:
			if (q.params.direction == "vertical") {
				q.$elts.content.stop().animate({
					top: -(q.itemHeight * r) + "px"
				}, q.params.animSpeed, q.params.slideEasing)
			} else {
				q.$elts.content.stop().animate({
					left: -(q.itemWidth * r) + "px"
				}, q.params.animSpeed, q.params.slideEasing)
			}
			break
		}
	}
	function i(q) {
		if (j(q, "prev") !== false) {
			q.$elts.prevBtn.trigger("enable")
		} else {
			q.$elts.prevBtn.trigger("disable")
		}
		if (j(q, "next") !== false) {
			q.$elts.nextBtn.trigger("enable")
		} else {
			q.$elts.nextBtn.trigger("disable")
		}
		if (q.params.pagination) {
			q.$elts.paginationBtns.removeClass("active").filter(function() {
				return (g(this).data("firstStep") == q.steps.first)
			}).addClass("active")
		}
	}
	function f(q) {
		q.delayAutoSlide = window.setTimeout(function() {
			q.autoSlideInterval = window.setInterval(function() {
				e(q, j(q, "next"))
			}, q.params.autoSlideInterval)
		}, q.params.delayAutoSlide)
	}
	function m(q) {
		window.clearTimeout(q.delayAutoSlide);
		window.clearInterval(q.autoSlideInterval);
		q.params.delayAutoSlide = 0
	}
	function a(r) {
		var q = r.$elts.stopSlideBtn;
		q.bind({
			play: function() {
				f(r);
				q.removeClass("pause").addClass("play").html(r.params.stopSlideTextPause)
			},
			pause: function() {
				m(r);
				q.removeClass("play").addClass("pause").html(r.params.stopSlideTextPlay)
			}
		});
		q.click(function(s) {
			if (q.is(".play")) {
				q.trigger("pause")
			} else {
				if (q.is(".pause")) {
					q.trigger("play")
				}
			}
		});
		q.prependTo(r.$elts.wrap)
	}
	function p(q) {
		return q.$elts.pagination.children().length
	}
	function b(q) {
		return q.steps.first / q.params.dispItems
	}
	function h(q) {
		q.$elts.carousel.prepend(q.$elts.loader);
		g.ajax({
			url: q.params.ajaxUrl,
			dataType: "json",
			success: function(r) {
				q.lastItemsToLoad = r.bLastItemsToLoad;
				g(q.$elts.content).append(r.shtml);
				q.steps = {
					first: q.steps.first + q.params.dispItems,
					count: q.$elts.content.children().length
				};
				q.steps.last = q.steps.count - 1;
				c(q);
				k(q, q.steps.first);
				e(q, q.steps.first);
				if (q.params.stopSlideBtn == true) {
					q.$elts.stopSlideBtn.trigger("pause")
				} else {
					m(q)
				}
				q.$elts.loader.remove()
			}
		})
	}
})(jQuery);

