// Moteur AJAX élaboré à l'aide de l'ouvrage "Premieres applications Web 2.0 avec Ajax et PHP"
// Script mis  en place par JEROME STACHOWIAK
// DATE DE CREATION : 20/08/20008


////////////////////////////////////////////////////////////////////////////////////////
// 				QUELQUES INFORMATIONS SUR LE MOTEUR				//
///////////////////////////////////////////////////////////////////////////////////////

//|----------------------------------------------------------------------------------------------------------------------------- |
//|					PROPRIETES DE L'OBJET XMLHttpRequest				  |
//|----------------------------------------------------------------------------------------------------------------------------- |
//|    	 PROPRIETES          |   				              DESCRIPTION			                        |
//|------------------------------|---------------------------------------------------------------------------------------------- |
//| onreadystatechange     | Designe une fonction de rappel qui sera appelée à chaque fois que l'état   |
//|                                        | du traitement d'une requete asynchrone (readyState) changera d'état        |
//|------------------------------|-----------------------------------------------------------------------------------------------|
//| readyState                    | Etat du traitement d'une requete asynchrone (valeur numerique de 0 à 4    |
//|------------------------------|-----------------------------------------------------------------------------------------------|
//| responseText                | Contient le résultat du serveur sous forme de texte                                        |
//|------------------------------|-----------------------------------------------------------------------------------------------|
//| responseXml                  | Contient le résultat du serveur sous forme XML                                             |
//|------------------------------|-----------------------------------------------------------------------------------------------|
//| status                             | Contient le code de statut HTTP. Ce code est disponible en lecture               |
//|                                        | uniquement lorsque la réponse à été transmise.                                               |
//|------------------------------|-----------------------------------------------------------------------------------------------|
//| statusText                     | Contient le message de statut HTTP. Ce texte est disponible en lecture        |
//|                                        | uniquement lorsque la réponse à été transmise.                                               |
//|------------------------------|-----------------------------------------------------------------------------------------------|


//|---------------------------------------------------------------------------------------------------------------------------------------------|
//|			           		METHODES DE L'OBJET XMLHttpRequest 	           			 |
//|-------------------------------------------------------------------------------------------------------------------------------------------- |
//|    	 METHODES                                |   				              DESCRIPTION			                       |
//|---------------------------------------------|-----------------------------------------------------------------------------------------------|
//| abort()                                               | Annule la requete en cour                                                                                  |
//|---------------------------------------------|-----------------------------------------------------------------------------------------------|
//| getAllResponseHeaders()                 | Etat du traitement d'une requete asynchrone (valeur numerique de 0 à 4    |
//|---------------------------------------------|-----------------------------------------------------------------------------------------------|
//| getResponseHeader("nomEntete")  | Retourne la valeur de l'entete dont le nom est indiqué dans le paramètre     |
//|                                                            | (nomEntete). Cette méthode n'est utilisable que lorsque l'état du                  |
//|                                                            | traitement (readyState) est égal à 3 ou 4                                                        |
//|---------------------------------------------|-----------------------------------------------------------------------------------------------|
//| open("methode","url","async")        | Initialise l'objet en précisant certains paramètres de la requête : la            |
//|                                                            | méthode utilisée (méthode : GET ou POST), l'URL du script côté serveur     |
//|                                                            | (url :fichier.php) et un troisième paramètre en option pour indiquer si la    |
//|                                                            | communication doit être synchrone (true) ou asynchrone (false)                  |
//|---------------------------------------------|-----------------------------------------------------------------------------------------------|
//| send("contenu")                                | Envoie la requête. Le paramètre (contenu) pourra prendre la valeur NULL  |
//|                                                            | dans le cas d'une requête initialisée avec la méthode GET ou une chaine    |
//|                                                            | de requête dans le cas d'une méthode POST. Evidemment cette méthode     |
//|                                                            | ne peut être utilisée que lorsque la méthode open() a déjà été configurée   |
//|                                                            | et donc que lorsque l'état du traitement est égal à 1                                        |
//|---------------------------------------------|-----------------------------------------------------------------------------------------------|
//| setRequestHeader("nom","valeur") | Attribue une valeur (valeur) à l'entete de la requête dont le nom est            |
//|                                                            | spécifié dans le premier paramètre (nom). Cette méthode n'est utilisable    |
//|                                                            | que lorsque l'état du traitement (readyState) est égal à 1                              |
//|---------------------------------------------|-----------------------------------------------------------------------------------------------|


