(function(){
	// Si les namespaces/classes nécessaires ne sont pas chargées : exception
	if(!window.ev){throw new Error("Le namespace 'ev' doit exister");}
	// On s'assure que le namespace ev.meh existe
	if(!ev.meh){ ev.meh={}; }
	//Si la classe ev.meh.ME1HDisplay est définie on sort
	if(ev.meh.ME1HDisplay){return;}

	/**
	 * Cet classe permet de gerer l'affichage des resultat pour le moteur ME1H
	 * cad MEH mais repondant hotel par hotel
	 * ce moteur est présent sur les fiches easyexpert et sur le hub MEH
	 */
	ev.meh.ME1HDisplay=function(){

		this.nbPartenairesTotal = 0; // Nombre de partenaires ayant donne une reponse dans status
		this.nbPartenairesFinis = 0; // Nombre de partenaires ayant repondus sur leur hotels
		this.nbHotelsFinis = 0;
		this.affichageFinRecherche = ev.meh.ME1HDisplay.affichageFinRecherche.NOT_READY;
		this.idHotelCourant = 0;
		this.idHotelSearch = 0;
		this.hotelCourant = null;
		this.nbEtoilesCourant = 0;
		this.nbEtoilesSearch = 0;
		this.searchState = 0;// etat de la recherche : 0 = non commencée, 1 = en cours, 2 = recherche terminée
		this.ville="";
		this.dateDebS="01/01/1970";
		this.dateFinS="01/01/1970";

		this.alreadySearchStars =  new Array(0,0,0,0,0,0);// tableau permettant de savoir si on a deja effectue une recherche pour les hotels comportant x etoile(s) // 0 = recherche non effectuée; 1 = recherche en cours; 2 = recherche deja effectuée

		this.hotelPartAlreadyReceived =  new Array();

		/**
		 * permet de savoir si l'affichage des données peut avoir lieu ou non
		 */
		this.getAffichageFinRecherche = function() {
			if (this.affichageFinRecherche != ev.meh.ME1HDisplay.affichageFinRecherche.OK && this.nbHotelsFinis == listeResultats.length && this.nbPartenairesTotal > 0 && this.nbPartenairesFinis == this.nbPartenairesTotal) {
				this.affichageFinRecherche = ev.meh.ME1HDisplay.affichageFinRecherche.READY;
			}
			return this.affichageFinRecherche;
		}

		/**
		 * permet d'afficher les resultats sequentiellement
		 */
		this.sequentialPrint = function(){
			this.getHotelById(this.idHotelSearch, this.nbEtoilesSearch);
		}

		/**
		 * Fonction permettant de generer le premiere affichage : liste resultats, matrice, points sur la map
		 * losque tous les hotels ont été récupérés.
		 */
		this.initAffichage = function () {
			this.searchState = 2;
			this.alreadySearchStars[this.nbEtoilesSearch] = 2;
			if(listeResultats.length == 0){//si les partenaires n'ont retourné aucun hotel, on genere une erreur pour avertir l'utilisateur
				this.printNoResult(this.idHotelSearch);
				ev.me.ErrorManager().add(new ev.me.Error("errorMEHNoResult", null, ev.me.ErrorLevel.FATAL, "Aucun hotel trouvé chez les différents partenaires"));
			}else{
				this.affichageFinRecherche = ev.meh.ME1HDisplay.affichageFinRecherche.OK;//on met a jour le flag pour ne pas refaire l'affichage initial une deuxieme fois
			}
			this.getHotelById(this.idHotelSearch, this.nbEtoilesSearch);
			document.getElementById('deSelectOffer_'+this.idHotelSearch).style.display='block';
			document.getElementById('modifierDate_'+this.idHotelSearch).style.display='block';

			this.printDetailHotel(this.idHotelSearch, "END");
		}

		this.startSearch = function(_idHotelEasy, _nbEtoiles, _ville){
			//on cache la recherche précédente
			//document.getElementById('decouvrirOffre_'+_idHotelEasy).style.display='none';

			// on commence par tester si les dates sont valides pour pouvoir lancer la recherche
			if(this.checkDates(_idHotelEasy)){

				//On modifie l'action sur le bouton Découvrir cette offre sauf si une recherche est déjà en cours
				if (this.searchState!=1) {
					modifyJavascriptInAttribute(document.getElementById('selectOffer_'+_idHotelEasy),"onclick","display.startSearch("+_idHotelEasy+","+_nbEtoiles+",'"+_ville+"');");
					this.offerPartAffich("WAIT", _idHotelEasy);
				}
				addClass(document.getElementById("hotel_"+_idHotelEasy), "ouvert");

				this.ville=_ville;
				this.hideFormDates(_idHotelEasy);//On cache le formulaire de Dates

				var dateBegin = Date.convertSelectorToStringFr("jourDebutMEH_"+_idHotelEasy, "moisDebutMEH_"+_idHotelEasy);
				var dateEnd = Date.convertSelectorToStringFr("jourFinMEH_"+_idHotelEasy, "moisFinMEH_"+_idHotelEasy);

				if(this.searchState == 1 && this.idHotelSearch==_idHotelEasy){
					this.showDetailHotel(_idHotelEasy, false);
				}else if(this.searchState == 1 && this.alreadySearchStars[_nbEtoiles] == 2){
					this.getHotelById(_idHotelEasy, _nbEtoiles);
					this.showDetailHotel(_idHotelEasy, false);
				}else	if(this.searchState == 1){
					this.searchInProgress(_idHotelEasy);
				}else{
					if(this.searchState == 2 && this.alreadySearchStars[_nbEtoiles] == 2){

					}

					if (dateBegin != this.dateDebS || dateEnd != this.dateFinS) {
						listeResultats = new Array();
						this.alreadySearchStars[_nbEtoiles] = 0;
					}
					this.searchState = 0;
					this.getHotelById(_idHotelEasy, _nbEtoiles);
				}
			}
		}
		this.startMEHSearch = function(_idHotelEasy, _nbEtoiles, _ville){
			// on commence par tester si les dates sont valides pour pouvoir lancer la recherche
			if(this.checkDates(_idHotelEasy)){
				var criteres=ev.meh.Context().getCriteres();
				criteres.ville=_ville;
				criteres.dateDebut=Date.convertSelectorToStringFr("jourDebutMEH_"+_idHotelEasy, "moisDebutMEH_"+_idHotelEasy);
				criteres.dateFin=Date.convertSelectorToStringFr("jourFinMEH_"+_idHotelEasy, "moisFinMEH_"+_idHotelEasy);
				criteres.chambres=1;// on prend les valeurs par defaut car le formulaire se limite a la modification des dates
				criteres.paxAdultes=2;// on prend les valeurs par defaut car le formulaire se limite a la modification des dates
				criteres.paxEnfants=0;// on prend les valeurs par defaut car le formulaire se limite a la modification des dates
				criteres.etoiles=_nbEtoiles;

				this.dateDebS=criteres.dateDebut;
				this.dateFinS=criteres.dateFin;

				ev.meh.Context().setCriteres();
			}
		}

		this.checkDates = function(_idHotelEasy) {
			var error=false;
			var errorMEHDateDebutErronee=document.getElementById("errorMEHDateDebutErronee_"+_idHotelEasy);
			var jourDebutMEH=document.getElementById("jourDebutMEH_"+_idHotelEasy).value;
			var moisDebutMEH=document.getElementById("moisDebutMEH_"+_idHotelEasy).value.replace(/\/[0-9]{4}$/,"");
			var anDebutMEH=document.getElementById("moisDebutMEH_"+_idHotelEasy).value.replace(/^[0-9]{2}\//,"");
			if(isValidDate(jourDebutMEH,moisDebutMEH,anDebutMEH)){
				if(errorMEHDateDebutErronee!=undefined) errorMEHDateDebutErronee.style.display="none";
			}else{
				if(errorMEHDateDebutErronee!=undefined) errorMEHDateDebutErronee.style.display="";
				error=true;
			}
			var errorMEHDateFinErronee=document.getElementById("errorMEHDateFinErronee_"+_idHotelEasy);
			var jourFinMEH=document.getElementById("jourFinMEH_"+_idHotelEasy).value;
			var moisFinMEH=document.getElementById("moisFinMEH_"+_idHotelEasy).value.replace(/\/[0-9]{4}$/,"");
			var anFinMEH=document.getElementById("moisFinMEH_"+_idHotelEasy).value.replace(/^[0-9]{2}\//,"");
			if(isValidDate(jourFinMEH,moisFinMEH,anFinMEH)){
				if(errorMEHDateFinErronee!=undefined) errorMEHDateFinErronee.style.display="none";
			}else{
				if(errorMEHDateFinErronee!=undefined) errorMEHDateFinErronee.style.display="";
				error=true;
			}
			var errorMEHDatesInversees=document.getElementById("errorMEHDatesInversees_"+_idHotelEasy);
			if(!error){
				var dateDebutMEH=createDate(jourDebutMEH,moisDebutMEH,anDebutMEH);
				var dateFinMEH=createDate(jourFinMEH,moisFinMEH,anFinMEH);
				if(dateDebutMEH.getTime()<dateFinMEH.getTime()){
					if(errorMEHDatesInversees!=undefined) errorMEHDatesInversees.style.display="none";
				}else{
					if(errorMEHDatesInversees!=undefined) errorMEHDatesInversees.style.display="";
					error=true;
				}
			}else{
				if(errorMEHDatesInversees!=undefined) errorMEHDatesInversees.style.display="none";
			}

			return !error;
		}

		/**
		 * permet de recuperer un objet hotel avec les differente proposition des partenaire
		 * la premiere fois que cette methode est appelé, on lance la recherche,
		 * ensuite on recupere l'hotel directement dans la liste de resultats recupéré auparavant
		 */
		this.getHotelById = function(_idHotelEasy, _nbEtoiles){
			this.idHotelCourant = _idHotelEasy;
			var flagHotelRecupere = false;
			if(listeResultats.length > 0){
				for(var i=0; i<listeResultats.length; i++){
					if(listeResultats[i].idHotelEasy == this.idHotelCourant){
						flagHotelRecupere = true;
					}
				}
			}

			// on specifie le nombre d'etoile de l'hotel pour lancer la recherche pour 2 raisons :
			//   - certains partenaires nous renvoient un nombre limité d'hotel, en spécifiant le nombre d'étoiles on a plus de chance d'obtenir un prix pour l'hotel en question
			//	 - le resultats arrive plus vite car il y a moins d'hotel que si on recupéré tous les hotels de toutes les catégories
			if (_nbEtoiles == "undefined" || _nbEtoiles == null){
				this.nbEtoilesCourant = 0;
			}else{
				this.nbEtoilesCourant = _nbEtoiles;
			}

				document.getElementById('deSelectOffer_'+_idHotelEasy).style.display='none';
				document.getElementById('modifierDate_'+_idHotelEasy).style.display='none';
				document.getElementById('aucunTarif_'+_idHotelEasy).style.display='none';
				document.getElementById('tarif_'+_idHotelEasy).style.display='none';
				//document.getElementById('ev_detailHotel_'+_idHotelEasy).style.display='none';
			if(this.searchState == 0 && (listeResultats.length == 0 || this.alreadySearchStars[this.nbEtoilesCourant] == 0)){
				display.nbPartenairesFinis = 0;
				display.nbPartenairesTotal = 0;

				this.showDetailHotel(_idHotelEasy, true);

				this.hotelPartAlreadyReceived =  new Array();
				this.searchState = 1;
				this.idHotelSearch = _idHotelEasy;
				this.nbEtoilesSearch = _nbEtoiles;
				this.alreadySearchStars[this.nbEtoilesSearch]=1;

				var criteres=ev.meh.Context().getCriteres();
				criteres.ville=this.ville;
				criteres.dateDebut=Date.convertSelectorToStringFr("jourDebutMEH_"+_idHotelEasy, "moisDebutMEH_"+_idHotelEasy);
				criteres.dateFin=Date.convertSelectorToStringFr("jourFinMEH_"+_idHotelEasy, "moisFinMEH_"+_idHotelEasy);



				//Si pas de selection de ces informations dans le formulaire
				if(!document.getElementById('chambres_'+_idHotelEasy)){
					criteres.chambres=1;// on prend les valeurs par defaut car le formulaire se limite a la modification des dates
				}else{
					criteres.chambres	=	document.getElementById('chambres_'+_idHotelEasy).value;
				}
				if(!document.getElementById('paxAdultes_'+_idHotelEasy)){
					criteres.paxAdultes=2;// on prend les valeurs par defaut car le formulaire se limite a la modification des dates
				}else{
					criteres.paxAdultes =	document.getElementById('paxAdultes_'+_idHotelEasy).value;
				}
				if(!document.getElementById('paxEnfants_'+_idHotelEasy)){
					criteres.paxEnfants=0;// on prend les valeurs par defaut car le formulaire se limite a la modification des dates
				}else{
					criteres.paxEnfants =	document.getElementById('paxEnfants_'+_idHotelEasy).value;
				}

				criteres.etoiles=this.nbEtoilesSearch;

				this.dateDebS=criteres.dateDebut;
				this.dateFinS=criteres.dateFin;

				this.affichageFinRecherche = ev.meh.ME1HDisplay.affichageFinRecherche.NOT_READY;
				ev.meh.Recherche.startRechercheME1HWithCritere(ev.meh.Context().getCriteres());// on lance la recherche
			}else if(this.alreadySearchStars[this.nbEtoilesCourant] != 0 && this.searchState != 1){
				this.showDetailHotel(_idHotelEasy, false);
				document.getElementById('deSelectOffer_'+_idHotelEasy).style.display='block';
				document.getElementById('modifierDate_'+_idHotelEasy).style.display='block';
			}

			if(this.alreadySearchStars[this.nbEtoilesCourant] == 1 && this.searchState == 0 && flagHotelRecupere == false){
				this.printNoResult(_idHotelEasy);
				document.getElementById('deSelectOffer_'+_idHotelEasy).style.display='block';
				document.getElementById('modifierDate_'+_idHotelEasy).style.display='block';

			}
			if(this.alreadySearchStars[this.nbEtoilesCourant] == 2 && flagHotelRecupere == false){
				this.printNoResult(_idHotelEasy);
				document.getElementById('deSelectOffer_'+_idHotelEasy).style.display='block';
				document.getElementById('modifierDate_'+_idHotelEasy).style.display='block';
			}

			flagHotelRecupere = false;
			this.hotelCourant = null;
			if(listeResultats.length > 0){
				for(var i=0; i<listeResultats.length; i++){
					if(listeResultats[i].idHotelEasy == this.idHotelCourant){
						flagHotelRecupere = true;
						this.hotelCourant = listeResultats[i];
						if(this.searchState != 1){
							this.printDetailHotel(_idHotelEasy,"END");
						}else{
							this.printDetailHotel(_idHotelEasy,"WAIT");
						}
						return listeResultats[i];
					}
				}
			}

			if(this.searchState == 2 && flagHotelRecupere == false){
				this.searchState = 0;
				this.printNoResult(_idHotelEasy);
			}
		}

		var ulDetailHotel;
		var liDetailHotel;
		var imgPart;

		/**
		* On gère l'affichage du formulaire de Dates
		*/
		this.showFormDates = function(_idHotelEasy){
			addClass(document.getElementById("hotel_"+_idHotelEasy), "ouvert");
			document.getElementById('introFormDatesMEH_'+_idHotelEasy).style.display='block';
			document.getElementById('formDatesMEH_'+_idHotelEasy).style.display='block';
			document.getElementById('hideFormDates_'+_idHotelEasy).style.display='block';
			arraySlideFormDates["id_"+_idHotelEasy].open();
	  }

		this.hideFormDates = function(_idHotelEasy){
			document.getElementById('hideFormDates_'+_idHotelEasy).style.display='none';
			document.getElementById('introFormDatesMEH_'+_idHotelEasy).style.display='none';
			arraySlideFormDates["id_"+_idHotelEasy].close();
	  }

		/**
		 * permet d'afficher le detail d'un hotel
		 * @param {Object} _indexHotelEasy
		 */
		this.printDetailHotel = function(_idHotelEasy, _state){

			/* Objet contenant toutes les infos nécessaires */
			ulDetailHotel=document.getElementById("ev_detailHotel_"+_idHotelEasy);
			ulDetailHotel.style.display="block";

			document.getElementById('decouvrirOffre_'+_idHotelEasy).style.display='block';

			/* un removeChild de tous les li enfant de l'ul*/
			while (ulDetailHotel.firstChild) {
			  ulDetailHotel.removeChild(ulDetailHotel.firstChild);
			}

			if (this.hotelCourant != null){
				if (this.hotelCourant.getNbPropositionsPartenaires()>0) {
					addClass(ulDetailHotel, "displayBlock");
					document.getElementById("tarif_"+_idHotelEasy).style.display="block";
					document.getElementById("nbTarifs_"+_idHotelEasy).firstChild.nodeValue = this.hotelCourant.getNbPropositionsPartenaires();
				}
				for (var i=1;i<=this.hotelCourant.getNbPropositionsPartenaires();i++) {
					var hotelCPart=this.hotelCourant.getPropositionsPartenaires(i);

					if(this.hotelPartAlreadyReceived[hotelCPart.getIdPartenaire()]!=2){
						this.hotelPartAlreadyReceived[hotelCPart.getIdPartenaire()]=1;
					}

					this.constructEltPropositionPart(i,"FIND", _idHotelEasy, hotelCPart.getIdPartenaire(), hotelCPart);

					if(this.hotelPartAlreadyReceived[hotelCPart.getIdPartenaire()]==1){
						this.hotelPartAlreadyReceived[hotelCPart.getIdPartenaire()]=2;

						//on créer la div qui servira de highlight
						divDetailHotel= document.createElement("DIV");
						liDetailHotel.appendChild(divDetailHotel);
						divDetailHotel.id="highlight_"+_idHotelEasy+"_"+hotelCPart.getIdPartenaire();
						divDetailHotel.className="highlight";

						var highlight=new varyOpacityESV(document.getElementById("highlight_"+_idHotelEasy+"_"+hotelCPart.getIdPartenaire()),1000)
						highlight.decrease();
					}
				}

			}

			for(var i=0;i<partOfferHotel["id_"+_idHotelEasy].length;i++){
				/*for (var i = 1; i <= this.hotelCourant.getNbPropositionsPartenaires(); i++) {
		  		console.log("this.hotelCourant.getNbPropositionsPartenaires() : " + this.hotelCourant.getNbPropositionsPartenaires());
				}*/
				if(this.hotelPartAlreadyReceived[partOfferHotel["id_"+_idHotelEasy][i]]!=2){
					this.constructEltPropositionPart(i+1,_state,_idHotelEasy,partOfferHotel["id_"+_idHotelEasy][i]);
				}
			}

		}


		this.constructEltPropositionPart = function(_index, _state, _idHotelEasy, _idPart, _hotelPart){
			ulDetailHotel=document.getElementById("ev_detailHotel_"+_idHotelEasy);
			liDetailHotel= document.createElement("LI");
			liDetailHotel.id="resultats"+_idHotelEasy+"_"+_idPart;

			if(_index==1) {
				addClass(liDetailHotel, "first");
			}
			ulDetailHotel.appendChild(liDetailHotel);

			if (_hotelPart) {
				if (window.lang == "es_ES") {
					liDetailHotel.title = "Más Información sobre la oferta de " + _hotelPart.getNomPartenaire() + " a " + _hotelPart.getPrix() + " \u20AC imp incl para este hotel";
				}else if (window.lang == "de_DE") {
					liDetailHotel.title = "Mehr Informationen zum Angebot von " + _hotelPart.getNomPartenaire() + " zu " + _hotelPart.getPrix() + " \u20AC inkl. Mwst. für dieses Hotel";
				}else if (window.lang == "it_IT") {
					liDetailHotel.title = "Più Informazioni su l'offerta de " + _hotelPart.getNomPartenaire() + " a " + _hotelPart.getPrix() + " \u20AC Prezzo IVA incluse per questo hotel";
				}else if (window.lang == "en_GB") {
					liDetailHotel.title = "More information on this £ " + _hotelPart.getPrix() + " (inc. tax) hotel offer from " + _hotelPart.getNomPartenaire();
				}else {
					liDetailHotel.title = "Plus d'informations sur l'offre de " + _hotelPart.getNomPartenaire() + " à " + _hotelPart.getPrix() + " \u20AC ttc pour cet hôtel";
				}
				addJavascriptToAttribute(liDetailHotel,"onclick","clicHotelPart('"+_hotelPart.getUrlDetails()+"','"+_hotelPart.getIdHotelPart()+"',"+_idPart+")");
			}
			imgDetailHotel= document.createElement("IMG");
			liDetailHotel.appendChild(imgDetailHotel);
			imgDetailHotel.src=ev.me.URL_IMAGE+"/base/imgs/logos/partenairesLittle/"+_idPart+".gif";

			if (_hotelPart) {
				var spanDetailHotel= document.createElement("SPAN");
				liDetailHotel.appendChild(spanDetailHotel);

				if (window.lang == "es_ES") {
					prixDetailHotel = document.createTextNode(_hotelPart.getPrix() + " \u20AC");
				}else if (window.lang == "it_IT") {
					prixDetailHotel = document.createTextNode(_hotelPart.getPrix() + " \u20AC");
				}else if (window.lang == "de_DE") {
					prixDetailHotel = document.createTextNode(_hotelPart.getPrix() + " \u20AC inkl. Mwst.");
				}else if (window.lang == "en_GB") {
					prixDetailHotel = document.createTextNode("£ " + _hotelPart.getPrix());
				}else {
					prixDetailHotel = document.createTextNode(_hotelPart.getPrix() + " \u20AC ttc");
				}
				spanDetailHotel.appendChild(prixDetailHotel);

				infosDetailHotel= document.createElement("P");
				liDetailHotel.appendChild(infosDetailHotel);

				if (window.lang=="es_ES") {
					dinfosDetailHotel=document.createTextNode("info");
		  	    }else if (window.lang=="it_IT") {
					dinfosDetailHotel=document.createTextNode("dettagli");
				}else if (window.lang=="de_DE") {
					dinfosDetailHotel=document.createTextNode("Mehr infos");
				}else if (window.lang=="en_GB") {
					dinfosDetailHotel=document.createTextNode("More Info");
				}else {
					dinfosDetailHotel=document.createTextNode("d'infos");
				}
				infosDetailHotel.appendChild(dinfosDetailHotel);
			}


			if(_state == "WAIT"){
				var spanDetailHotel= document.createElement("SPAN");
				liDetailHotel.appendChild(spanDetailHotel);
				addClass(liDetailHotel, "wait");

				imgLoader= document.createElement("IMG");
				addClass(imgLoader,"searchLoader");
				imgLoader.src=ev.me.URL_IMAGE+"/base/imgs/meddle/hub/meh/searchLoader.gif"
				liDetailHotel.appendChild(imgLoader);

				if (window.lang == "es_ES") {
					etatPart = document.createTextNode("Búsqueda en curso...");
				}else if (window.lang == "it_IT") {
					etatPart = document.createTextNode("Ricerca in corso...");
				}else if (window.lang == "de_DE") {
					etatPart = document.createTextNode("Die Suche erfolgt...");
				}else if (window.lang == "en_GB") {
					etatPart = document.createTextNode("Searching...");
				}else {
					etatPart = document.createTextNode("Recherche en cours...");
				}
				spanDetailHotel.appendChild(etatPart);
			}else if(_state == "END"){
				var spanDetailHotel= document.createElement("SPAN");
				liDetailHotel.appendChild(spanDetailHotel);

				if(window.lang == "es_ES") {
					etatPart = document.createTextNode("No disponible");
				}else if (window.lang == "it_IT") {
					etatPart = document.createTextNode("Non disponinile");
				}else if (window.lang == "de_DE") {
					etatPart = document.createTextNode("Nicht vorhanden");
				}else if (window.lang == "en_GB") {
					etatPart = document.createTextNode("Not available");
				}else {
					etatPart = document.createTextNode("Non disponible");
				}
				spanDetailHotel.appendChild(etatPart);
				addClass(liDetailHotel, "nonDispo");
			}
		}

	 /**
	 * On initialise la barre de progression
	 */
		this.timelinePB=new Timeline(50);
		this.timelineListenerPB;
		this.pBListerner;
		this.progressBar;

	 /**
	 * On gère l'affichage des détails hotels
	 */
		this.showDetailHotel = function(numID, _initPB) {
			if(_initPB){
				document.getElementById('loader_'+numID).style.display='block';
				this.initPB(numID);
			}
			document.getElementById('selectOffer_'+numID).style.display='none';
			document.getElementById('decouvrirOffre_'+numID).style.display='block';
			document.getElementById('txtDate_'+numID).style.display='block';

			//On récupère les dates avec lesquelles on effectue la recherche
			var dateDebutMEH=Date.convertSelectorToStringFormatFr("jourDebutMEH_"+numID, "moisDebutMEH_"+numID);
			var dateFinMEH=Date.convertSelectorToStringFormatFr("jourFinMEH_"+numID, "moisFinMEH_"+numID);
			document.getElementById('infosDateDebutMEH_'+numID).firstChild.nodeValue=dateDebutMEH;
			document.getElementById('infosDateFinMEH_'+numID).firstChild.nodeValue=dateFinMEH;
		}

	 /**
	 * On gère le non-affichage des détails hotels
	 */
		this.alreadyOpen=false;
		this.hideDetailHotel = function(numID) {
			arraySlideAucunTarif["id_"+numID].close();
			document.getElementById('txtDate_'+numID).style.display='none';
			document.getElementById('deSelectOffer_'+numID).style.display='none';
			document.getElementById('decouvrirOffre_'+numID).style.display='none';
			document.getElementById('selectOffer_'+numID).style.display='block';
			removeClass(document.getElementById("hotel_"+numID), "ouvert");
			this.alreadyOpen=true;
		}

		this.initPB = function(_idHotel) {
			document.getElementById('loader_'+_idHotel).style.display='block';
			if (this.timelineListenerPB) {
				this.timelinePB.removeTimelineListener(this.timelineListenerPB);
				if(!this.timelinePB.isRunning()){
					this.timelinePB.start();
				}
			}
			this.progressBar=new ProgressBar(document.getElementById("pb_"+_idHotel), 0, 100);
			this.pBListerner=new ev.meh.MyProgressBarListener(this.progressBar.getMinValue(),this.progressBar.getMaxValue(),document.getElementById("compteur_"+_idHotel),_idHotel);
			this.progressBar.addProgressBarListener(this.pBListerner);
			this.progressBar.setValue(0);
			this.progressBar.setMinValue(0);
			this.progressBar.setMaxValue(100);
			this.timelineListenerPB=new ev.meh.MyTimelinePBListener(this.progressBar, 45000);
			this.timelinePB.addTimelineListener(this.timelineListenerPB);
		}

		this.offerPartAffich = function(_state, _idHotelEasy){
			document.getElementById('decouvrirOffre_'+_idHotelEasy).style.display='block';
			document.getElementById('ev_detailHotel_'+_idHotelEasy).style.display='block';
			ulDetailHotel=document.getElementById("ev_detailHotel_"+_idHotelEasy);
			// un removeChild de tous les li enfant de l'ul
			while (ulDetailHotel.firstChild) {
			  ulDetailHotel.removeChild(ulDetailHotel.firstChild);
			}
			for(var i=0;i<partOfferHotel["id_"+_idHotelEasy].length;i++){
				this.constructEltPropositionPart(i+1,_state,_idHotelEasy,partOfferHotel["id_"+_idHotelEasy][i]);
			}
		}

		this.printNoResult = function(_idHotelEasy){

			this.offerPartAffich("END", _idHotelEasy);



			document.getElementById("aucunTarif_"+_idHotelEasy).style.display="block";
			arraySlideAucunTarif["id_"+_idHotelEasy].open();
			document.getElementById('deSelectOffer_'+_idHotelEasy).style.display='block';
			document.getElementById('modifierDate_'+_idHotelEasy).style.display='block';
		}

		this.searchInProgress = function(_idHotelEasy){
			document.getElementById("sip_"+_idHotelEasy).style.display="block";
			setTimeout("display.displayNoneSip("+_idHotelEasy+")", 3000);
		}

		this.displayNoneSip = function(_idHotelEasy) {
			document.getElementById("sip_"+_idHotelEasy).style.display="none";
			removeClass(document.getElementById("hotel_"+_idHotelEasy), "ouvert");
		}
	}

	/**
	 * Enumération statique
	 */
	ev.meh.ME1HDisplay.affichageFinRecherche = { NOT_READY:0, READY:1, OK:2};


	ev.meh.MyProgressBarListener=function(_minValue, _maxValue, _counterNode,_idHotel) {
		var counterNode=_counterNode;
		//on fixe l'élément qui contiendra un compteur
		var flag=false;
		this.throwEvent=function(progressBarEvent) {
			// On inmplémente un compteur en %
			var cptValue = Math.round(100*((progressBarEvent.getValue()-_minValue)/(_maxValue-_minValue)));
			if (!cptValue || typeof(cptValue)!="number"){
				cptValue = 0;
			}
			counterNode.firstChild.nodeValue = cptValue+"%";
			// On ajoute une classe arrivé à 100% sur l'élément parent de la barre de progression
			if (counterNode.firstChild.nodeValue == "100%") {
				document.getElementById('loader_'+_idHotel).style.display='none';
				flag=true;
			}else if (flag) {
				document.getElementById('loader_'+_idHotel).style.display='block';
				//on cache le bouton fermer
				document.getElementById('deSelectOffer_'+_idHotel).style.display='none';
				flag=false;
			}
		}
	}
	ev.meh.MyProgressBarListener.prototype=new ProgressBarListener();

	ev.meh.MyTimelinePBListener=function(_pb, _timeout) {
		var pb=_pb;
		this.timeout = _timeout;
		this.timeoutDate = 0;
		this.flagStart = false;
		this.throwTimelineEvent=function(timelineEvent) {
			if(timelineEvent.getType()==TimelineEventType().START){
				var value=(100*display.nbPartenairesFinis)/display.nbPartenairesTotal;
				if (isNaN(value)) {
					value=0;
				}
				pb.setValue(value);
				this.timeoutDate=(new Date()).getTime()+this.timeout;
			}else if(timelineEvent.getType()==TimelineEventType().RUNNING) {
				if(this.flagStart == false){
					this.timeoutDate=(new Date()).getTime()+this.timeout;
					this.flagStart = true;
				}
				var value=(100*display.nbPartenairesFinis)/display.nbPartenairesTotal;
				if (isNaN(value)) {
					value=0;
				}
				pb.setValue(value);
				if (((typeof(value)=="number") && value >= 100) || ((new Date()).getTime() > this.timeoutDate)) {
					timelineEvent.getSource().stop();
			  }
			}else if (timelineEvent.getType() == TimelineEventType().STOP) {
				this.flagStart = false;
				pb.setValue(100);
			}
		}
	}

	ev.meh.MyTimelinePBListener.prototype=new TimelineListener();

})();
