/**
 * Creation d'une classe pour la gestion de l'affichage de la liste des details de presentation
 * SbpLM : Site Bons Plans Liste Manager
 * author : AFG
 */ 
 var SbpLM = function(popup_mail,popup_mail_content,disable_all_screen) {
	this.div_ouvert = '';
	this.current_div = '';
	this.ligne = null;
	this.rubrique = null;
	this.popup_mail = popup_mail;
	this.popup_mail_content = popup_mail_content;
	this.loading = '';
	this.disable_all_screen = disable_all_screen;
	this.gestion_mail = false;
	this.isPopupModal = false;
	this.callback = null;
}

SbpLM.prototype = {

    /**
	 * on construit un contenu comprenant l'image de loading plus un texte (veuillez patienter (en, fr))
	*/
	buildLoading: function(picture, text) {
		var chaine = '<div id="inLoading">';
		chaine += '	<table style="width:100%; height:100%;">';
		chaine += '		<tr>';
		chaine += '			<td style="vertical-align:middle; text-align:right"><img src="' + picture + '" alt="loading ..." /></td>';
		chaine += '			<td style="vertical-align:middle; text-align:left">' + text + '</td>';
		chaine += '		</tr>';
		chaine += '	</table>';
		chaine += '</div>';
		
		this.loading = chaine;
	},  
	/**
	 * 
	 * cette fonction aura pour but de  :
	 * - verifier si le contenu n'a pas deja ete charge
	 * - afficher une image de tempo dans le div relatif a la demande(le temps d'attendre la fin de la requete ajax asynchrone)
	 * - ouvrir ledit div (plus d'infos, plus de photos ou geolocalisation)
	 * - charger le contenu du div avec le contenu HTML renvoye par la requete Ajax
	 */
	slideManagment : function(rubrique,ligne,url) {
	    var element_courant = rubrique + ligne;
		var loading_courant = 'loading' + ligne;
		if(rubrique!=null && ligne != null) {
			if(this.div_ouvert!='') {
			    // s'il le block  que l'on traite  est deja deroule alors on le ferme
			    if(this.rubrique==rubrique && this.ligne==ligne) {
				    new Effect.SlideUp(	this.div_ouvert,
										{duration: 0.3, 
										 afterFinish: function() {this.div_ouvert = ''; }.bind(this)});  
				} else {  
					new Effect.SlideUp(	this.div_ouvert, {duration: 0.3, 
									 afterFinish: function() {
									        this.ligne = ligne;
											this.rubrique = rubrique;
											this.slideDownAndFill(rubrique, ligne, url);
										 }.bind(this)
									});
				} 
			} else { // on deroule le block concene
				this.slideDownAndFill(rubrique,ligne, url);
			}
		}
	},
	
	/**
	 * fonction qui a pour but de charger et derouler le volet desire
	 * si le contenu a deja ete charge, on deroule simplement le volet
	 */
	slideDownAndFill : function (rubrique, ligne, url) {
		var div = $(rubrique+ligne);
		var sous_div = div.firstChild;
		var callback = url;
		if(div.firstChild.innerHTML != '' ) {			
		    new Effect.SlideDown(rubrique+ligne,
				{ duration: 0.6 ,
				  afterFinish: function() {
							this.div_ouvert = rubrique+ligne;
							this.ligne = ligne;
							this.rubrique = rubrique;
							if ('function' == typeof callback) {
								try {callback();}catch(err_cb){ alert ('Evaluation du script en erreur');}
							} else if ('string' == typeof callback) { try {eval(callback);} catch(e) { /*alert ('le script n\'est pas valide');*/ } }
						}.bind(this)
				});
			
		} else {
		    var div = $(rubrique+ligne);
			var sous_div = div.firstChild;
			this.rubrique = rubrique;
			this.ligne = ligne;
			this.loadLoadingImage(div);
			this.loadHTML(div,url);
		}
	},
	/**
	 * On charge le contenu desire dans l'element correspondant au choix de l'utilisateur
	 * il faut auparavent enrouler l'element en chargement pour derouler le vrai contenu
	 */
	loadHTML: function (div,url) {
	    var sous_div = div.firstChild;
		//Ajax.Updater remplace directement le contenu du div (quand il est deja afficher il peut y avoir des sauts desagreables
	    //new Ajax.Updater(sous_div.id,url, { method: 'get',
		//											asynchronous:true, 
		//											evalScripts: true
		//									});
		new Ajax.Request(url, { 	method: 'get',
									onSuccess : function(contenu){
										new Effect.SlideUp(sous_div.id,
														{	duration: 0.3, 
															afterFinish: function() {
																new Element.update(sous_div.id,contenu.responseText);
																new Effect.SlideDown(sous_div.id,{duration: 0.6});
															}
														});
													
									}.bind(this)
								});
	},
	/**
	 * Fonction qui charge l'image de loading dans l'element voulu
	 * on deroule ensuite le volet correspondant et on definit le div_ouvert
	 */
	loadLoadingImage: function (div) {
		var sous_div = div.firstChild;
	    new Element.update(sous_div.id,this.loading);
		new Effect.SlideDown(div.id,{ duration: 0.3 });
		this.div_ouvert = div.id;
	}
};




