(function(){
	// Si les namespaces/classes nécessaires ne sont pas chargées : exception
	if(!window.ev){throw new Error("Le namespace 'ev' doit exister");}
	if(!ev.rjs){throw new Error("Le namespace 'ev.rjs' doit exister");}
	// On s'assure que le namespace ev.meh existe
	if(!ev.meh){ ev.meh={}; }
	//Si la classe criteres est définie on sort
	if(ev.meh.Criteres){return;}
	
	/**
	 * Objet critere : permet de stocker les 
	 * données concernant un jeu de criteres 
	 */
	ev.meh.Criteres=function(){
		
		this.ville;
		this.chambres;
		this.etoiles;
		this.paxAdultes;
		this.paxEnfants;
		this.dateDebut;
		this.dateFin;
		this.crikey;
		
		this.templManagerCriteres;
		
		/*
		this.ville = "paris";
		this.chambres = 2;
		this.etoiles = 0;
		this.paxAdultes = 2;
		this.paxEnfants = 0;
		this.dateDebut = 12/06/2008;
		this.dateFin = 15/06/2008;
		*/
	}
	
	ev.meh.Criteres.prototype={
		getVille: function(){
			return this.ville;
		},
		
		getChambres: function(){
			return this.chambres + " chambre" + (this.chambres > 1 ? "s" : "");	
		},
		
		getPaxAdultes: function(){
			return this.paxAdultes + " Adulte" + (this.paxAdultes > 1 ? "s" : "");	
		},
		
		getPaxEnfants: function(){
			return this.paxEnfants + " Enfant" + (this.paxEnfants > 1 ? "s" : "");	
		},
		
		getDateDebut: function(){
			if(typeof(this.dateDebut) != "undefined"){
				return this.dateDebut.getDate() + " "	+ getMoisTexteLong(this.dateDebut.getMonth() + 1) + " " + this.dateDebut.getFullYear();	
			}
		},
		
		getDateFin: function(){
			if (typeof(this.dateFin) != "undefined") {
				return this.dateFin.getDate() + " " + getMoisTexteLong(this.dateFin.getMonth() + 1) + " " + this.dateFin.getFullYear();
			}
		},
		
		getNbChambres: function(){
			return Math.round(this.chambres);	
		},
		
		getNbNuits: function(){
			if ((typeof(this.dateDebut) != "undefined") && (typeof(this.dateFin) != "undefined")) {
				return Math.round((this.dateFin.getTime() - this.dateDebut.getTime())/86400000);
		  }
		},

		/**
		 * Injection des données critères par la syntaxe EV
		 */	
		print: function(){
			ev.meh.ConstructHtmlCode().printHtmlCode_CriteresRecherche("ev_criteresRecherche", this);
		},
		
		/**
		 * Permet de copier les propriétés de l'objet
		 * critères donné vers l'objet courant.
		 * @param c autre objet critères
		 */
		updateFrom: function(c){
			ev.tools.copy(this, c);
		},
		
		/**
		 * Construit une chaine corespondant aux paramètres
		 * à passer dans l'url pour ces critères.
		 */
		inUrlParams: function(){
			var d = "";
			var month = "";			
			
			var url="ville="+this.ville;
			if(this.chambres){
				url+="&chambres="+this.chambres;
			}
			if(this.etoiles){
				url+="&etoiles="+this.etoiles;
			}
			if(this.paxAdultes){
				url+="&paxAdultes="+this.paxAdultes;
			}	
			if(this.paxEnfants){
				url+="&paxEnfants="+this.paxEnfants;
			}	
			if(this.dateDebut){
				//url+="&dateDebut="+this.dateDebut;
				d=Date.convertStringFrToDate(this.dateDebut);
				month = d.getMonth()+1;
				if (month < 10) 
					month = "0"+month;
				url+="&dateDebut="+d.getDate()+"-"+month+"-"+d.getFullYear();
			}
			if (this.dateFin) {
				//url+="&dateFin="+this.dateFin;
				d=Date.convertStringFrToDate(this.dateFin);
				month = d.getMonth()+1;
				if (month < 10) 
					month = "0"+month;
				url+="&dateFin="+d.getDate()+"-"+month+"-"+d.getFullYear();
			}
			if (this.crikey) {
				url+="&crikey="+this.crikey;
			}	
			return url;
		},
		
		/**
		 * fonction qui permet d'alimenter un objet critere à partir d'un objet XMLDocument passé en paramètre
		 * @param {Object} document
		 * 
		 * FIXME à supprimer dès que la version rjs fonctionne
		 */
		DOMToObjet: function(document){
			if(document != undefined){
				if(document.getElementsByTagName("ville")[0] != undefined && document.getElementsByTagName("ville")[0].firstChild != undefined){
					this.ville = document.getElementsByTagName("ville")[0].firstChild.nodeValue;	
				}
			  if(document.getElementsByTagName("chambres")[0] != undefined && document.getElementsByTagName("chambres")[0].firstChild){
					this.chambres = document.getElementsByTagName("chambres")[0].firstChild.nodeValue;	
				}
			  if(document.getElementsByTagName("etoiles")[0] != undefined && document.getElementsByTagName("etoiles")[0].firstChild){
					this.etoiles = document.getElementsByTagName("etoiles")[0].firstChild.nodeValue;	
				}
			  if(document.getElementsByTagName("paxAdultes")[0] != undefined && document.getElementsByTagName("paxAdultes")[0].firstChild){
					this.paxAdultes = document.getElementsByTagName("paxAdultes")[0].firstChild.nodeValue;	
				}
			  if(document.getElementsByTagName("paxEnfants")[0] != undefined && document.getElementsByTagName("paxEnfants")[0].firstChild != undefined){
					this.paxEnfants = document.getElementsByTagName("paxEnfants")[0].firstChild.nodeValue;	
				}
			  if(document.getElementsByTagName("dateDebut")[0] != undefined && document.getElementsByTagName("dateDebut")[0].firstChild != undefined){
					this.dateDebut = Date.convertStringFrToDate(document.getElementsByTagName("dateDebut")[0].firstChild.nodeValue);
				}
				if(document.getElementsByTagName("dateFin")[0] != undefined && document.getElementsByTagName("dateFin")[0].firstChild != undefined){
					this.dateFin = Date.convertStringFrToDate(document.getElementsByTagName("dateFin")[0].firstChild.nodeValue);
				}			  
				if(document.getElementsByTagName("crikey")[0] != undefined && document.getElementsByTagName("crikey")[0].firstChild != undefined){
					this.crikey = document.getElementsByTagName("crikey")[0].firstChild.nodeValue;
				}			  
			} else{
				throw new Error("impossible de creer un objet critere à partir de l'objet passé en paramètre");
			}
		},
	
		toString: function(){
			return "Criteres{"+this.crikey+"}";
		}
	}
	
	ev.log.debug("ev/meh/criteres.js ok");
}());