//-------------------------------------------------------------------------------------------------------------
// FICHIER:	animations.js
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	Bibliothèque de fonctions d'animation JavaScript    
//-------------------------------------------------------------------------------------------------------------
// FONCTIONS DISPONIBLES:
//  	Défilement horizontal d'une ligne de texte:
// 	- InitDefilement(  <Ref. sur div contenant le texte> )
//	- Defilement(  <Refsur div contenant le texte> )

//  	Simulation vol des oiseaux dans les vignettes d'en-tête:
// 	- InitVol(  <Période d'actualisation> )
//	- Vol ( )

//  	Apparition d'un cadre:
// 	- InitApparition ( <Id. du cadre>,  <Période d'animation>, <Largeur finale>, <Hauteur finale>,  <OpacitéFinale> );
//	- Apparition( )

//-------------------------------------------------------------------------------------------------------------
// DEVELOPPEE PAR:	Association A.T.L.A.N.T.I.C
//-------------------------------------------------------------------------------------------------------------
// DATE DE LA DERNIERE MODIFICATION:	08/09/08 
//-------------------------------------------------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------
// DONNEES GLOBALES:
//-------------------------------------------------------------------------------------------------------------

// 	Page web en cours
	var IdPage;								// 0 => portail, 1=> page principale

//	Données relatives a l'evenement de synchronisation
	var CtSynchro = 0;
	var	TimerSynchro;
	var TabSynchro = new Array (0, 0, 0);  // TabSynchro [n]  = période d'animation pour la neme fonction.
	var	DimTabSynchro = 3;

//	Données relatives au défilement horizontal d'un texte dans la page principale
	var	DefilementDiv;
	var	DefilementLeft;	
	var	DefilementLargeur;	

//	Données relatives au défilement vertical d'un texte dans la page portail
	var TabSujets = new Array (0);  	// TabSujets [n]  = Id de l'objet div contenant le neme sujet
	var	NbSujets;					  	// Nombre de sujets traités
	var Coeff_a;						// Coeff. a de la fonct. linéaire de progression de la taille des caractères
	var Coeff_b;						// Coeff. b de la fonct. linéaire de progression de la taille des caractères
	var	MinTop = 15;					// Limite haute du défilement (en %)
	var MaxTop = 80;					// Limite basse du défilement (en %)
	var MaxSize = 1.5;					// Taille maximale des chaînes sujet (en em) 
	var	VitesseVerticale = 1;			// Vitesse de défilement vertical (en %)
	var EcartSujets = 7;
	var TopDepart = 60;
	var StopDefilement = 0;
	
//	Données relatives au vol des oiseaux dans le bandeau	
	var	Img1;
	var	Img2;
	var	Decalage = -700;

//	Données relatives à l'apparition du cadre "ENTRER" dans la page portail.	
	var Cadre = new Array;

//---------------------------------------------------------------------------------------------------------------
// FONCTION:	 LanceTraitementsJavascript
//---------------------------------------------------------------------------------------------------------------
// PRINCIPE: 	Lancement des traitements javascript des pages index.php et Index.php
//---------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:  
//	Après avoir lancé l'horloge de synchronisation la fonction active les traitements 
// d'animation spécifiques de la page concernée 
//---------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	- Entier Page:	Identificateur de page ( 0 pour index.php, 1 pour Index.php
//---------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 09/07/09	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------
// VERSION 1:	
//	- DATE: 27/09/09	AUTEUR: B. Giacomoni 
//	- OBJET:  adaptation au lancement des deux pages Index et index 
//-------------------------------------------------------------------------------------------------------------
function LanceTraitementsJavascript ( Page )
{
	IdPage = Page;			// Sauvegarde de l'Id de la page en cours
	InitSynchro ( 10 );		// Demarrage de l'horloge de synchronisation des animations
	
	if ( Page == 1  )		// Lancement des animations de la page principale (Index.php)
	{
		e = document.getElementById ("id_log");  			// RAZ du login adherent
		if ( e ) e.value = "";
		e = document.getElementById ("id_pass"); 			// RAZ du password adherent
		if ( e ) e.value = "";
				
		CreeMenuPrincipal();								// Création du premier niveau du menu d'accès à la doc. en ligne 	
		
		InitDefilement ( "Defilante", 3, 1600 );			// Lancement du défilement horizontal des sujets dans la div "Defilante"
			
		if ( navigator.appName != "Microsoft Internet Explorer" )			
		{
			InitVol ( 2 );									// Lancement du vol des oiseaux dans les 2 vignettes
		}
	}
	else if ( Page == 0 )		// Lancement des animations de la page portail(index.php)
	{
		InitDefilementSujets ( 1 ); 							// Lancement du défilement vertical des sujets
	}
	else if ( Page == 2 )		// Lancement des animations de la page partenaire(Relations.php)
	{
		if ( navigator.appName != "Microsoft Internet Explorer" )			
		{
			InitVol ( 2 );									// Lancement du vol des oiseaux dans les 2 vignettes
		}
	}
}

