/************************************************************************
	* 		Plugin: FOM [Find Out More]
	* 		Author: Diego Desarnaulds
	* 		Compagny: Crédit Agricole Suisse
	* 		Version 0.2
*********************************************************************/

(function($) {
    // définition du plugin
    $.fn.fom = function(params) {
		// parametres par defaut
		var defaults = {
			lang 		: 'fr',
			speed		: 'medium',
			accordion	: false,
			effect		: {show : "fadeIn", hide : "fadeOut"},
			fr 			: {more : "En savoir plus",less : "Moins d'informations"},
			en 			: {more : 'Find out more',less : 'Less information'},
			de 			: {more : 'mehr Informationen',less : 'Informationen schliessen'},
			it 			: {more : 'Maggiori informazioni',less : 'Meno informazioni'},
			es 			: {more : "M\341s infomaci\363n",less : 'Menos infomaci\363n'}
		};
		// extension des parametres au plugin
		var params 	= $.extend(defaults, params);
		
		// labels du bouton
		var labels = eval("params." + params.lang);
		// fom courant et précédent		
		var current;
		var last;
		// compteur pour l'id
		var counter = 0;
		// methodes du plugin
		var methods = {
			// affiche le contenu
			expand : function(o){
				last = current;
				current = o;
				eval("o.content." + params.effect.show + "('" + params.speed + "');")
				o.label.html(labels.less);
				o.arrow.removeClass("fom_arrow_down").addClass("fom_arrow_up");
				o.status = true;
				// en mode accordeon
				if(current && last && (current != last) && params.accordion)
					methods.contract(last);
			},
			//masque le contenu
			contract : function(o){
				eval("o.content." + params.effect.hide + "('" + params.speed + "');")
				o.label.html(labels.more);
				o.arrow.removeClass("fom_arrow_up").addClass("fom_arrow_down");
				o.status = false;
			}
		}
		// parcours tous les éléments du DOM
		return this.each(function(){
			$(this).addClass('fom');
			// pile de li
			var stack = $(this).find('li.fom');
			// parcours des li
			stack.each(function(){
				++counter;
				var content = $(this);
				content.hide();
				content.removeClass("fom").addClass("fom_content");
				// ajout des elements au DOM
				var opener 	= document.createElement('li');
				var table 	= document.createElement('table');
				var tr 		= document.createElement('tr');
				var title 	= document.createElement('td');
				var label 	= document.createElement('td');
				var arrow 	= document.createElement('td');
				// remplissage des elements
				$(title).html(content.attr('title')).addClass('fom_title');
				$(label).html(labels.more).addClass('fom_label');
				$(arrow).addClass('fom_arrow fom_arrow_down');
				// empilage des elements
				$(tr).append(title).append(label).append(arrow);
				$(table).append(tr);
				$(opener).html(table).addClass("fom_opener");
				// ajout de l'opener
				$(this).before(opener);
				// instanciation de l'objet o
				var o = {
					opener 		: $(opener),
					title 		: $(title),
					label 		: $(label),
					arrow 		: $(arrow),
					content 	: content,
					id			: counter,
					status		: false
				};
				// en mode acordeon
				if(params.accordion){
					$(opener).click(function(){
						if(o != current || o.status == false)
							// affiche le contenu
							methods.expand(o);
						else
							// masque le contenu
							methods.contract(o);
					});					
				}else{
					// dans le cas normal
					$(opener).toggle(
						function(){methods.expand(o);},
						function(){methods.contract(o);}
					);
				}
			});
		});	
    };
})(jQuery);

