/**
 * Javascripts de la barre de navigation.
 * @author David LIMA
 * @date 21/09/2008
 * @lastupdate 25/09/2008
 *
 * @copyright LBA Thivel
 */

/*
 * Retourne la position absolue de l'objet spécifié sur la page.
 * @param Object obj
 */
function findPosition(obj) {
	curleft = curtop = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft;
        curtop = obj.offsetTop;
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        }
    }
    return [curtop,curleft];
}

/*
 * Retourne un nouveau lien de navigation.
 * @param String label
 * @param String id
 */
function getEntry(label, id) {
	li = document.createElement('li');
	li.className = 'noout';
	li.innerHTML = "<a href=\"#\" id=\"" + id + "\" name='subnav_link' class='subnav_link' onClick=\"submitNav(this)\" >> " + label + "</a>";
	return li;
}

/*
 * Génère le sous-menu pour l'objet courant.
 * @param Object obj
 */
function generateMenu(obj) {
	div = document.getElementById('nav_sub');
	div.innerHTML = '';
	ul = document.createElement('ul');
	ul.className = 'noout';
	oid = parseInt(obj.id);
	childs = json_childs[oid];
	for (i = 0; i < childs.length; i++) {
		id = childs[i];
		ul.appendChild(getEntry(json_names[id], id));
	}
	div.appendChild(ul);
}

/*
 * Affiche le sous-menu de l'objet courant.
 * @param Object obj
 */
function displayMenu(obj) {
	hideMenu();
	coords = findPosition(obj);
	div = document.getElementById('nav_sub');
	div.style.display = 'block';
	div.style.top = coords[0] + obj.offsetHeight + 'px';
	div.style.left = coords[1] + 'px';
	
	childs = document.getElementsByName('subnav_link');
	if (childs.length > 0) childs[0].focus();
}

/*
 * Masque le sous-menu affiché.
 */
function hideMenu() {
	div = document.getElementById('nav_sub');
	div.style.display = 'none';
}

/*
 * Enregistre l'evennement onMouseOut sur le div permettant
 * d'afficher les sous-menus.
 */
function nav_ol() {
	document.getElementById('nav_sub').onmouseout = outMenu;
}

/*
 * Masque automatiquement le sous-menu affiché lorsque celui-ci n'est plus survolé
 * par la souris.
 * Requiert que la fonction nav_ol() soit chargée dans la page.
 * @param Event e
 */
function outMenu(e) {
	// Event
	if (!e) { e = window.event; }

	// Source object of the event
	if (e.target) { src = e.target; }
	else if (e.srcElement) { src = e.srcElement; }

	// Target object of the event
	if (e.relatedTarget) { trg = e.relatedTarget; }
	else if (e.toElement) { trg = e.toElement; }

	if (src.id == 'nav_sub' && trg.className != 'noout' && trg.className != 'subnav_link') {
		src.style.display = 'none';
	}
}

/*
 * Met à jour et soumet le formulaire de navigation.
 * @param Object obj
 */
function submitNav(obj) {
	document.navigation_form.pid.value = obj.id;
	hideMenu();
	document.navigation_form.submit();
}
