// jQuery Alert Dialogs Plugin
//
// Version 0.1
//
// Cory Mika
// http://MKemmat.com/
// 25 janv. 2011
//
//
// Usage:
//		$("ul").comboGenerate({title:"Pays"}); 
//		$("ul").comboGenerate({title:"Pays", callback:functionCallback});
// 
// History:
//
//

(function($) {
	//Définition du plugin
	
	$.fn.comboGenerate = function(options) {	
		
		// définition des paramètres par défaut
		var defaults = {
				title: "",
				callback: null
		};	
		// mélange des paramètres fournis et par défaut
		var opts = $.extend(defaults, options);		
				
		// création d'une liste
		function createList(f){
			
			var idcombo = $(this).attr('id');
			
			// création du contenaire
			var contain = $('<div id="comboContain-'  + idcombo + '" class="comboContain"></div>');
			
			// créer la première zone, affichant l'option sélectionnée
			var cell = $('<h6 class="comboCell">' + opts.title + '</h6>');
			
			// créer l'input caché pour récupérer la valeur lors de l'envoie d'un formulaire
			var form  = $('<input type="hidden" name="form-' + idcombo + '" id="form-' + idcombo + '" value="" />');
			
			// créer la seconde zone, affichant toutes les options
			var combo = $('<ul class="comboPanel"></ul>');				
			
			var pointeur = 1;			
			$(this).find("li").each(function(){
				combo.append($('<li class="comboOpt comboOpt_' + pointeur + '"></li>')
					.click(onSelect)
					.attr("value", 	$(this).attr("value"))
					.append($(this).html())		
				);
				pointeur++;
			});
			
			combo.find("li:first").addClass("first");
			combo.find("li:last").addClass("last");
			

			// on masque la zone déroulante
			combo.hide();
			$.data(cell, "visible", false);
			
			//
			// on remplace la balise ul par notre liste personnalisée
			//
			
			// conteneur principal + input hidden
			$(this).after(contain);
			contain.append(form);
			
			// titre de la combo ou combo selectionné
			contain.append(cell);
			var contentCell = $('<div class="comboCellContent"></div>');				
			form.after(contentCell);
			cell.appendTo(contentCell);
			cell.before('<div class="comboCell-left"></div>');
			cell.after('<div class="comboCell-right"></div><div class="clear"></div>');


			contain.append(combo);
			var contentCombo = $('<div class="comboPanelContent"></div>');				
			contentCell.after(contentCombo);
			combo.appendTo(contentCombo);
			
			
			$(this).remove();
			
			// on positionne l'évènement de déroulage de la liste
			contentCell.click(onCombo);
			
			// Fonction pour afficher le combo
			function onCombo(){		
				// si la liste est déroulée
				if ($.data(cell, "visible")){
					combo.slideUp("fast");
					$.data(cell, "visible", false);
					contentCell.removeClass("comboCellActive");
				} else {
					combo.slideDown("fast");
					$.data(cell, "visible", true);
					contentCell.addClass("comboCellActive");
				}
			}
			
			
			// fonction appelée à chaque sélection d'un élément
			function onSelect(){	
				cell.html($(this).html());
				cell.attr("value", $(this).attr("value"));
				
				form.attr("value", $(this).attr("value"));
				
				combo.slideUp("fast");
				$.data(cell, "visible", false);
				
				combo.find('li').removeClass("selected");
				$(this).addClass("selected");
				contentCell.removeClass("comboCellActive");
				
				// appel d'une fonction personnalisée
				if (opts.callback)
					opts.callback($(this));
			}				
		}
			
		// création d'une liste déroulante personnalisée pour tous les éléments de l'objet jQuery
		$(this).each(createList);	

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

