/**
 * Cette classe maintient les données id et libelle pour un type d'hôtel (Sports, Balneaire, ...) tel qu'il sont définis dans la base de données (variation du libelle selon la langue).
 * @param {Integer} _id Identifiant du types d'hotel.
 * @param {String} _libelle Libelle du types d'hotel dans la langue d'affichage.
 * @param {HTMLInputElement} _node Noeud qui contient tout ce qui est relatif au types d'hotel.
 */
function Type(_id, _libelle, _node){
	var id = _id;
	var libelle = _libelle;
	var node = _node;

	this.getId = function(){
		return id;
	}
	
	this.getLibelle = function(){
		return libelle;
	}

	this.getNode = function(){
		return node;
	}
}

/**
 * Cette classe maintient les données id et nom pour un lieu de séjour tel qu'il est défini dans la base de données (variation du nom en fonction de la langue).
 * @param {Integer} _id Identifiant du lieu de séjour.
 * @param {String} _nom Nom du lieu de séjour dans la langue d'affichage.
 * @param {HTMLInputElement} _node Noeud qui contient tout ce qui est relatif au lieu de séjour.
 */
function Lieu(_id, _nom, _node){
	var id = _id;
	var nom = _nom;
	var node = _node;
	
	this.getId = function(){
		return id;
	}
	
	this.getNom = function(){
		return nom;
	}

	this.getNode = function(){
		return node;
	}
}

/**
 * Cette classe maintient entre autre les données pour un hôtel tel qu'il est défini dans la base de données (variation du nom en fonction de la langue).
 * @param {Integer} _id Identifiant de l'hôtel.
 * @param {String} _nom Nom de l'hôtel.
 * @param {Array} _types Liste d'identifiant pour les lier aux types d'hôtel.
 * @param {Integer} _lieu Identifiant pour le lier à un lieu.
 * @param {Float} _note Note donné par easyvoyage à l'hôtel.
 * @param {Integer} _noteOpinions Note donné par les voyageurs à l'hôtel via EasyOpinions.
 * @param {Integer} _etoile Nombre d'étoile donné par easyvoyage à l'hôtel.
 * @param {HTMLDivElement} _node Noeud qui contient tout ce qui est relatif à l'hotel.
 * @param {Integer} _prix Premier prix trouvé chez les partenaires pour un séjour dans l'hôtel (via MEP).
 */
function Hotel(_id, _nom, _types, _lieu, _note, _noteOpinions, _etoile, _node, _prix){
	var id = _id;
	var nom = _nom;
	var types = _types;
	var lieu = _lieu;
	var note = _note;
	var noteOpinions = _noteOpinions;
	var etoile = _etoile;
	var node = _node;
	var prix = _prix;
	
	this.getId = function(){
		return id;
	}
	
	this.getNom = function(){
		return nom;
	}
	
	this.getTypes = function(){
		return types;
	}
	
	this.getLieu = function(){
		return lieu;
	}
	
	this.getNoteOpinions = function(){
		return noteOpinions;
	}
	
	this.getNote = function(){
		return note;
	}
	
	this.getEtoile = function(){
		return etoile;
	}
	
	this.getNode = function(){
		return node;
	}
	
	this.getPrix = function(){
		return prix;
	}
	
	/** 			
     * Méthode de comparaison. Permet de lister dans l'ordre (soit alphabétiquement, soit numériquement)
     * Utilisé par {@link Hotel.compareNoteOpinions}, {@link Hotel.compareNote}, {@link Hotel.compareEtoile}, {@link Hotel.comparePrix} et {@link Hotel.compareNom}.			
     * @param {Object} _a
     * @param {Object} _b
     */
    function compare(_a, _b){
      if (_a < _b) return -1;
      else if (_a > _b) return 1;
      else return 0;
    }
    
    /**
     * Méthode qui relève les notes des opinions des hôtels pour l'envoyer à la méthode comparaison
     * Utilisé par {@link ControleurExpertESV.tri}
     * Utilise {@link compare}.
     * @param {Hotel} _a
     * @param {Hotel} _b
     */
    Hotel.compareNoteOpinions=function (_a, _b){
      return compare(_a.getNoteOpinions(), _b.getNoteOpinions());
    }
    			
    /**
     * Méthode qui relève les notes des hôtels pour l'envoyer à la méthode comparaison
     * Utilisé par {@link ControleurExpertESV.tri}
     * Utilise {@link compare}.
     * @param {Hotel} _a
     * @param {Hotel} _b
     */
    Hotel.compareNote=function (_a, _b){
      return compare(_a.getNote(), _b.getNote());
    }
    
    /**
     * Méthode qui relève les nombres d'étoiles des hôtels pour l'envoyer à la méthode comparaison.
     * Utilisé par {@link ControleurExpertESV.tri}
     * Utilise {@link compare}.
     * @param {Hotel} _a
     * @param {Hotel} _b
     */
    Hotel.compareEtoile=function (_a, _b){
      return compare(_a.getEtoile(), _b.getEtoile());
    }
    
    /**
     * Méthode qui relève les prix des hôtels pour l'envoyer à la méthode comparaison.
     * Utilisé par {@link ControleurExpertESV.tri}
     * Utilise {@link compare}.
     * @param {Hotel} _a
     * @param {Hotel} _b
     */
    Hotel.comparePrix=function (_a, _b){
      return compare(_a.getPrix(), _b.getPrix());
    }
    
    /**
     * Méthode qui relève les noms des hôtels pour l'envoyer à la méthode comparaison.
     * Utilisé par {@link ControleurExpertESV.tri}
     * Utilise {@link compare}.
     * @param {Hotel} _a
     * @param {Hotel} _b
     */
    Hotel.compareNom = function(_a, _b){
		return compare(_a.getNom(), _b.getNom());
	}
}

