/* 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: "inside",
            nextBtn: '<a role="button"><span>Next</span></a>',
            prevBtn: '<a role="button"><span>Previous</span></a>',
            btnsPosition: "inside",
            nextBtnInsert: "appendTo",
            prevBtnInsert: "prependTo",
            nextBtnInsertFn: false,
            prevBtnInsertFn: false,
            autoSlide: false,
            autoSlideInterval: 3E3,
            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 = "insertBefore"; 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 = $("#carousel-pagination"); env.$elts.paginationBtns = $([]); env.$elts.content.find("li").each(function(i) { env.$elts.paginationBtns = env.$elts.paginationBtns.add($('<a role="button" class="box"><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.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.filter(function() { return $(this).data("firstStep") == env.steps.first }); env.$elts.paginationBtns.removeClass("active").slice(env.steps.first, env.steps.first + 3).addClass("active") } 
    } function stopAutoSlide(env) { if (!!env.autoSlideInterval) window.clearInterval(env.autoSlideInterval) } 
})(jQuery);
