(function($)
{	
	//methode public
	var PublicMethodes =
	{
		init:function(paramUser)
		{
			var defaultParams = 
			{
				nameDivHide:'imgHideDiapo1',
				delayFadeInOut:1000,
				template:null,
				templateVignette:null,
				arrayImg:null,
				thisId:$j(this).attr('id')
			}
			
			return this.each(function()
			{
				var params = $.extend(defaultParams , paramUser);
				
				params.thisId = $j(this).attr('id');
				
				PrivateMethodes.createTemplate(params);
				PrivateMethodes.getImgFromPage(params);
				PrivateMethodes.createVignettes(params);
				
				EventHandlerDiapo.overOutVignettes(params);
				EventHandlerDiapo.clickVignettes(params);
				
				$j('#idConteneurVignettesDiapo' + params.thisId + ' li:first').trigger('mouseover').trigger('click');
			});
		}
	};
	
	//methode privée
	var PrivateMethodes = 
	{
		createTemplate:function(params)
		{
			params.template = '';
			params.template += '<div class="diapoImg" id="idDiapoImg'+params.thisId+'"><img src="../images/ajax-loaderDiapo.gif" width="550" /></div>';
			params.template += '<div class="conteneurVignettesDiapo" id="idConteneurVignettesDiapo'+params.thisId+'"></div>';
			
			$j('#' + params.thisId).html(params.template);
		},
		getImgFromPage:function(params)
		{
			params.arrayImg = null;
			params.arrayImg = [];
			
			$('.' + params.nameDivHide + ' img').each(function(index)
			{
				params.arrayImg.push({url:$(this).attr('src')});
			});
		},
		createVignettes:function(params)
		{
			params.templateVignette = '';
			params.templateVignette += '<ul>';
			var i = 0;
			for(i ; i < params.arrayImg.length ; i++)
			{
				params.templateVignette += '<li><div class="maskImg"><img src="'+params.arrayImg[i].url +'" width="145" /></div></li>';
			}//fin for
			
			params.templateVignette +='</ul>';
			
			$j('#idConteneurVignettesDiapo' + params.thisId).html(params.templateVignette);
			
			Positionning.vignettes(params);
		},
		changePhoto:function(url , params)
		{
			$j('#idDiapoImg' + params.thisId).find('img').fadeOut(params.delayFadeInOut , function()
			{
				$j('#idDiapoImg' + params.thisId).find('img').attr({src:url});
				$j('#idDiapoImg' + params.thisId).find('img').fadeIn(params.delayFadeInOut);
			});
		}
	}
	
	var Positionning = 
	{
		vignettes:function(params)
		{
			//console.log((params.arrayImg.length-1) * $j('#idConteneurVignettesDiapo' + params.thisId + ' ul li').width());
			$j('#idConteneurVignettesDiapo' + params.thisId + ' ul').css({width:(params.arrayImg.length) * ($j('#idConteneurVignettesDiapo' + params.thisId + ' ul li').width() + 20) });
			$j('#idConteneurVignettesDiapo' + params.thisId + ' ul').css({marginLeft:(550 - $j('#idConteneurVignettesDiapo' + params.thisId + ' ul').width())/2 - 0});
		}
	}
	
	var EventHandlerDiapo = 
	{
		overOutVignettes:function(params)
		{
			$j('#idConteneurVignettesDiapo' + params.thisId + ' li').each(function()
			{
				$j(this).animate({opacity:0.5} , 0 , 'linear');
				
				$j(this).bind('mouseover' , function()
				{
					if(!$j(this).hasClass('vignettesAnimActive'))
					{
						$j(this).stop(true , true)
						$j(this).animate({opacity:1} , 200 , 'linear');
					}//fin if
				});
				$j(this).bind('mouseout' , function()
				{
					if(!$j(this).hasClass('vignettesAnimActive'))
					{
						$j(this).stop(true , true)
						$j(this).animate({opacity:0.5} , 200 , 'linear');
					}//fin if
				});
			});
		},
		clickVignettes:function(params)
		{
			$j('#idConteneurVignettesDiapo' + params.thisId + ' li').each(function(index)
			{
				$j(this).bind('click' , function()
				{
					PrivateMethodes.changePhoto($j(this).find('img').attr('src') , params);
					$j(this).addClass('vignettesAnimActive').siblings().removeClass('vignettesAnimActive').trigger('mouseout');
					
					currentImg = index;
				});
			});
		}
	}
	
	
	$.fn.diapoCs = function(methode)
	{
		// Method calling logic
		if(PublicMethodes[methode]) 
		{
			return PublicMethodes[methode].apply(this, Array.prototype.slice.call(arguments , 1 ));
		}//fin if
		else if (typeof methode === 'object' || ! methode ) 
		{
			return PublicMethodes.init.apply(this , arguments);
		}//fin else if
		else 
		{
			$.error( 'Method ' +  methode + ' does not exist' );
		}//fin else
	};
})(jQuery);

