var KEY_RUBRIQUE = "04"; 

var DETAIL = "detail";

/**
 * Constructeur du controlleur
 */
function ActivitesController() {
	this.rubInheritFrom();
	// on récupère les méthodes parentes
	this.super_executeCommand = this.constructor.prototype.executeCommand;
}
ActivitesController.prototype = new ControllerRub();
ActivitesController.prototype.rubInheritFrom = ControllerRub;

/**
 * Exécute la commande relative aux paramètres passés.
 * @params a_command  commande à effectuer (peut contenir plusieurs "morceaux" séparés par ':')
 * @return true si la commande a été traitée, false sinon 
 */
ActivitesController.prototype.executeCommand = function(a_command) {
	if (this.super_executeCommand(a_command)) {
		// commande traitée -> on arrête
		return true;
	}

	// on analyse la chaîne de commande
	var l_commands = a_command.split(":");
	// par défaut, une seule commande
	var l_command = l_commands[0];

	if ('envoyer' == l_command) {
		// envoi d'un document
		return this.sendRequest(null, l_command);

	} else if ('activites.agenda' == l_command) {
		// sélection d'un mois de l'agenda
		return this.sendRequest(null, l_command, [['link_id', l_commands[1]]], true);

	} else if ('activites.search' == l_command) {
		// écran de recherche
		return this.sendRequest(null, l_command, null, true);
	
	} else if ('activites.evenement' == l_command) {
		// sélection d'une date dans une table (agenda ou recherche)
		return this.sendRequest(null, l_command, [['link_id', l_commands[1]]], true);

	} else if (('activites.inscription.indiv' == l_command) || 
			   ('activites.inscription.grp' == l_command)){
		// écran de pré-inscription 
		if (l_commands.length == 1) {
			// directe
			return this.sendRequest(null, l_command);
		} else {
			// par sélection d'une date
			return this.sendRequest(null, l_command, [['link_id', l_commands[1]]]);
		}
	
	} else if (('activites.activite' == l_command) || ('activites.subactivite' == l_command)) {
		// écran de visualisation des activités
		return this.sendRequest(null, l_command, [['link_id', l_commands[1]]], true);
	
	} else if ('combo_change' == l_command) {
		// sélection d'une valeur dans une combo, avec demande de chargement de la combo 'suivante'
		return this.sendRequest(null, l_command, 
				[['node_id', l_commands[1]], ['task', l_commands[2]], ['link_id', l_commands[3]]],
				false, true);
	
	} else if ('grp.select' == l_command) {
		// sélection d'un groupe dans la combo
		return this.sendRequest(null, l_command);
	
	} else {
		// on appelle la méthode "statique" 
		// (c'est peut-être une requête d'une autre rubrique dynamique)
		return staticExecuteCommand(a_command);
	}
}

/**
 * Met à jour les variables ssRub et onglet
 * @return true s'il faut arrêter la procédure de transfert
 *		   false sinon (valeur par défaut)
 */
ActivitesController.prototype.specificTransf = function() {
	var l_transfert = getPageTransfert();
	
	// on regarde si des options sont définies
	var l_options = l_transfert.OPTIONS;
	if (!und(l_options)) {
		// oui -> on s'occupe de chacune d'elles
		getPageDetail().updateCombos(l_options);
		
		// on met à jour les autres combos
		this.selectCombos(l_transfert.selectedValues);
		
		// on arrête tout
		return true;
	}

	// on regarde si une valeur de sous-rubrique est définie
	var l_ssRub = null;
	var l_modif = false;
	if (!und(l_transfert.ssRubrique)) {
		l_ssRub = l_transfert.ssRubrique;
		// on compare la valeur avec l'ancienne
		if (l_ssRub != this.ssRubrique) {
			// on modifie
			l_modif = true;
			// on sélectionne le menu gauche
			window.menug.selectItem(l_ssRub);
			// on modifie le titre de la sous-rubrique
			xbSetInnerHTML(this.ssRubLib, l_ssRub);
			// on conserve les valeurs
			this.ssRubrique = l_ssRub;
		}
	} else {
		// on récupère la valeur conservée
		l_ssRub = this.ssRubrique;
	}
	
	// on regarde si une valeur d'onglet est définie
	var l_onglet = null;
	var l_items;
	if (!und(l_transfert.onglet)) {
		// on conserve
		l_onglet = l_transfert.onglet;
		// on récupère le menu des onglets
		l_items = filter(ONGLETS_ITEMS[KEY_RUBRIQUE + '.' + l_ssRub]);
	} else {
		l_items = [];
	}
	// on met à jour le menu des onglets
	if (l_modif == true) {
		window.onglets.show(l_items);
	}

	// on sélectionne le bon onglet
	var l_navs;
	if (l_onglet) {
		//window.onglets.setSelected(l_onglet);
		var l_ong = window.onglets.selectItem(l_onglet);

		// recherche de la navigation inter-onglets
		l_navs = searchBottomNav(l_items, l_onglet);
		
		// mofification du libellé
		if (l_ong && l_ong.itemDef && l_ong.itemDef.key) {
			// cas de l'agenda -> on récupère le libellé 
			l_onglet = l_ong.itemDef.code;
		}
	} else {
		l_navs = [null, null];
	}
	// mise à jour de la navigation inter-onglets
	xbSetInnerHTML(xbGetElementById("bottomNav"), writeBottomNav(l_navs[0], l_navs[1]));
	
	// mise à jour du libellé de positionnement dans le site et du titre
	this.updatePathLib(l_ssRub, l_onglet);
	
	return false;
}

