/**
 * Classe de gestion pour XMLHttpRequest
 *
 * @author : Marc Plessis
 * @version : 0.1
 * @date : 03/08/2005
 *
 */
function XMLRequest() {
	this.constructor.apply(this,arguments);
}

//============================== Constantes ==================================
XMLRequest.prototype.XML_UNINITIATILIZED=0;		//Etat xmlhttp : la fonction Open() n'est pas encore appelée
XMLRequest.prototype.XML_LOADING=1;				//Etat xmlhttp : la fonction Send() n'est pas encore appelée
XMLRequest.prototype.XML_LOADED=2;				//Etat xmlhttp : la fonction Send() a été appelée avec succés
XMLRequest.prototype.XML_INTERACTIVE=3;			//Etat xmlhttp : pendant le chargement
XMLRequest.prototype.XML_COMPLETED=4;			//Etat xmlhttp : toutes les opérations ont été corestemetn effectuées

XMLRequest.prototype.HTTP_OK=200;				//Etat http : la page existe
XMLRequest.prototype.HTTP_FILENOTFOUND=404;		//Etat http : la page n'existe pas


//============================== Variables ==================================
XMLRequest.prototype._rsXML=false;				//Variable accueillant l'objet XMLHttpRequest
XMLRequest.prototype._type=false;				//Type d'affichage à prendre en compte

/**
 * Constructeur de la classe
 */
XMLRequest.prototype.constructor=function(pType) {

	//On charge le type
	if(pType!=undefined) {
		this._type=pType
	}

	// Tentative de construction d'un objet XMLHttpRequest
	try {

		// Création d'un objet pour les navigateurs alternatifs
		this._rsXML=new XMLHttpRequest();
	}
	catch(e) {

			try {

				//Création d'un objet pour IE 4
				this._rsXML = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e) {
				try {

					//Création d'un objet IE5,6
					this._rsXML = new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch(e) {

					//On renvoie false --> impossible de créer un objet XMLHttpRequest
					this._rsXML = false;
				}
			}
	}
};

//=================================== Méthodes privées ======================================

/**
 * Initialisation de l'objet
 */
XMLRequest.prototype._initRSXML=function() {

	//On défini une variable contenant l'objet instancié
	var vClass=this;
	//this._rsXML = new XMLHttpRequest();
	// Tentative de construction d'un objet XMLHttpRequest
	try {

		// Création d'un objet pour les navigateurs alternatifs
		this._rsXML=new XMLHttpRequest();
	}
	catch(e) {

			try {

				//Création d'un objet pour IE 4
				this._rsXML = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e) {
				try {

					//Création d'un objet IE5,6
					this._rsXML = new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch(e) {

					//On renvoie false --> impossible de créer un objet XMLHttpRequest
					this._rsXML = false;
				}
			}
	}
	this._rsXML.onreadystatechange=function() {
		vClass._rsXMLChange.apply(vClass);
	};
};

/**
 * Méthode permettant de renvoyer la réponse de la requête
 */
XMLRequest.prototype._rsXMLChange=function() {

	//On regarde le status de l'objet xmlhttp
	if (this._rsXML.readyState==this.XML_COMPLETED) {

		//La requête est complétement traitée
		if (this._rsXML.status == this.HTTP_OK) {

			//On renvoie donc la réponse de la requête pour l'affichage
			this._rsXMLDraw(this._type,this._rsXML.responseText);
		}
	}
};

/**
 * Méthode permettant de gérer l'affichage des réponses
 * @param int quel affichage doit etre pris en compte pour la réponse
 * @param string réponse de la requête xmlhttprequest
 */
XMLRequest.prototype._rsXMLDraw=function(typedraw,response) {

	//On regarde le type pour gérer l'affichage
	switch(typedraw) {

		case 1:		//Affichage de la réponse
			document.getElementById('rep_lst_heberg').innerHTML=response;
			var map_lei = new MapLei('map_lei',{classType:'MapLeiContent',useOverlay:true,linkXHR:'http://www.vassiviere.com/templates/vassiviere5/map_lei',contentDetails:0});
			var details_lei = new MapLei('det_lei',{classType:'DetLeiContent',useOverlay:true,linkXHR:'http://www.vassiviere.com/templates/vassiviere5/map_lei',contentDetails:1});
			//var box = {};window.addEventMT('domready', function(){box = new MultiBox('pho_lei', {descClassName: 'multiBoxDesc',useOverlay:true});});
			/*var map_lei = {};window.addEventMT('domready', function(){var map_lei = new MapLei('map_l',{classType:'MapLeiContent',useOverlay:true,linkXHR:'http://www.vassiviere.com/templates/vassiviere5/map_lei',contentDetails:0});});
			var details_lei = {};window.addEventMT('domready', function(){var details_lei = new MapLei('det_lei',{classType:'DetLeiContent',useOverlay:true,linkXHR:'http://www.vassiviere.com/templates/vassiviere5/map_lei',contentDetails:1});});
			var dispos_lei = {};window.addEventMT('domready', function(){var dispos_lei = new MapLei('dispo_lei',{classType:'DisLeiContent',useOverlay:true,linkXHR:'http://www.vassiviere.com/templates/vassiviere5/map_lei',contentDetails:1});});*/
			break;

		default:	//Rien
	}
};

//=================================== Méthodes publiques ======================================

/**
 * Méthode permettant de demander l'envoi d'une requête
 * @param string methode d'envoi ['GET'|'POST']
 * @param string url
 * @param string données à envoyer sous la forme var1=value1&var2=value2...
 */
XMLRequest.prototype.sendData=function(method, url, data) {

	//On initialise l'objet
	this._initRSXML();

	if (!this._rsXML) {
		return false;
	}

	if (method == "GET") {
		if (data != null) {
			data = "?"+data;
		}
		data=data.replace(/&amp;/g,"&");
		this._rsXML.open("GET", url+data, true);
		this._rsXML.send(null);
	}
	else if (method == "POST") {
		this._rsXML.open(method, url, true);
		this._rsc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		this._rsXML.send(data);
	}
	return true;
};

/**
 * Annule le chargement de l'objet
 */
XMLRequest.prototype.abort = function(){
	this._rsXML.abort();
};
