﻿/* 
Sistrum Carousel jQuery plugin V2
file: jquery.sistrumCarousel2.v2.js 
created 2011 - Sistrum d.o.o. [www.moja-trgovina.net]
*/

(function($) {

    $.fn.sistrumCarousel2 = function(userConfig) {

        var config = jQuery.extend({}, jQuery.fn.sistrumCarousel2.defaultConfig, userConfig);

        config.carousel = jQuery(this);
        config.slidesContainer = jQuery(config.selector_slides, config.carousel);
        config.slides = jQuery(config.selector_slide, config.carousel);

        config.slides.each(function(idx, val) { if (idx != 0) jQuery(config.slides[idx]).hide(); });

        config.slides.mouseenter(function() { config.pauseExecution = true; });
        config.slides.mouseleave(function() { config.pauseExecution = false; });

        if (config.selector_navigation) {
            config.navigationItems = jQuery(config.selector_navigationItem, config.carousel);
            if (config.navigationItems) {
                for (var i = 0; i < config.navigationItems.length; i++) {
                    jQuery.fn.sistrumCarousel2.showSlide(config, i, false);
                }
            }
        }

        if (config.prev) {
            jQuery(config.prev, config.carousel).click(function() {
                jQuery.fn.sistrumCarousel2.showSlide(config, "prev", false);
            });
        }
        if (config.next) {
            jQuery(config.next, config.carousel).click(function() {
                jQuery.fn.sistrumCarousel2.showSlide(config, "next", false);
            });
        }

        if (config.selector_captify) {
            jQuery(config.selector_captify, jQuery(config.slides[0])).each(function() { applyCaptify(config, jQuery(this)); });
        }        

        setInterval(function() { jQuery.fn.sistrumCarousel2.showSlide(config, 'next', true); }, config.delay)

        return this;
    };



    jQuery.fn.sistrumCarousel2.showSlide = function(config, newIdx, automatic) {
        if (automatic && config.pauseExecution) return;
        if (!automatic) config.pauseExecution = true;

        if (newIdx == "prev")
            newIdx = config.idx - 1 < 0 ? config.slides.length - 1 : config.idx - 1;
        else if (newIdx == "next")
            newIdx = config.idx + 1 >= config.slides.length ? 0 : config.idx + 1;

        if (config.prev) jQuery(config.prev, config.carousel).hide("slow");
        if (config.next) jQuery(config.next, config.carousel).hide("slow");

        jQuery.fn.sistrumCarousel2.updateNavigation(config, config.idx + 1, false);

        jQuery(config.slides[config.idx]).fadeOut("slow", function() { jQuery.fn.sistrumCarousel2.fadeOut_Callback(config, newIdx); });
    };


    jQuery.fn.sistrumCarousel2.fadeOut_Callback = function(config, newIdx) {
        jQuery(config.slides[newIdx]).fadeIn("slow", function() {jQuery.fn.sistrumCarousel2.updateNavigation(newIdx + 1, true);});
        
        if (config.selector_captify) {
            jQuery(config.selector_captify, jQuery(config.slides[newIdx])).each(function() { applyCaptify(config, jQuery(this)); });
        }
        
        config.idx = newIdx;

        if (config.prev) jQuery(config.prev, config.carousel).show("slow");
        if (config.next) jQuery(config.next, config.carousel).show("slow");
    };

    function applyCaptify(config, item) {
        //if (item.data("captify") == "yes") return;
        var id = "captify" + jQuery("a.imagelink", item).attr("id");
        var img = jQuery("a.imagelink img", item);
        img.attr("rel", id);
        img.attr("class", "captify");
        jQuery("div.caption", item).attr("id", id);
        img.captify(config.captifyParams);        
        item.data("captify", "yes");
    }

    jQuery.fn.sistrumCarousel2.updateNavigation = function(config, step, state) {
        if (!config.selector_navigation) return;
        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.sistrumCarousel2.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
        , prev: null
        , next: null
        , selector_captify: null
        , captifyParams: null
    };

})(jQuery);