/**
 * Cette classe qui permet des faire :
 * - le tri sur la liste d'hôtels en fonction du nom ou la note ou la note des voyageurs ou du nombre d'étoiles ou du prix.
 * - un filtrage sur la liste d'hôtels en fonction des types d'hôtel, des lieux de séjour, de la note minimal et du nombre d'étoile minimal.
 * - met à jour le nombre d'hôtel affiché.
 */
function ControleurExpertESV(){
	/** List d'hôtels **/
	ControleurExpertESV.hotels=new Array();
	/** List de lieux de séjour **/
	ControleurExpertESV.lieux=new Array();
	/** List de types d'hôtel **/
	ControleurExpertESV.types=new Array();
	/**
	 * Méthode statique de tri des objets "Hotel" selon critère.
	 * Utilise {@link Hotel.compareNote}, {@link Hotel.compareNoteOpinions}, {@link Hotel.compareEtoile}, {@link Hotel.comparePrix}, {@link Hotel.compareNom} et {@link ControleurExpertESV.hotels}
	 * @param {Array} _hotels List d'hôtel à trier {@link Hotel}.
	 * @param {String} _by Critère de tri ("noteOpinions", "note", "etoile" ou "prix").
	 */
	ControleurExpertESV.tri=function (_element, _by){
		if(_by=="note") ControleurExpertESV.hotels.sort(Hotel.compareNote);
		else if(_by=="noteOpinions") ControleurExpertESV.hotels.sort(Hotel.compareNoteOpinions);
		else if(_by=="etoile") ControleurExpertESV.hotels.sort(Hotel.compareEtoile);
		else if(_by=="prix") ControleurExpertESV.hotels.sort(Hotel.comparePrix);
		else ControleurExpertESV.hotels.sort(Hotel.compareNom);
		for (var a = 0; a < ControleurExpertESV.hotels.length; a++) {
			var node=ControleurExpertESV.hotels[a].getNode()
			_element.appendChild(node);
		}
	}
	/**
	 * Méthode statique de filtrage des hôtel {@link Hotel}.
	 * Pour chaque hotel on vérifie que tous les paramètres déselectionner ne soit pas présent pour son affichage.
	 * Utilise {@link ControleurExpertESV.hotels}, {@link ControleurExpertESV.lieux} et {@link ControleurExpertESV.types}.
	 * Utilisé par {@link ControleurExpertESV.modifCheckedType}, {@link ControleurExpertESV.modifCheckedLieu} et {@link ControleurExpertESV.modifSelected}
	 * @param {HTMLCollection} _note Note minimal à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _noteOpinions Note minimal donné par les voyageurs à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _etoile Nombre minimal d'étoile à partir du quel on accepte l'affichage.
	 */
	filtre=function (_note, _noteOpinions, _etoile){
		// Iteration sur {@link ControleurExpertESV.hotels}.
		for (var a = 0; a < ControleurExpertESV.hotels.length; a++) {
			var hotel=ControleurExpertESV.hotels[a];
			// Filtrage selon {@link ControleurExpertESV.lieux}.
			var voidList=true;
			var lieuNotFind = true;
			for (var b = 0; b < ControleurExpertESV.lieux.length && lieuNotFind; b++) {
				if (ControleurExpertESV.lieux[b].getNode().checked) {
					voidList=false;
					if (ControleurExpertESV.lieux[b].getId() == hotel.getLieu()) {
						lieuNotFind = false;
					}
				}
			}
			if(voidList) lieuNotFind = false;
			// Filtrage selon {@link ControleurExpertESV.types}.
			var typeNotFind=false;
			for (var b = 0; b < ControleurExpertESV.types.length && !typeNotFind; b++) {
				if (ControleurExpertESV.types[b].getNode().checked) {
					var find=false;
					for (var c = 0; c < hotel.getTypes().length && !find; c++) {
						if (ControleurExpertESV.types[b].getId() == hotel.getTypes()[c]) {
							find = true;
						}
					}
					typeNotFind=!find;
				}
			}
			// Filtrage selon @param {HTMLCollection} _note.
			var findNote=false;
			for (i = 0; i < _note.length ; i++) {
				if (_note[i].checked == true && hotel.getNote() < _note[i].value) 
					findNote = true;
			}
			// Filtrage selon @param {HTMLCollection} _noteOpinions.
			var findNoteOpinions=false;
			for (i = 0; i < _noteOpinions.length ; i++) {
				if (_noteOpinions[i].checked == true && hotel.getNoteOpinions() < _noteOpinions[i].value) 
					findNoteOpinions = true;
			}
			// Filtrage selon @param {HTMLCollection} _etoile.
			var findEtoile=false;
			for (i = 0; i < _etoile.length ; i++) {
				if (_etoile[i].checked == true && hotel.getEtoile() < _etoile[i].value) 
					findEtoile = true;
			}
			// On affiche ou pas selon les résultats trouvé.
			if(typeNotFind || lieuNotFind || findNote || findNoteOpinions || findEtoile) hotel.getNode().style.display="none";
			else hotel.getNode().style.display="block";
		}
	}
	/**
	 * Méthode statique qui modifie le paramètre boolean d'affichage checked de la list d'objets type d'hôtel.
	 * Pour finir elle lance la méthode de filtrage {@link filtre} puis celle de mise à jour du nombre d'hôtel affiché {@link updateNodeNombreHotel}.
	 * Utilise {@link ControleurExpertESV.types}, {@link filtre} et {@link updateNodeNombreHotel}
	 * @param {Integer} _id Identifiant du type d'hôtel sélectionné/desélectionné.
	 * @param {HTMLCollection} _note Note minimal à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _noteOpinions Note minimal donné par les voyageurs à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _etoile Nombre minimal d'étoile à partir du quel on accepte l'affichage.
	 * @param {Text} _node Noeud qui contient le texte du nombre d'hôtel affiché.
	 * @param {HTMLInputElement} _noTypeChecked Noeud qui contient l'input lors ce qu'aucun type d'hôtel n'est séléctionné.
	 */
	ControleurExpertESV.modifCheckedType=function (_id, _note, _noteOpinions, _etoile, _node, _noTypeChecked){
		if (_id==-1) {
			for (var a = 0; a < ControleurExpertESV.types.length; a++) {
				ControleurExpertESV.types[a].getNode().checked=false;
			}
			_noTypeChecked.checked=true;
		} else {
			find=false;
			for (var a = 0; a < ControleurExpertESV.types.length && !find; a++) {
				if (ControleurExpertESV.types[a].getNode().checked) find = true;
			}
			if(find) _noTypeChecked.checked = false;
			else _noTypeChecked.checked = true;
		}
		filtre(_note, _noteOpinions, _etoile);
		updateNodeNombreHotel(_node);
	}
	/**
	 * Méthode statique qui modifie le paramètre boolean d'affichage checked de la list d'objets lieu de séjour.
	 * Pour finir elle lance la méthode de filtrage {@link filtre} puis celle de mise à jour du nombre d'hôtel affiché {@link updateNodeNombreHotel}.
	 * Utilise {@link ControleurExpertESV.lieux}, {@link filtre} et {@link updateNodeNombreHotel}
	 * @param {Integer} _id Identifiant lieu sélectionné/desélectionné.
	 * @param {HTMLCollection} _note Note minimal à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _noteOpinions Note minimal donné par les voyageurs à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _etoile Nombre minimal d'étoile à partir du quel on accepte l'affichage.
	 * @param {Text} _node Noeud qui contient le texte du nombre d'hôtel affiché.
	 * @param {HTMLInputElement} _noLieuChecked Noeud qui contient l'input lors ce qu'aucun lieu de séjour n'est séléctionné.
	 */
	ControleurExpertESV.modifCheckedLieu=function (_id, _note, _noteOpinions, _etoile, _node, _noLieuChecked){
		if (_id == -1) {
			for (var a = 0; a < ControleurExpertESV.lieux.length; a++) {
				ControleurExpertESV.lieux[a].getNode().checked = false;
			}
			_noLieuChecked.checked = true;
		} else {
			find=false;
			for (var a = 0; a < ControleurExpertESV.lieux.length && !find; a++) {
				if (ControleurExpertESV.lieux[a].getNode().checked) find = true;
			}
			if(find) _noLieuChecked.checked = false;
			else _noLieuChecked.checked = true;
		}
		filtre(_note, _noteOpinions, _etoile);
		updateNodeNombreHotel(_node);
	}
	/**
	 * Méthode statique qui lance le filtrage {@link filtre} puis la mise à jour du nombre d'hôtel affiché {@link updateNodeNombreHotel}.
	 * @param {HTMLCollection} _note Note minimal à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _noteOpinions Note minimal donné par les voyageurs à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _etoile Nombre minimal d'étoile à partir du quel on accepte l'affichage.
	 * @param {Text} _node Noeud qui contient le texte du nombre d'hôtel affiché.
	 */
	ControleurExpertESV.modifSelected=function (_note, _noteOpinions, _etoile, _node){
		filtre(_note, _noteOpinions, _etoile);
		updateNodeNombreHotel(_node);
	}
	/**
	 * Méthode qui modifie l'affichage du nombre d'hôtel.
	 * Utilise {@link ControleurExpertESV.hotels}.
	 * @param {Text} _node Noeud qui contient le texte du nombre d'hôtel affiché.
	 */
	updateNodeNombreHotel=function (_node){
		var nombreHotel=0;
		for (var a = 0; a < ControleurExpertESV.hotels.length; a++) {
			if(ControleurExpertESV.hotels[a].getNode().style.display!="none") nombreHotel++;
		}
		_node.nodeValue=nombreHotel;
	}
}
/**
 * Cette focntion permet de faire :
 * - remet tous les filtres à leur valeur par défaut
 * - met à jour le nombre d'hôtel affiché.
 * @param {Integer} _id Identifiant du type d'hôtel sélectionné/desélectionné.
 * @param {HTMLCollection} _note Note minimal à partir de laquel on accepte l'affichage.
 * @param {HTMLCollection} _noteOpinions Note minimal donné par les voyageurs à partir de laquel on accepte l'affichage.
 * @param {HTMLCollection} _etoile Nombre minimal d'étoile à partir du quel on accepte l'affichage.
 * @param {Text} _node Noeud qui contient le texte du nombre d'hôtel affiché.
 * @param {HTMLInputElement} _noLieuChecked Noeud qui contient l'input lors ce qu'aucun lieu de séjour n'est séléctionné.
 */
