(function($) 
{
	$.fn.filtreCatalogue = function(params) 
	{
		// Fusionner les paramètres par défaut et ceux de l'utilisateur
		defaultParams = 
		{
			url_ajax:'/do/something.php', 				// Fichier ajax appelé, le résultat sera ensuite affiché dans le wrapperContent
			delay:1000,									// 0= aucun délai, la requête ajax est envoyée de suite. >0= Délai d'attente pour voir si l'user change un autre filtre...
			ajax_type:"GET",							// Type de requête = GET ou POST
			wrapperContent:'#wrapper', 					// doit être en position:relative top:0 left:0 (pour bien positionner le loading)
			loadingImg:'loading_catalogue_black.gif', 	// Image du loading
			loadingBgcolor:'000'						// Couleur de fond du bloc loading (prend toute la taille du wrapperContent)
		}
		params = $.extend(defaultParams, params);
		
		var nbchange = 0;
		var timerCatalogue;
		var loading;
		var formulaire = this;
		createLoading();
		
		// A chaque clic sur un input checkbox/radio/text du formulaire
		formulaire.find('input').change(function()
		{
			initLaunch();
		});
		
		function initLaunch()
		{
			if (params.delay>0) // Si on a définit un délai d'attente
			{
				if (nbchange>0) clearTimeout(timerCatalogue); // au second clic, on reset le timer à 0 pour ne pas lancer tout de suite la requête ajax
				else nbchange++; // premier clic
				timerCatalogue = setTimeout(function(){	actionFiltre();	},params.delay); // on retarde la fonction ajax pendant le temps delay pour voir si l'utilisateur ne clique pas sur un autre filtre (évite de lancer 36 requêtes à la suite...)
			}
			else	 // sinon ça lance tout de suite la requête ajax
				actionFiltre();
		}
		
		function actionFiltre()
		{
			loading.fadeIn(500); // Affiche le loading
			
			nbchange=0; // on reset le nombre de clics à 0
			
			var formFields = formulaire.serialize();
			
			// launch the ajax
			$.ajax(
			{
				type: params.ajax_type,
				url: domain+params.url_ajax,
				data: formFields+'&form_send=1',
				success: function(result)
				{
					loading.fadeOut(500);
					$(params.wrapperContent).empty().append(result);
					createLoading();
				}
			});
		}
		
		function createLoading()
		{
			loading = $('<div class="loading_catalogue" style="display:none;position: absolute;top: 0px;left: 0px;width: 100%;height: 100%;background: '+params.loadingBgcolor+' url(\'../files/design/'+params.loadingImg+'\') no-repeat 50% 10px;opacity: 0.9;"></div>').appendTo(params.wrapperContent);
		}
		
		// Gère l'input checkbox spécial "Tous" (pour cocher/décocher toute une liste de checkbox)
		// Pour cela, mettre la classe listcheckbox sur le conteneur des checkbox
		// et mettre la classe all sur la checkbox "Tous"
		$('.listcheckbox input').change(function()
		{
			var listCheckbox = $(this).parents('.listcheckbox');
			var inputAll = listCheckbox.find('.all');
			var idInputAll = inputAll.attr('id');
			
			if ($(this).hasClass('all'))
			{
				if ($(this).attr('checked') == 'checked')
					listCheckbox.find('input').attr('checked','checked');
				else 
					listCheckbox.find('input').attr('checked',false);
			}
			else
			{
				if ($(this).attr('checked') != 'checked') 
					inputAll.attr('checked',false);
				else
				{
					var notallcheck=0;
					listCheckbox.find('input[id!='+idInputAll+']').each(function()
					{
						if ($(this).attr('checked') != 'checked') notallcheck++;
					});
					if (notallcheck == 0) inputAll.attr('checked','checked');
				}
			}
		}); 
			 
		// Permettre le chaînage par jQuery
		return this;
	};
  
})(jQuery);

