﻿// Initialiser les variables
var slideCommentaires;
var slideRedacteur = null;
var urlRedacteurs = adresseSite+"/redacteurs/redacteurs.xml";
var xmlRedacteurs;
var prochainRedacteur;

// La fonction pour afficher les rédacteurs
afficherRedacteurs = function (xml, ii)
{
	// Se souvenir de l'xml chargé
	xmlRedacteurs = xml;
	
	// Cibler l'endroit où placer le rédacteur dans le document
	var elementRedacteur = document.getElementById('aproposencart');

	// Chopper tous les rédacteurs
	redacteurs = xml.getElementsByTagName('redacteur');

	// Créer les tableaux qui contiendrons les infos des rédacteurs
	var img = new Array();
	var p = new Array();
	var fiche = new Array();
	var nom = new Array();
	
	// Pour tous les rédacteurs
	for (var i=0; i<redacteurs.length; i++)
	{
		// Récupérer les infos
		img[i] = redacteurs[i].getElementsByTagName('img')[0].firstChild.nodeValue;
		p[i] = redacteurs[i].getElementsByTagName('p')[0].firstChild.nodeValue;
		fiche[i] = redacteurs[i].getElementsByTagName('fiche')[0].firstChild.nodeValue;
		nom[i] = redacteurs[i].getElementsByTagName('nom')[0].firstChild.nodeValue;
	}
	
	// Vérifier si c'est le premier
	//if (ii == null)
	//{
		// Tirer un nombre entre 0 et le nombre de rédacteurs
		var i = Math.round(Math.random()*(redacteurs.length-1));
	//}
	///else
	//{
	//	var i = ii;
	///}
	
	// Trouver l'index suivant
	//var prochain = (i == redacteurs.length ? 0 : i+1);
	
	// Créer les éléments à ajouter dans la DOM
	var image = document.createElement("img");
	var paragraphe = document.createElement("p");
	var pEnSavoirPlus = document.createElement("p");
	var a = document.createElement("a");
	var aImage = document.createElement("a");
	
	// Créer les éléments de texte
	var texteParagraphe = document.createTextNode(p[i]);
	var texteEnSavoirPlus = document.createTextNode("En savoir plus...");
	
	// Parametrer ces éléments
	image.setAttribute("src", adresseSite+"/"+img[i]);
	image.setAttribute("alt", nom[i]);
	image.setAttribute("class", "photopresentation");
	pEnSavoirPlus.setAttribute("class", "ensavoirplus");
	a.setAttribute("href", adresseSite+"/"+fiche[i]);
	a.setAttribute("title", "En savoir plus sur "+nom[i]);
	aImage.setAttribute("href", adresseSite+"/"+fiche[i]);
	aImage.setAttribute("title", "En savoir plus sur "+nom[i]);
	
	// Ajouter chaque éléments dans l'ordre puis ajouter à la DOM du document
	paragraphe.appendChild(texteParagraphe);
	a.appendChild(texteEnSavoirPlus);
	pEnSavoirPlus.appendChild(a);
	aImage.appendChild(image);
	elementRedacteur.appendChild(aImage);
	elementRedacteur.appendChild(paragraphe);
	elementRedacteur.appendChild(pEnSavoirPlus);
	
	// Vérifier qu'on soit dans la page a propos
	if (document.getElementById("redacteursApropos"))
	{
		afficherRedacteursAPropos(img, p, nom, fiche);
	}
}

