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

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

// 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 < document.forms[formulaire].elements.length; i++) {
		var validite_elt = document.forms[formulaire].elements[i].disabled;
		var type_elt = document.forms[formulaire].elements[i].type;
		var nom_elt = document.forms[formulaire].elements[i].name;
		var valeur_elt = document.forms[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") {
					if (document.forms[formulaire].elements[i].checked) {
						retour += "&" + nom_elt + "=" + echapper(valeur_elt);
					} else {
						retour += "&" + nom_elt + "=";
					}
				} else if (type_elt == "radio") {
					if (document.forms[formulaire].elements[i].checked) {
						retour += "&" + nom_elt + "=" + echapper(valeur_elt);
					}
				} else {
					retour += "&" + nom_elt + "=" + echapper(valeur_elt);
				}
			}
		}
	}
	// renvoi de la chaîne construite
	return retour;
}

// création de l'objet XMLHTTP
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-1");
		xmlhttp.send(data);
	} else {
		// message d'alerte
		alert("Votre navigateur ne supporte pas les protocoles XMLHTTP. Vous pouvez essayer de mettre votre navigateur à jour.");
	}
}

// action AJAX
function module_AJAX(page, data, fonction) {
	// var argument_sup = '';
	// if (arguments[3] != undefined) {
		// argument_sup = arguments[3];
	// }
	// initialisation de l'HTTP Request
	initAJAX();
	// envoi des données au script de traitement par AJAX
	envoiAJAX(page, data);
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			var docXML = xmlhttp.responseXML;
			var docTXT = xmlhttp.responseText;
			// lancement de la fonction appropriée
			if (fonction != '') {
				fonction(docXML, docTXT);
			} else {
				alert("Aucune fonction de traitement n'a été spécifiée pour l'action en cours. Veuillez actualiser la page (option du navigateur ou touche F5).");
			}
		} else if (xmlhttp.readyState < 4) {
			// action...
		}
	}
}

// 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";
}

