// déterminer la position d'un calque
function positionCalque(calque) {
	x = (navigator.appName.substring(0,3) == "Net") ? e.pageX : event.x+document.body.scrollLeft;
	y = (navigator.appName.substring(0,3) == "Net") ? e.pageY : event.y+document.body.scrollTop;
	document.all[calque].style.posLeft = x+20;
	document.all[calque].style.posTop = y;
}

// afficher / masquer le texte des news
function showLayer(var1) {
	// déclarations
	var calque = document.getElementById(var1).style;
	calque.display = (calque.display == 'block') ? 'none' : 'block';
}
// afficher / masquer les parties du forum
function showLayerForum(var1) {
	// déclarations
	var calque = document.getElementById(var1).style;
	calque.display = (calque.display == 'none') ? 'inline' : 'none';
}
// affichage du calque d'un 'spoiler'
function showSpoiler(calque) {
	var tspoil = calque.childNodes[0];
	var spoil = calque.childNodes[1];
	tspoil.innerHTML = (spoil.style.display == 'none') ? 'Masquer le spoiler :' : 'Afficher le spoiler :';
	spoil.style.display = (spoil.style.display == 'none') ? 'block' : 'none';
}
// reset le cadre de la boitafloude au moment du post
function clearFloodBox() {
	if (document.form_comms_site) {
		document.form_comms_site.comms_texte.value = "";
	}
}

// entourer le texte par les balises text1 et text2
function surroundText(text1, text2, textarea)
{
	// Can a text range be created?
	if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange)
	{
		var caretPos = textarea.caretPos, temp_length = caretPos.text.length;

		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text1 + caretPos.text + text2 + ' ' : text1 + caretPos.text + text2;

		if (temp_length == 0)
		{
			caretPos.moveStart("character", -text2.length);
			caretPos.moveEnd("character", -text2.length);
			caretPos.select();
		}
		else
			textarea.focus(caretPos);
	}
	// Mozilla text range wrap.
	else if (typeof(textarea.selectionStart) != "undefined")
	{
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var selection = textarea.value.substr(textarea.selectionStart, textarea.selectionEnd - textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var newCursorPos = textarea.selectionStart;
		var scrollPos = textarea.scrollTop;

		textarea.value = begin + text1 + selection + text2 + end;

		if (textarea.setSelectionRange)
		{
			if (selection.length == 0)
				textarea.setSelectionRange(newCursorPos + text1.length, newCursorPos + text1.length);
			else
				textarea.setSelectionRange(newCursorPos, newCursorPos + text1.length + selection.length + text2.length);
			textarea.focus();
		}
		textarea.scrollTop = scrollPos;
	}
	// Just put them on the end, then.
	else
	{
		textarea.value += text1 + text2;
		textarea.focus(textarea.value.length - 1);
	}
}

// remplace le texte sélectionné par le texte envoyé à la fonction
function replaceText(text, textarea) {
	// Attempt to create a text range (IE).
	if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange) 
	{
		var caretPos = textarea.caretPos;

		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
		caretPos.select();
	}
	// Mozilla text range replace.
	else if (typeof(textarea.selectionStart) != "undefined")
	{
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var scrollPos = textarea.scrollTop;

		textarea.value = begin + text + end;

		if (textarea.setSelectionRange)
		{
			textarea.focus();
			textarea.setSelectionRange(begin.length + text.length, begin.length + text.length);
		}
		textarea.scrollTop = scrollPos;
	}
	// Just put it on the end.
	else
	{
		textarea.value += text;
		textarea.focus(textarea.value.length - 1);
	}
}