function resetParamRegion(_id, _note, _noteOpinions, _etoile, _node, _noLieuChecked) {
	ControleurExpertESV.modifCheckedLieu(_id, _note, _noteOpinions, _etoile, _node, _noLieuChecked);
	ControleurExpertESV.modifCheckedType(_id, _note, _noteOpinions, _etoile, _node, _noLieuChecked);
	document.getElementsByName('notes')[0].checked = true;
	document.getElementsByName('notesOpinions')[0].checked = true;
	document.getElementsByName('etoiles')[0].checked = true;
	ControleurExpertESV.modifSelected(_note, _noteOpinions, _etoile, _node);
}
/**
 * Cette focntion permet de faire :
 * - remet tous les filtres à leur valeur par défaut
 * - met à jour le nombre d'hôtel affiché.
 * @param {Integer} _id Identifiant du type d'hôtel sélectionné/desélectionné.
 * @param {HTMLCollection} _note Note minimal à partir de laquel on accepte l'affichage.
 * @param {HTMLCollection} _noteOpinions Note minimal donné par les voyageurs à partir de laquel on accepte l'affichage.
 * @param {HTMLCollection} _etoile Nombre minimal d'étoile à partir du quel on accepte l'affichage.
 * @param {Text} _node Noeud qui contient le texte du nombre d'hôtel affiché.
 * @param {HTMLInputElement} _noLieuChecked Noeud qui contient l'input lors ce qu'aucun lieu de séjour n'est séléctionné.
 */
