// ------------ Fonctions génériques ------------ //
var ie = navigator.appName.match(/Internet\s+Explorer/);
var moz = (navigator.userAgent.search(/Firefox\/\d/) != -1);
var saf = (navigator.userAgent.search(/Safari/) != -1);
var chr = (navigator.userAgent.search(/Chrome/) != -1);
// Utile en phase de développement /*
if(!moz) window.onerror=afficheerreur;
function afficheerreur(msg, url, line){
var erreur="";
  erreur+="Erreur : " + msg + "\n\n";
  erreur+="URL : " + url + "\n\n";
  erreur+="Ligne : " + (Number(line)-1).toString() + "\n\n";
alert(erreur);
return true;
}
//*/
function my_$() {
    var elements = new Array();
    for (var i = 0; i < arguments.length; i++) {
      var element = arguments[i];
      if (typeof element == 'string') {
        if (document.getElementById) {
          element = document.getElementById(element);
        } else if (document.all) {
          element = document.all[element];
        }
      }
      elements.push(element);
    }
    if (arguments.length == 1 && elements.length > 0) {
      return elements[0];
    } else {
      return elements;
    }
}

// Rock Solid addEvent method + EventCache "flush" method
function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window, 'unload', EventCache.flush);
// End of Rock Solid addEvent method + EventCache "flush" method