//-------------------------------------------------------------------------------------------------------------
// FONCTION:	InitSynchro  
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	Initialisation de l'événement de synchronisation 
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//	Crée un événement de synchronisation . 
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	- Entier:			Periode	- Période en ms
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 09/07/09	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------
function InitSynchro ( Periode )
{
	TimerSynchro = setInterval ( GestionSynchro, Periode );
}

//-------------------------------------------------------------------------------------------------------------
// FONCTION:	GestionSynchro  
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	Gestionnaire de l'événement de synchronisation 
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//	Lance les traitements synchronisés. 
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	Aucun
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 09/07/09	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------
function GestionSynchro ( )
{
	var i;

	for ( i = 0; i < DimTabSynchro; i++ )
	{
		if ( CtSynchro%TabSynchro[i] == 0 ) // Animation page Index.php
		{
			if ( IdPage == 1 )
			{
				switch ( i )
				{
					case 0: 
						Defilement ();
						break;
					case 1: 
						Vol();
						break;
					default: 
						break;
				}
			}
			else if ( IdPage == 0 )			// Animation page index.php
			{
				switch ( i )
				{
					case 0: 
						DefilementSujets ();
						break;
					default: 
						break;
				}
			}
			else if ( IdPage == 2 )			// Animation page Relations.php
			{
				switch ( i )
				{
					case 1: 
						Vol ();
						break;
					default: 
						break;
				}
			}
		}
	}

	if ( CtSynchro < 1000000 ) 	CtSynchro++;
	else 					    CtSynchro = 0;
}

//-------------------------------------------------------------------------------------------------------------
// FONCTION:	InitDefilement    
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	Initialisation du défilement d'un texte contenu dans un cadre
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//	- Le texte doit être contenu dans un bloc div dont l'Id est passé en argument.
//	- La fonction récupère le texte de l'Id et lance une fonction décalant le cadre à gauche 
//	  d'un pixel à chaque appel.
//	 - La période d'appel est donnée par l'argument Delais.
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	- Chaîne de caractères:	Id		- Id de la div contenant le texte
//	- Entier:			NbCycles	- nombre de cycles de synchro. entre 2 décalages de 1 pixel
//	- Entier:			Largeur	- Largeur du cadre en pixels
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 08/09/08	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------
function InitDefilement ( Id, NbCycles, Largeur )
{
	var	Chaine;
	
	DefilementDiv = document.getElementById ( Id );
	DefilementLeft = 0;
	DefilementLargeur = Largeur;
	Chaine = 	DefilementDiv.innerHTML;
	DefilementDiv.innerHTML = DefilementDiv.innerHTML.concat ( Chaine );

	TabSynchro [0] = NbCycles;
}

