/**
 * fonction permettant de récupérer le père de l'élément
 */
function treeGetParent(elt,parentNode) {
    var parent = elt;
    while (parent != null && parent.nodeName != parentNode) {
        parent = parent.parentNode;
    }
    return parent;
}   
/**
 * Fonction permettant de récupérer le tag suivant elt de type nodeType
 */
function treeGetBrother(elt,nodeType) {
    var brother = elt.nextSibling;
    while (brother != null && brother.nodeName != nodeType) {
        brother = brother.nextSibling;
    }
    return brother;
}
function treeGetPrevBrother(elt,nodeType) {
    var brother = elt.previousSibling;
    while (brother != null && brother.nodeName != nodeType) {
        brother = brother.previousSibling;
    }
    return brother;
}
/**
 * retourne le noeud pere
 */
function treeGetParentNode(elt) {
    return elt.parentNode;
}
function treeGetRootNode(elt) {
    var parent = elt.parentNode;
    while (parent != null && parent.id != null & parent.id != 'treeroot') {
        parent = parent.parentNode;
    }
    return parent;
}
/**
 * permet de montrer un fils de la treeView
 */
function treeShowChild(
        elt, 
        show, 
        jsCouleurPrimaire, 
        jsNomImgOff, 
        jsNomImgOn,
        treeImgPlus,
        treeImgMinus,
        treeImgBlank,
        nbBoutique,
        listeImgNodeBoutique,
        listeTreeImgBoutique,
        listeDiv,
        listeImgNode,
        listeFont
) 
{
    var imgNode = elt;
    //Si l'élément cliqué est différent d'une image IMG ou d'un tag SPAN ou est null on ne fait rien
    if (imgNode.nodeName != 'IMG' && imgNode.nodeName != 'SPAN') {
        var anchorElt = treeGetParent(elt,'A');
        if (anchorElt.href != '') return true;
        imgNode = treeGetPrevBrother(anchorElt,'IMG');
    }
    if (imgNode == null) {
        return;
    }  
    //Sinon, on récupère le tag FONT qui suit le TAG IMG et le tag DIV 
    var fontElt = treeGetBrother(imgNode,'FONT') ;
    var divElt = treeGetBrother(imgNode,'DIV');                
    var divRootElt = null ;
    //Si le tag div est vide alors pour chaque div contenu dans le tableau listeDiv
    //Si l'élément DIV est de classe node, alors on va changer toutes les images treeImgMinus en treeImgPlus et toutes les classes noeudDeplie en noeudNonDeplie 
    //On ferme également tous les autres DIV qui sont ouverts
    if(divElt != null){
        var classDivElt = divElt.className ;
        isNode = false ;
        if(classDivElt == 'node'){
            isNode = true ;
        }
        for(i=0 ; i<listeDiv.length ; i++){                        
            var divEltCourant = listeDiv[i] ;
            if(divEltCourant.className == classDivElt){                            
                if(divElt != divEltCourant) {  
                    divEltCourant.style.display = 'none' ;
                }                                                   
            }                        
        }
        if(isNode){
            for(i=0 ; i<listeImgNode.length ; i++){
                var imgNodeCourant = listeImgNode[i] ;
                if(imgNodeCourant.className == 'noeud'){
                    imgNodeCourant.src = treeImgPlus ;
                }
            }
            for(i=0 ; i<listeFont.length ; i++){
                var fontCourant = listeFont[i] ;
                if(fontCourant.className == 'noeudDeplie'){
                    fontCourant.className = 'noeudNonDeplie' ;
                    fontCourant.color = '#000000'
                }
            }   
        }               
    }
    if (divElt == null) {
        if (imgNode.src.indexOf(jsNomImgOff) == -1 &&
            imgNode.src.indexOf(jsNomImgOn) == -1) return ;
        for(i=0 ; i<nbBoutique ; i++){
            var imgCourant = listeImgNodeBoutique[i] ;
            if (imgNode.src.indexOf(imgCourant) == -1) return ;
        }
        imgNode.src = treeImgBlank
    } else if (show != null && show == 'false') {
        divElt.style.display = 'none';
        if(fontElt != null){
            document.getElementById(fontElt.id).className = 'noeudNonDeplie' ;
        }                    
        for(i=0 ; i<nbBoutique ; i++){
            var imgCourant = listeImgNodeBoutique[i] ;
            if (imgNode.src.indexOf(imgCourant) != -1){
                imgNode.src = listeTreeImgBoutique[i] ;
                return ;
            }
        }
        imgNode.src = treeImgPlus ;
    } else if (show != null && show == 'true') {              
        divElt.style.display = 'block';
        if(fontElt != null){
            document.getElementById(fontElt.id).className = 'noeudDeplie' ;
            document.getElementById(fontElt.id).color = jsCouleurPrimaire ;
        }
        for(i=0 ; i<nbBoutique ; i++){
            var imgCourant = listeImgNodeBoutique[i] ;
            if (imgNode.src.indexOf(imgCourant) != -1){
                imgNode.src = listeTreeImgBoutique[i] ;
                return ;
            }
        }    
        imgNode.src = treeImgMinus ;
    } else if (divElt.style.display == '' || divElt.style.display == null || divElt.style.display == 'block') {                   
        divElt.style.display = 'none';
        if(fontElt != null){
            document.getElementById(fontElt.id).className = 'noeudNonDeplie' ;
        }
        for(i=0 ; i<nbBoutique ; i++){
            var imgCourant = listeImgNodeBoutique[i] ;
            if (imgNode.src.indexOf(imgCourant) != -1){
                imgNode.src = listeTreeImgBoutique[i] ;
                return ;
            }
        }                    
        imgNode.src = treeImgPlus ;                
    //C'est cette partie qui sera traitée si la génération de l'arbre est bien faite
    } else {                                  
        divElt.style.display = 'block';  
        if(fontElt != null){
            document.getElementById(fontElt.id).className = 'noeudDeplie' ;
            document.getElementById(fontElt.id).color = jsCouleurPrimaire ;
        }                    
        if(imgNode.src != null){
            for(i=0 ; i<nbBoutique ; i++){
                var imgCourant = listeImgNodeBoutique[i] ;                   
                if (imgNode.src.indexOf(imgCourant) != -1){                            
                    imgNode.src = listeTreeImgBoutique[i] ;                            
                    return ;
                }
            }  
        }
        imgNode.src = treeImgMinus ;                   
    }
}
//* methodes provenant de general.js */
/* fonctions pour la compatibilité IE / NS */
function getSource(eventNS) {
	if (! document.all) {
        return eventNS.target;
	} else {
        return event.srcElement;        
	}
}
function getKeyCode(eventNS) {
	if (! document.all) {
		return eventNS.keyCode;
	} else {
		return event.keyCode;
	}
}
/**
 * permet de montrer un fils de la treeView
 * gestion du click sur les images de la treeview
 */
function fwkTreeShowChild(eventNS) {
    //getSource permet de rÚcupÚrer l'Úlement html sur lequel on a cliquÚ
    if(eventNS == null) return true ;
    var src = getSource(eventNS);              
    if (src == 'undefined') return true;
    var type = src.getAttribute('type');
    if (type == null || type != 'tree') return true;
    treeShowChild(
        src, 
        true);
    return false;
}
/**
 * gestion du click sur le document. Cette fonction permet de dÚsactiver
 * le menu.
 */
document.onclick = fwkOnClickDocument;
//document.onmouseover = fwkOnMouseOverMenu;
function fwkOnClickDocument(eventNS) {
	//gestion des images de la treeView
	fwkTreeShowChild(eventNS);
	//gestion des menus
	//fwkOnClickMenu(eventNS);
}