// Constructeur qui crée un objet Cookie pour le document 
// spécifié, avec un nom et des attributs facultatifs
function Cookie(document, name, hours, path, domain, secure) {
	this.$document = document;
	this.$name = name;
	if (hours)
		this.$expiration = new Date((new Date()).getTime() + hours*3600000);
	else this.$expiration = null;
	if (path) this.$path = path; else this.$path = null;
	if (domain) this.$domain = domain; else this.$domain = null;
	if (secure) this.$secure = true; else this.$secure = false;
}
// On crée la méthode store() de l'objet Cookie
Cookie.prototype.store = function () {
	// Boucle dans les propriétés de l'objet Cookie et assemble la valeur du cookie
	var cookieval = "";
	for(var prop in this) {
		if ((prop.charAt(0) == '$') || ((typeof this[prop]) == 'function'))
			continue;
		if (cookieval != "") cookieval += '&';
		cookieval += prop + ':' + escape(this[prop]);
	}
	// Maintenant que nous avons la valeur du cookie, on assemble la chaîne complète
	var cookie = this.$name + '=' + cookieval;
	if (this.$expiration)
		cookie += '; expires=' + this.$expiration.toGMTString();
	if (this.$path) cookie += '; path=' + this.$path;
	if (this.$domain) cookie += '; domain=' + this.$domain;
	if (this.$secure) cookie += '; secure';
	// On stocke maintenant le cookie grâce à la propriété magique Document.cookie
	this.$document.cookie = cookie;
}
// On crée la méthode load() de l'objet Cookie
Cookie.prototype.load = function () {
	// On obtient une liste de tous les cookies concernés par ce document
	var touscookies = this.$document.cookie;
	if (touscookies == "") return false;
	// On extrait de cette liste le cookie désigné
	var start = touscookies.indexOf(this.$name + '=');
	if (start == -1) return false; // Cookie non défini pour cette page
	start += this.$name.length + 1; // Saute le nom et le signe égal
	var end = touscookies.indexOf(';', start);
	if (end == -1) end = touscookies.length;
	var cookieval = touscookies.substring(start, end);
	// On fractionne la valeur du cookie pour obtenir des variables d'état individuelles
	var a = cookieval.split('&'); // tableau de paires nom/valeur
	for(var i=0; i < a.length; i++) // Place chaque paire dans un tableau
		a[i] = a[i].split(':');
	// On définit les noms et les variables d'état dans cet objet Cookie
	for(var i=0; i < a.length; i++) {
		this[a[i][0]] = unescape(a[i][1]);
	}
	// C'est terminé, on retourne le code de succès
	return true;
}
// On crée la méthode remove() de l'objet Cookie
Cookie.prototype.remove = function () {
	var cookie;
	cookie = this.$name + '=';
	if (this.$path) cookie += '; path=' + this.$path;
	if (this.$domain) cookie += '; domain=' + this.$domain;
	cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';
	
	this.$document.cookie = cookie;
}
function cookieHistory(data) {
	var y = window.location.pathname.split('/');
	var x = y[(y.length-1)].split('.');
	if(x[0].match(/\d+/)!=null) {
		var pageActuelle = x[0].match(/\d+/);
		var urlPage = x[0].match(/\d+([-_+\w]*)$/i)[1];
		var titPage = document.getElementsByTagName("h2")[0].innerHTML;
		
		if (!data.load() || !data.pages || !data.titres || !data.urls) {
			data.pages = pageActuelle;
			data.urls = urlPage;
			data.titres = titPage;
		} else { 
			var a = data.pages.split('&');
			var b = data.titres.split('&');
			var c = data.urls.split('&');
			// Si la page actuelle a déjà été visitée, on l'ôte du tableau des pages visitées
			for(var i=0; i<a.length; i++) {
				if (a[i] == pageActuelle) {
					a.splice(i, 1);
					b.splice(i, 1);
					c.splice(i, 1);
					var visited = true;
				}
			}
			// Et on affiche les pages du nouveau tableau
			if (visited) {
				data.pages = "";
				data.urls = "";
				data.titres = "";
				for(var i=0; i<a.length; i++) {
					data.pages += a[i] + '&';
					data.titres += b[i] + '&';
					data.urls += c[i] + '&';
				}
				// En ajoutant la page actuelle à la fin
				data.pages += pageActuelle;
				data.titres += titPage;
				data.urls += urlPage;
			// Si la page actuelle n'a pas été visitée, on l'ajoute simplement à la liste
			} else {
				data.pages += '&' + pageActuelle;
				data.titres += '&' + titPage;
				data.urls += '&' + urlPage;
			}
		}
		data.store();
	}
}
function writeData(data, where, limit) {
	if(data.load() && data.pages) {
		var nPages = data.pages.toString();
		var nTitres = data.titres.toString();
		var nUrls;
		if(data.urls)
			nUrls = data.urls.toString();
		else
			nUrls = '';
		var a = nPages.split('&');
		var b = nTitres.split('&');
		var c = nUrls.split('&');
		var txt, lim;
		var pageEnCours = window.location.pathname.split('/').pop().split('.')[0].match(/\d+/);
		if(pageEnCours == a[a.length-1]) {	
			if (!a[1]) {
				txt = '<ul><li class="encours">' + b[0] + '</li></ul>';
			} else {
				txt = '<ul><li class="encours">' + b[(a.length-1)] + '</li>';
				for(var i=(a.length-2); i>=0; i--) {
					txt += '<li><a href="' + lang + '/' + a[i] + c[i] + '.html">' + b[i] + '</a></li>';
				}
				txt += '</ul>';
			}
		} else {
			txt = '<ul>';
			lim = limit ? a.length-limit : 0;
			for(var i=(a.length-1); i>=lim; i--) {
				txt += '<li><a href="' + lang + '/' + a[i] + c[i] + '.html">' + b[i] + '</a></li>';
			}
			txt += '</ul>';
		}
		my_$(where).innerHTML = txt;
	}
}

