/*********************************************************************************************/
//	Fonction-DOM.js
//	Fonction générique de manipulation du DOM, souvent utilisées avec Ajax.
/*********************************************************************************************/


// GetChildsByTagName
// Retourne un tableau des enfants direct de  DOMobj qui sont des <tag>
function getChildsByTagName(DOMobj, tag) {

	var liste = DOMobj.getElementsByTagName(tag);
	var newListe = new Array();

	if(liste != null) {
		for(var i = 0; i < liste.length; i++) {
			var NoeudParent = liste[i].parentNode;
			if(NoeudParent == DOMobj) {
				newListe.push(liste[i]);
			}
		}
	liste = newListe;
	}
	return liste;
}

// GetAncestorByTagName
// Retourne le premier ancêtre de element de type tag
function getAncestorByTagName(element, tag) {
	var parent = element;
	if (tag) {
		while (parent && parent.nodeName != tag.toUpperCase()) {
			parent = parent.parentNode;
		}
	}
	return parent;
}

// GetElementsByPatternId
// Retourne la liste des éléments fils de obj dont l'id vérifie le masque
function getElementsByPatternId(p_pattern, obj) {
	var retour = new Array();
	var pattern = new RegExp(p_pattern);

	if(obj == null) {
		obj = document.body;
	}

	if(obj.id) {
		if(pattern.test(obj.id)) {
			retour.push(obj);
		}
	}
	if(obj.childNodes) {
		for(var i = 0; i < obj.childNodes.length; i++) {
			retour = retour.concat(getElementsByPatternId(p_pattern, obj.childNodes[i]));
		}
	}

	return retour;
}

// checkAll
// selectionne tous les éléments d'un formulaire dont le nom correspond au masque
function checkAll(p_check_select_all, p_pattern) {
	var formulaire = p_check_select_all.form;
	if(formulaire) {
		var liste_check = getElementsByPatternId(p_pattern, formulaire);

		if(liste_check.length > 0) {
			for(var i = 0; i < liste_check.length; i++) {
				if(p_check_select_all.checked) {
					liste_check[i].setAttribute('checked', 'checked');
				} else {
					liste_check[i].removeAttribute('checked');
				}
			}
		}
	}
}

// ClearContent
// Vide le contenu d'un objet HTML passé en paramètre
function clearContent(obj_element, p_end) {
	for(var i = obj_element.childNodes.length-1; i >= p_end; i--) {
		obj_element.removeChild(obj_element.childNodes[i]);
	}
}

// ClearContentExcept
// Vide le contenu d'un objet HTML passé en paramètre
function clearContentExcept(obj_element, p_except) {
	for(var i = obj_element.childNodes.length-1; i >= 0; i--) {
		if(obj_element.childNodes[i].nodeName != p_except.toUpperCase()) {
			obj_element.removeChild(obj_element.childNodes[i]);
		}
	}
}

// ajoutBlocFormulaire
// Duplique un bloc dans un formulaire
function ajoutBlocFormulaire(nom_bloc, type_enfant_duplique, nb_max) {
	if(!document.getElementById) return '';

	nb_max = nb_max || 0;

	var container = document.getElementById(nom_bloc);
	if(container) {
		var liste_enfant = container.getElementsByTagName(type_enfant_duplique);
		if((nb_max != 0 && (liste_enfant.length) < nb_max) || nb_max == 0) {
			var last_enfant = liste_enfant.item(liste_enfant.length-1);
			var new_enfant = last_enfant.cloneNode(true);
			container.insertBefore(new_enfant, last_enfant);
		} else {
			alert(index_traduction['general__vous_avez_atteint_le_nombre_maximum_ditem_autorise'] + ' (' + nb_max + ')');
		}
	}
}

function genereOpt(p_value, p_libelle) {
	var opt = document.createElement('option');
		opt.value = p_value;
	var opt_text = document.createTextNode(p_libelle);
		opt.appendChild(opt_text);
	return opt;
}

