(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.me existe
	if(!ev.me){ ev.me={}; }
	//Si la classe Compte est définie on sort
	if(ev.me.Compte){return;}

	/**
	 * Objet compte : permet de stocker les données d'un compte
	 * client dans la page courante et dans la session.
	 */
	ev.me.Compte=function(){
		var site, codeClient, client, siteNom, nom;

		/**
		 * Permet de récupérér l'indetifiant numérique du site courant.
		 */
		this.getSite=function() {
			return site;
		};

		/**
		 * Permet de récupérer l'identifiant numérique du compte client.
		 */
		this.getClient=function(){
			return client;
		};

		/**
		 * Permet de choisir le site et le code client
		 * du compte.
		 *
		 * @param _site : ID du site
		 * @param _codeClient : code client du compte (si on souhaite utiliser le compte principal du site, ce paramètre est facultatif)
		 */
		this.setBySiteAndCode=function(_site, _codeClient){
			if(_site){
				// init du compte à partir des paramètres donnés
				site=_site;
				codeClient=_codeClient;
				client=undefined;
			}
		};
	
		/**
		 * Permet de choisir le compte client courant à
		 * partir de son identifiant numérique.
		 *
		 * @param _client : ID du compte client
		 */
		this.setCompteByClient=function(_client){
			if(_client){
				// init du compte à partir du paramètre donné
				site=undefined;
				codeClient=undefined;
				client=_client;
			}
		};

		/**
		 * Permet de savoir si le compte est correct
		 * ('true') ou pas encore initialisé ('false').
		 */
		this.isSet=function (){
			return siteNom!==undefined;
		};

		/**
		 * Cette méthode copie les propriétés du compte donné
		 * dans le compte du contexte.
		 * @param {Object} c compte à copier dans celui du contexte
		 */
		this.updateFrom=function (c){
			ev.tools.copyProperties(this, c);
			if(c.site){
				site=c.site;
			}
			if(c.codeClient){
				codeClient=c.codeClient;
			}
			if(c.client){
				client=c.client;
			}
			if(c.siteNom){
				siteNom=c.siteNom;
			}
			if(c.nom){
				nom=c.nom;
			}
		};

		/**
		 * Permet de construire un document XML (chaîne de caractères)
		 * à partir de l'objet compte.
		 */
		this.objetToXML=function(){
			var xml="<compte>";
			if(site){
				xml+="<site>"+site+"</site>";
			}
			if(codeClient){
				xml+="<codeClient>"+codeClient+"</codeClient>";
			}
			if(client){
				xml+="<client>"+client+"</client>";
			}
			xml+="</compte>";
			return xml;	 
		};

		/**
		 * Permet de construire la suite d'une URL
		 * à partir de l'objet compte.
		 */
		this.objetToURL=function(){
			//var url = "?";
			var url="";
			if(site){
				url+="&site="+site;
			}
			if(codeClient){
				url+="&codeClient="+codeClient;
			}
			if(client){
				url+="&client="+client;
			}
			return url;	 
		};

		/**
		 * Fonction qui permet d'alimenter un objet compte à partir d'un objet XMLDocument passé en paramètre
		 * @param {Object} _doc : objet XMLDocument à parcourir
		 */
		this.DOMToObjet=function(_doc){
			if(!_doc){throw new Error("impossible de creer un objet compte à partir du document donné");}
			var nodeTmp=_doc.getElementsByTagName("site")[0];
			if(nodeTmp&&nodeTmp.firstChild){
				site=nodeTmp.firstChild.nodeValue;	
			}
			nodeTmp=_doc.getElementsByTagName("codeClient")[0];
			if(nodeTmp&&nodeTmp.firstChild){
				codeClient=nodeTmp.firstChild.nodeValue;	
			}
			nodeTmp=_doc.getElementsByTagName("client")[0];
			if(nodeTmp&&nodeTmp.firstChild){
				client=nodeTmp.firstChild.nodeValue;	
			}
		};

		/**
		 * Méthode permettant un affichage plus clair
		 * lors de trace de débogage.
		 */
		this.toString=function(){
			return 'Compte{'+(site? site: '')+'/'+(codeClient? codeClient: '')+' - '+(client? client: '')+' - '+(siteNom? siteNom: '')+'/'+(nom? nom: '')+'}';
		};
	};
	
	ev.log.debug("ev/me/Compte.js ok");
}());