//-------------------------------------------------------------------------------------------------------------
// FONCTION:	Defilement    
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	Défilement d'un texte 
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//	- Le texte doit être contenu dans la donnée globale DefilementTexte
//	- La fonction décale le texte de 1 pixel vers la gauche à chaque appel
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	- Aucun
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 08/09/08	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------
function Defilement ()
{
	if ( DefilementLeft > -DefilementLargeur )
	{
		DefilementLeft --;
	}
	else
	{
		DefilementLeft = 0;
	}
	DefilementDiv.style.left = DefilementLeft+"px";
}

//-------------------------------------------------------------------------------------------------------------
// FONCTION:	InitVol    
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	Initialisation du vol des oiseaux dans les 2 vignettes d'en-tête
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:
// 		Lancement de la fonction Vol à l'aide de la fonction setInterval
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	- Entier:			NbCycles		- Durée de la période en nombre de cycles de synchro 
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 01/10/08	AUTEUR: B. Giacomoni
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------
function InitVol ( NbCycles )
{
	Img1 = document.getElementById ( "DivVig1" );
	Img2 = document.getElementById ( "DivVig2" );

	TabSynchro [1] = NbCycles;
}

//-------------------------------------------------------------------------------------------------------------
// FONCTION:	Vol     
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	
//	animation du vol des oiseaux dans les vignettes de l'en-tête	 
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//	Par remplacement périodique de l'image de fond dans les cadres Vignette-1 et Vignette-2	 
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	- Aucun
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 01/10/08	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------
function Vol ()
{
	Img1.style.left = Decalage+"px";
	Img2.style.left = Decalage+"px";
	if ( Decalage < 0 ) 	Decalage=Decalage+2;
	else					Decalage = -700;
}


//-------------------------------------------------------------------------------------------------------------
// FONCTION:	Ouverture de la fenêtre APropos    
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	
//	Apparition  d'un cadre contenant un texte de présentation du site
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//	par modification du contenu du cadre APropos
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	Objet cadre à remplir
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 13/08/09	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------
function OuvreApropos ( e ) 
{
	e.style.border = "1px solid white";
	e.innerHTML = 	"Créé par<br />Association A.T.L.A.N.T.I.C<br />Développeurs:<br />Bernard GIACOMONI<br />(conception générale)<br />Vanessa GIACOMONI<br />(ergonomie et graphisme)";
}

//-------------------------------------------------------------------------------------------------------------
// FONCTION:	Fermeture de la fenêtre APropos    
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	
//	Effacement  du cadre contenant un texte de présentation du site et réaffichage de l'invite "a propos..."
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//	par modification du contenu du cadre APropos
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	Objet cadre à remplir
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 13/08/09	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------
function FermeApropos ( e ) 
{
	e.style.border = "";
	e.innerHTML = "A propos du<br />Site A.T.L.A.N.T.I.C";
}

//-------------------------------------------------------------------------------------------------------------
// FONCTION:	DefilementSujets    
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	
//	Défilement vertical et d'arrière en avant des sujets sur la page portail
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//	Les sujets sont crées dans des blocs dont l'Id est de la forme SujetTraite-** 
// (** étant un numero de sujet de 0 à n, dans l'ordre ou ils sont écrits dans la variable 
//  php $ListeSujets). c'est la fonction php GererListeSujets qui s'en charge. 
// La fonction ci-dessous assure le défilement de bas en haut et d'arrière en avant des
// chaînes de caractères en déplaçant les blocs et en recalculant les espacements et la 
// taille des caractères en fonction de leur nouvelle position   
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:     aucun
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 28/09/09	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------

