/**
 * Karusel
 */

jQuery.fn.carousel = function (userOptions) {
    var options = {
        timer            : null,                                                                // casovac
        showedImage      : null,                                                                // identifikator aktualne zobrazeneho obrazku
        carousel         : this,                                                                // karusel
        numberOfChildren : this.children().length,                                              // pocet obrazku karuselu
        timeout          : ((userOptions && userOptions.timeout) ? userOptions.timeout : 3000), // doba rotace obrazku (vychozi jsou 3s)
        fadeOut          : ((userOptions && userOptions.fadeOut) ? userOptions.fadeOut : 1000), // doba stmivani obrazku (vychozi je 1s)
        fadeIn           : ((userOptions && userOptions.fadeIn) ? userOptions.fadeIn : 1000),   // doba zobrazovani obrazku (vychozi je 1s)
        blick            : ((userOptions && userOptions.blick) ? userOptions.blick : 25)        // doba probliknuti obrazku (vychozi je 25ms)
    }

    // akce nad divy, jenz obsahuji obrazky
    $("#" + this.attr('id') + " div")
        .hover(
            function () {
                // zastavime karusel
                clearTimeout(options.timer);

                // problikneme
                $(this)
                    .children(":first")
                    .hide()
                    .animate(
                        {opacity : 1},
                        options.blick,
                        function () {
                            $(this).show();
                        }
                    );
            },
            function () {
                // spustime karusel
                switchImage(options.showedImage);
            }
        );

    // prepina obrazky
    function switchImage(show) {
        showImage(show);

        // po timeoutu zobrazime dalsi obrazek
        options.timer =
            setTimeout(
                function () {
                    switchImage(
                        ((show + 1 < options.numberOfChildren) ? show + 1 : 0)
                    )
                },
                options.timeout
            );
    }

    // skryva aktualni obrazek a zobrazuje dalsi
    function showImage(show) {
        // poznacime si informaci o aktualne zobrazenem obrazku
        options.showedImage = show;

        // zjistime, ktery obrazek mame skryt
        hide = ((show) ? show - 1 : options.numberOfChildren - 1);

        options.carousel.children(":eq(" + hide + ")")
            .fadeOut(
                options.fadeOut,
                function () {
                    // zobrazime obrazek
                    options.carousel.children(":eq(" + show + ")")
                        .fadeIn(options.fadeIn);
                }
            );
    }

    // provedeme zobrazeni prvniho obrazku
    return switchImage(0);
};