var ok = false;
function detect(e) {
	var touche = (window.Event) ? e.which : event.keyPress;
	if (touche == 120 || touche == 88) {
		ok = true;
	} else if((touche == 115 || touche == 83) && ok) {
		ok = false;
		touche = "";
		if(!my_$("loginDiv")) loginAdmin();
		else {
			my_$("loginDiv").style.display = "";
			my_$("loginBox").style.display = "";
		}
		my_$('id').focus();
		my_$('id').value = "";
	} else {
		ok = false;
	}
}
function detect2(e) {
	var touche = (window.Event) ? e.which : event.keyDown;
	if((touche == 27) && (my_$("loginDiv"))) {
		ok = false;
		my_$("loginDiv").style.display = "none";
		my_$("loginBox").style.display = "none";
	}
}
addEvent(document, "keyup", detect);
addEvent(document, "keydown", detect2);
/*function IEalternative(elem) {
	if(document.attachEvent) {
		addEvent(my_$(elem), "dblclick", function() {
			if(!my_$("loginDiv")) loginAdmin();
			else {
				my_$("loginDiv").style.display = "";
				my_$("loginBox").style.display = "";
			}
		});
	}
}*/
function loginAdmin() {
	var href = window.location.pathname.split("/");
	var page = href[href.length-1].split(".");
	var pid;
	if(page[0].match(/^\d+[-_+\w]*$/)) {
		var pid = page[0].match(/^(\d+)[-_+\w]*$/)[1];
		var div = document.createElement("div");
		div.setAttribute("id", "loginDiv");
		var div2 = document.createElement("div");
		div2.setAttribute("id", "loginBox");
		div2.innerHTML = "<center><p class=\"titLoginBox\">Accès administrateur</p></center><br /><form name=\"loginForm\" id=\"loginForm\" method=\"post\" action=\"creer-document.php?pid=" + pid + "&lang="+lang+"\"><label for=\"id\">Login : &nbsp;</label><input type=\"text\" size=\"18\" name=\"id\" id=\"id\" /><br /><br /><label for=\"pass\">Password : &nbsp;</label><input type=\"password\" size=\"18\" name=\"pass\" id=\"pass\" /><br /><br /><input type=\"image\" name=\"btSubmit\" src=\"img/bt_ok.gif\" onclick=\"my_$('loginForm').submit()\" /></form>";
		document.getElementsByTagName('body')[0].appendChild(div);
		document.getElementsByTagName('body')[0].appendChild(div2);
	} else if(page[0].match(/^liens$/))
		window.open('support/liens/index.php', 'Administration', 'width=600,height=600,top=200,left=200,screenX=200,screenY=200,location=no,menubar=no,status=no,toolbar=no,scrollbars=yes');
}
function initScrollLayer() {
  var wndo = new dw_scrollObj('wn', 'lyr1');
  wndo.setUpScrollbar("dragBar", "track", "v", 1, 1);
  dw_scrollObj.GeckoTableBugFix('wn'); 
}

function affichePage() {
	 my_$('rolloverNav').style.top = "-27px";
	 my_$('rolloverNav').innerHTML = this.innerHTML;
	 this.style.backgroundPosition="bottom";
}
function cachePage() {
	my_$('rolloverNav').style.top = "0";
	this.style.backgroundPosition="top";
}

function addRollover() {
	var linKs = my_$('linksNav').getElementsByTagName('A');
	for (var i=0; i<linKs.length; i++) {
		addEvent(linKs[i], "mouseover", affichePage);
		addEvent(linKs[i], "mouseout", cachePage);
		addEvent(linKs[i], "focus", affichePage);
		addEvent(linKs[i], "blur", cachePage);
	}
}