function DefilementSujets () 
{
	var i;
	var Chaine, Position, FontSize, Top, DPos, Red, Green, ColorRG, ColorB;
	
	// POUR ( Tous les blocs div sujets existants)  FAIRE
	for ( i=0; (i<NbSujets) && (StopDefilement==0); i++ )
	{	
		// Lire la position du bloc et faire progresser la position vers le haut
		Chaine = TabSujets[i].style.top;
		Position = Chaine.indexOf ( "%", 0);
		Chaine = Chaine.substring(0, Position)
		Top =  Chaine.valueOf() - VitesseVerticale;

		// Déplacement des sujets
		TabSujets[i].style.top = Top + '%';

		// SI ( la position d'un sujet est plus haute que la limite verticale ) ALORS
		if ( Top <= MinTop ) 
		{		
			// On arrête la progression et on sort de la boucle
			StopDefilement = 1; 
			break;
		}
		// SINON
		else
		{
			// Rectifier la taille des caractères
			FontSize = (Coeff_a*Top) + Coeff_b;
			TabSujets[i].style.fontSize = FontSize + 'em';
			
			// Déterminer la couleur en fonction de la position
			ColorRG = 3*Top;
			if ( navigator.appName != "Microsoft Internet Explorer" ) ColorRG = parseInt (ColorRG, 10);
			if ( ColorRG > 255 ) ColorRG = 255;
			
			ColorB = 3*Top+50;
			if ( navigator.appName != "Microsoft Internet Explorer" ) ColorB = parseInt (ColorB, 10);
			if ( ColorB > 255 ) ColorB = 255;
			
			TabSujets[i].style.color = 'rgb('+ColorRG+', '+ColorRG+', '+ColorB+')';	
		// FINSI
		}
	// FINFAIRE
	}
}

//-------------------------------------------------------------------------------------------------------------
// FONCTION:	InitDefilementSujets    
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	
//	Initialisation du défilement vertical et d'arrière en avant des sujets sur la page portail
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:     aucun
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 28/09/09	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------

function InitDefilementSujets ( NbCycles) 
{
	var e, i, Top;
	
	
	// Initialiser l'indicateur d'arret de défilement
	StopDefilement = 0;
	
	// Calculer les coefficients de la fonction linéaire de progression de la taille des caractères 
	// en fonction de la position verticale
	Coeff_a = MaxSize/(MinTop-MaxTop);
	Coeff_b = -(MaxTop*MaxSize)/(MinTop-MaxTop);

	// Rechercher un bloc SujetTraite-0
	TabSujets[0] = document.getElementById ("SujetTraite-0");
	
	// TANT QUE ( Il existe des blocs SujetTraite-** dans la page courante ) FAIRE
	i = 0;
	while ( TabSujets[i] )
	{	
		// Compter les sujets 
		i++;
		
		// Rechercher le bloc suivant
		Id = "SujetTraite-"+i;
		TabSujets[i] = document.getElementById ( Id );		

	// FINFAIRE
	}
	
	// Sauvegarde du nombre de sujets a traiter
	NbSujets = i;
	
	// Calculer les positions verticales initiales dans la page
	for ( i=0; i<NbSujets; i++)
	{
		Top = (TopDepart+(EcartSujets*Math.sqrt(i)));
		TabSujets[i].style.top = Top +'%';
	}
	
	// Initialisation de la table des synchronisations
	TabSynchro [0] = NbCycles;	
}


//-------------------------------------------------------------------------------------------------------------
// FONCTION:	Ouverture d'une fenêtre    
//-------------------------------------------------------------------------------------------------------------
// PRINCIPE:	
//	Apparition  d'une nouvelle fenêtre
//-------------------------------------------------------------------------------------------------------------
// FONCTIONNEMENT:	
//	par windox.open
//-------------------------------------------------------------------------------------------------------------
// PARAMETRES D'APPEL:
//	string	Page				- Page html contenu
// 	int		width				- Largeur en pixels
//	int		height			- hauteur en pixels
//-------------------------------------------------------------------------------------------------------------
// VERSION 0:	
//	- DATE: 13/08/09	AUTEUR: B. Giacomoni 
//	- OBJET: Création 
//-------------------------------------------------------------------------------------------------------------

function OuvreFenetre ( page, width, height ) 
{
	window.open ( 	  page,"nom_popup"
					, "menubar=no, status=no, scrollbars=no, menubar=no, width="+width+"height="+height);
}

