(function($) {
	//Définition du plugin
    $.fn.imageflow = function(options) {   
       
        // définition des paramètres par défaut
        var defaults = {
            id: "myImageFlow",
			auto: 3000,
			largeur: 1000,
            tab_marges: [1/60,1/40,1/20,1/10,1/2,9/10,19/20,39/40,59/60],
			tab_tailles: [20,35,55,80,100],
			tab_opacity: [0.2,0.3,0.5,0.9,1],
			opacity:true,
			mode_top: 0,
			speed: 300,
			active_molette: true,
			t_vign: 129
        }; 
		 
        // mélange des paramètres fournis et des paramètres par défaut
        var o = $.extend(defaults, options);       
               
        //nombre de vignettes
		var num_vignettes = $("#"+o.id+" li").length;
		
		//application des dimensions et marges
		var hauteur=o.t_vign;
		$("#"+o.id+">ul").height(hauteur);
		$("#"+o.id+">ul").width(o.largeur-54);
		$("#"+o.id).width(o.largeur);
		
		$("#"+o.id+" .gogauche").css("margin-top", (hauteur-$("#"+o.id+" .gogauche").height())/2);
		$("#"+o.id+" .godroite").css("margin-top", (hauteur-$("#"+o.id+" .gogauche").height())/2);
		
		//recuperation de dimensions
		var hauteur_ul = $("#"+o.id+">ul").height();
		var largeur_ul = $("#"+o.id+">ul").width();
		
		
		
		
		
		//attribution de la class à la vignette du milieu
		var num_vignette_milieu = Math.floor(num_vignettes/2);
		$("#"+o.id+" li:eq("+num_vignette_milieu+")").addClass("vignette_milieu");
		
		//on stock la taille originale des vignettes		
		 $("#"+o.id+" li img").each(function (index, domEle) {
			$(domEle).data("taille_originale", { w: o.t_vign, h: o.t_vign });
		 });
		 
		 //on cache toutes les vignettes
		$("#"+o.id+" li").children("img").hide();
		
		//fonctions de deplacement		
		function godroite(){ 
			
			if(num_vignette_milieu<num_vignettes-1){
				num_vignette_milieu++;
				$("#"+o.id+" li").children("img").hide();
			
				$("#"+o.id+" .vignette_milieu").toggleClass("vignette_milieubis");
				$("#"+o.id+" .vignette_milieu").toggleClass("vignette_milieu");
				$("#"+o.id+" .vignette_milieubis").next().toggleClass("vignette_milieu");
				$("#"+o.id+" .vignette_milieubis").toggleClass("vignette_milieubis");
				
				change_text();
				
				for(var i=0; i<=8; i++){var_zindex(i);}	
				
				for(var i=0; i<=8; i++){var_place(i, 0);}	
			}	
			
			auto_on();	
		}
		
		function gogauche(){ 
			if(num_vignette_milieu>=1){
				num_vignette_milieu--;
				$("#"+o.id+" li").children("img").hide();
				
				$("#"+o.id+" .vignette_milieu").toggleClass("vignette_milieubis");
				$("#"+o.id+" .vignette_milieu").toggleClass("vignette_milieu");
				$("#"+o.id+" .vignette_milieubis").prev().toggleClass("vignette_milieu");
				$("#"+o.id+" .vignette_milieubis").toggleClass("vignette_milieubis");
				
				change_text();
				
				for(var i=0; i<=8; i++){var_zindex(i);}	
				
				for(var i=0; i<=8; i++){var_place(i, 0);}	
			}	
			
			auto_on();
		}
		
		//fonction qui modif le text de la vignette
		function change_text(){
			$("#current_title").html($("#"+o.id+" li:eq("+num_vignette_milieu+")>h3").html());
			$("#current_desc").html($("#"+o.id+" li:eq("+num_vignette_milieu+")>p").html());
		}
		
		//fonction qui met en place les zindex
		function var_zindex(place) {		
			switch (place)
			{
				case 0:
					$("#"+o.id+" .vignette_milieu").prev().prev().prev().prev().children("a").children("img").css("z-index","0");
				break;
				case 1:
					$("#"+o.id+" .vignette_milieu").prev().prev().prev().children("a").children("img").css("z-index","1");
				break;
				case 2:
					$("#"+o.id+" .vignette_milieu").prev().prev().children("a").children("img").css("z-index","2");
				break;
				case 3:
					$("#"+o.id+" .vignette_milieu").prev().children("a").children("img").css("z-index","3");
				break;
				case 4:
					$("#"+o.id+" .vignette_milieu").children("a").children("img").css("z-index","4");
				break;
				case 5:
					$("#"+o.id+" .vignette_milieu").next().children("a").children("img").css("z-index","3");
				break;
				case 6:
					$("#"+o.id+" .vignette_milieu").next().next().children("a").children("img").css("z-index","2");
				break;
				case 7:
					$("#"+o.id+" .vignette_milieu").next().next().next().children("a").children("img").css("z-index","1");
				break;
				case 8:
					$("#"+o.id+" .vignette_milieu").next().next().next().next().children("a").children("img").css("z-index","0");
				break;
			}
				/*modif petit pb derniere img pour presta*/$("#"+o.id+" .vignette_milieu").next().next().next().next().next().children("a").children("img").css("z-index","-1");
		}
			
		//fonction de positionnement et de redimensionnement des vignettes
		function var_place(place, init) {
			switch (place)
			{
				case 0:
					nb_prev = $("#"+o.id+" .vignette_milieu").prev().prev().prev().prev();
				break;
				case 1:
					nb_prev = $("#"+o.id+" .vignette_milieu").prev().prev().prev();
				break;
				case 2:
					nb_prev = $("#"+o.id+" .vignette_milieu").prev().prev();
				break;
				case 3:
					nb_prev = $("#"+o.id+" .vignette_milieu").prev();
				break;
				case 4:
					nb_prev = $("#"+o.id+" .vignette_milieu");
				break;
				case 5:
					nb_prev = $("#"+o.id+" .vignette_milieu").next();
				break;
				case 6:
					nb_prev = $("#"+o.id+" .vignette_milieu").next().next();
				break;
				case 7:
					nb_prev = $("#"+o.id+" .vignette_milieu").next().next().next();
				break;
				case 8:
					nb_prev = $("#"+o.id+" .vignette_milieu").next().next().next().next();
				break;
			}
			
			//on verifie que la vignette existe bien
			if(nb_prev.length){
				width = nb_prev.children("a").children("img").data("taille_originale").w;
				height = nb_prev.children("a").children("img").data("taille_originale").h;
			}
			else {
				width = nb_prev.children("a").children("img").width();
				height = nb_prev.children("a").children("img").height() ;
			}

			fact_marge = o.tab_marges[place];
			fact_taille = (place > 4) ? o.tab_tailles[4 - (place - 4)] : o.tab_tailles[place];
			if(o.opacity){
				v_opacity = (place > 4) ? o.tab_opacity[4 - (place - 4)] : o.tab_opacity[place];
			}
			else{
				v_opacity = 1;
			}
			
			//on devoile la vignette concernée
			nb_prev.children("a").children("img").show();
			
			//on ajuste la taille et on place la marge	
			switch (o.mode_top)
			{
				case 0:
					mtop = (hauteur_ul-(fact_taille/100*height))/2;
				break;
				case 1:
					mtop = (hauteur_ul-(fact_taille/100*height));
				break;
				case 2:
					mtop = 0;
				break;
				case 3:
					mtop = (height*fact_taille/200)-o.tab_tailles[0]*hauteur_ul/100;					
				break;
				default:
					alert("Le mode d'affichage est limité entre 0 et 3");
				break;
			}
			
			
			if(init){
				nb_prev.children("a").children("img").css({
					left: ($("#"+o.id+">ul").width()-(fact_taille/100*width))*fact_marge +"px", 
					top: mtop +"px",
					width: fact_taille/100*width, 
					height: fact_taille/100*height}
				);
				//alert(($("#"+o.id+">ul").width()-(fact_taille/100*width))*fact_marge +"px");
				nb_prev.children("a").children("img").animate({
					opacity: v_opacity},
				o.speed);
				init = 0;
			}
			else{
				nb_prev.children("a").children("img").animate({
					left: ($("#"+o.id+">ul").width()-(fact_taille/100*width))*fact_marge +"px", 
					top: mtop +"px",
					width: fact_taille/100*width, 
					height: fact_taille/100*height,
					opacity: v_opacity},
				o.speed);
				
			
				
				
			}

		}
		
		//initialisation
		
		//on place les vignettes a droite et a gauche et on reduit la taille à 0
		for(i=0;i<num_vignettes;i++){
			if(i < num_vignette_milieu){
				$("#"+o.id+" li:eq("+i+") img").css({
					left: 0, 
					top: hauteur_ul/2 +"px",
					width: 0, 
					height: 0,
					display: "none"
				});				
			}
			else{
				$("#"+o.id+" li:eq("+i+") img").css({
					left: largeur_ul+"px", 
					top: hauteur_ul/2 +"px",
					width: 0, 
					height: 0,
					display: "none"
				});					
			}
		}
		
		for(var i=0; i<=8; i++){var_zindex(i);}
		for(var i=0; i<=8; i++){var_place(i, 1);}
		change_text();
		
		//bouttons gauche/droite
		$("#"+o.id+" .gogauche").click(function () {gogauche(); return false;});
		$("#"+o.id+" .godroite").click(function () {godroite(); return false;});
		
		//molette de la souris

		if(o.active_molette){
		var isRunning = false;			
			$("#"+o.id).bind('mousewheel', function(event, delta) {
				if(!isRunning){
				
					isRunning = true;
					(delta > 0) ? gogauche() : godroite();	
					isRunning = false;	
					return false;		
				}
			});
		}	
		
		//avancement automatique
		sens = 1;
		function auto_on(){		
			if(o.auto !=0){	
				$("#"+o.id).stopTime('controlled');
				
				$("#"+o.id).everyTime(o.auto, 'controlled', function(i) {
					if($("#"+o.id+" .vignette_milieu").next().length && sens ==1){
						godroite();
						sens = 1;
					}
					else if($("#"+o.id+" .vignette_milieu").prev().length && sens ==0){
						gogauche();
						sens = 0;
					}
					else if($("#"+o.id+" .vignette_milieu").next().length){
						godroite();
						sens = 1;
					}
					else{
						gogauche();
						sens = 0;
					}				
				});
			}			
		}
		
		auto_on();

        // interface fluide
        return $(this);
    };   
})(jQuery);
