﻿/* 
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 = jQuery.extend({}, jQuery.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(el) {
                    config.pauseExecution = true;
                    //sakrij sve slajdove
                    config.slides.each(function(i) { jQuery(this).hide(); });
                    //sakri sve nav
                    config.navigationItems.each(function(idx2) {
                        jQuery(this).removeClass("on").removeClass("on-" + parseInt(idx2 + 1)).addClass("off").addClass("off-" + parseInt(idx2 + 1))
                    });                    
                    //pokaži odabrani nav
                    navigationItem.removeClass("off").removeClass("off-" + parseInt(navidx + 1)).addClass("on").addClass("on-" + parseInt(navidx + 1));
                    //pokaži odabrani slide
                    jQuery(config.slides[navidx]).fadeIn("slow")
                });
                
            });
        }

        jQuery.fn.sistrumCarousel.advance(cfgIdx);

        setInterval("jQuery.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) {
        toggle(config, prev, false);
        jQuery(config.slides[prev]).fadeOut("slow", function() { fadeOut_Callback(config, next); });
    }
    function fadeOut_Callback(config, idx) {
        jQuery(config.slides[idx]).fadeIn("slow", function() { toggle(config, idx, true); });
    }
    function toggle(config, idx, state) {
        var step = idx + 1;
        if (state)
            jQuery(config.navigationItems[idx]).removeClass("off").removeClass("off-" + step).addClass("on").addClass("on-" + step);
        else
            jQuery(config.navigationItems[idx]).removeClass("on").removeClass("on-" + step).addClass("off").addClass("off-" + step);
    }

    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);


