var XmlHTTPRequest = Class.create({
	initialize: function(){


		/**
		 * gestionnaire d'évènements global
		 */
		var doGlobalHandlers = {
			onCreate: function(){
				//block l'ihm
				iprestigiaOverlay.doActivateOverlay();
			},
			onComplete: function(){
				if (Ajax.activeRequestCount == 0) {
					//liberé l'ihm
					iprestigiaOverlay.deDesactivateOverlay();
				}
			},
			onException: function(requester, e){
				//liberé l'ihm
				iprestigiaOverlay.deDesactivateOverlay();
				if(displayErrorDev == 1) alert(e);
			}
		};

		/**
		 * enregisterement du gestionnaire des évenments
		 */
		Ajax.Responders.register(doGlobalHandlers);
	}, // fin fonction initialize

	/**
	 * fonction permetre de charger un script
	 * @param string oUrl : chemain du script
	 * @param string oDestination : id de l'objet à inserer la resultat
	 */
	load: function(oUrl, oDestination, oFunctionTrigger,displayOverlay){
		var data;
		var xhr = new Ajax.Request(oUrl, {
			method: 'get',
			onFailure: this.doOnError,
			onSuccess: function(response){
				if (response.responseText.isJSON()) {
					var data = response.responseText.evalJSON();
					oFunctionTrigger(data)
				}else{
					$(oDestination).update(response.responseText);
				}

			}
			//onComplete: oFunctionTrigger()
		});
	},

	/**
	 * fonction permetre de submit un formulaire
	 * @param string oUrl : chemain du script
	 * @param string oForm : id formulaire
	 * @param string oDestination : id reponse
	 */
	send: function(oForm, oDestination, oFunctionTrigger){
		//liste des fourmulaires dedans oForm à disable
		allparams =  $(oForm).getElementsByTagName('form');
		    for(i=0;i<allparams.length;i++){
				sIdFormDadans = allparams[i].getAttribute('id');
				if(sIdFormDadans != oForm){
					$(sIdFormDadans).disable();
				}
		    }
		//serialise
		var params  = $(oForm).serialize();
		//liste des fourmulires dedans oForm à enable;
	 	for(i=0;i<allparams.length;i++){
			sIdFormDadans = allparams[i].getAttribute('id');
			if(sIdFormDadans != oForm){
				$(sIdFormDadans).enable();
			}
	    }
		var oMethod = ($(oForm).readAttribute('method') == null) ? "post" : $(oForm).readAttribute('method');
		var oAction = $(oForm).readAttribute('action');
		var xhr = new Ajax.Request(oAction , {
			method: oMethod,
			parameters: params,
			onFailure: this.doOnError,
			onSuccess: function(response){
				if (response.responseText.isJSON()) {
					var data = response.responseText.evalJSON();
					oFunctionTrigger(data)
				}else{
					$(oDestination).update(response.responseText);
				}
			}
			//onComplete: oFunctionTrigger
		});
	},
	/**
	 * fonction permetre d'appeler un script et inserer le contenu dans la destination selon le mode donnée
	 * @param string idElement
	 * @param string data
	 * @param strin mode
	 */
	render: function(oDestination,data,oMode){
		//
		//  Par défaut none, quand un élément DOM est mis à jour, son ancien contenu est effacé.
		//	Si ce comportement n'est pas souhaité, il est possible d'indiquer où ajouter,
		//  dans l'élément, le texte de la réponse.
		//	Les valeurs possibles sont : "Insertion.After", "Insertion.Before", "Insertion.Bottom", "Insertion.Top".			//
		if(oMode != '' && oMode != undefined){
			var mode = "Insertion."+oMode;
			$(oDestination).insert(data, "+mode+");
		}else{
			$(oDestination).innerHTML = data;
		}
	},
	/**
	 * fonction permet d'appler un script mais répétées à intervalles réguliers
	 * @param string oUrl : chemain du script
	 * @param string oDestination : id reponse
	 * @param int oFrequence : Intervalle entre les rafraichissements.
	 * @param int oDecay vitesse de rafraichissement
	 */
	periodicalUpdater: function(oUrl, oDestination, oFrequence, oDecay){
		new Ajax.PeriodicalUpdater(oDestination, oUrl, {
			method: 'get',
			onFailure: this.doOnError,
			frequency: oFrequence,
			decay: oDecay
		});
	},

	setValue : function(oId, oValue){
		$(oId).value = oValue.unescapeHTML();
	},

	setInnerHTML : function(oId, oValue){
		$(oId).innerHTML = oValue.unescapeHTML();
	},

	doOnError : function(xhr){
		var error = "";
		if($('prestigia_indicator') != null) $('prestigia_indicator').hide();
		error  = xhr.status + ' : ' + xhr.responseText;
		if(displayErrorDev == 1) alert(error);
	},

	setValueNoDecoding : function(oId, oValue){
		$(oId).value = oValue.unescapeHTML();
	}

}
);
var xhrprestigia = new XmlHTTPRequest();