// La fonction pour afficher les rédacteurs dans la page a propos
afficherRedacteursAPropos = function (img, p, nom, fiche)
{
	// Cibler la div des rédacteurs
	var divRedacteurs = document.getElementById("redacteursApropos");
	
	// Pour tous les rédacteurs
	for (var i=0; i<img.length; i++)
	{
		// Créer les éléments à ajouter dans la DOM
		var div = document.createElement("div");
		var image = document.createElement("img");
		var paragraphe = document.createElement("p");
		var pEnSavoirPlus = document.createElement("p");
		var a = document.createElement("a");
		var h3 = document.createElement("h3");
		var lireTouslesArticles = document.createElement("a");
		
		// Créer les éléments de texte
		var texteParagraphe = document.createTextNode(p[i]);
		var texteEnSavoirPlus = document.createTextNode("Voir sa fiche perso.");
		var texteLireTousLesArticles = document.createTextNode("Voir tous ses articles.");
		var texteNom = document.createTextNode(nom[i]);
		
		// Parametrer ces éléments
		div.setAttribute("style", "border: 1px solid #cfd0d2; padding: 5px;");
		image.setAttribute("src", adresseSite+"/"+img[i]);
		image.setAttribute("alt", nom[i]);
		image.setAttribute("style", "float: left; margin: 13px 5px 0px 0px;");
		paragraphe.setAttribute("style", "float: right; width: 410px;");
		pEnSavoirPlus.setAttribute("class", "ensavoirplus");
		pEnSavoirPlus.setAttribute("style", "clear: both;");
		a.setAttribute("href", adresseSite+"/"+fiche[i]);
		a.setAttribute("title", "En savoir plus sur "+nom[i]);
		h3.setAttribute("class", "nomPresentation");
		lireTouslesArticles.setAttribute("style", "float: left;");
		lireTouslesArticles.setAttribute("href", adresseSite+"/author/"+(fiche[i] == "alexis" ? "admin" : fiche[i]));
	
		// Ajouter tout ça dans la div prévue pour ça
		h3.appendChild(texteNom);
		paragraphe.appendChild(texteParagraphe);
		a.appendChild(texteEnSavoirPlus);
		pEnSavoirPlus.appendChild(a);
		div.appendChild(h3);
		div.appendChild(image);
		div.appendChild(paragraphe);
		lireTouslesArticles.appendChild(texteLireTousLesArticles);
		pEnSavoirPlus.appendChild(lireTouslesArticles)
		div.appendChild(pEnSavoirPlus);
		div.appendChild(document.createElement("br"));
		divRedacteurs.appendChild(div);
		divRedacteurs.appendChild(document.createElement("br"));
	}
}

// La fonction pour changer de rédacteur
function changerRedacteur ()
{
	//slideRedacteur = new Fx.Slide('aproposencart', {duration: 200, onComplete:afficherRedacteurs(xmlRedacteurs, prochainRedacteur)});
	//slideRedacteur.slideOut('horizontal');
}

// Afficher le rédacteur suivant
function afficherRedacteurSuivant (xml, i)
{
	//slideRedacteur = new Fx.Slide('aproposencart', {duration: 200, onComplete:afficherRedacteurs(xml, i)});
	//slideRedacteur.slideIn('horizontal');
}

// La fonction pour calculer la position d'un élément dans le document
function calculerDecalage (element)
{
	var valueT = 0, valueL = 0;
	
	do 
	{
		valueT += element.offsetTop  || 0;
		valueL += element.offsetLeft || 0;
		element = element.offsetParent;
	}
	while (element);
	
	var resultat = [valueL, valueT];
	resultat.left = valueL;
	resultat.top = valueT;
	
	return resultat;
}

// La fonction pour scroller directement vers cet élément
function scrollerVers (element, pourcentage)
{
	// Vérifier que le paramtètre pourcentage à été envoyé
	if (pourcentage == null)
	{
		var pourcentage = 100
	}
	
	// Décaler le scroll a cet endroit
	var decalageElement = calculerDecalage(element);
	window.scrollTo(0, decalageElement[1]*(pourcentage/100));
}

// Scroller doucement vers
function animationScrollerVers (element, etapes)
{
	// Créer un objet conteneur
	var objet = new Object();
	objet.etape = 0;
	objet.etapes = (etapes || 10);
	objet.decalage = calculerDecalage(document.getElementById(element));
	
	// Créer la fonction de boucle
	function boucle ()
	{
		// Ajouter une étape
		objet.etape++;
		
		// Le pourcentage
		var pourcentage = objet.etape/objet.etapes;
		
		// Calculer le sinus pour y aller tout en douceur
		var sinus = Math.sin(pourcentage*Math.PI/2)
		
		// Scroller vers cet élément
		window.scrollTo(0, objet.decalage[1]*(sinus)+1);
		
		// Si les étapes sont complètes
		if (objet.etape >= objet.etapes)
		{
			clearInterval(objet.intervale)
		}
	}
	
	// Créer l'interval
	objet.intervale = setInterval(boucle, 10);
}