function addBulle(event) {
	var bulle = my_$('bulle');
	if(!this.nextSibling || (this.nextSibling && this.nextSibling.nextSibling && this.nextSibling.tagName != "SPAN" && this.nextSibling.nextSibling.tagName != "SPAN")) 
		return;
	else if(this.nextSibling && !this.nextSibling.nextSibling && this.nextSibling.tagName != "SPAN") 
		return;
	bulle.innerHTML = (this.nextSibling && this.nextSibling.tagName == "SPAN") ? this.nextSibling.innerHTML : "ATTENTION : il y a un espace en trop entre le lien et le texte de l'info-bulle !";
	bulle.style.display = "block";
	bulle.style.top = (this.offsetTop > bulle.offsetHeight ? this.offsetTop - bulle.offsetHeight - 5 : this.offsetTop + 20) + "px";
	bulle.style.left = ((this.offsetLeft + bulle.offsetWidth) > bulle.parentNode.offsetWidth ? this.offsetLeft - bulle.offsetWidth + 20 : this.offsetLeft) + "px";
}
function removeBulle() {
	my_$('bulle').style.display = "none";
}
var timeout = false;
function addBulles() {
	var liens = my_$('cadreContTxt').getElementsByTagName('A');
	var liensBulles = new Array;
	for (var i=0; i<liens.length; i++) {
		if(liens[i].parentNode.className != "note") liensBulles.push(liens[i]);
	}
	for (var i=0; i<liensBulles.length; i++) {
		addEvent(liensBulles[i], "mouseover", function() {
		   if(timeout) clearTimeout(timeout);
		});
		addEvent(liensBulles[i], "mouseover", addBulle);
		addEvent(liensBulles[i], "mouseout", function() {
			timeout = setTimeout(removeBulle, 400);
		});
	}
	addEvent(my_$('bulle'), "mouseover", function() {
		if(timeout) clearTimeout(timeout);
	});
	addEvent(my_$('bulle'), "mouseout", function() {
		timeout = setTimeout(removeBulle, 400);
	});
	/* impossible de passer des classes aux objets A dans tinyMCE :-S
	var tab = new Array;
	for (var i=0; i<liensBulles.length; i++) {
		if(liensBulles[i].className=="note") {
			tab.push(liensBulles[i]);
		}
	}
	for (var i=0; i<tab.length; i++) {
		addEvent(tab[i], "mouseover", addBulle);
		addEvent(tab[i], "mouseout", removeBulle);
	}*/
}

function getLinksNav() {
	var pid = window.location.pathname.split('/').pop().split('.')[0].match(/\d+/)[0];
	var chapitre = pid[0];
	urlRetour = lang + '/' + chapitre + "00-" + url_pages[parseInt(chapitre + '00')] + ".html";
	textRetour = "Retour au d&eacute;but du chapitre";
	my_$('bt_back').href = urlRetour;
	my_$('bt_back').innerHTML = '<span>' + textRetour + '</span>';
}

function old_getLinksNav() {
	var pages, titres;
	var touscookies = document.cookie;
	var pos = touscookies.indexOf("AThistory=");
	// Si on trouve le cookie AThistory
	if(pos!=-1) {
		var start = pos + 10;
		var end = touscookies.indexOf(";", start);
		if(end==-1) end=touscookies.length;
		var value = touscookies.substring(start, end);
		value = unescape(value);
		pages = value.substring(6, value.indexOf("&titres:", 6));
		titres = value.substring(value.indexOf("&titres:") + 8);
	}
	// Si on est sur les boutons Retour ou Précédent
	if(this.id=="bt_back"||this.id=="bt_prec") {
		// On définit des valeurs par défaut pour les boutons
		var urlRetour = "index.html";
		var textRetour = "Retour &agrave; l'accueil";
		var urlPrec = "100.html";
		var textPrec = "Retour au d&eacute;part";
		// Si on a récupéré des données dans le cookie
		if ((pages != undefined) && (titres != undefined)) {
			// On stocke les id et les titres de pages visitées dans des tableaux
			var idPages = pages.split('&');
			var titPages = titres.split('&');
			var idPageEnCours = idPages[idPages.length-1];
			// Si la page en cours est sur la colonne vertébrale (id à 3 chiffres) on renvoie vers le début du chapitre
			var chapitre = idPageEnCours.substr(0, 1);
			if(idPageEnCours.length == 3) {
				urlRetour = chapitre + "00.html";
				textRetour = "Retour au d&eacute;but du chapitre";
			}
			// S'il y a plus d'une page déjà visitée
			if(idPages.length>1) {
				urlPrec = "javascript:history.back()";
				textPrec = "Page pr&eacute;c&eacute;dente";
				// Si on est sur une page dont l'id est supérieur à 3 chiffres (donc c'est une arête)
				if(idPageEnCours.length>3 && idPageEnCours.length<=5) {
					// On boucle à rebours dans les pages précédentes
					for (var i=idPages.length-2; i>=0; i--) {
						// Si on en trouve une dont l'id est inférieur d'un chiffre à celui de la page en cours
						if(idPages[i].length == (idPageEnCours.length-1)) {
							// On crée le lien de retour au dernier embranchement
							urlRetour = idPages[i] + ".html";
							textRetour = "Retour au d&eacute;part : " + titPages[i];
							break; // et on interrompt la boucle, puisqu'on a trouvé :D
						}
					}
				}
			}
		} else { // Si on n'a pas trouvé de données dans le cookie
			alert('Vous devez accepter les cookies pour bénéficier des fonctions de navigation du site');
		}
		my_$('rolloverNav').innerHTML = (this.id == "bt_back") ? textRetour : textPrec;
		this.href = lang + (this.id == "bt_back" ? urlRetour : urlPrec);
	} else my_$('rolloverNav').innerHTML = this.innerHTML;
	// Et 2 petites instructions pour le roll-over des boutons
	my_$('rolloverNav').style.top = "-27px";
	this.style.backgroundPosition="bottom";
}
function slideBox(el) {
	el.className = el.className.match(/\s+inactive/) ? el.className.match(/([\w\s]*)inactive/)[1] + "active" : el.className;
	var d = my_$("content").getElementsByTagName("DIV");
	for (var i=0; i<d.length; i++) {
		if(d[i].className != el.className && d[i].className.match(/\bcase\b[\w\s]*\bactive/)) {
			d[i].className = d[i].className.match(/([\w\s]*)active/)[1] + "inactive";
		}
	}
}