//|----------------------------------------------------------------------------------------------------------------------------- |
//|				DIFFERENT ETATS DE TRAITEMENT DE READYSTATE 			  |
//|----------------------------------------------------------------------------------------------------------------------------- |
//|    	 VALEUR         |    	        ETAT		|                              SIGNIFICATION		                        |
//|----------------------|-----------------------------|------------------------------------------------------------------------ |
//|  0                         | unitialized		| L'objet n'a pas encore été initialisé et donc la méthode   |
//|                             |                  		| n'a pas encore été appelée   					  |
//|----------------------|-----------------------------|------------------------------------------------------------------------ |
//|  1                         | Loading   		| L'objet a été initialisé mais la requête n'a pas encore      |
//|                             |                  		| été envoyé à l'aide de la méthode send  			  |
//|----------------------|-----------------------------|------------------------------------------------------------------------ |
//|  2                         | Loaded     		| La requête a été envoyée à l'aide de la méthode send()    |
//|----------------------|-----------------------------|------------------------------------------------------------------------ |
//|  3                         | interactive     		| La reponse est en cours de réception                                  |
//|----------------------|-----------------------------|------------------------------------------------------------------------ |
//|  4                         | completed    		| La reponse du serveur est completement receptionnée     |
//|                             |                  		| Les données sont disponibles dans la propriété  		  |
//|                             |                  		| responseText (s'il s'agit de données texte) ou dans 	  |
//|                             |                  		| responseXML (s'il s'agit de données XML)			  |
//|----------------------|-----------------------------|------------------------------------------------------------------------ |


//--------------------------------------------------------------- Objet Ajax
function creationXHR()
{
	var resultat=null;
	try { //test pour les navigateurs : Mozilla, opera...
		resultat = new XMLHttpRequest();
	}
	catch(Error) {
		try { //test pour les navigateurs Internet Explorer > 5.0
			resultat = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(Error) {
			try { //test pour le navigateur Internet 5.0
				resultat = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(Error) {
				resultat = null;
			}
		}
	}
	return resultat;
}

//----------Fonction permettant de tester la prise ne charge du navigateur
function testerNavigateur() {
	objetXHR = creationXHR();
	if(objetXHR==null) {
		document.getElementById("erreurNavigateur").style.display="block";
	}
}

//-------------------------------------------------------Fonction encodage
//code en UTF8, la valeur d'un élément dont id passé en parametre
function codeContenu(id) { 
	var valeur=document.getElementById(id).value;
	return encodeURIComponent(valeur);
}

//------------Fonction de gestion du DOM (solution alternative à innerHTML)
function remplacerContenu(id, texte) {
  var element = document.getElementById(id);
  if (element != null) {
    supprimerContenu(element);
    var nouveauContenu = document.createTextNode(texte);
    element.appendChild(nouveauContenu);
  }
}

//------------------------------- Fonction permettant de supprimer un element
function supprimerContenu(element) {
if (element != null) {
    while(element.firstChild)
        element.removeChild(element.firstChild);
   }
}

//-----------------------Fonction permettant d'ajouter une option a un select
function Add_Option( id_select, txt_option){
  //-- Récupération Objet à mettre à jour
  var Obj = document.getElementById( id_select);
  //-- Création de l'élément OPTION
  var Opt = document.createElement('OPTION');
  //-- Ecriture du Texte
  Opt.innerHTML= txt_option;
  //-- Ajout de l'OPTION
  Obj.appendChild( Opt);
}