﻿/* 
Sistrum Carousel jQuery plugin
file: jquery.sistrumcarousel.js 
created 2010 - Sistrum d.o.o. [www.moja-trgovina.net]
*/

(function($) {

    var configs = new Array();

    jQuery.fn.sistrumCarousel = function(userConfig) {

        var config = $.extend({}, $.fn.sistrumCarousel.defaultConfig, userConfig);

        var all = jQuery(this);
        if (!all) return;

        config.carousel = all.get(0);
        config.slidesContainer = jQuery(config.selector_slides, config.carousel);
        config.slides = jQuery(config.selector_slide, config.slidesContainer);

        config.slides.each(function(idx, val) { jQuery(config.slides[idx]).hide(); });

        config.slides.mouseenter(function() { config.pauseExecution = true; });
        config.slides.mouseleave(function() { config.pauseExecution = false; });

        var cfgIdx = configs.length;
        configs[cfgIdx] = config;

        config.navigationItems = jQuery(config.selector_navigationItem, config.carousel);

        if (config.navigationItems) {
            config.navigationItems.each(function(navidx) {
                var navigationItem = jQuery(this);
                navigationItem.click(function() {
                    config.pauseExecution = true;
                    config.slides.each(function(i) { jQuery(this).hide(); });
                    config.navigationItems.each(function(i) {
                        jQuery(this).removeClass("on").addClass("off");
                    });
                    navigationItem.removeClass("off").addClass("on");
                    jQuery(config.slides[navidx]).fadeIn("slow")
                });
            });
        }

        $.fn.sistrumCarousel.advance(cfgIdx);

        setInterval("$.fn.sistrumCarousel.advance(" + cfgIdx + ");", config.delay)

        return this;
    };

    jQuery.fn.sistrumCarousel.advance = function(cidx) {
        var config = configs[cidx];
        if (config.pauseExecution == true) return;
        if (config.slides.size() <= config.idx) config.idx = 0;
        var prev = config.idx - 1;
        if (prev < 0) prev = config.slides.size() - 1;
        advanceSlide(config, prev, config.idx);
        config.idx++;
    }


    function advanceSlide(config, prev, next) {
        jQuery(config.navigationItems[prev]).removeClass("on").addClass("off");
        jQuery(config.slides[prev]).fadeOut("slow", function() { fadeOut_Callback(config, next); });
    }
    function fadeOut_Callback(config, idx) {
        jQuery(config.slides[idx]).fadeIn("slow"
            , function() { jQuery(config.navigationItems[idx]).removeClass("off").addClass("on"); }
         );
    }

    jQuery.fn.sistrumCarousel.defaultConfig = {
        delay: 7000
        , selector_slides: ".carousel-slides"
        , selector_slide: ".carousel-slide"
        , selector_navigation: ".carousel-navigation"
        , selector_navigationItem: ".carousel-navigation-item"
        , carousel: {}
        , slidesContainer: {}
        , slides: {}
        , navigationItems: {}
        , pauseExecution: false
        , idx: 0
    };
})(jQuery);

