

(function() {
	var window = this,
			ev = window.ev;

	// Si les namespaces/classes nécessaires ne sont pas chargées : exception
	if (!ev) {throw "Le namespace 'ev' doit exister";}

	/**
	 * Objet compte : permet de stocker les données d'un compte
	 * client dans la page courante et dans la session.
	 *
	 * @param _urlRecord : URL permettant d'enregistrer le compte en cas de modification.
	 */
	function Compte(_urlRecord) {
		var urlRecord = _urlRecord;
		var site;
		var codeClient;
		var client;

		/**
		 * 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 = 0;
			}
		};

		/**
		 * 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 = 0;
				codeClient = 0;
				client = _client;
			}
		};

		/**
		 * 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;
		};

		/**
		 * 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 '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 || '') + '/' + (codeClient || '') + ' - ' + (client || '') + '}';
		};
	}
	ev.log.debug('me3/Compte.js ok');
}());

