/**
 * Nouvelle version 
 * Rev 0.41 du 20080627
 * - fix: tgblank_links() d1.length == 0 en cas de tableau vide
 * Rev 0.4 du 20080603
 * - ajout attribut target="_blank" sur liens externes
 * Rev 0.3 du 20080521
 * - evolution affichage contexte
 * Rev 0.2 du 20080519
 * - met en évidence catégorie + hiérarchie
 * Rev 0.1 du 20080502
 * - version initiale
 */
/******************************************
*         Fonction GeneaNet
*******************************************/
function getElementsBy(tag,attr,val) {
  var tabOut = [];
  var elements = document.body.getElementsByTagName(tag);
  for (i = 0; i < elements.length; i++) {
    if (attr == 'class') {
      if (elements[i].className == val) {
        tabOut.push(elements[i]);
      }
    }
    else {
      if (elements[i].getAttribute(attr) == val) {
        tabOut.push(elements[i]);
      }
    }
  }
  return tabOut;
}

/**
 * Ne retourne que les fils directs d'un type donné
 * @param DOMNode node
 * @param string tag nom d'élément
 * @return array
 */
function get_children(node, tag) {
	var ret =  new Array();
	var ds = node.getElementsByTagName(tag);

	for(var i=0; i< ds.length; i++) {
		if (ds[i].parentNode == node) {
			// ne garde que les fils directs
			ret.push(ds[i]);
		}
	}
	return ret;
}

// Cache ou montre un élément
function toggle_list(id) {
	if (get_list_state(id)) {
		hide_list(id);
	}
	else {
		show_list(id);
	}
	return;
}

// cache liste
function hide_list(id) {
	set_list_state(id, false);
}

// montre liste
function show_list(id) {
	set_list_state(id, true);
}

// renvoie le status d'affichage
function get_list_state(id) {
	var ul = get_list(id);
	if (!ul) {
		return false;
	}
	return (ul.style.display == "none" ? false : true);
}

// affiche ou masque
function set_list_state(id, state) {

	var a  = document.getElementById("toggle-"+id);
	var ul = get_list(id);		// liste fille
	if (! ul) {
		return;
	}
	ul.style.display=(state ? "block" : "none");
	//(a.getElementsByTagName("span"))[0].innerHTML = (state ? "&nbsp;" : "");
	a.className=(state ? "moins" : "plus");
}

// obtient la liste
function get_list(id) {
	var li = document.getElementById(id);	// li de categorie
	var uls = li.getElementsByTagName('ul');// liste fille
	if (! uls
	||	  uls.length == 0)
	{
		return false;
	}
	return uls[0];
}
// met le blank pour les liens externes
function tgblank_links() {
	var d1 = getElementsBy('div','class','links');

	if (!d1
	||	d1.length == 0) {
		return;
	}

	var liens = d1[0].getElementsByTagName('a');
	for(var i=0; i< liens.length; i++) {
		liens[i].setAttribute('target', '_blank');
	}

}
// cache les listes
function initShowHideSubCategories() { 

	
	// les liens de toggle
	liens = document.getElementById("hierarchical-cats").getElementsByTagName('a');
	if (!liens) {	
		return;
	}
	for(var i=0; i< liens.length;i++) {
		if (liens[i].className == "plus"
		||	liens[i].className == "moins")
		{
			hide_list(liens[i].id.replace(/^toggle-/, ''));
		}
	}
	// 2eme passe - on ouvre la globale selected_cat et ses parents
	if (selected_cat) {
		var scat = document.getElementById(selected_cat);
		// l'affiche		
		show_list(selected_cat);
		// met en évidence le lien de la catégorie courante si spécifiée
		// celui-ci est le dernier lien fils du h4 (à cause d'un potentiel "+")
		var liens = get_children(scat.getElementsByTagName('h4').item(0), "a");
		var scat_a = liens[liens.length - 1];
		// le montre dans le fil d'ariane
		var category_title = document.getElementById("category-title");
		category_title.appendChild(document.createTextNode(" : "));
		category_title.appendChild(scat_a.cloneNode(true));
		// montre les ancetres
		var scat_parent;
		for (scat_parent  = scat.parentNode ; 		scat_parent 
												&&	scat_parent.id != "hierarchical-cats"; 
																							scat_parent  = scat_parent.parentNode )
		{

			if (scat_parent.nodeName  != 'LI') {
				continue;
			}
			show_list(scat_parent.id);			
		}
		// on le fait après sinon on forcerait un bold dans l'ariane avant copie du node
		scat_a.style.fontWeight="bold";
	}
}
