﻿// Paramètres
var descOpacity = agenda.descOpacity || 0.80;
var carouselScroll = agenda.carouselScroll || 1;
var carouselVisible = agenda.carouselVisible || 3;
var carouselSpeed = agenda.carouselSpeed || 500;
var cycleTimeout = agenda.cycleTimeout || 0;
var cycleSpeed = agenda.cycleSpeed || 1500;
var descAnimDuration = agenda.descAnimDuration || 700;
var idStart = agenda.idStart || 0;
var idNext;
var imgDescNext;

// Fonction lancée lorsque le document est chargé
jQuery(document).ready(function() {	
	jQuery(".agenda_desc").show(); // Afficher le bandeau contenant la description
	jQuery(".agenda_desc").animate({ opacity: descOpacity }, 1 ); // On définit l'opacité du bandeau

	nbImg = jQuery("#agenda_nav").children().length; // Nombre d'images
	idNext = idStart < nbImg - 1 ? idStart + 1 : 0; // Id du prochain évènements (pour la transition automatique)
	imgDescStart = jQuery("#agenda_nav li").eq(idStart).find('.agenda_block').html(); // Description de l'évènement de départ
	imgDescNext = jQuery("#agenda_nav li").eq(idNext).find('.agenda_block').html(); // Description du prochain évènement
	jQuery(".agenda_left .agenda_block").html(imgDescStart); // On recupère la description de l'évènement de départ

	// Initialisations des liens vers l'évènement courant
	jQuery(".agenda_readmore_button a").attr("href", getSingleEventLink(idStart)); 
});

// Récupère le lien vers la description détaillée de l'évènement
function getSingleEventLink(id) {
	return jQuery("#agenda_nav li").eq(id).find(".agenda_single_link a").attr("href");
}

// Fonction de callback pour le carousel
function carousel_initCallback(carousel) {
	// Click sur down
    jQuery('.agenda_carousel_down').bind('click', function() {
        carousel.next();
        return false;
    });
 
	// Click sur up
    jQuery('.agenda_carousel_up').bind('click', function() {
        carousel.prev();
        return false;
    });
	
	// Molette de la souris
	jQuery('#agenda_nav').bind('mousewheel', function(event, delta) {
		if (delta < 0) {
			carousel.next();
		} else {
			carousel.prev();
		}
		
		return false;
	});
};

// Transition des évènements
jQuery(function() { 
	// Configuration de jcarousel
	jQuery("#agenda_nav").jcarousel({
		vertical: true,
        scroll: carouselScroll,
		visible: carouselVisible,
		animation: carouselSpeed,
        initCallback: carousel_initCallback,
        buttonNextHTML: null,
        buttonPrevHTML: null
    });

	// Configuration de cycle
	jQuery('.agenda_images').cycle({ 
		fx: 'fade',
		startingSlide: idStart, // Id de la première image affichée
		timeout: cycleTimeout, // Temps entre 2 transitions (millisecondes), 0 pour désactiver la transition automatique
		speed: cycleSpeed, // Vitesse de transition	
		pager: '#agenda_nav', // Emplacement de liste des évènements
		pagerClick: pagerClick,
		pagerAnchorBuilder: pagerFactory, // Fonction de construction de la liste
		activePagerClass: 'active', // Classe pour l'élément actif (CSS)
		//pause: 1, // Pause lors du survol de l'image
		pauseOnPagerHover: 1, // Pause lors du survol du lien de pagination
		before: onBefore // Fonction qui se déclenche avant la transition
	});
	
	// Passage du pointeur de la souris sur un évènement de la liste
	jQuery('#agenda_nav li').hover(
        function(){ // On ajoute la classe "hover" lorsque le pointeur entre dans la zone
			jQuery(this).addClass('hover'); 
		},
		function() { // On retire la classe "hover" lorsque le pointeur sort de la zone
			jQuery(this).removeClass('hover');
		}
    );
	
	// Passage du pointeur de la souris sur la zone de l'agenda
	jQuery(".agenda_container").hover(
		function(){ // On met en pause les animations lorsque le pointeur entre dans la zone
			jQuery('.agenda_images').cycle("pause");
		},
		function() { // On relance l'animation orsque le pointeur sort de la zone
			jQuery('.agenda_images').cycle("resume");
		}
	);
	
	function pagerClick(zeroBasedSlideIndex, slideElement) {
		imgDescNext = jQuery("#agenda_nav li").eq(zeroBasedSlideIndex).find('.agenda_block').html();
		idNext = zeroBasedSlideIndex;
	}
	// Fonction de construction de la liste (cycle)
	function pagerFactory(idx, slide) {
		// La liste est déjà cosnstruite donc on retourne une chaine vide
		return '#agenda_nav li:eq(' + idx + ')';
    };
	
	// Fonction qui se déclenche avant la transition
	function onBefore(curr, next, opts, fwd) {
		// Animation de la description de l'évènement
		if (opts.addSlide) {
			descHeight = jQuery(".agenda_main_image").find('.agenda_desc').height(); // Hauteur de la description	

			// On lance la fonction d'animation
			jQuery(".agenda_desc").animate({ opacity: "0", marginTop: descHeight }, {duration: descAnimDuration,
					complete: function() {	
						// On ajoute la description de l'évènement voulu	
						jQuery(".agenda_left .agenda_block").html(imgDescNext); 

						// Nouvelle animation pour revenir à la normale avec l'affichage du nouvel évènement
						jQuery(".agenda_desc").animate({ opacity: descOpacity, marginTop: "0" }, {duration: descAnimDuration} )
						
						// Mise à jour des liens
						jQuery(".agenda_readmore_button a").attr("href", getSingleEventLink(idNext));
						
						// Mise à jour de l'id du prochain évènement (transition automatique)
						if (idNext < nbImg - 1) {				
							idNext++;
							jQuery("#agenda_nav").jcarousel('scroll', idNext, true);
						} else {
							idNext = 0;
						}
						
						// On récupère la description de cet évènement
						imgDescNext = jQuery("#agenda_nav li").eq(idNext).find('.agenda_block').html();
					}
				}
			);
		} 	
	}
});
