//cette fonction permet d'appliquer une action javascript sur l'élément envoyé ainsi que tous ses enfants
function action_sur_enfants(eElement, sAction){
	//si l'élément a des enfants, on doit lui appliquer l'action (sinon rien car l'élément est le innerHTML de la balise et on ne peut rien lui faire)
	if (eElement.childNodes.length > 0){
		//on applique l'action sur cet élément
		eval(sAction);
		
		//et on relance la fonction pour tous les enfants de l'élément en cours
		for (var i = 0; i < eElement.childNodes.length; i++){
			action_sur_enfants(eElement.childNodes[i], sAction);
		}
	}
}

//cette fonction permet d'appliquer une action javascript sur toutes les checkbox du formulaire envoyé
function action_sur_checkbox(sFormulaireId, sAction){
	for (var i = 0; i < document.getElementById(sFormulaireId).elements.length; i++){
		if (document.getElementById(sFormulaireId).elements[i].type == 'checkbox'){
			//on récupère l'élément qui sera appelé dans la fonction eval
			eElement = document.getElementById(sFormulaireId).elements[i];
			
			//on applique l'action sur cette checkbox
			eval(sAction);
		}
	}
}

//cette fonction permet de séléctionner toutes les checkbox d'un formulaire
//si bAction = false, la fonction déséléctionnera toutes les fonctions
function selectionner_tout(sFormulaireId, bAction){
	if (bAction == true){
		action_sur_checkbox(sFormulaireId, "eElement.checked = 'checked';");
	}
	else{
		action_sur_checkbox(sFormulaireId, "eElement.checked = '';");
	}
}

//cete fonction permet de faire apparaitre progressivement un élément passé en paramètre
//si iSens = -1, l'objet disparaitra petit à petit
//iTemps correspond au temps que doit mettre l'élément à apparaitre/disparaitre en milisecondes
function fade(eElement, iTransparence, iTemps, iSens){
	//on augmente la transparence avec un coeficient temps restant (si iSens est négatif, l'objet on diminue la transparence et l'objet disparait progressivement)
	iTransparence = iTransparence + (iTransparence / iTemps * 50) * iSens;
	
	//le pourcentage ne doit pas être négatif
	if (iTransparence < 0){
		iTransparence = 0;
	}
	//si on a dépassé les 100%, on stoppe
	if (iTransparence > 100){
		return true;
	}
	
	//on applique la transparence à l'élément et à ses enfants (pour la compatibilité avec IE)
	action_sur_enfants(eElement, "eElement.style.opacity = "+iTransparence / 100+"; eElement.style.filter = 'alpha(opacity="+iTransparence+")';");
	
	//quand le timeout est fini, on cache l'élément
	if (iTransparence == 0){
		eElement.style.display = 'none';
		return true;
	}
	//sinon un relance la fonction avec un timeout (on transmet aussi le temps restant - les 50ms qu'on va utiliser avec le timeout)
	else{
		setTimeout(function(){fade(eElement, iTransparence, iTemps - 50, iSens);}, 50);
	}
}
