// Variables utilisées
var effect = true;

// Coordonnees courante
var posx = 0; 
var posy = 0;
var bulleID = 0;
var bulleArray = new Array;

// Actions lors du chargement du navigateur
window.onload = function() {
	if(document.defaultView) {
		sidebar();
		bulles();
		window.onmousemove = mouse;
		setTimeout('closeBulle()',1);
	}
	else {
		var box = confirm('Votre navigateur n\'est pas adapté pour ce site. Souhaitez-vous télécharger un navigateur moderne ?');
		if(box) { document.location = 'http://www.opera.com/download/'; }
	}
}

//	menu()
//	Fonction lançant l'affichage du menu
function sidebar() {
	//	Ajout d'un élément au menu
	get('sidebar',0).innerHTML = '<div id="sidebar-zone"><h2 class="sidebar-zone">Rubriques</h2>'+get('nav',0).innerHTML+'</div>'+get('sidebar',0).innerHTML;
	
	//	On cache le menu existant;	
	var divMenu = get('div',1,get('sidebar',0));
	
	// On cache toutes les parties du menu, afin de générer un nouveau menu
	for(a=0;a<divMenu.length;a++) {
		divMenu[a].style.display = 'none';
	}
	
	//	Ajout du lien "Voir le menu"
	get('footer',0).innerHTML = get('footer',0).innerHTML+'<a onclick="javascript:menuShow();" id="showSidebar"><span>Voir le menu</span></a>';

	//	Création de la boite "menu"
	//	Le script compte le nombre de zones disponibles pour créer
	//	les différents onglets (ensuite réutilisés), il stoque également
	//	les contenues des différentes zones
	var rubriques = get('h2',1,get('sidebar',0));
	var onglets = '';
	for(i=0;i<rubriques.length;i++) {
		onglets += '<a onclick="javascript:rubShow(\''+rubriques[i].className+'\')"><span>'+rubriques[i].innerHTML+'</span></a>';
	}
	
	// On modifie l'ensemble des parametres de la sidebar pour lui ajouter ce menu javascript
	get('sidebar',0).innerHTML = get('sidebar',0).innerHTML+'<a onclick="menuHide()" id="hideSidebar"></a><div class="box"><div id="navbox"><div id="menu"><div id="menu-content"></div><div id="menu-titre"></div><div class="onglets">'+onglets+'</div><a onclick="javascript:scrolling(\'menu-content\',\'up\')" class="scrollup"></a><a onclick="javascript:scrolling(\'menu-content\',\'down\')" class="scrolldown"></a></div><div id="nouveautes"><h2>Titre de la nouvelle</h2><p>Texte</p><a></a></div></div></div>';
}

//	menuShow()
//	Montrer la zone de navigation
function menuShow() {
	get('showSidebar',0).style.display = 'none';
	get('hideSidebar',0).style.display = 'none';
	
	// Affichage du menu et de la rubrique principale
	if(effect) {
		// effetTransitVert(ID,valeur finale,nombre de déplacements,valeur des déplacements,durée)
		get('sidebar',0).style.height = '0px';
		get('sidebar',0).style.display = 'block';
		get('navbox',0).style.marginLeft = '-600px';

		// effets visuels
		effectTransitVert('sidebar',235,0,15.6,15,10);
		setTimeout("effectTransitHoriz('navbox',625,-600,70,10,30)",600);
		setTimeout("rubShow('sidebar-zone')",2000);
		setTimeout("get('hideSidebar',0).style.display = 'block'",2000);
	}
	else {
		get('sidebar',0).style.display = 'block';
		rubShow('sidebar-zone');
	}
}

//	menuHide()
//	Montrer la zone de navigation
function menuHide() {
	get('showSidebar',0).style.display = 'block';
	
	// Affichage du menu et de la rubrique principale
	if(effect) {
		// effetTransitVert(ID,valeur finale,nombre de déplacements,valeur des déplacements,durée)

		// effets visuels
		get('hideSidebar',0).style.display = 'none';
		effectTransitHoriz('navbox',-600,0,60,-10,30);
		setTimeout("effectTransitVert('sidebar',-300,240,18,-15,10)",2000);
		
		//setTimeout("rubShow('sidebar-zone')",2000);
	}
	else {
		get('sidebar',0).style.display = 'block';
		rubShow('sidebar-zone');
	}
}

//	rubShow()
//	Affiche la rubrique demandée
function rubShow(id) {
	// Changement de contenu
	get('menu-content',0).innerHTML = '<div>'+get(id,0).innerHTML+'</div>';
	get('menu-titre',0).innerHTML = get('h2',1,get(id,0))[0].innerHTML;
}

