(function($){

	$.fn.diapo = function(){
		return this.each(function(){

			// Nom de la class représentant l'élément actuellement visible
			var classActive = "actif";

			// Durée du fade
			var dureeFade = 1000;

			// Durée du timer
			var dureeTimer = 6000;

			// Attribution de this (correspondant au div diaporama) à l'objet obj
			var obj = $(this);
			var listeLi = $(obj).find(".image li");
			var listeMenu = $(obj).find(".menuDiapo li");
			var listeCaption = $(obj).find(".caption li");

			// Détermination du nombre de diapo
			var taille = $(listeLi).length;

			// Comportement au survol du menu inférieur
			$(obj).find(".menuDiapo li").hover(function(){
				$(this).css({cursor: "pointer"});
			});

			// Apparition instantané du menuDiapo

			// Apparition du premier élément possédant la classActive
			// Ajout d'un timer afin de corriger un bug qui supprimait l'affichage de la première image sous chrome
			var position = positionImageAffichee();
			var firstTimer = setTimeout(function(){
				apparition(position);
				$(obj).find(".menuDiapo").fadeIn(dureeFade);
			},500);
			
			// Initiation du timer
			var timer = setInterval (function(){

				// Position de l'élément actuellement affiché
				var position = positionImageAffichee();

				// Suppression de la classe puis disparition progressive par appel à la fonction adhoc
				disparition(position);

				// Ajout de la visibilite à l'élément suivant, s'il existe, sinon au premier de la liste
				if (position + 1 < taille){
					apparition(position + 1);
				}
				else{
					apparition(0);
				}

			},dureeTimer);

			// Déclenchement de la transition à la suite d'un clic sur le menuDiapo
			$(obj).find(".menuDiapo li").click(function(){
				clearTimeout(timer);

				// Détermination du lien cliqué et du lien actif
				var position = positionImageAffichee();
				var positionCible = $(this).html() - 1;
				disparition(position);
				apparition(positionCible);
			});

			
			function positionImageAffichee()
			{
				var position = $(obj).find("li." + classActive).index();	
				return position;
			}

			function disparition(position)
			{
				$(listeLi).eq(position).removeClass(classActive).fadeOut(dureeFade);
				$(listeCaption).eq(position).fadeOut(dureeFade);
				$(listeMenu).eq(position).removeClass(classActive);
			}

			function apparition(position)
			{
				$(listeLi).eq(position).addClass(classActive).fadeIn(dureeFade);
				$(listeCaption).eq(position).slideDown(dureeFade).css("opacity","1.0");
				$(listeMenu).eq(position).addClass(classActive);
			}

					
		});

	};

})(jQuery);