/**
 * Met à jour les options des combos spécifiées dans l'objet fourni
 * @param	a_options	(Object)	objet contenant la définition des options des combos à modifier
 */
/** transférée dans la page de détail, pour compatibilité IE 5.0 Win
ActivitesController.prototype.updateCombos = function(a_options) {
	var l_combo;
	var l_fieldDef, l_optDef;
	var l_pageDetail = getPageDetail();
	
	for (var l_fieldId in a_options) {
		// on récupère la combo
		l_combo = xbGetElementById(l_fieldId, l_pageDetail);
		// on supprime toutes ses options
		l_combo.options.length = 0;
		// on ajoute les nouvelles options
		l_fieldDef = a_options[l_fieldId];
		for (var i = 0; i < l_fieldDef.length; i++) {
			// on récupère les données
			l_optDef = l_fieldDef[i];
			// on ajoute une nouvelle option à la combo
			l_combo.options[i] = new Option(l_optDef[1], l_optDef[0], l_optDef[2], l_optDef[2]);
		}
	}
}
*/

/**
 * Met à jour les combos spécifiées dans l'objet fourni, pour sélectionner la bonne valeur
 * @param	a_selectedValues	(Object)	objet contenant la définition des valeurs sélectionnées
 *													 des combos à modifier
 */
ActivitesController.prototype.selectCombos = function(a_selectedValues) {
	var l_combo;
	var l_selected, l_options, l_opt;
	var l_pageDetail = getPageDetail();
	
	for (var l_fieldId in a_selectedValues) {
		// on récupère la combo
		l_combo = xbGetElementById(l_fieldId, l_pageDetail);
		// on récupère la sélection
		l_selected = a_selectedValues[l_fieldId];
		// on parcours les options, pour sélectionner la bonne
		l_options = l_combo.options;
		for (var i = 0; i < l_options.length; i++) {
			// on récupère les données
			l_opt = l_options[i];
			if (l_opt.value == l_selected) {
				// on sélectionne
				l_opt.selected = true;
				// on arrête là
				break;
			}
		}
	}
}

/**
 * Met à jour le libellé indiquant la position dans le site.
 * @param	a_ssRub		(String)	nom de la sous-rubrique
 * @param	a_onglet	(String)	nom de l'onglet
 */
ActivitesController.prototype.updatePathLib = function(a_ssRub, a_onglet) {
	var l_imgBuf = '<img src="../_imgs/flnu.gif" width="14" height="11"/>';
	
	var l_buf = '&nbsp;&nbsp;<a href="../root/index.htm">Accueil</a>';
	l_buf += l_imgBuf + LABELS[0];
	
	var l_title = '';
	if (a_ssRub) {
		l_buf += l_imgBuf;
		if (!a_onglet) {
			l_buf += '<strong>';
		}
		l_buf += a_ssRub;
		if (!a_onglet) {
			l_buf += '</strong>';
		}
		l_title = a_ssRub;
	}
	if (a_onglet) {
		l_buf += l_imgBuf + '<strong>' + a_onglet + '</strong>';
		l_title += ' : ' + a_onglet;
	}
	
	xbSetInnerHTML(this.pathLib, l_buf);

	// mise à jour du titre
	top.window.document.title = l_title;
}

