
/**
 * Modifie la css du bouton fourni, en utilisant l'état fourni
 * @param a_button  (HTML td)	cellule contenant la table des différents morceaux
 * @param a_state	(String)	nouvel état désiré
 */
function butChange(a_button, a_state) {
	if (!a_state) {
		a_state = '';
	}
	// on récupère tous les fils de l'élément
	var l_children = a_button.getElementsByTagName("TD");
	var l_child;
	var l_cssDefs;
	for (var i = 0; i < l_children.length; i++) {
		l_child = l_children[i];
		// on récupère le nom de la classe css actuellement attribuée,
		// que l'on le décompose par '_'
		l_cssDefs = l_child.className.split('_');
			// l_cssDefs[0] : préfixe, cad nom générique de la css
			// l_cssDefs[1] : élément concerné (lib, left, right)
			// l_cssDefs[2] : état précédent (éventuel)
		// on reconstruit le nom de la css
		l_child.className = l_cssDefs[0] + '_' + l_cssDefs[1] + a_state;
	}
}

/**
 * Appelle la méthode reset du formulaire contenant le bouton fourni.
 * @param a_button  (HTML td)	cellule principale du bouton
 */
function butResetForm(a_button) {
	var l_form = getElement(a_button, 'FORM');
	if (l_form) {
		l_form.reset();
	}
}

/**
 * Appelle la méthode submit du formulaire contenant le bouton fourni,
 * après avoir défini le champ '_action' avec l'id du bouton.
 * @param a_button  (HTML td)	cellule principale du bouton
 */
function butClick(a_button) {
	var l_form = getElement(a_button, 'FORM');
	if (l_form) {
		l_form._action.value = a_button.id;
		var l_blocked = false;
		if (window.state2commit) {
			l_blocked = state2commit(a_button.id);
		}
		if (l_blocked == false) {
			// pas de problème
			l_form.submit();
		}
	} else {
		// il n'y a pas de formulaire défini, il doit donc y avoir un controller
		// (sinon, le bouton ne sert à rien !!!)
		executeCommand(a_button.id);
	}
}

/**
 * Modifie la css de l'onglet fourni, en utilisant l'état fourni.
 * @param a_tab		(HTML td)	cellule principale de l'onglet
 * @param a_state	(char)		nouvel état désiré ('o' ou 'n')
 */
function tabChange(a_tab, a_state) {
	if (!a_state) {
		a_state = 'n';
	}
	// on récupère le nom de la classe css actuellement attribuée
	var l_css = a_tab.className;
	// on le décompose par '_'
	var l_cssDefs = l_css.split('_');
		// l_cssDefs[0] : préfixe, cad nom générique de la css
		// l_cssDefs[1] : élément concerné (lib)
		// l_cssDefs[2] : état précédent
	
	// on modifie la css de l'élément principal
	a_tab.className = l_cssDefs[0] + '_' + l_cssDefs[1] + '_' + a_state;

	// on récupère le nom de la cellule, pour pouvoir rechercher 
	// les 2 bordures gauche et droite
	// on le décompose pour séparer le nom de la barre d'onglets et son indice
	var l_params = a_tab.id.split('_');
		// l_params[0] : nom de la barre d'onglets
		// l_params[1] : indice de l'onglet
	// on met à jour chaque bordure
	var l_index = parseInt(l_params[1]);
	changeBordure(l_params[0], l_index, 0, a_state);  // bord gauche
	changeBordure(l_params[0], l_index, 1, a_state);  // bord droit
}

/**
 * Modifie la css de la bordure spécifiée.
 * @param a_name	(string)	nom de la barre d'onglets 
 * @param a_index	(int)		index de l'onglet
 * @param a_side	(int)		0 : bordure gauche, 1 : bordure droite
 * @param a_state	(char)		nouvel état désiré ('o' ou 'n')
 */
function changeBordure(a_name, a_index, a_side, a_state) {
	// on récupère l'élément HTML
	var l_name = a_name + '_sep_' + (a_index + a_side);
	var l_bord = xbGetElementById(l_name);
	// on récupère sa css, que l'on décompose
	var l_cssDefs = l_bord.className.split('_');
		// l_cssDefs[0] : préfixe, cad nom générique de la css
		// l_cssDefs[1] : élément concerné (left, mid, right)
		// l_cssDefs[2] : état précédent
	// on construit la nouvelle css
	var l_newState;
	if (l_cssDefs[1] == 'mid') {
		// on doit conserver l'état des onglets adjacents
		if (a_side == 0) {
			// on modifie la bordure gauche
			l_newState = l_cssDefs[2].charAt(0) + a_state;
		} else {
			// on modifie la bordure droite
			l_newState = a_state + l_cssDefs[2].charAt(1);
		}
	} else {
		// bordure extrême
		l_newState = a_state;
	}
	// on modifie la css
	l_bord.prevCss = l_bord.className;
	l_bord.className = l_cssDefs[0] + '_' + l_cssDefs[1] + '_' + l_newState;
}	