function resetParamLieu(_id, _note, _noteOpinions, _etoile, _node, _noLieuChecked) {
	ControleurExpertESV.modifCheckedType(_id, _note, _noteOpinions, _etoile, _node, _noLieuChecked);
	document.getElementsByName('notes')[0].checked = true;
	document.getElementsByName('notesOpinions')[0].checked = true;
	document.getElementsByName('etoiles')[0].checked = true;
	ControleurExpertESV.modifSelected(_note, _noteOpinions, _etoile, _node);
}
ControleurExpertESV();

/**
 * Cette classe contient les différentes fonctionnalités pour faire fonctionner un portfolio d'hôtels tout en tenant compte des filtres.
 */
function PortfolioExpertESV(){
	
	/**
	 * Méthode qui determine qu'elles hotels sont à afficher.
	 * Utilisé par {@link PortfolioExpertESV.init} et {@link PortfolioExpertESV.next}
	 * @param {Integer} _first Numéro de la première image à afficher dans le portfolio.
	 * @param {HTMLImageElement} _next Element image représentant le bouton suivant.
	 */
	hotelsAfficher=function (){
		var count=0;
		// Iteration sur {@link ControleurExpertESV.hotels}.
		for (var a = 0; a < ControleurExpertESV.hotels.length; a++) {
			var hotel = ControleurExpertESV.hotels[a];
			if (hotel.getNode().style.display == "block") {
				count++;
				/*if (count < PortfolioExpertESV.first) 
					hotel.getNode().style.display = "none";
				else 
					if (count < (PortfolioExpertESV.first + PortfolioExpertESV.nombreHotelAffiche)) 
						hotel.getNode().style.display = "block";
					else 
						hotel.getNode().style.display = "none";*/
			}
		}
	}
	
	/**
	 * Méthode qui determine si l'élement next est à afficher.
	 * Utilisé par {@link PortfolioExpertESV.init} et {@link PortfolioExpertESV.next}
	 * @param {Integer} _first Numéro de la première image à afficher dans le portfolio.
	 * @param {HTMLImageElement} _next Element image représentant le bouton suivant.
	 */
	afficheNext = function(_first, _next){
		var count=0;
		// Iteration sur {@link ControleurExpertESV.hotels}.
		for (var a = 0; a < ControleurExpertESV.hotels.length; a++) {
			if (ControleurExpertESV.hotels[a].getNode().style.display == "block") {
				count++;
			}
		}
		if ((_first + PortfolioExpertESV.nombreHotelAffiche) >= count){
			_first=count-PortfolioExpertESV.nombreHotelAffiche;
			//_next.style.display = "none";//mise en commentaire par bfoucher suite a l'intégration du Sliding Block
		} else{
			//_next.style.display = "block";//mise en commentaire par bfoucher suite a l'intégration du Sliding Block
		}
	}
	
	/**
	 * Objet static qui identifie du premier élément du portfolio afficher.
	 */
	PortfolioExpertESV.first=1;
	
	/**
	 * Objet static qui représente le nombre d'hôtels à afficher.
	 */
	PortfolioExpertESV.nombreHotelAffiche=3;
		
	/**
	 * Méthode statique qui initialise l'affichage des hotels lors du chargement de la page.
	 * @param {HTMLImageElement} _back Element image représentant le bouton précédent.
	 */
	PortfolioExpertESV.firstInit = function(_back){
		//_back.style.display = "none";//mise en commentaire par bfoucher suite a l'intégration du Sliding Block
		// Iteration sur {@link ControleurExpertESV.hotels}.
		for (var a = 0; a < ControleurExpertESV.hotels.length; a++) {
			var hotel=ControleurExpertESV.hotels[a];
			// On affiche ou pas selon les résultats trouvé.
			if(a>2) hotel.getNode().style.display="none";
			else hotel.getNode().style.display="block";
		}
	}

	/**
	 * Méthode statique qui initialise l'affichage des hotels lors d'un changement dans les filtres.
	 * Utilise {@link ControleurExpertESV.modifCheckedType}, {@link afficheNext} et {@link hotelsAfficher}
	 * @param {Integer} _id Identifiant lieu sélectionné/desélectionné.
	 * @param {HTMLCollection} _note Note minimal à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _noteOpinions Note minimal donné par les voyageurs à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _etoile Nombre minimal d'étoile à partir du quel on accepte l'affichage.
	 * @param {Text} _node Noeud qui contient le texte du nombre d'hôtel affiché.
	 * @param {HTMLInputElement} _noLieuChecked Noeud qui contient l'input lors ce qu'aucun lieu de séjour n'est séléctionné.
	 * @param {Integer} _first Numéro de la première image à afficher dans le portfolio.
	 * @param {HTMLImageElement} _back Element image représentant le bouton précédent.
	 * @param {HTMLImageElement} _next Element image représentant le bouton suivant.
	 */
	PortfolioExpertESV.init = function (_id, _note, _noteOpinions, _etoile, _node, _noTypeChecked, _first, _back, _next){
		ControleurExpertESV.modifCheckedType(_id, _note, _noteOpinions, _etoile, _node, _noTypeChecked);
		//_back.style.display = "none";//mise en commentaire par bfoucher suite a l'intégration du Sliding Block
		afficheNext(_first, _next);
		PortfolioExpertESV.first = _first;
		PortfolioExpertESV.first++;
		hotelsAfficher();
	}
	
	/**
	 * Méthode statique qui affiche les hotels suivants.
	 * Utilise {@link ControleurExpertESV.modifCheckedType}, {@link afficheNext} et {@link hotelsAfficher}
	 * @param {Integer} _id Identifiant lieu sélectionné/desélectionné.
	 * @param {HTMLCollection} _note Note minimal à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _noteOpinions Note minimal donné par les voyageurs à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _etoile Nombre minimal d'étoile à partir du quel on accepte l'affichage.
	 * @param {Text} _node Noeud qui contient le texte du nombre d'hôtel affiché.
	 * @param {HTMLInputElement} _noLieuChecked Noeud qui contient l'input lors ce qu'aucun lieu de séjour n'est séléctionné.
	 * @param {Integer} _first Numéro de la première image à afficher dans le portfolio.
	 * @param {HTMLImageElement} _back Element image représentant le bouton précédent.
	 * @param {HTMLImageElement} _next Element image représentant le bouton suivant.
	 */
	PortfolioExpertESV.next = function (_id, _note, _noteOpinions, _etoile, _node, _noTypeChecked, _first, _back, _next){
		ControleurExpertESV.modifCheckedType(_id, _note, _noteOpinions, _etoile, _node, _noTypeChecked);
		//_back.style.display = "block";//mise en commentaire par bfoucher suite a l'intégration du Sliding Block
		afficheNext(_first, _next);	
		PortfolioExpertESV.first = _first;
		PortfolioExpertESV.first++;
		hotelsAfficher();
	}
	
	/**
	 * Méthode statique qui affiche les hotels précédents.
	 * Utilise {@link ControleurExpertESV.modifCheckedType} et {@link hotelsAfficher}
	 * @param {Integer} _id Identifiant lieu sélectionné/desélectionné.
	 * @param {HTMLCollection} _note Note minimal à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _noteOpinions Note minimal donné par les voyageurs à partir de laquel on accepte l'affichage.
	 * @param {HTMLCollection} _etoile Nombre minimal d'étoile à partir du quel on accepte l'affichage.
	 * @param {Text} _node Noeud qui contient le texte du nombre d'hôtel affiché.
	 * @param {HTMLInputElement} _noLieuChecked Noeud qui contient l'input lors ce qu'aucun lieu de séjour n'est séléctionné.
	 * @param {Integer} _first Numéro de la première image à afficher dans le portfolio.
	 * @param {HTMLImageElement} _back Element image représentant le bouton précédent.
	 * @param {HTMLImageElement} _next Element image représentant le bouton suivant.
	 */
	PortfolioExpertESV.back = function (_id, _note, _noteOpinions, _etoile, _node, _noTypeChecked, _first, _back, _next){
		ControleurExpertESV.modifCheckedType(_id, _note, _noteOpinions, _etoile, _node, _noTypeChecked);
		//_next.style.display = "block";//mise en commentaire par bfoucher suite a l'intégration du Sliding Block
		PortfolioExpertESV.first = _first;
		PortfolioExpertESV.first--;
		//if (PortfolioExpertESV.first == 1) _back.style.display = "none";//mise en commentaire par bfoucher suite a l'intégration du Sliding Block
		//else _back.style.display = "block";//mise en commentaire par bfoucher suite a l'intégration du Sliding Block
		hotelsAfficher();
	}
}
PortfolioExpertESV();