// scrolling()
// Permet a  certains éléments d'etre scrollés
function scrolling(id,type) {
		// Prise de la taille
		div = get('div',1,get(id,0));
		height = getStyle(div[0],'height');

		// Transformation de la donnée : 
		// suppression du texte pour ne laisser que la partie
		// nombre. 
		height = Math.ceil(height.replace(/px/,''));
		top = Math.ceil(div[0].style.marginTop.replace(/px/,''));

		// Verification de la situation
		// En fonction du type sélectionné, les effets seront différents
		// - "up" : fait remonter le texte
		// - "down" : l'inverse
		if(type == 'up' && top < 0) div[0].style.marginTop = (top+30)+'px';
		if(type == 'down' && 145-height < top) 	div[0].style.marginTop = (top-30)+'px';
}

//	effectTransitVert()
//	Affiche progressivement une boite
function effectTransitVert(id,end,init,dep,nb,time) {
		if(nb > 0) {
			if(dep > 0) {
				get(id,0).style.height = (init+end-dep*nb)+'px';
				setTimeout('effectTransitVert("'+id+'",'+init+','+end+','+(dep-1)+','+nb+','+time+')',time);	
			}
		}
		else {
			if(dep > 0) {
				get(id,0).style.height = (init+end-dep*nb)+'px';
				setTimeout('effectTransitVert("'+id+'",'+init+','+end+','+(dep-1)+','+nb+','+time+')',time);	
			}
		}
}

//	effectTransitHoriz()
//	Affiche progressivement une boite
function effectTransitHoriz(id,end,init,dep,nb,time) {
	if(nb > 0 ) {
		if(dep > 0) {
			get(id,0).style.marginLeft = (init+end-dep*nb)+'px';
			setTimeout('effectTransitHoriz("'+id+'",'+init+','+end+','+(dep-1)+','+nb+','+time+')',time);	
		}
	}
	else {
		if(dep > 0) {
			get(id,0).style.marginLeft = (init+end-dep*nb)+'px';
			setTimeout('effectTransitHoriz("'+id+'",'+init+','+end+','+(dep-1)+','+nb+','+time+')',time);	
		}
	}
}

//	get()
//	Prend un élément (un diminutif de "document.getElementById")
//	Lorsque i=0, un ID doit etre mentionné
//	Lorsque i=1, une balise doit etre indiquée
function get(info,i,from) {
	if(!from) {
		if(i == 0) return document.getElementById(info);
		if(i == 1) return document.getElementsByTagName(info);
	}
	else {
		if(i == 0) return from.getElementById(info);
		if(i == 1) return from.getElementsByTagName(info);
	}
}

// getStyle()
// Récupére des informations générées par le navigateur
// notamment la taille de certains blocs (etc)
function getStyle(element,valeur) {
	if(document.defaultView) {
		return (document.
				defaultView.
				getComputedStyle(element, null).
				getPropertyValue(valeur));
	}
}

// bulle()
// Liste tous les liens dans les paragraphes 
// afin de pouvoir ajouter un effet lors du survol
function bulles() {
	// On capture la zone contenant l'intégralité des liens
	var liens = get('a',1,get('article',0));
	
	// On liste l'intégralité des liens
	for(i=0;i<liens.length;i++) {
		addEvent(liens[i],'mouseover',bulleView);
		addEvent(liens[i],'mouseout',bulleClose);
	}

	get('footer',0).innerHTML = get('footer',0).innerHTML+'<div id="bulle"></div>';
}

function bulleView(a) {
	var a = getNodeWithTag(getEventTarget(a), "a");
	var bulle = document.getElementById('bulle');
	
	// Information qui sera contenue dans l'info-bulle
	if(a.title) {
		content = a.title;
		a.name = a.title;
		a.title = '';
	}
	else if(a.href) content = a.href;
	
	// on capte le document
	bulleID++;
	
	// Définition du lien
	if(a.id == '') a.id = 'bulle-'+bulleID;
	ID = a.id;

	// Création de la bulle si elle n'existe pas
	var bulleDiv = document.getElementById('Div-'+ID);
	if(bulleDiv == null) {
		bulle.innerHTML = bulle.innerHTML+'<div id="Div-'+ID+'><p>'+content+'</p></div>';
		
		bulleDiv = document.getElementById('Div-'+ID);
		
		bulleDiv.style.display = 'block';
		bulleDiv.style.position = 'absolute';
		bulleDiv.style.top = (posy-160)+'px';
		bulleDiv.style.left = (posx-100)+'px';
		bulleDiv.style.opacity = 0;

		afficheBulle(160,true,'Div-'+ID);
		setTimeout('afficheBulle(100,false,\'Div-'+ID+'\')',5000);
	}
	else {
		bulleDiv = document.getElementById('Div-'+ID);
		
		bulleDiv.style.display = 'block';
		bulleDiv.style.position = 'absolute';
		bulleDiv.style.top = (posy-160)+'px';
		bulleDiv.style.left = (posx-100)+'px';
		bulleDiv.style.opacity = 0;
		
		afficheBulle(160,true,'Div-'+ID);
		setTimeout('afficheBulle(100,false,\'Div-'+ID+'\')',5000);
	}
	
	//setTimeout('closebulle',3600);
}

