(function($) {
    $.fn.jDiaporama = function(settings) {
        settings = jQuery.extend({
            start               : 1,
            delai               : 4000,
            auto                : true,
            speed               : 'slow',
            controls            : true,
            div_control         : false,
            controls_position   : 'bottom',
            controls_height     : 40,
            control_btn_space   : 10,
            control_btn         : 'control_diaporama_bouton',
            control_btn_on      : 'control_diaporama_bouton_on'
        },settings);

        var start = settings.start;
        var delai = settings.delai;
        var nbDiapos = this.children('div').length;
        var diapos = new Array();
        var boutons = new Array();
        var hauteur_max = 0;
        var pos = $(this).donne_position();
        var is_timeout = false;
        var conteneur = this;

        //si le settings.start est trop haut, on le repositionne
        if (start > nbDiapos) start = 1;
        var diapo_en_cours = start;

        this.children('div').each(function (i) {
            //on voit quelle div est la plus haute pour définir la hauteur max du diaporama
            if ($(this).height() > hauteur_max) hauteur_max = $(this).height();
            $(this).css({position: 'static'});
            var controle_start = i + 1;
            diapos[controle_start] = $(this);
            $(this).hide();
        });


        function diapo_suivante() {
            if (nbDiapos <= 1) return false;
            var diapo_a_montrer = diapo_en_cours + 1
            if (diapo_a_montrer > nbDiapos) diapo_a_montrer = 1;
            active_diapo(diapo_a_montrer);
            timeout = setTimeout(function() { diapo_suivante(); }, delai);
        }

        function active_diapo(id_diapo) {
            var cur_diapo = diapos[diapo_en_cours];
            var diapo = diapos[id_diapo];
            cur_diapo.hide();
            diapo.fadeIn(settings.speed);

            if(settings.controls && settings.control_btn_on) {
                var cur_bouton = boutons[diapo_en_cours];
                var bouton = boutons[id_diapo];
                cur_bouton.removeClass(settings.control_btn_on);
                cur_bouton.addClass(settings.control_btn);
                bouton.removeClass(settings.control_btn);
                bouton.addClass(settings.control_btn_on);
            }
            diapo_en_cours = id_diapo;
        }

        function init_controls() {
            var div_conteneur = create_controls_div();
        }

        function create_controls_div() {
            var html = '';
            for (i = 1; i <= nbDiapos; i++) {
                html = html + '<div>' + i + '</div>';
            }

            if (settings.div_control) {
                $('#' + settings.div_control).html(html);
                var identifiant_control = '#' + settings.div_control;
            } else {
                var html = '<div class="control_diaporama"></div>';
                var identifiant_control = '.control_diaporama';
            }
            $(identifiant_control).children('div').each(function (i) {
                if (i) {
                    if (settings.control_btn_space) {
                        $(this).before('<div style="float:left; height:1px; width:' + settings.control_btn_space + 'px;"></div>');
                    }
                }
                $(this).css({ float: 'left'});
                $(this).addClass(settings.control_btn);
                $(this).click(function(){
                    if (diapo_en_cours == (i + 1)) return false;
                    if (is_timeout) {
                        clearTimeout(timeout);
                        is_timeout = false;
                    }
                    active_diapo(i + 1);
                });
                boutons[i+1] = $(this);
            });
        }

        if (settings.auto) {
            timeout = setTimeout(function() { diapo_suivante(); }, delai);
            is_timeout = true;
        }
        if (settings.controls) init_controls();
        active_diapo(diapo_en_cours);

    };
    jQuery.fn.extend({
        donne_position : function() {
            obj = $(this).get(0);
            var curleft = obj.offsetLeft || 0;
            var curtop = obj.offsetTop || 0;
            while (obj = obj.offsetParent) {
                     curleft += obj.offsetLeft
                     curtop += obj.offsetTop
            }
            return {x:curleft,y:curtop};
        }
    });
})(jQuery);