function Carrousel_init() {

    var delai = parseInt($(".carrouselVitesseDefilement").text());;
    if ((delai == null) || isNaN(delai) || (delai <= 0)) {
        delai = 5000;
    }
    var base = $(".carrouselBase");
    var nav = base.children(".carrouselNavigation");
    var pages = base.children(".carrouselPrincipal").children(".carrouselPage");
    var cacherCarrousel = true;
    
    //Interrompre l'initialisation si il n'y a aucune image à afficher.
    if (pages.length == 0) {
        return false;
    }
    //Dans le cas d'un carrousel contenant une seule image, cacher la navigation.
    else if (pages.length == 1) {
        $(".carrouselPage").show();
        $(".carrouselNavigation").hide();
        cacherCarrousel = false;
    }
    //Création normale de la navigation.
    else {
        nav.append($("<div class=\"carrouselNavigationGauche inactif\"></div>"));
        var numPage = base.children(".carrouselNumPage");

        var i = 0;
        var pageNumCourant = 0;
        var pageNav = 0;
        var dateMaintenant = new Date();
        pages.each(function(index) {
            var datePage = new Date($(this).attr("data-date").replace(/-/g, '/').replace(/T/g, ' '));
            if (dateMaintenant < datePage) {
                $(this).addClass("page" + pageNumCourant);
                var bouton = $("<div></div>")
                bouton.append($(this).find("img").clone());
                bouton.attr('class', 'carrouselNavBouton');
                bouton.attr('data-numPage', pageNumCourant);
                bouton.attr("data-numPageNav", pageNav);
                nav.append(bouton);

                //Incrément du numéro de page de la navigation.
                i += 1;
                if (!(i < 5)) {
                    pageNav += 1;
                    i = 0;
                }
                pageNumCourant += 1;
                
                //Au moins une diapositive à afficher, alors ne pas cacher le carrousel.
                if (cacherCarrousel) {
                    cacherCarrousel = false;
                }
            }
            else {
                $(this).removeClass("carrouselPage");
                $(this).css('display', 'none');
            }
        });

        //Si le carrousel contient des diapositives, mais qu'aucune ne peut être affichée, 
        //interrompre l'initialisation.
        if (cacherCarrousel) {
            return false;
        }
        
        nav.append($("<div class=\"carrouselNavigationDroite inactif\"></div>"));
        nav.append($("<div style=\"clear:both;\"></div>"));

        numPage.text("0");
        $(".carrouselPage.page0").show();
        $('.carrouselNavBouton[data-numPage="0"]').addClass("active");
    }
    
    //Binding des fonctions pour les boutons de navigation.
    $(".carrouselNavigationGauche").click(function() { Carrousel_changerPageNavigation($(this), -1); });
    $(".carrouselNavigationDroite").click(function() { Carrousel_changerPageNavigation($(this), 1); });

    //Gestion de l'affichage de la navigation selon le nombre de pages.
    if ($(".carrouselNavBouton").length > 5) {
        $(".carrouselNavBouton[data-numPageNav!=0]").hide();
        $(".carrouselNavigationDroite").removeClass("inactif");
    }
    else {
        $(".carrouselNavigationDroite, .carrouselNavigationGauche").addClass("cache");
    }

    //Initialisation du défilement automatique.
    var timer = setInterval(Carrousel_prochaineDiapo, delai);
    var numPageDiv = $(".carrouselNumPage");
    function Carrousel_prochaineDiapo() {
        var pageActuelle = parseInt(numPageDiv.text());
        var prochainePage = pageActuelle + 1 < $(".carrouselPage").length ? pageActuelle + 1 : 0;
        if (prochainePage == 0) {
            Carrousel_changerPageNavigation(null, 0 - parseInt(ObtenirNumeroPageNavigation()));
        }
        else if ((prochainePage % 5) == 0) {
            Carrousel_changerPageNavigation(null, 1);
        }
        else {
            $(".carrouselPage.page" + pageActuelle).fadeOut("slow");
            $(".carrouselPage.page" + prochainePage).fadeIn("slow");


            $(".carrouselNavBouton[data-numPage=" + pageActuelle + "]").removeClass("active");
            $(".carrouselNavBouton[data-numPage=" + prochainePage + "]").addClass("active");

            numPageDiv.text(prochainePage);
        }
    }

    //Binding de la fonction pour traiter la navigation.
    $(".carrouselNavigation .carrouselNavBouton").bind("click", function() {
        if ($(this).attr("data-numPage") != numPage.text()) {
            $(".carrouselPage.page" + numPage.text()).fadeOut("slow");
            $(".carrouselPage.page" + $(this).attr("data-numPage")).fadeIn("slow");


            $(".carrouselNavBouton[data-numPage=" + numPage.text() + "]").removeClass("active");
            $(this).addClass("active");

            numPage.text($(this).attr("data-numPage"));

            //Arrêt du défilement automatique.
            clearInterval(timer);
        }
    });
    
    function Carrousel_changerPageNavigation(sender, variation) {
        if ( (sender==null) || !(sender.hasClass("inactif")) ) {
            var numPage = ObtenirNumeroPageNavigation();
            $(".carrouselNavBouton[data-numPageNav=" + numPage + "]").hide();
            numPage = parseInt(numPage) + parseInt(variation);
            $(".carrouselNavBouton[data-numPageNav=" + numPage + "]").show();

            $($(".carrouselNavBouton[data-numPageNav=" + numPage + "]")[0]).trigger('click');
            
            if (numPage == 0) {
                $(".carrouselNavigationGauche").addClass("inactif");
            }
            else {
                $(".carrouselNavigationGauche").removeClass("inactif");
            }

            if ($(".carrouselNavBouton").length > ((numPage + 1) * 5)) {
                $(".carrouselNavigationDroite").removeClass("inactif");
            }
            else {
                $(".carrouselNavigationDroite").addClass("inactif");
            }
            DefinirNumeroPageNavigation(numPage);

            //L'appel de "click" arrête le défilement automatique. Toutefois, si sender==null, c'est que c'est le défilement
            //automatique qui a demandé le changement de page. Il faut donc le réactiver manuellement.
            if (sender == null) {
                timer = setInterval(Carrousel_prochaineDiapo, delai);
            }            
        }
    }

    function ObtenirNumeroPageNavigation() {
        return $(".carrouselNumPageNavigation").text();
    }

    function DefinirNumeroPageNavigation(numero) {
        $(".carrouselNumPageNavigation").text(numero);
    }

    //Initialisation réussie.
    return true;
}


