(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.ME1HDisplayTimelineListener est définie on sort
	if(ev.meh.ME1HDisplayTimelineListener){return;}

	/**
	 * Auditeur de timeline
	 * @param {Object} _timeout
	 */
	ev.meh.ME1HDisplayTimelineListener=function(_timeout, _display, _listeResultats) {

		this.timeout = _timeout;
		this.timeoutDate = 0;
		this.display = _display;
		this.nbResultats = 0;
		this.nbPartenairesFinis = 0;
		this.flagTraitement = 0;

		this.throwTimelineEvent = function(timelineEvent) {
			if(timelineEvent.getType()==TimelineEventType().START){
				this.timeoutDate=(new Date()).getTime()+this.timeout;
			}else if(timelineEvent.getType()==TimelineEventType().RUNNING){
				if ((this.display.nbPartenairesTotal > 0 && (this.display.nbPartenairesFinis == this.display.nbPartenairesTotal)) ||  ((new Date()).getTime() > this.timeoutDate)) {
			  	timelineEvent.getSource().stop();
			  }else {
					if(this.flagTraitement == 0){
						if (listeResultats != undefined ){
							if(_listeResultats.length > 0 && this.display.getAffichageFinRecherche() == ev.meh.ME1HDisplay.affichageFinRecherche.READY){
								timelineEvent.getSource().stop();
							}else if(_listeResultats.length > this.nbResultats){
								this.nbResultats = _listeResultats.length;
								if (this.display.getAffichageFinRecherche() == ev.meh.ME1HDisplay.affichageFinRecherche.NOT_READY) {//On affiche la liste de resultat a chaque fois qu'on a fini de recuperer les hotels d'un partenaire
									this.display.sequentialPrint();//On declenche l'affichage sequentiel (trie de la liste resultats et affichage)
									//this.display.showResults();
									this.flagTraitement = 1;
								}
							}
						}
					}
					if(this.flagTraitement > 0)this.flagTraitement--;
			  }
			}else if(timelineEvent.getType()==TimelineEventType().STOP){
					this.display.initAffichage();//On declenche l'affichage (map, liste resultats, matrice)
			}else{
				if (typeof(this.catchError) == 'function') {
		  		throw new Error("Evènement de timeline inconnu : " + _event.getType());
		  	}
			}
		};
	}
	// déclaration de l'héritage
	Classe.extend(ev.meh.ME1HDisplayTimelineListener, ev.time.TimelineListener);

})();