// redimensionner dynamiquement une image
function redimImg(image, objet) {
	truc = new Image();
	truc.src = objet;
	var largeur_reelle = truc.width;
	var hauteur_reelle = truc.height;
	var largeur_voulue = 100;
	var hauteur_voulue = 100;
	if (largeur_reelle > hauteur_reelle) {
		//largeur > hauteur => format paysage
		if (largeur_reelle > largeur_voulue) {
			var coefficient = largeur_reelle/largeur_voulue;
			largeur_finale = largeur_reelle/coefficient;
			hauteur_finale = hauteur_reelle/coefficient;
		} else {
			largeur_finale = largeur_reelle;
			hauteur_finale = hauteur_reelle;
		}
	} else if (largeur_reelle < hauteur_reelle) {
		//largeur < hauteur => format portrait
		if (hauteur_reelle > hauteur_voulue) {
			var coefficient = hauteur_reelle/hauteur_voulue;
			largeur_finale = largeur_reelle/coefficient;
			hauteur_finale = hauteur_reelle/coefficient;
		} else {
			largeur_finale = largeur_reelle;
			hauteur_finale = hauteur_reelle;
		}
	}
	//window.alert(largeur_finale+'*'+hauteur_finale);
	// retour
	window.document.getElementById(image).width = largeur_finale;
	window.document.getElementById(image).height = hauteur_finale;
}

/*************************************/
/*         SCRIPTS POUR AJAX         */
/*************************************/

// création de l'objet XML HTTP
var xmlhttp;

// initialisation de l'objet XML HTTP en fonction du navigateur
function initAJAX() {
	// initialisation de l'objet HttpRequest
	xmlhttp = null;
	// création de l'objet HttpRequest
	if (window.XMLHttpRequest) {
		// code pour Mozilla
		xmlhttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		// code pour IE
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
}

// envoi des données avec la méthode AJAX
function envoiAJAX(page, data) {
	// avant de charger la page, on vérifie que l'objet existe bien
	if (xmlhttp != null) {
		xmlhttp.open("POST", page, true);
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-15");
		xmlhttp.send(data);
	} else {
		// message d'alerte
		alert("Votre navigateur ne supporte pas les protocoles XMLHTTP. Vous pouvez essayer de mettre votre navigateur à jour.");
	}
}

// échappement des caractères spéciaux
function echapper(valeur) {
	return escape(valeur).replace(/\+/g, "%2B").replace(/\"/g, "%22").replace(/\'/g, "%27");
}

// vérifier qu'un formulaire est rempli comme demandé
function verifierFormulaire(formulaire) {
	// initialisation de la valeur du booléen à retourner
	var check = true;
	// pour chaque argument envoyé (hormis le premier qui doit être le nom du formulaire à vérifier)...
	for (var i = 1; i < arguments.length; i++) {
		var valeur = document.forms[formulaire].elements[arguments[i]].value;
		if (valeur == "") check = false;
	}
	// renvoi
	return check;
}

// construction et mise en forme des données du formulaire à transmettre au script AJAX
function constructData(formulaire) {
	var name = "";
	var type = "";
	var retour = "";
	// pour chaque élément du formulaire
	for (var i = 0; i < formulaire.elements.length; i++) {
		var validite_elt = formulaire.elements[i].disabled;
		var type_elt = formulaire.elements[i].type;
		var nom_elt = formulaire.elements[i].name;
		var valeur_elt = formulaire.elements[i].value;
		// on vérifie si le type d'élément est recevable
		if (validite_elt == false) {
			if (type_elt == "checkbox" || type_elt == "file" || type_elt == "hidden" || type_elt == "password" || type_elt == "radio" || type_elt == "text" || type_elt == "select-one" || type_elt == "textarea") {
				if (type_elt == "checkbox") {
					retour += "&" + nom_elt + "=" + ((formulaire.elements[i].checked) ? 1 : 0);
				} else {
					retour += "&" + nom_elt + "=" + echapper(valeur_elt);
				}
			}
		}
	}
	// renvoi de la chaîne construite
	return retour;
}

// action AJAX
function module_AJAX(page, data, visible, masquer, redirAuto, calqueRetour) {
	// initialisation de l'HTTP Request
	initAJAX();
	// basculer l'affichage sur le masque "Action en cours" si le paramètre 'visible' est à 1
	if (visible == 1 && masquer == 1) {
		document.getElementById("contenu").style.display = "none";
		document.getElementById("divajax").style.display = "block";
		document.getElementById("divajax").innerHTML = 'Action en cours, merci de patienter...';
	}
	// envoi des données au script de traitement par AJAX
	envoiAJAX(page, data);
	// si le paramètre 'visible' est spécifié, on récupère les infos retournées par le script AJAX pour les afficher
	if (visible == 1) {
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4) {
				var docXML = xmlhttp.responseXML;
				var resultat = docXML.getElementsByTagName("resultat").item(0).firstChild.data;
				var redirection = docXML.getElementsByTagName("redirection").item(0).firstChild.data;
				var texte = docXML.getElementsByTagName("texte").item(0).firstChild.data;
				if (masquer == 1) {
					// message de redirection automatique
					document.getElementById("divajax").innerHTML = texte;
					if (resultat == "ok" && redirAuto == 1) {
						setTimeout("window.location = '" + redirection + "'", 1000);
					}
				} else {
					// affichage du texte du résultat (bon ou non)
					if (calqueRetour != "") {
						document.getElementById(calqueRetour).innerHTML = texte;
					} else if (claqueRetour == "") {
						alert("Avertissement : aucun calque n'a été défini pour l'affichage du résultat.\nVous devrez effectuer une redirection manuelle avec le menu du site.\n\n"+texte);
					}
				}
			}
		}
	}
}