function bulleClose(a) {
	var a = getNodeWithTag(getEventTarget(a), "a");
	var bulle = document.getElementById('bulle');
	
	// Information qui sera contenue dans l'info-bulle
	if(a.name) {
		a.title = a.name;
		a.name = '';
	}
	afficheBulle(100,false,'Div-'+a.id);
	bulleArray.unshift(a.id);
}

function closeBulle() {
	for(i=0;i<bulleArray.length;i++) {
		if(bulleArray[i] != null) {
			// Verification de la disparition de l'élément
			var verif = document.getElementById('Div-'+bulleArray[i]);
			if(verif.style.opacity == 1 || verif.style.opacity == 0) {
				afficheBulle(100,false,'Div-'+bulleArray[i]);
			}
			else {
				bulleArray[i] = null;
			}
		}
	}

	setTimeout('closeBulle()',1);
}

function afficheBulle(top,act,id) {
	var bulle = get(id,0);
	if(act) {
		bulle.style.display = 'block';
		bulle.style.opacity = (160-top)/80;
		bulle.style.top = (posy-top)+'px';
		if(top > 80) {
			setTimeout('afficheBulle('+(top-5)+',true,"'+id+'")',10);
		}
	}
	else {
		bulle.style.opacity = (160-top)/80;
		//bulle.style.top = (posy-top)+'px';
		if(top < 160) {
			setTimeout('afficheBulle('+(top+5)+',false,"'+id+'")',10);
		}
		if(top == 160) bulle.style.display = 'none';
	}
	this.bulleloc = true;
}

// addEvent()
// by Scott Andrew
// add an eventlistener to browsers that can do it somehow.
function addEvent(obj, evType, fn)
	{
	if (obj.addEventListener)
		{
		obj.addEventListener(evType, fn, true);
		return true;
		}
	else if (obj.attachEvent)
		{
		var r = obj.attachEvent('on'+evType, fn);
		return r;
		}
	else
		{
		return false;
		}
	}

// mouse()
// Trouvée chez Maurice Svay <http://svay.com>
// fonction facilement trouvable sur Internet puisque tres répendue
function mouse(e){
    if (!e) var e = window.event;
    if (e.pageX || e.pageY)
    {
        this.posx = e.pageX;
        this.posy = e.pageY;
    }
    else if (e.clientX || e.clientY)
    {
        this.posx = e.clientX + document.body.scrollLeft;
        this.posy = e.clientY + document.body.scrollTop;
    }
}

// effect()
// Effets speciaux
function effect(id,styl,ini,end,incre,time) {
	var element = document.getElementById(id);

	if(styl == 'height')	element.style.width= ini+'px';
	if(styl == 'width') 	element.style.width = ini+'px';
	if(styl == 'margin-left') element.style.marginLeft = ini+'px';
	
	// Si on va dépasser la taille autorisée
	// on redéfinie incre
	if((ini+incre) > end && incre > 0) incre = end-ini;
	if((ini+incre) < end && incre < 0) incre = end+ini;

	if(ini != end && (ini+incre) <= end && incre > 0)
		setTimeout('effect("'+id+'","'+styl+'",'+(ini+incre)+','+end+','+incre+','+time+')',time);
		
	if(ini != end && (ini+incre) >= end && incre < 0)
		setTimeout('effect("'+id+'","'+styl+'",'+(ini+incre)+','+end+','+incre+','+time+')',time);
}

// Fonctionnalitées reprises du script NiceTitle
// getNodeWithTag()
function getNodeWithTag(el, tag) {
	// toLowerCase is for Gecko bug, supposed to be uppercase
	tag = tag.toLowerCase();
	while ((el != null) && ((el.nodeType != 1) || (el.tagName.toLowerCase() != tag)))
		el = el.parentNode;
	return el;
}

// getEventTarget()
function getEventTarget(event)
{
	if (window.event && window.event.srcElement)
		return window.event.srcElement;
	else if (event && event.target)
		return event.target;
	return null;
}