/*
## vBegin
## Eclydre Web Manager v1.0.0
## Dateversion 2008-07-07
## File : ../../../cms/template//js/scroller_fade.js
## Changelogs : nc;
## vEnd
*/
// Scroller avec effet Fade 
// 
// Par Sebastien Fichot et VL
// Pour Eclydre
// Projet TV5.org
// First release date : 12 Juin 2008
// 
//
// Revision : 1.4
// Revision date : 18 Juin 2008

// ajout VL pour l'auto-rotate
var autoScroll = new Array();
var doScroll = new Array();

function initScrollers(uniqueBlocid, auto_rotation)
{
	
	if(uniqueBlocid!=''){
		
		// ### COMMON VAR ### //
		var sliderRootElement = uniqueBlocid
		var sliderRootElementID = "#" + sliderRootElement // Ex : #home_une
		var slideElements = $(sliderRootElementID).children('div')
		var slideElementClass = slideElements[0].className.split(' ')[0]
		if(slideElementClass=='' && jQuery.browser.msie)
		{
			slideElementClass = slideElements[0].className.split(' ')[1] // Previens une erreur IE
		}

		// Ex : bloc_hpune
		var slideScrollerPath = sliderRootElementID+' > div.'+scrollerClass // Ex : #home_une > div.scroller
		
			initScroller(sliderRootElement, sliderRootElementID, slideElements, slideElementClass, slideScrollerPath, auto_rotation);
			
		
	}else{
	
	// Instancie le script Scroller pour chacune des divs.scroller.
	$('div.'+scrollerClass).each(function(i)
		{
			
		// ### COMMON VAR ### //
		var sliderRootElement = $(this).parent('div').attr('id')
		var sliderRootElementID = "#" + sliderRootElement // Ex : #home_une
		var slideElements = $(sliderRootElementID).children('div')
		var slideElementClass = slideElements[0].className.split(' ')[0]
		if(slideElementClass=='' && jQuery.browser.msie)
		{
			slideElementClass = slideElements[0].className.split(' ')[1] // Previens une erreur IE
		}
		// Ex : bloc_hpune
		var slideScrollerPath = sliderRootElementID+' > div.'+scrollerClass // Ex : #home_une > div.scroller
		
			initScroller(sliderRootElement, sliderRootElementID, slideElements, slideElementClass, slideScrollerPath, auto_rotation);
			
		});
	}
}
	