// La fonction pour cibler les commentaires et ouvrir le panneau
function ciblerCommentaires ()
{
	// Scroller vers la div des commentaires
	animationScrollerVers('commentaire', 40);
	
	// Afficher les commentaires
	slideCommentaires.slideIn();
}

// Les fonctions pour cibler les différentes parties accessibles
function ciblerContenu()
{
	// Scroller vers la div du contenu
	animationScrollerVers('contenu', 40);
	
	
}
function ciblerRecherche()
{
	// Scroller vers la div du contenu
	animationScrollerVers('recherche', 40);
	
	// Passer le focus au champ de recherche
	document.getElementById('champsRecherche').focus();
}
function ciblerMenu()
{
	// Scroller vers la div du contenu
	animationScrollerVers('blocCategories', 40);
}

// La fonction toogle pour ouvrir/fermer le panneau des commentaires
function afficherCommentaires ()
{
	slideCommentaires.toggle();
}

// La fonction pour rendre les champs textes magiques :-)
function champMagique (champ, texte, couleur)
{
	// Cibler l'élément
	var element = document.getElementById(champ);

	// Vérifier que l'élément est trouvable
	if (element != null)
	{
		// Se souvenir de toutes ses propriétés
		var champ = champ;
		var texte = texte;
		var couleur = couleur;
		var couleurBase = element.style.color;
		var vide = false;
		
		// L'écouteur d'évènement lorsqu'on séléctionne ce champ
		element.onfocus = function ()
		{
			// Uniquement s'il affiche le texte indiqué
			if (vide)
			{
				// On le vide et on lui remet son style d'origine
				element.style.color = couleurBase;
				element.value = "";
				vide = false;
			}
		}
		
		// L'écouteur d'évènement lorsqu'on deséléctionne ce champ
		element.onblur = function (event)
		{
			// Vérifier le contenu du text après un rafraichissement
			if (event == null && element.value == texte)
			{
				var forcer = true;
			}
			
			// Si le champ est vide
			if (element.value == "" || forcer)
			{
				// On met le texte indiqué avec la couleur indiquée
				element.style.color = couleur;
				element.value = texte;
				vide = true;
			}
		}
		
		// Afficher le texte indiqué dès le départ
		element.onblur();
	}
}