// GenereListe
// Génère les options d'une liste HTML à partir d'une liste d'item
function genereListe(p_liste, p_liste_item) {
	// Mise en place des nouveaux éléments si présents
	if(p_liste_item.length > 0) {

		if(p_liste.nodeName == 'INPUT') {

			var parent = p_liste.parentNode;

			// Récupération des attributs de l'input
			var item_name, item_id;
			if(p_liste.hasAttribute('name')) {
				item_name = p_liste.getAttribute('name');
			} else {
				item_name = '';
			}
			if(p_liste.hasAttribute('id')) {
				item_id = p_liste.getAttribute('id');
			} else {
				item_id = '';
			}
			if(p_liste.hasAttribute('onchange')) {
				item_onchange = p_liste.getAttribute('onchange');
			} else {
				item_onchange = '';
			}
			// Suppression du contenu du parent, à l'exception du label
			clearContentExcept(parent, 'label');
			// Création de la nouvelle liste.
			var new_liste = document.createElement('select');
			if(item_name != '') {
				new_liste.setAttribute('name', item_name);
			}
			if(item_id != '') {
				new_liste.setAttribute('id', item_id);
			}
			if(item_onchange != '') {
				new_liste.setAttribute('onchange', item_onchange);
			}
			var default_opt = genereOpt(0, index_traduction['selectionner_une_valeur']);
			new_liste.appendChild(default_opt);
			parent.appendChild(new_liste);

			p_liste = new_liste;
		} else {
			// Suppression des éléments existant à l'exception du premier "Selectionner une valeur"
			var taille_liste = p_liste.childNodes.length;
			if(taille_liste > 1) {
				clearContent(p_liste, 2);
			}
		}

		var id_parent_courant = -1;
		var noeudParent = p_liste;

		for(var i = 0; i < p_liste_item.length; i++) {

			var donnees = p_liste_item.item(i);

			if(donnees.hasAttribute('parent')) {
				id_parent = donnees.getAttribute('parent');
				if(id_parent != id_parent_courant) {
					if(id_parent_courant != -1) {
						p_liste.appendChild(noeudParent);
					}
					var optgroup = document.createElement('optgroup');
						optgroup.setAttribute('label', donnees.getAttribute('group-label'));
					p_liste.appendChild(optgroup);
					noeudParent = optgroup;
					id_parent_courant = id_parent;
				}
			}

			var opt = genereOpt(donnees.getAttribute('value'), donnees.getAttribute('caption'));
			noeudParent.appendChild(opt);
		}
		if(noeudParent != p_liste) {
			p_liste.appendChild(noeudParent);
		}
	} else {
		var parent = p_liste.parentNode;

		// Récupération des attributs du select
		var item_name, item_id;
		if(p_liste.hasAttribute('name')) {
			item_name = p_liste.getAttribute('name');
		} else {
			item_name = '';
		}
		if(p_liste.hasAttribute('id')) {
			item_id = p_liste.getAttribute('id');
		} else {
			item_id = '';
		}
		if(p_liste.hasAttribute('onchange')) {
			item_onchange = p_liste.getAttribute('onchange');
		} else {
			item_onchange = '';
		}
		// Suppression du contenu du parent, à l'exception du label
		clearContentExcept(parent, 'label');
		// Création de la nouvelle liste.
		var new_input = document.createElement('input');
			new_input.setAttribute('type', 'hidden');
			new_input.setAttribute('value', 0);
		if(item_name != '') {
			new_input.setAttribute('name', item_name);
		}
		if(item_id != '') {
			new_input.setAttribute('id', item_id);
		}
		if(item_onchange != '') {
			new_input.setAttribute('onchange', item_onchange);
		}
		var txt = document.createTextNode(index_traduction['aucune_entree_pour_cette_selection']);
		parent.appendChild(txt);
		parent.appendChild(new_input);
	}
}

function isSelectListe(p_liste) {
	if(p_liste.nodeName == 'SELECT') {
		if(p_liste.options.length > 0) {
			return true;
		}
	}
	return false;
}

// valueExists
// Recherche une clé parmis les values des options d'une liste.
function valueExists(p_value, p_liste) {
	if(isSelectListe(p_liste)) {
		for(var i = 0; i < p_liste.options.length; i++) {
			if(p_liste.options[i].value == p_value) {
				return true;
			}
		}
	}
	return false;
}

function toggleDisplay(p_id) {
	if(!document.getElementById) return '';

	var element = document.getElementById(p_id);
	if(element) {
		element.style.display = (element.style.display == 'none') ? 'block' : 'none';
	}
}