function initScroller(sliderRootElement, sliderRootElementID, slideElements, slideElementClass, slideScrollerPath, auto_rotation)
{
	
	// Defini l'affichage par defaut, lorsque nous nous trouvons sur le premier element
  	$(sliderRootElementID+':eq(0) > div.'+slideElementClass+':gt(0)').hide(); // Masque tous les elements de la liste, sauf le premier.
	
  	$(sliderRootElementID+':eq(0) > div.'+slideElementClass+':gt(0)').css('opacity', '0'); // Defini une opcaite a 0 pour tous les elements de la liste sauf le premier.
	
  	$(sliderRootElementID+':eq(0) > div.'+slideElementClass+':eq(0)').css('opacity', '1'); // Defini l'opacite du premier uniquement. Si l'opacite des elements n'etait pas definie, on ne verrai pas l'effet fadeIn/out.
	IEisNotUgglyButSFis(sliderRootElementID+':eq(0) > div.'+slideElementClass+':eq(0)');
	initImages(sliderRootElementID); // Defini les images par defaut.
	
	if (useLoop==false)
	{
		$(sliderRootElementID+' > div.'+scrollerClass+' > ul > li.'+scrollerPrecClass+' > img').hide(); // Cache le buton precedent
		
	}else{
		$(slideScrollerPath + ' > ul > li.'+scrollerPrecClass+' > img').attr('class', $(slideScrollerPath + ' > ul > li.'+scrollerMiddleItemClass).length); // donne au bouton precedent l'ID de la derniere slide.
		
	}
	
 	$(sliderRootElementID+' > div.'+scrollerClass+' > ul > li.'+scrollerSuivClass+' > img').attr('class', '2'); // Defini la valeur par defaut pour le bouton Suivant
  
  
  	// Evenement click sur un bouton rond
  	$(slideScrollerPath+':eq(0) > ul > li.'+scrollerMiddleItemClass+' > img').click(function() {
														 											 
		var objDivId = "#" + this.className
		SwitchIt(objDivId, this, slideElementClass, sliderRootElementID);	
	  	autoScroll[slideScrollerPath] = 0;
	
  	});
  
  	// Evenement click sur Suivant
  	$(slideScrollerPath+':eq(0) > ul > li.'+scrollerSuivClass+' > img').click(function() {
	
		var elmntSwitchers = $(slideScrollerPath + ' > ul > li.'+scrollerMiddleItemClass+' > img') // Liste des elements du milieu														
	 								
									
		var elmntSwitcher = elmntSwitchers[this.className - 1]	
		var objDivId = "#" + elmntSwitcher.className
	
    	SwitchIt(objDivId, elmntSwitcher, slideElementClass, sliderRootElementID);
	  	autoScroll[slideScrollerPath] = 0;
  
  	});
  
    // Evenement click sur Precedent
  	$(slideScrollerPath+':eq(0) > ul > li.'+scrollerPrecClass+' > img').click(function() {
						
		var elmntSwitchers = $(slideScrollerPath + ' > ul > li.'+scrollerMiddleItemClass+' > img') // Liste des elements du milieu																				
									
		var elmntSwitcher = elmntSwitchers[this.className - 1]	
		var objDivId = "#" + elmntSwitcher.className
		
		SwitchIt(objDivId, elmntSwitcher, slideElementClass, sliderRootElementID);
	  	autoScroll[slideScrollerPath] = 0;
 		
  	});

    // Evenement rollover sur le DIV complet
  	$(sliderRootElementID).hover(
      function () {
	  	doScroll[slideScrollerPath] = 0;
      }, 
      function () {
	  	doScroll[slideScrollerPath] = 1;
      }
    );
	  
  	doScroll[slideScrollerPath] = 1;
  	if(auto_rotation) autoScroll[slideScrollerPath] = 1;
	else  autoScroll[slideScrollerPath] = 0;
	setTimeout( "autoSlide( '"+slideScrollerPath+"', '"+sliderRootElementID+"', '"+slideElementClass+"', 5000)", 5000);
  
}
  


function IEisNotUgglyButSFis(objThis)
{
	if(jQuery.browser.msie){
		$(objThis).each(function(){
			$(this).get(0).style.removeAttribute('filter')
		});
	}
}

// ## COMMON FUNCTIONS ## //

// Fonction assurant le switch entre les slides
function SwitchIt(objDivId, elmntSwitcher, slideElementClass, sliderRootElementID)
{
		
		$(objDivId).css('display', 'block') // Redonne le flow a l'element cible
   	 	.siblings('div.'+slideElementClass+':visible').animate({ opacity: '0'}, 'slow').css('display', 'none'); // ##Debug## a faire lorsque plusieurs sur une page
																													// La requete XPath rapide peut nous provoquer le changement de tous les scrollers
	
			
		if(jQuery.browser.msie) // modif VL pour bug IE7
		{
			$(objDivId).css('opacity', '1'); // Affiche l'element cible
			IEisNotUgglyButSFis(sliderRootElementID+ ':eq(0) > div.'+slideElementClass );
		}
		else 
		{
			$(objDivId).animate({ opacity: '1'}, 'slow'); // Affiche l'element cible
		}
		resetImages(sliderRootElementID); 
		
		$(elmntSwitcher).attr("src", imageActive); // Defini l'image signifiant l'activite sur l'image cliquee
		
		setPrecSuiv(sliderRootElementID, objDivId);
																
		makeItSpot(elmntSwitcher);
	
		
}


