/****************************************
 * @PlugginName 'Maiki's Gallery'
 * @author msurrel
 * @date 01/04/2010
 * @version 1.0 Beta
 ****************************************/

(function($){
	$.fn.gallery = function(options){
		
		/**************************/
		/** Variables par défaut **/
		/**************************/
		var defaults = {
				TxtFrom: 1,
				TxtTo:	 3
		};
			
		var opts = $.extend(defaults, options);
		
		/***********************************************/
		/** Calcul des position Top et Left du pop-up **/
		/***********************************************/
		
		function CenterPopUp()
		{
			var windowWidth = document.documentElement.clientWidth;
			var windowHeight = document.documentElement.clientHeight;
			var popupHeight = $("#popup").height();
			var popupWidth = $("#popup").width();
			$("#popup").css({
				"position": "absolute",
				"top": 30,
				"left": windowWidth/2-popupWidth/2
			});
		}
		
		
		
		/**********************************/
		/** Initialisation de la Galerie **/
		/**********************************/
		
		function Gallery_init(event)
		{
			// On affecte la position centrer au pop-up
			CenterPopUp();
			
			// On désactive l'évènement sur le lien a
			event.preventDefault(event);
			
			// on affiche le fond opaque
			$("#backgroundPopup").css("opacity", "0.7").show();
			
			// 40 ms plus tard, on affiche la pop-up
			$("#popup").delay(400).slideDown("fast");
			
			// On supprime les class 'selected' sur les vignettes
			$("div.Gallery_vignettes a img.selected").removeClass("selected");
		}
		
		
		
		/*********************************************************************************/
		/** Evènements sur le click d'une Vignette dans le Front pour lancer la galerie **/
		/*********************************************************************************/
		
		$(this).click(function(event){
			// Initialisation de la galerie
			Gallery_init(event);
			
			// On remonte enhaut de page pour afficher la galerie
			$.scrollTo(0,0,{duration:400});
			
			// Attributs de la première image à afficher
			var Src = $(this).attr("href");
			var Txt = $(this).attr("title");
			
			// On supprime le src de lancienne image
			$("div.Gallery_Img img").removeAttr("src");
			$("div.Gallery_Img img").attr("src",Src);
			
			// Au clic sur la vignette, on laod la nouvelle image et on affiche la barre d'attente
			$("div.Gallery_Img img").attr({src: Src,title:Txt}).fadeIn(800);
			$("div.Gallery_nbImg_Label").text(Txt);
			$("div.Gallery_nbImg_total").text($("div.Gallery_content_vignettes img").length+" images");
			$("div.Gallery_slider_up").css("visibility","hidden");
			$("div.Gallery_slider_down").css("visibility","visible");
			
		});
		
		
		
		/************************************************************/
		/** Evènements sur le click d'une Vignette dans la Galerie **/
		/************************************************************/
		
		$("div.Gallery_content_vignettes a").click(function(event){
			
			// On annule l'évènement du lien au clic sur la vignette
				event.preventDefault();
			
			// On supprime les classes des images selected par défaut
				$("div.Gallery_vignettes a img.selected").removeClass("selected");
			
			// on ajoute la classe 'selected' à la vignette pour effet de selection
				$(this).children("img").addClass("selected");
			
			// Attributs de la futur image à afficher
				// chemin de l'image
				var Src = $(this).attr("href");
				// title de l'image
				var Txt = $(this).attr("title");
			
			//On affiche le Title de l'image en bas à droite de la galerie
			$("div.Gallery_nbImg_Label").text(Txt);
			
			// On supprime le src de lancienne image
			$("div.Gallery_Img img").hide();
			$("div.Gallery_Img img").removeAttr("src");
			
			// On lui réattribut un src tout neuf
			$("div.Gallery_Img img").attr("src",Src);
			$("div.Gallery_Img img").fadeIn(1000);
		});
		
		
		
		/**************************************************/
		/** Evènements sur le click du Bouton Slider Bas **/
		/**************************************************/
		
		$("div.Gallery_slider_down")
		.mouseover(function(){
			// si la souris est dessus, on modifie le background-position
			$(this).css("background-position", "0 -57px");
		})
		.mouseout(function(){
			// Si la souris sort du bouton, on rétablit le background-position
			$(this).css("background-position", "0 -19px");
		})
		.click(function(){
			// On incrémente les textes en bas des vignettes
			opts.TxtTo++;
			opts.TxtFrom++;
			
			// On anime la div qui contient les vignettes (on fait monter)
			$("div.Gallery_content_vignettes").animate({top:"-=146px"}, 250);
			
			// On modifie le texte du bas : Images x à y
			$("span.from").text((opts.TxtFrom));
			$("span.to").text((opts.TxtTo));
			
			// On cache les sliders ou pas
			if(opts.TxtTo >= $("div.Gallery_content_vignettes img").length) $("div.Gallery_slider_down").css("visibility","hidden");
			if(opts.TxtFrom >= 1) $("div.Gallery_slider_up").css("visibility","visible");
		});
		
		
		
		/***************************************************/
		/** Evènements sur le click du Bouton Slider Haut **/
		/***************************************************/
		
		$("div.Gallery_slider_up")
		.mouseover(function(){
			// Au survol de la souris, on modifie le background-position
			$(this).css("background-position", "0 -38px");
		})
		.mouseout(function(){
			// quand la souris quitte le bouton, on rétablit le background-position
			$(this).css("background-position", "0 0");
		})
		.click(function(){
			// On anime la div qui contient les vignettes (on fait descendre)
			$("div.Gallery_content_vignettes").animate({top:"+=146px"}, 250);
			
			// On modifie le texte du bas des : Images x à y
			// On décrémente les textes en bas des vignettes 'Images x à y'
			opts.TxtTo--;
			opts.TxtFrom--;
			$("span.from").text((opts.TxtFrom));
			$("span.to").text((opts.TxtTo));
			
			// On cache les sliders en fonctions des images qui reste à afficher ou non
			if(opts.TxtFrom <= 1) $("div.Gallery_slider_up").css("visibility","hidden");
			if(opts.TxtTo <= $("div.Gallery_content_vignettes img").length) $("div.Gallery_slider_down").css("visibility","visible");
		});
		
		
		
		/*****************************/
		/** Fermeture de la galerie **/
		/*****************************/
		
		$("#backgroundPopup, div.Gallery_close").click(function(){
			$("#popup").slideUp("fast");
			$("#backgroundPopup").delay(500).hide();
			
		});
		
		
	};
	
})(jQuery);
