/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|                                Gestion des requêtes AJAX                                 |
|------------------------------------------------------------------------------------------|
|                                                                                          |
|          Les requêtes AJAX permettent au scripts JavaScript de communiquer avec          |
|         le serveur, via un language de programmation tel que le PHP par exemple.         |
|        Les fonctions ci-dessous facilitent la manipulation de ces objets de con-         |
|        nexion en initialisant la requête selon le navigateur, et en traitant les         |
|                             erreurs lorsqu'elles surviennent.                            |
|                                                                                          |
|------------------------------------------------------------------------------------------|
|                                                                                          |
| Fonctions disponibles :                                                                  |
|    - creerRequete()                                                                      |
|    - erreurRequete()                                                                     |
|    - callbackMinimal()                                                                   |
|    - flashChargement()                                                                   |
|                                                                                          |
|                                                                                    1.5.0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|                                                         Benjamin COIFFARD - janvier 2010 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/


/**
 * Initialise l'objet requete
 * 
 * L'objet requete est un connecteur se branchant sur le protocole HTTP. Selon le navigateur,
 * la méthode peut être différente.
 * 
 * @param none
 * @return object requete
 */
/*-----------------------------------------------------------------------------------------*/
function creerRequete()
{

// Dans la majorité des cas, l'objet requête est une instance de l'objet XMLHttpRequest
	try
	{
		requete = new XMLHttpRequest();
	}

// Pour Internet Exporer, il faut passer par un ActiveX
	catch (essaimicrosoft)
	{
	
	// L'objet requête est une instance de l'objet ActiveX
		try
		{
			requete = new ActiveXObject("Msxml2.XMLHTTP");
		}
	
	// Certaines versions d'IE fonctionnent avec un autre ActiveX
		catch (autremicrosoft)
		{
			try
			{
				requete = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (echec)
			{
				requete = null;
			}
		}
	}

// Message d'alerte si l'objet requête n'a pu être créé
	if (requete == null)
		alert("Impossible de créer l'objet requête!");

// La fonction retourne l'objet requete
	else return requete;
	

}


/**
 * Traite les erreurs de requête
 * 
 * Lorsqu'une requête echoue, le traitement est souvent le même. Si le statut est 'null',
 * c'est que le script PHP n'a pas été trouvé, et que la requête s'est perdue. Dans le cas
 * contraire, le statut de la requête est affiché.
 * Le flash de chargement est également masqué
 * 
 * @param none
 * @return void
 */
/*-----------------------------------------------------------------------------------------*/
function erreurRequete()
{

// Le flash de chargement est masqué
	document.getElementById("flCh").style.visibility = "hidden";

// Si 'message' n'existe pas, c'est que le script PHP n'a probablement pas été trouvé
	if (requete.getResponseHeader("Status") == null)
		alert("Erreur : le script PHP est probablement à la mauvaise adresse.");

// Affichage de l'explication de l'erreur
	else
	{
	
	// Récupération du message et du statut de la requête
		var message = requete.getResponseHeader("Status");
	
	// S'il n'y a que le statut, il est affiché	
		if ((message.length == null) || (message.length <= 0))
			alert("Erreur ! Le statut de la requête est " + requete.status);

	// Sinon, on affiche le message, plus explicite
		else
			alert(message);

	}
}


/**
 * Traite les retours de requête ignorés
 * 
 * Le callback minimal sert à traiter les requêtes dont on n'attends aucune réponses. C'est
 * à dire par exemple l'envoie de stat vers le serveur ou la mise à jour d'une valeur. Seul
 * le cas où la requête pose un problème est traité.
 * 
 * @param none
 * @return void
 */
/*-----------------------------------------------------------------------------------------*/
function callbackMinimal()
{
	if (requete.readyState == 4)
	{
		if (requete.status != 200)
			erreurRequete()
	}
}


/**
 * Affichage du flash de chargement
 * 
 * Le flash de chargement permet de matérialiser l'envoi d'une requête. Certains traitements
 * peuvent nécessiter plusieurs secondes, il est nécessaire de signaler à l'utilisateur
 * que le traitement est en cours, et non oublié.
 * 
 * @param none
 * @return void
 */
/*-----------------------------------------------------------------------------------------*/
function flashChargement()
{
	
	with (document.getElementById("flCh"))
	{
		style.visibility = "visible";
		if (navigator.appName == "Microsoft Internet Explorer")
		{
			style.posLeft = document.body.clientWidth - 130;
			style.posTop = 0;
		}
		else
		{
			style.left = (window.innerWidth - 130) + "px";
			style.top = "0px";
		}
	}	
}


var requete = creerRequete();