// Defini les images lors du premier chargement
function initImages(bloc_id)
{
	
	var scroller_element = bloc_id + "> div."+scrollerClass
	var count = 0;
	
	$(scroller_element + ' > ul > li.'+scrollerMiddleItemClass+' > img').each(function(i)
		{
			
			if(count==0){
				
				$(this).attr("src", imageActive);
			}else{
				$(this).attr("src", imageInactive);
			}
			count+=1;
			
		});
}


// Defini l'image signifiant l'innactivite sur chacune des images
function resetImages(bloc_id)
{
	
	var scroller_element = bloc_id + "> div."+scrollerClass
	
	$(scroller_element + ' > ul > li.'+scrollerMiddleItemClass+' > img').each(function(i)
		{
			$(this).attr("src", imageInactive);
			
		});
}

// Envoie un effet de clignotement sur le bouton d'activite de la page
function makeItSpot(element)
{
	// Anime le bouton pour montrer le dernier clic
		$(element).animate({ opacity: '0.2' }, 'fast');
		$(element).animate({ opacity: '1' }, 'fast');
		$(element).animate({ opacity: '0.2' }, 'fast');
		$(element).animate({ opacity: '1' }, 'fast');
}



// Defini la visibilite des bouttons precedents et suivants, ainsi que le parametre class permettant de determiner qui ils appellent.
function setPrecSuiv(bloc_id, lastcall_elementid)
{
	
		var scroller_element = bloc_id + " > div."+scrollerClass
		var elmntPrec = $(scroller_element + ' > ul > li.'+scrollerPrecClass+' > img') // bouton Precedent
		var elmntSuiv = $(scroller_element + ' > ul > li.'+scrollerSuivClass+' > img') // Bouton Suivant
		var elmntSwitcher = $(scroller_element + ' > ul > li.'+scrollerMiddleItemClass+' > img') // Liste des elements du milieu
		
		var count = 1
		var elementCount = $(scroller_element + ' > ul > li.'+scrollerMiddleItemClass).length
		elmntSwitcher.each(function(i)
		{
			
			if ($(this).attr("src")==imageActive)
			{
				
					if(count<elementCount)
					{
						// Il va y avoir un suivant et un precedent
						elmntSuiv.show();
						elmntPrec.show();
							
						elmntPrec.attr('class', count - 1);
						elmntSuiv.attr('class', count + 1);
					
					}
				
					
					if (useLoop==false)
					{
						
						
						if(count==elementCount)
						{
							// On est au dernier
							elmntSuiv.hide('fast');
							
							elmntPrec.show();
							elmntPrec.attr('class', count - 1);
						}
				
						if(count==1)
						{
						// On est au premier
						elmntPrec.hide('fast');
						}
						
						
					}else{ // useLoop = true
					
					
					
						if(count==elementCount) // On est au dernier
						{
							
							
							elmntPrec.attr('class', count - 1);
							
							elmntSuiv.attr('class', 1);
						}
						
						if(count==1)// On est au premier
						{
					
							
							elmntPrec.attr('class', elementCount);
							
							elmntSuiv.attr('class', count + 1);
							
						}
						
					}	
			}
			
			count+=1;
			
		});

	
}

// ajout VL....on va essayer d'automatiser un peu tout ça !

function autoSlide( slideScrollerPath, sliderRootElementID, slideElementClass, timeout) 
{
	var elmntSwitchers = $(slideScrollerPath + ' > ul > li.'+scrollerMiddleItemClass+' > img') // Liste des elements du milieu														
	var elmntSwitcher = elmntSwitchers[$(slideScrollerPath + ' > ul > li.suiv > img').attr('class') - 1]	
	if(elmntSwitcher)
	{
		var objDivId = "#" + elmntSwitcher.className
	
		if(autoScroll[slideScrollerPath])
	 	{
			if(doScroll[slideScrollerPath])
			{
				SwitchIt(objDivId, elmntSwitcher, slideElementClass, sliderRootElementID);
			}
			setTimeout( "autoSlide( '"+slideScrollerPath+"', '"+sliderRootElementID+"', '"+slideElementClass+"', "+timeout+")", timeout);
		}
	}
}
