
/* -------------------------------------------------------------
	SCRIPT AJAX
	Auteur : Sébastien JOUBERT
	-------------------------------------------------------------*/

// Variable permettant de récupérer la réponse de la requête
var _responseAjax = null;

// Variables globales
var _spliterAjax = '@aAjJaAxX@';
var _globalUrl = 'http://www.theoffspringsession.com';

var _methodGet = "GET";
var _methodPost = "POST";
var _methodHead = "HEAD";
var _methodTrace = "TRACE";
var _methodPut = "PUT";

var _responseText = "TEXT";
var _responseXml = "XML";

var _syncSynchrone = false;
var _syncAsynchrone = true;



/* -------------------------------------------------------------
	Ouvre une requête ajax suivant une méthode, des paramètres et un format de réponse
	C'est cette fonction du module qui doit être appelée dans les algorithmes des pages

	Paramètres : 	'p_method' : type de la requête : POST, GET, HEAD
					'p_file' : url du fichier de la requête
					'p_data' : paramètres de la requête, sous la forme : key1=value1&key2=value2&key3=value3
					'p_response' : format de la réponse choisi : texte ou xml
					'p_synchr' : booléen de synschronisation du script
					'p_fctOnReadyState' : fonction à exécuter lors du changement de statut de la requête
					
	Valeur retournée : la réponse de la requête (format texte ou xml)
	Auteur : Sébastien JOUBERT
	-------------------------------------------------------------*/
function openMethodAjax (p_method, p_file, p_data, p_response, p_synchr, p_fctOnReadyState) {

	// Initialisation des données
	_responseAjax = null;
	p_synchr = p_synchr == null ? _syncAsynchrone : p_synchr;

	// Création de l'instance en fonction du navigateur et de sa version
	var xhrObject = instanceRequest();

	if (!xhrObject || (p_method != _methodGet && p_method != _methodPost && p_method != _methodHead)) {
		// Si l'instance n'a pas pu être créée ou si aucune méthode n'est définie
		// On n'effectue aucune opération
	}
	else {
		// On ajuste l'adresse du fichier à l'URL du serveur
		var urlFile = adjustToServer (p_file);

		// On prépare les variables pour l'appel ajax
		if (p_method == _methodGet) {
			// Mode GET
			// On ajoute les paramètres à l'url de la requête et on force les données à null
			urlFile += p_data != null ? "?" + p_data : "";
			p_data = null;
		}

		// Ouverture de la requête en asynchrone
		xhrObject.open(p_method, urlFile, p_synchr);

		// En post, on force les entêtes http
		if (p_method == _methodPost) {
			xhrObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xhrObject.setRequestHeader("Content-length", p_data != null ? p_data.length : 0);
			xhrObject.setRequestHeader("Connection", "close");
		}

		// Fonction de changement de statut
		xhrObject.onreadystatechange = function() {
			// On retourne le statut de l'instance

			 if (xhrObject.readyState == 4) {
				// La réponse de la requête est prête

				if (xhrObject.status == 200) {
					// Le retour est valide

					if (p_response == _responseText) {
						// On récupère la réponse au format texte
						_responseAjax = xhrObject.responseText;
					}
					else if (p_response == _responseXml) {
						// On récupère la réponse au format xml
						_responseAjax = xhrObject.responseXML;
					}

					// Exécution de la fonction demandée à l'appel
					if (_responseAjax != null && p_fctOnReadyState != null && p_fctOnReadyState)
						eval(p_fctOnReadyState);

				}
				else {
					// Erreur ajax
					//alert("Ajax code error : " + xhrObject.status + "...");
				}
			}
    	};

		// Envoi des données
		xhrObject.send(p_data);
	}
}



/* -------------------------------------------------------------
	Permet de créer une instance XMLHttpRequest

	Paramètre : 	aucun
	Valeur retournée : objet en fonction du navigateur
	Auteur : Sébastien JOUBERT
	-------------------------------------------------------------*/
function instanceRequest () {

	var xhrObject;

	// Objet de la fenêtre courant
	if (window.XMLHttpRequest) {
		// Firefox, Safari...
		xhrObject = new XMLHttpRequest();

		// On force le type de l'entête de la réponse serveur
		if (xhrObject.overrideMimeType)
			xhrObject.overrideMimeType('text/xml');
	}
	// Version active
	else if (window.ActiveXObject) {
		// Internet Explorer
		try {
			xhrObject = new ActiveXObject('Msxml2.XMLHTTP');
		}
    	catch (e) {
        	try {
				xhrObject = new ActiveXObject('Microsoft.XMLHTTP');
			}
        	catch (e2) {
          		try {
					xhrObject = new ActiveXObject('Msxml2.XMLHTTP.5.0');
				}
        		catch (e3) {
          			try {
						xhrObject = new ActiveXObject('Msxml2.XMLHTTP.4.0');
					}
        			catch (e4) {
          				try {
							xhrObject = new ActiveXObject('Msxml2.XMLHTTP.3.0');
						}
        				catch (e5) {
          					xhrObject = false;
						}
					}
				}
			}
        }
	}
	else {
		// Le navigateur en cours ne supporte pas les objets XMLHTTPRequest
		alert("Your browser doesn't allow ajax !");
		xhrObject = false;
	}

	return xhrObject;
}



/* -------------------------------------------------------------
	Complète l'url de la requête en ajoutant le nom de domaine et de la tld

	Paramètre : 	'p_file' : url du fichier PHP à charger
	Valeur retournée : url complet sur le serveur
	Auteur : Sébastien JOUBERT
	-------------------------------------------------------------*/
function adjustToServer (p_file) {

	// Initialisation de l'URL
	var urlFile = _globalUrl;

	if (p_file != null && p_file.length > 0) {
		var pos = p_file.indexOf(_globalUrl, 0);
		if (pos == -1) {
			// On ajoute l'URL de base
			urlFile += '/' + p_file;
		}
		else {
			// On ne modifie pas le chemin du fichier
			urlFile = p_file;
		}
	}

	return urlFile;
}





















////////////// A VIRER : ANCIENNE VERSION	
	
/* -------------------------------------------------------------
	Récupération d'un fichier PHP en méthode GET

	Paramètre : 	'p_file' : URL du fichier PHP à charger
	Valeur retournée : objet en fonction du navigateur
	Auteur : Sébastien JOUBERT
	-------------------------------------------------------------*/
function getPhpFile (p_file) {

	if (window.XMLHttpRequest) {
		// Firefox
		xhr_object = new XMLHttpRequest();
	}
	else if(window.ActiveXObject) {
		// Internet Explorer
		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else  {
		return(false);
	}

	xhr_object.open("GET", p_file, false); 
	xhr_object.send(null);

	if (xhr_object.readyState == 4) {
		return(xhr_object);
	}
	else {
		return(false);
	}
}



/* -------------------------------------------------------------
	Récupération d'un fichier PHP en méthode GET, sur le serveur www.theoffspringsession.com

	Paramètre : 	'p_file' : URL relative du fichier PHP à charger
	Valeur retournée : objet en fonction du navigateur
	Auteur : Sébastien JOUBERT
	-------------------------------------------------------------*/
function getPhpFileSession (p_file) {

     return getPhpFile(_globalUrl + '/' + p_file);
}