// action AJAX invisible pour l'utilisateur
function AJAXInvisible(page, data) {
	// initialisation de l'HTTP Request
	initAJAX();
	// envoi des données au script de traitement par AJAX
	envoiAJAX(page, data);
}

// action AJAX visible pour l'utilisateur sans masquage de l'interface
function AJAXVisible(page, data, calqueRetour) {
	// initialisation de l'HTTP Request
	initAJAX();
	// envoi des données au script de traitement par AJAX
	envoiAJAX(page, data);
	// sortie du script AJAX et retour
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			var docXML = xmlhttp.responseXML;
			var resultat = docXML.getElementsByTagName("resultat").item(0).firstChild.data;
			var redirection = docXML.getElementsByTagName("redirection").item(0).firstChild.data;
			var texte = docXML.getElementsByTagName("texte").item(0).firstChild.data;
			// affichage du texte du résultat
			document.getElementById(calqueRetour).innerHTML = texte;
		}
	}
}

// action AJAX visible pour l'utilisateur avec masquage de l'interface pendant le temps d'éxécution du script
function AJAXVisibleMasque(page, data) {
	// initialisation de l'HTTP Request
	initAJAX();
	// basculer l'affichage sur le masque "Action en cours"
	document.getElementById("contenu").style.display = "none";
	document.getElementById("divajax").style.display = "block";
	document.getElementById("divajax").innerHTML = 'Action en cours, merci de patienter...';
	// envoi des données au script de traitement par AJAX
	envoiAJAX(page, data);
	// sortie du script ajax et retour
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			var docXML = xmlhttp.responseXML;
			var resultat = docXML.getElementsByTagName("resultat").item(0).firstChild.data;
			var redirection = docXML.getElementsByTagName("redirection").item(0).firstChild.data;
			var texte = docXML.getElementsByTagName("texte").item(0).firstChild.data;
			// affichage du texte du résultat
			document.getElementById("divajax").innerHTML = texte;
			if (resultat == "ok") {
				setTimeout("window.location = '" + redirection + "'", 1000);
			}
		}
	}
}

// basculement de l'affichage du masque AJAX vers le contenu de la page en cas d'échec de l'action demandée
function retourEchecAJAX() {
	document.getElementById("divajax").style.display = "none";
	document.getElementById("contenu").style.display = "block";
}
