/**
 * Fichier javascript regroupant les fonctions nécessaire à la page Home
 * JQUERY OBLIGATOIRE
 * @author Jonathan
 */

var classeObjetsObservable 			= '.photo-produit .image-produit';
var classeConteneurProduits 		= '#liste-produits-container .type-C-plus';
var classeReservoirProduits 		= '#liste-produits-reservoir .type-C-plus';
var idConteneur 					= 'liste-produits-container';
var idReservoir 					= 'liste-produits-reservoir';
var prefixeAppelReservoirProduit 	= 0;
var listeFichesActives 				= [];
var remplissageReservoirEnCours 	= false;
var moz 							= {};

/**
 * Constantes
 */
var NB_TYPEC_MIN_DANS_RESERVOIR 		= 10;
var TEMPS_ATTENTE_APRES_FERMTURE_BLOC 	= 1500;

/**
 * Evenement déclanché lors du chargement totale de la page
 * @author Jonathan
 */
jQuery(window).load(function() {
	//Lancement du système masonery sur les éléments graphiques de la home
	jQuery('#elements-graphiques-container').masonry({
		itemSelector : '.bloc-element-graphique',
		columnWidth : 321,
		isFitWidth : true,
		gutterWidth : 5,
		isAnimated: true
	});
	
	//Lancement de la fonction permettant d'afficher les mini fenêtre d'information sur les éléments graphique
	runAnimationsOnCaptions();

	//On lance la construction de la mosaique de produits
	moz = new Mosaique(idConteneur, GAUCHE_VERS_DROITE, true, true);

	//On remplie le réservoir de produits
	remplirMosaiqueDeProduits();
});
/*function updateWall() {
	jQuery('#fb-mur').fbWall({
		id : response.session['uid'],
		showGuestEntries : true,
		showComments : true,
		max : 10,
		timeConversion : 24
	});
}*/

/**
 * Gère les animations sur les conteneurs de texte des éléments graphiques
 * @author Jonathan
 */
function runAnimationsOnCaptions() {
	jQuery('.bloc-element-graphique').each(function(index) {
		var rollover = jQuery(this).find(".texte-rollover");
		if(rollover.length) {
			//On calcule la hauteur du message d'information "caption"
			var hauteur = rollover.height();

			//On positionne par défault le message d'information
			rollover.css('bottom', '-' + hauteur + 'px');

			//On attache l'événement sur l'élément graphique lorsque la souris rentre dans ce dernier
			jQuery(this).mouseenter(function() {
				rollover.stop().animate({
					bottom : '0px'
				}, 600);
			});
			//On attache l'événement sur l'élément graphique lorsque la souris sort de ce dernier
			jQuery(this).mouseleave(function() {
				rollover.stop().animate({
					bottom : '-' + hauteur + 'px'
				}, 600);
			});
		}
	});
}

/**
 * Construit la mosaique et appel la fonction de remplissage du réservoir de produit
 * @author Bertrand
 */
function remplirMosaiqueDeProduits() {

	//On ajoute les blocs produits provenant du réservoir dans l'objet mosaïque
	moz.ajouterListeElements(classeReservoirProduits, true);

	//Lancement du script gérant l'affichage des mini-fiches produits
	listeFichesActives = gestionMiniFicheAgatha($(idConteneur), $$(classeObjetsObservable), null, false, false, listeFichesActives, null);

	//On relance le remplissage du réservoir de produits
	remplirReservoirProduits(false);
}

/**
 * Rempli le réservoir de produits. Le remplissage de la mosaique peut être déclenché à la fin de l'opération.
 * @author Bertrand
 */
function remplirReservoirProduits(declancherRemplissage) {
	remplissageReservoirEnCours = true;
	prefixeAppelReservoirProduit++;

	//Appel de l'url pour récupérer des contenu C. Un prefixe, unique par appel, est passé pour permettre l'affichage multiple d'un meme produit.
	url = '/index.php/ajaxproduit/produitsUtilisateur/index/prefixe/appel' + prefixeAppelReservoirProduit;

	var myAjax = new Ajax.Updater(idReservoir, url, {
		method : 'get',
		parameters : {},
		insertion : Insertion.Bottom,
		asynchronous : true,
		evalScripts : true,
		onComplete : function(response) {
			listeFichesActives = gestionMiniFicheAgatha($(idConteneur), $$(classeObjetsObservable), null, true, false, listeFichesActives, null);
			//On "observe" les clics sur les boutons ajouter
			$$('.bouton-ajout-panier').each(function(element) {
				element.observe('click', ajouterProduitAuPannier);
			});
			if(declancherRemplissage) {
				remplirMosaiqueDeProduits();
			}
			remplissageReservoirEnCours = false;

		}
	});
}

/**
 * Supprime un bloc de type C.
 * - identification du bloc à supprimer
 * - masque le contenu
 * - simule un chargement (loader)
 * - ajout un nouvelle élément dans la mosaique ou dans les blocs "autour"
 * @author Bertrand, Jonathan
 */
function supprimerProduit(elementId, miniFicheId) {
	//fermeture de la mini-fiche
	$(miniFicheId).hide();

	//Récupération de l'élément produit
	element = $(elementId);

	//Récupération du format produit (C1, C2 etc...)
	divAvecFormat = element.childElements()[0];

	//Récupération de l'élément en entier
	divTypeC = element.ancestors()[0];

	//Récupération de la classe du format bloc produit
	classes = $w(divAvecFormat.className);
	classDuFormat = classes[0];

	//Récupération dans le réservoir produit des produits ayant le même format
	elts = $$("#liste-produits-reservoir ." + classDuFormat).toArray();

	//Suppression de l'élément dans l'objet mosaïque
	moz.supprimerElement(divTypeC, false);

	//On masque le bloc produit au niveau du DOM
	masquerContenuDuBlocProduit(divTypeC);

	//affichage d'un nouveau bloc après une simulation de chargement (loader)
	ouvrirPreload(divTypeC);

	setTimeout(function() {
		//s'il y a un élement du même format, il est inséré en priorité
		if(elts.length > 0) {
			elt = elts[0];
			moz.ajouterElement(elt.ancestors()[1], true);
		} else {
			moz.ajouterListeElements(classeReservoirProduits, true);
		}
		//suppression de l'ancienne balise (laissé dans la mosaique pour afficher les bordures)
		divTypeC.remove();
		listeFichesActives = gestionMiniFicheAgatha($(idConteneur), $$(classeObjetsObservable), null, true, false, listeFichesActives, null);
		fermerPreload();
	}, TEMPS_ATTENTE_APRES_FERMTURE_BLOC);
	
	//rempli le réservoir si besoin
	if($$(classeReservoirProduits).size() < NB_TYPEC_MIN_DANS_RESERVOIR) {
		if(!remplissageReservoirEnCours) {
			remplirReservoirProduits(false);
		}
	}
}

/**
 * Masque le contenu d'un bloc ne laissant afficher que les bordures (utilisé lors de la fermeture d'un bloc)
 * @author Bertrand
 */
function masquerContenuDuBlocProduit(bloc) {
	bloc.setStyle({
		visibility : 'hidden'
	});
}
