      //
      // create closure
      //
      (function($) {
        //
        // plugin definition
        //
        $.fn.transition = function(settings) {
          // build main options before element iteration
          var settings = $.extend({}, $.fn.transition.defaults, settings);
          return this.each(function() {
            $this = $(this);
            var active = 0;
            // on fait tout disparaitre et on fait réapparaitre le premier
            var selection = $(this).find(settings.target + ' ' + settings.items); 
            selection.css({display:"none"}); 
            selection.eq(active).fadeIn("slow"); 
            // bind sur le prev
            $(this).find(settings.prev).bind("click",function(e){
              var next = active - 1;
              if (next < 0)
                next = $this.find(settings.target + ' ' + settings.items).length - 1 ;
              transition(this,e,next)
              });
              // bind sur le next
            $(this).find(settings.next).bind("click",function(e){
              var next = active + 1;
              if (next >= $this.find(settings.target + ' ' + settings.items).length)
                next =  0 ;
              transition(this,e,next)
              });
              // bind sur les onglets
              selection = $this.find(settings.navigation).bind("click",function(e){
                transition(this,e,selection.index(this));
                
              });
              
              function transition(button,e,next){
              if (settings.onBefore && //callback returns false ?
					     settings.onBefore.call(button, e, selection[next], $(this).find(settings.target), $(this).find(settings.target + ' ' + settings.items), next) === false ) return;
              transite(trouveTransition(settings.nomTransition),active,next);
              }
        function transite (transit,prev,next){
          
          transit.fonction.call(this,{ 
            prev:$this.find(settings.target + ' ' + settings.items).eq(prev) , 
            pos_prev: prev , 
            next: $this.find(settings.target + ' ' + settings.items).eq(next) , 
            pos_next: next,
            navigation: settings.navigation,
            target: settings.target + ' ' + settings.items           
            });
          active=next;
        }
            function trouveTransition(nom){
              for (var i = 0; i < $.fn.transition.transitions.transit.length; i++){
                if ($.fn.transition.transitions.transit[i].nom == nom)
                  return $.fn.transition.transitions.transit[i];
              }
              return $.fn.transition.transitions.transit[1];
            }

            });
          
          };
        $.fn.transition.transitions = {transit: [
          {nom:"pliage" ,
          fonction: function (param){
                param.prev.hide("fold", {size: 100},1500,function(){ 
                param.next.show("fold",{size: 100},1500);}); 
              },
           description: "agit comme un pliage et depliage"   
          },
       {nom:"fondu" ,
          fonction: function (param){
                param.prev.fadeOut(1500,function(){ 
                param.next.fadeIn(1500);}); 
              },
           description: "Transition par fondu sur la couleur sous la diapo"   
          },
       {nom:"diapo" ,
          fonction: function (param){
                param.prev.hide("slide", {direction: "left"},1500,function(){ 
                param.next.show("slide",{direction: "left"},1500);}); 
              },
           description: "Changement de diapo à l'ancienne"   
          },
       {nom:"retrecissement" ,
          fonction: function (param){
                param.prev.hide("scale", {},1500,function(){ 
                param.next.show("scale",{scale:"content"},1500);}); 
              },
           description: "Retrécit au centre"   
          },
       {nom:"puff" ,
          fonction: function (param){
                param.prev.hide("puff", {},1500,function(){ 
                param.next.show("puff",{},1500);}); 
              },
           description: "fondu et zoom avant"   
          },
       {nom:"clignote" ,
          fonction: function (param){
                param.prev.effect("pulsate", {times:5},300,function(){ 
                param.prev.hide(); param.next.show(); });
              },
           description: "clignote 5 fois rapidement avant de faire apparaitre la suite"   
          },
       {nom:"shaker" ,
          fonction: function (param){
                param.prev.effect("shake", {times: 5,distance:75},100,function(){ 
                param.prev.hide(); param.next.show(); param.next.effect("shake", {times: 5,distance:75},100) });
              },
           description: "secoue la boite pour faire apparaitre le suivant"   
          },
       {nom:"rotation" ,
          fonction: function (param){
            param.prev.flip({
					     dir: param.pos_next > param.pos_prev ? "top" : "bottom",
					     endColor: "#FFFFFF",
					     duration:400,
					     onEnd: function(){
					       param.prev.hide();
					       param.next.show();
    						 }
    						});
           },
           description: "permute la diapo par rotation"   
          },
       {nom:"envol" ,
          fonction: function (param){
          var cloneId = "transitionClone_"+(new Date()).getTime();
          param.prev.clone(true)
				    .appendTo("body")
				    .html("")
				    .css({visibility:"visible",position:"absolute",left:param.prev.offset().left,top:param.prev.offset().top,margin:0,width:param.prev.width(),color:"white"}).attr("id",cloneId);
              param.prev.hide();
            $("#" + cloneId).effect("transfer", { to: param.navigation + ":eq(" + param.pos_prev + ")" }, 1000 , function(){
              $(param.navigation + ":eq(" + param.pos_next + ")").effect("transfer", { to: "#" + cloneId }, 1000 , function(){
              param.next.show();
              $("#" + cloneId).remove();
              });
            });
           },
           description: "La diapo vole vers l'onglet."   
          }

        ]};
        $.fn.transition.defaults = {
          active: 0,
          nomTransition: 'fondu'
        };
        $.fn.transition.settings = {
        };
        
      //
      // end of closure
      //
      })(jQuery);

