/* jQuery Carousel 0.9.2
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($) {
	$.fn.carousel = function(params) {
		var params = $.extend( {
			direction : "horizontal",
			loop : false,
			dispItems : 1,
			pagination : false,
			paginationPosition : "outside",
			nextBtn : "<div><img src='img/pagingNextPageButton.png' alt='' /></div>",
			prevBtn : "<div><img src='img/pagingPrevPageButton.png' alt='' /></div>",
			btnsPosition : "outside",
			nextBtnInsert : "appendTo",
			prevBtnInsert : "appendTo",
			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(tabNum) {
				return tabNum;
			}
		}, params);
		if (params.btnsPosition == "outside") {
			params.prevBtnInsert = "insertAfter";
			params.nextBtnInsert = "insertAfter";
		}
		params.delayAutoSlide = params.delayAutoSlide
				|| params.autoSlideInterval;
		return this.each(function() {
			var env = {
				$elts : {},
				params : params,
				launchOnLoad : []
			};
			env.$elts.carousel = $(this).addClass("js");
			env.$elts.content = $(this).children().css( {
				position : "absolute",
				"top" : 0
			});
			env.$elts.wrap = env.$elts.content.wrap(
					'<div class="carousel-wrap"></div>').parent().css( {
				overflow : "hidden",
				position : "relative"
			});
			env.steps = {
				first : 0,
				count : env.$elts.content.children().length
			};
			env.steps.last = env.steps.count - 1;
			if ($.isFunction(env.params.prevBtnInsertFn)) {
				env.$elts.prevBtn = env.params.prevBtnInsertFn(env.$elts);
			} else {
				env.$elts.prevBtn = $(params.prevBtn)[params.prevBtnInsert]
						(env.$elts.carousel);
			}
			if ($.isFunction(env.params.nextBtnInsertFn)) {
				env.$elts.nextBtn = env.params.nextBtnInsertFn(env.$elts);
			} else {
				env.$elts.nextBtn = $(params.nextBtn)[params.nextBtnInsert]
						(env.$elts.carousel);
			}
			env.$elts.nextBtn.addClass("carousel-control next carousel-next");
			env.$elts.prevBtn
					.addClass("carousel-control previous carousel-previous");
			initButtonsEvents(env);
			if (env.params.pagination) {
				initPagination(env);
			}
			initAddress(env);
			$(function() {
				var $items = env.$elts.content.children();
				var $maxHeight = 0;
				$items.each(function() {
					$item = $(this);
					$itemHeight = $item.outerHeight();
					if ($itemHeight > $maxHeight) {
						$maxHeight = $itemHeight;
					}
				});
				if (env.params.verticalMargin > 0) {
					$maxHeight = $maxHeight + env.params.verticalMargin;
				}
				$items.height($maxHeight);
				var $firstItem = env.$elts.content.children(":first");
				env.itemWidth = $firstItem.outerWidth();
				if (params.direction == "vertical") {
					env.contentWidth = env.itemWidth;
				} else {
					if (params.equalWidths) {
						env.contentWidth = env.itemWidth * env.steps.count;
					} else {
						env.contentWidth = (function() {
							var totalWidth = 0;
							env.$elts.content.children().each(function() {
								totalWidth += $(this).outerWidth();
							});
							return totalWidth;
						})();
					}
				}
				env.$elts.content.width(env.contentWidth);
				env.itemHeight = $maxHeight;
				if (params.direction == "vertical") {
					env.$elts.content.css( {
						height : env.itemHeight * env.steps.count + "px"
					});
					env.$elts.content.parent().css( {
						height : env.itemHeight * env.params.dispItems + "px"
					});
				} else {
					env.$elts.content.parent().css( {
						height : env.itemHeight + "px"
					});
				}
				updateButtonsState(env);
				$.each(env.launchOnLoad, function(i, fn) {
					fn();
				});
				if (env.params.autoSlide) {
					window.setTimeout(function() {
						env.autoSlideInterval = window.setInterval(function() {
							goToStep(env, getRelativeStep(env, "next"));
						}, env.params.autoSlideInterval);
					}, env.params.delayAutoSlide);
				}
			});
		});
	};
	function initButtonsEvents(env) {
		env.$elts.nextBtn.add(env.$elts.prevBtn).bind(
				"enable",
				function() {
					var $this = $(this).unbind("click").bind(
							"click",
							function() {
								goToStep(env, getRelativeStep(env, ($this
										.is(".next") ? "next" : "prev")));
								stopAutoSlide(env);
							}).removeClass("disabled");
					if (env.params.combinedClasses) {
						$this.removeClass("next-disabled previous-disabled");
					}
				}).bind("disable", function() {
			var $this = $(this).unbind("click").addClass("disabled");
			if (env.params.combinedClasses) {
				if ($this.is(".next")) {
					$this.addClass("next-disabled");
				} else if ($this.is(".previous")) {
					$this.addClass("previous-disabled");
				}
			}
		}).hover(function() {
			$(this).toggleClass("hover");
		});
	}
	;
	function initPagination(env) {
		env.$elts.pagination = $('<div class="center-wrap"><div class="carousel-pagination"><p></p></div></div>')[((env.params.paginationPosition == "outside") ? "insertAfter"
				: "appendTo")](env.$elts.carousel).find("p");
		env.$elts.paginationBtns = $( []);
		env.$elts.content
				.find("li")
				.each(
						function(i) {
							if (i % env.params.dispItems == 0) {
								env.$elts.paginationBtns = env.$elts.paginationBtns
										.add($(
												'<a role="button"><span>' + env.params
														.tabLabel(env.$elts.paginationBtns.length + 1) + '</span></a>')
												.data("firstStep", i));
							}
						});
		env.$elts.paginationBtns.each(function() {
			$(this).appendTo(env.$elts.pagination);
		});
		env.$elts.paginationBtns.slice(0, 1).addClass("active");
		env.launchOnLoad.push(function() {
			env.$elts.paginationBtns.click(function(e) {
				goToStep(env, $(this).data("firstStep"));
				stopAutoSlide(env);
			});
		});
	}
	;
	function initAddress(env) {
		if (env.params.useAddress && $.isFunction($.fn.address)) {
			$.address
					.init(
							function(e) {
								var pathNames = $.address.pathNames();
								if (pathNames[0] === env.params.adressIdentifier
										&& !!pathNames[1]) {
									goToStep(env, pathNames[1] - 1);
								} else {
									$.address
											.value('/' + env.params.adressIdentifier + '/1');
								}
							})
					.change(
							function(e) {
								var pathNames = $.address.pathNames();
								if (pathNames[0] === env.params.adressIdentifier
										&& !!pathNames[1]) {
									goToStep(env, pathNames[1] - 1);
								}
							});
		} else {
			env.params.useAddress = false;
		}
	}
	;
	function goToStep(env, step) {
		env.params.callback(step);
		transition(env, step);
		env.steps.first = step;
		updateButtonsState(env);
		if (env.params.useAddress) {
			$.address.value('/' + env.params.adressIdentifier + '/'
					+ (step + 1));
		}
	}
	;
	function getRelativeStep(env, position) {
		if (position == "prev") {
			if ((env.steps.first - env.params.dispItems) >= 0) {
				return env.steps.first - env.params.dispItems;
			} else {
				return ((env.params.loop) ? (env.steps.count - env.params.dispItems)
						: false);
			}
		} else if (position == "next") {
			if ((env.steps.first + env.params.dispItems) < env.steps.count) {
				return env.steps.first + env.params.dispItems;
			} else {
				return ((env.params.loop) ? 0 : false);
			}
		}
	}
	;
	function transition(env, step) {
		switch (env.params.effect) {
		case "no":
			if (env.params.direction == "vertical") {
				env.$elts.content.css("top", -(env.itemHeight * step) + "px");
			} else {
				env.$elts.content.css("left", -(env.itemWidth * step) + "px");
			}
			break;
		case "fade":
			if (env.params.direction == "vertical") {
				env.$elts.content.hide().css("top",
						-(env.itemHeight * step) + "px").fadeIn(
						env.params.animSpeed);
			} else {
				env.$elts.content.hide().css("left",
						-(env.itemWidth * step) + "px").fadeIn(
						env.params.animSpeed);
			}
			break;
		default:
			if (env.params.direction == "vertical") {
				env.$elts.content.stop().animate( {

					top : -(env.itemHeight * step) + "px"
				}, env.params.animSpeed, env.params.slideEasing);
			} else {
				env.$elts.content.stop().animate( {
					left : -(env.itemWidth * step) + "px"
				}, env.params.animSpeed, env.params.slideEasing);
			}
			break;
		}
	}
	;
	function updateButtonsState(env) {
		if (getRelativeStep(env, "prev") !== false) {
			env.$elts.prevBtn.trigger("enable");
		} else {
			env.$elts.prevBtn.trigger("disable");
		}
		if (getRelativeStep(env, "next") !== false) {
			env.$elts.nextBtn.trigger("enable");
		} else {
			env.$elts.nextBtn.trigger("disable");
		}
		if (env.params.pagination) {
			env.$elts.paginationBtns.removeClass("active").filter(function() {
				return ($(this).data("firstStep") == env.steps.first)
			}).addClass("active");
		}
	}
	;
	function stopAutoSlide(env) {
		if (!!env.autoSlideInterval) {
			window.clearInterval(env.autoSlideInterval);
		}
	}
	;
})(jQuery);

