// on teste d'abord l'existance des classes nécessaires
Classe.checkDefined("XHRMethod");
Classe.checkDefined("XHRPostMethod");

/**
 * Constructeur de la classe SetCriteresMethod.
 * Il construit une instance de SetCriteresMethod
 * à partir des paramètres donnés.
 *
 * La classe SetCriteresMethod est une extension
 * de la classe XHRPostMethod permettant de
 * récupérer un jeu de criteres et est auditeur
 * de timeline.
 *
 * @param {Object} _timeout : temps maximal accordé à l'enregistrement des critères en session
 * @param {Object} _url : url d'une page capable d'enregistrer les critères en session
 * @param {Object} _criteres : jeu de critères à enregistrer en session
 * @param {Function} _doAfter : méthode à exécuter une fois que la requête est terminée
 * @param {Integer} _retry : la requete sera relancée  _retry fois si le status de retour est différent de 200 ou 300
 */
function SetCriteresMethod(_timeout, _url, _criteres, _doAfter, _retry) {
	// appel du constructeur de XHRPostMethod
	XHRPostMethod.call(this, _timeout, _url, _criteres.objetToXML(), _retry);

	// définition des propriétés
	this.criteres=_criteres;
	this.doAfter=_doAfter;
}

SetCriteresMethod.prototype={
	/**
	 * Surcharge (Extraction des données reçues).
	 *
	 * @see XHRMethod#parseData()
	 */
	parseData: function(_data){
		var error=null;
		try{
			// appel de la méthode de base dans XHRGetMethod (pour gestion des exceptions)
			XHRMethod.prototype.parseData.apply(this, arguments);
		}
		catch(e){
			error=e;
			
			//affichage des erreurs
			/*if (document.getElementById("setCriteresException") != undefined) {
	  		document.getElementById("setCriteresException").style.display = "block";
	  	}*/
			
			// si les criteres n'ont pas été acceptés, on doit afficher les propositions disponibles	
			// on teste d'abord l'existance du namespace MEH
			if(typeof(MEH)=='undefined') throw new Error("Le namespace 'MEH' n'est pas défini!");
			if(typeof(MEH.Recherche)=='undefined') throw new Error("Le namespace 'MEH.recherche' n'est pas défini!");

			// et on récupère la liste de lieux proposés			
			MEH.Recherche.getListeLieux();

			//FIXME voir s'il faut faire autre chose ici

			// enfin on renvoie l'exception pour éviter 
//			throw e;
		}

		if(!error){
			// si aucune erreur, alimenter le compte client courant avec les valeurs contenu dans le document donné
			this.criteres.DOMToObjet(_data);
			if(typeof(this.doAfter)=='function') this.doAfter();
		}
	},
	
	catchError: function(_typeError, _message){
		EV.ME.ErrorManager().add(new EV.ME.Error("errorMEHSetCriteres", _typeError, EV.ME.ErrorLevel.FATAL, _message));
	}
}

// déclaration de l'héritage
Classe.extend(SetCriteresMethod, XHRPostMethod);
if (typeof(log)=='function') log("me3/meh/SetCriteresMethod.js ok", "info");