// La fonction de suite de l'initialisation
function suiteInitialiser ()
{
	// Ajouter un texte magique sur le champ de recherche
	champMagique('champsRecherche', 'Rechercher...', '#5588BB');
	
	// Vérifier que les commentaires soient visibles
	if (document.getElementById('commentaire') != null)
	{
		// Ajouter des textes magiques sur les champs d'ajout de commentaire
		champMagique('author', 'Nom', '#5588BB');
		champMagique('email', 'Mail (non publié)', '#5588BB');
		champMagique('url', 'Site', '#5588BB');
		champMagique('comment', 'Commentaire', '#5588BB');
		
		// Créer le slide
		slideCommentaires = new Fx.Slide('contenuCommentaires', {duration: 500});
		
		// Masquer les commentaires s'il n'y a pas de #comment dans l'url
		if (document.location.href.indexOf('#comment') == -1)
		{
			slideCommentaires.hide();
		}
		else
		{
			// Afficher les commentaires
			slideCommentaires.slideIn();
		}
	}
	else
	{
		// Effacer "Aller aux commentaires" de la DOM
		// Cibler le li a supprimer
		var allerAuxCommentaires = document.getElementById('allerAuxCommentaires');
		
		// Cibler la liste des accessibilités
		var listeAccessibilite = document.getElementById('listeAccessibilite');
		
		// Effacer cet enfant
		listeAccessibilite.removeChild(allerAuxCommentaires);
	}
	
	// Afficher mon logo epivoila sur ma page apropos ;-)
	if (document.getElementById('logo-alexis') != null)
	{
		var logoFlashAlexis = new SWFObject(adresseTemplate+"/flash/logo-alexis.swf", "adresseTemplate", "533", "220", "8");
		logoFlashAlexis.addParam("scale", "noscale");
		logoFlashAlexis.addParam("wmode", "opaque");
		logoFlashAlexis.addParam('menu', 'false');
		logoFlashAlexis.write("logo-alexis");
	}
	
	// Récupérer toutes les vidéos à afficher
	var videos = getElementsByClassName(document, "*", "video");
	
	// Vérifier s'il y a des players vidéo flash à afficher
	if (videos.length > 0)
	{
		// Pour toutes les vidéos à ajouter
		for (var i=0; i<videos.length; i++)
		{
			// Récupérer le lien de la vidéo
			var lienVideo = videos[i].firstChild.nodeValue;
			
			// Créer l'objet swfObject de la vidéo
			var objetVideo = new SWFObject(adresseTemplate+"/flash/video.swf", "objetVideo_"+i, "533", "400", "8");
			objetVideo.addParam("scale", "noscale");
			objetVideo.addParam("align", "lt");
			objetVideo.addParam('menu', 'false');
			objetVideo.addParam("allowFullScreen", "true");
			objetVideo.addVariable("lien", lienVideo);
			
			// Mettre un autoPlay à la première vidéo
			if (i == 0)
			{
				objetVideo.addVariable("autoPlay", "true");
			}
			
			// Puis la coller au bon endroit =)
			objetVideo.write(videos[i]);
		}
	}
	
	// Créer l'XHR pour charger les rédacteurs
/*
	var xhr = new zouloux.XHR(urlRedacteurs);
	xhr.onLoad = afficherRedacteurs;
	xhr.onError = function ()
	{
		alert("Oulala! Impossible de charger la liste des rédacteurs... Epimince :-s");
	}
*/
}

// La fonction d'initialisation lancée une fois que la DOM est prête
function initialiser()
{
	// Chopper le nom du navigateur
	var navigateur = navigator.appName;
	
	// Vérifier si c'est IE, ou pas
	if (navigateur == "Microsoft Internet Explorer")
	{
		// Chopper la version d'IE
		var version = navigator.appVersion.split("MSIE ")[1].split(".")[0];
		
		// C'est la version 6, aye!
		if (version == "6")
		{
			// Cibler la div globale
			var global = document.getElementById('global');
			
			// Cibler le body
			var body = document.getElementsByTagName('body')[0];
			
			// Effacer temporairement la div globale
			body.removeChild(global);
			
			// Créer un texte pour indiquer que le navigateur est obsolète
			var h2 = document.createElement("h3");
			var texte = document.createTextNode('Votre navigateur est obsolète, la navigation du site risque d\'être perturbée.\nNous vous invitons a telecharger Mozilla Firefox.');
			h2.setAttribute("id", "erreurIE6");
			h2.appendChild(texte);
			
			// Le placer avant la div globale
			body.appendChild(h2)
			
			// Remettre la div globale
			body.appendChild(global);
		}
		else
		{
			// Continuer l'initialisation
			suiteInitialiser();
		}
	}
	else
	{
		// Continuer l'initialisation
		suiteInitialiser();
	}
	
	// Afficher le logo RSS en Flash
	var logoRssFlash = new SWFObject(adresseTemplate+"/flash/rss.swf", "logoRssFlash", "199", "67", "8");
	logoRssFlash.addParam("scale", "noscale");
	logoRssFlash.addParam("menu", "false");
	logoRssFlash.addParam("wmode", "transparent");
	logoRssFlash.write("logoRssFlash");
	
	// Afficher les redacteurs en flash
	var redacteursFlash = new SWFObject(adresseTemplate+"/flash/redacteurs.swf", "redacteursFlash", "199", "500", "8");
	redacteursFlash .addParam("scale", "noscale");
	redacteursFlash .addParam("menu", "false");
	redacteursFlash .write("aproposencart");
}

// La fonction getElementsByClassName
function getElementsByClassName(oElm, strTagName, strClassName)
{
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++)
	{
		oElement = arrElements[i];		
		if(oRegExp.test(oElement.className))
		{
			arrReturnElements.push(oElement);
		}	
	}
	return (arrReturnElements)
}