// about class attributes
function hasClassName(el, className) {
	if(!el) return false;
	var regexp = new RegExp('(^|\\s)' + className + '($|\\s)', 'ig');
	return (el.className && el.className.search(regexp) != -1);
};
function addClassName(el, className) {
	if(!el || hasClassName(el, className)) return false;
	if(el.className && el.className!="")
		el.className += " " + className;
	else
		el.className = className;
	return true;
}
function removeClassName(el,className) {
	if(el && el.className && hasClassName(el, className)) {
		var regexp = new RegExp('(^|\\s)' + className + '($|\\s)', 'ig');
		el.className = el.className.replace(regexp,'');
	}
}

function styleLinks() {	
	for (i=0; i<document.links.length; i++)
		if(document.links[i].href.match(/amazon\.[^\s]/i))
			addClassName(document.links[i], "amazon");
		else if(document.links[i].href.match(/http:\/\//) && !document.links[i].href.match(/(eden-saga|onlinehome)/))
			addClassName(document.links[i], "external");
}
function resetForm(f) {
	inputs = f.getElementsByTagName('INPUT');
	for (var i = 0; i < inputs.length; i++) {
		if(inputs[i].type == "text" || inputs[i].type == "hidden") inputs[i].value = "";
	}
	textareas = f.getElementsByTagName('TEXTAREA');
	for (var i = 0; i < textareas.length; i++) {
		textareas[i].innerHTML = "";
	}
}
// works only in IE
function copyclipboard(intext) {
	window.clipboardData.setData('Text', intext);
}

// Transforme les liens de la forme XXX.html en XXX-keywords.html
function alterLinks(div) {
	var elem = my_$(div);
	var a = elem.getElementsByTagName("A");
	var pid;
	for (var i=0; i<a.length; i++) {
		if(a[i].href.match(/\d+.*\.html/)) {
			pid = a[i].href.match(/(\d+).*\.html/)[1];
			a[i].href = lang + '/' + pid + '-' + url_pages[pid] + '.html';
			a[i].innerHTML = tit_pages[pid];
		}
	}
}

function searchField(id) {
	var defaut = my_$(id).value;
	addEvent(my_$(id), 'focus', function() {
			if(this.value == defaut)
				this.value = '';
		}
	);
	addEvent(my_$(id), 'blur', function() {
			if(this.value == '')
				this.value = defaut;
		}
	);
}
