
// compatibilité -----------------------------------------------
var ns4= (document.layers);
var ie4= (document.all && !document.getElementById);
if(ie4) {
    document.getElementById= function(id) { return(document.all(id)); }
    document.getElementsByTagName= function(id) { return(document.all.tags(id)); }
}
if(ns4) {
    document.getElementById= function(id) { return(document.layers[id]); }
}


var newCount=0;
var menuType=1;

// Menu principal : c'est un div qui contiendra tous les autres div
// Si le type est :
// 1 : alors on récupère la position courante dans un champ hidden du menu
// 2 : alors on récupère la position courante dans le hash de l'url :  #pos=ID...

function main(type) {
    // ID du main est ID0
    // Le nombre de noeud se trouve dans le champ masque
    var intCount = newCount++;
    var id='ID' + intCount;
    
    if((type==null)||((type!=1)&&(type!=2))) {type=1;}
    menuType=type;
    this.id=id;
    this.count=intCount;
    this.text = '<div id=' + id + '></div><input type="hidden" id=h' + intCount + ' value="0">';
    if(type==1) {this.text += '<input type="hidden" id=posMenu value="">';}
    document.write(this.text);
    this.parent=null;
}


// ------------------------------------------------------------
// Les noeuds principaux : ils sont rattachés au Menu principal
// Ils sont composés d'un div contenant : une image et le titre (sous-div), avec une action possible quand on clique dessus
// et d'un autre sous-div : pour les sous-noeuds qui leur sont accrochés
// S'il y a une image devant le noeud, et si on clique sur le titre ou sur l'image, alors cela développe le sous-div subID
// Quand un sous-noeud lui est rajouté, alors le alt de l'image n'est plus vide, et un l'image devient un '+'.
// Il est egalement possible de rajouter deux images de taille imposée à cote du titre.
// On rajoute dans le champ masqué le numero ID de son parent

function addNode(caption,pNode,act,classe,img1,img2) {
    if(act==null) {act='';}
    if(classe==null) {classe='';}
    if(img1==null) {img1='';}
    if(img2==null) {img2='';}
    // Crée le contenu du noeud : le niveau permet l'indentation
    this.niv = 1;
    intCount = newCount++;
    sText =  '<div title="">';
    sText += '<div class="divmenu" id=ID' + intCount;
    sText += ' onClick="Collapse(' + intCount + ');" ';
    sText += ' onmouseover="this.className=\'divmenu divmenuhover\';" ';
    sText += ' onmouseout="this.className=\'divmenu\';">';
    sText += '<img src="js/icones/tr_menuempty.gif" height="9" width="9" id="imgID' + intCount + '" alt="">';
    if(act=='') {
        sText += '&nbsp;' + caption;
    } else {
        sText += '&nbsp;<a href="#pos=ID' + intCount + '" id=aID' + intCount + ' class="' + classe + '" ';
        sText += ' onclick="Collapse(' + intCount + ',false); ';
        sText += 'setPos(' + intCount + ',posCurrent()); ';
        sText += act + '">' + caption + '</a>';
    }
    if(img1!='') { sText += '&nbsp;<img src="' + img1 + '">'; }
    if(img2!='') { sText += '&nbsp;<img src="' + img2 + '">'; }
    sText += '</div>';
    sText += '<div id="SUB' + intCount + '" style="display:none"></div>';
    sText += '<input type="hidden" id=h' + intCount + ' value="' + pNode.count + '" alt="' + classe + '">';
    sText += '</div>';
    document.getElementById(pNode.id).innerHTML += sText
    this.id = 'ID' + intCount;
    this.count = intCount;
    this.imgID= 'imgID' + intCount;
    this.subID= 'SUB' + intCount;
    this.hID= 'h' + intCount;
    this.parent = pNode;
    document.getElementById('h0').value = parseInt(document.getElementById('h0').value) + 1;
    return (this);
}

// Les sous-noeuds sont des noeuds rattachés à des noeuds principaux ou secondaires (donc pas au Menu principal)
// S'il y a une action, donc si c'est un lien, on doit re-ouvrir le noeud, et pour cela on met false
// car il doit être fermé (clic sur le lien), puis redéveloppé par le clic sur le div

function addSubNode(caption,pNode,act,classe,img1,img2) {
    if(act==null) {act='';}
    if(classe==null) {classe='';}
    if(img1==null) {img1='';}
    if(img2==null) {img2='';}
    // Modifie l'image et le alt de l'image du titre du noeud parent
    document.getElementById(pNode.imgID).src='js/icones/tr_menuplus.gif';
    document.getElementById(pNode.imgID).alt='+';
    // Le niveau est incrémenté de 1 par rapport au noeud parent (pNode)
    this.niv = parseInt(pNode.niv) + 1;
    // Crée le contenu du noeud
    intCount = newCount++;
    sText =  '<div style="display:block;margin-left:' + (this.niv * 7) + 'pt;">';
    sText += '<div class="divmenu" id=ID' + intCount;
    sText += ' onClick="Collapse(' + intCount + ');" ';
    sText += ' onmouseover="this.className=\'divmenu divmenuhover\';" ';
    sText += ' onmouseout="this.className=\'divmenu\';">';
    sText += '<img src="js/icones/tr_menuempty.gif" height="9" width="9" id="imgID' + intCount + '" alt="">';
    if(act=='') {
        sText += '&nbsp;' + caption;
    } else {
        sText += '&nbsp;<a href="#'
        if(menuType==2) {sText += 'pos=ID' + intCount;}
        sText += '" id=aID' + intCount + ' class="' + classe + '" ';
        sText += ' onclick="Collapse(' + intCount + ',false); ';
        sText += 'setPos(' + intCount + ',posCurrent()); ';
        sText += act + '">' + caption + '</a>';
    }
    if(img1!='') { sText += '&nbsp;<img src="' + img1 + '">'; }
    if(img2!='') { sText += '&nbsp;<img src="' + img2 + '">'; }
    sText += '</div>';
    sText += '<div id="SUB' + intCount + '" style="display:none"></div>';
    sText += '<input type="hidden" id=h' + intCount + ' value="' + pNode.count + '" alt="' + classe + '">';
    sText += '</div>';
    document.getElementById(pNode.subID).innerHTML += sText
    this.id = 'ID' + intCount;
    this.count = intCount;
    this.imgID= 'imgID' + intCount;
    this.subID= 'SUB' + intCount;
    this.hID= 'h' + intCount;
    this.parent = pNode;
    document.getElementById('h0').value = parseInt(document.getElementById('h0').value) + 1;
    return (this);
}

// Ouvre ou ferme le noeud s'il a un plus ou un moins
// Si 'open' est renseigné et est true (c'est le booléen pas le string), alors ouvre forcément, si false ferme forcément
function Collapse(snode,open) {
    node=document.getElementById('SUB' + snode);
    img=document.getElementById('imgID' + snode);
    if (img.alt!='') {
        if (open==null) {
            if (node.style.display=='none') {
                node.style.display='block';
                img.src='js/icones/tr_menuminus.gif';
                img.alt='-';
        
            } else {
                node.style.display='none';
                img.src='js/icones/tr_menuplus.gif';
                img.alt='+';
            }
        } else if (open==false) {
            node.style.display='none';
            img.src='js/icones/tr_menuplus.gif';
            img.alt='+';    
        } else if (open==true) {
            node.style.display='block';
            img.src='js/icones/tr_menuminus.gif';
            img.alt='-';
        }
    }
}

// Ouvre (open=true) le noeud et tous ses ascendants, ou ouvre (open=false) le noeud et tous ses descendants
function CollapseAll(snode,open) {
    var node=document.getElementById('h' + snode);
    var img=document.getElementById('imgID' + snode);
    if (open==true) {
        while(node.value != 0) {
            Collapse(node.value,open);
            img=document.getElementById('imgID' + node.value);
            node=document.getElementById('h' + node.value);
        }
    } else if (open==false) {
        Collapse(snode,true);
        for (i=1;i<=parseInt(document.getElementById('h0').value);i++) {
            if (isChild(i,snode)) {
                Collapse(i,true);
            }
        }
    }
}

// Ouvre (open=true) seulement le noeud et tous ses ascendants en fermant ses voisins
// ou ferme (open=false) le noeud et tous ses descendants
function CollapseOnly(snode,open) {
    ///var node=document.getElementById('SUB' + snode);
    ///var img=document.getElementById('imgID' + snode);
    if (open==true) {
        CollapseOnly(getRoot(snode),false);
        CollapseAll(snode,true);
    } else if (open==false) {
        Collapse(snode,false);
        for (i=1;i<=parseInt(document.getElementById('h0').value);i++) {
            if (isChild(i,snode)) {
                Collapse(i,false);
            }
        }
    }
}

// Retourne le noeud parent à la racine
function getRoot(snode) {
    var node = document.getElementById('SUB' + snode);
    var root = parseInt(snode);
    for (i=1;i<=parseInt(document.getElementById('h0').value);i++) {
        if ((isChild(root, i)) && (parseInt(document.getElementById('h' + i).value)==0)) {
            root=i;
        }
    }
    return (root);
}

// Retourne si le cNoeud est un descendant du pNoeud
function isChild(cNoeud,pNoeud) {
    var bool = false;
    if ((parseInt(cNoeud)>1) && (parseInt(pNoeud)>0)) {
        var nParent = document.getElementById('h' + cNoeud).value;
        while ((bool==false) && (parseInt(nParent) > 0)) {
            if (parseInt(nParent) == parseInt(pNoeud)) {
                bool=true
            }
            nParent = document.getElementById('h' + nParent).value;
        }
    }
    return (bool);
}


// Retourne la position active du menu
function posCurrent() {
    if(menuType==1){
        return (document.getElementById('posMenu').value);
    } else if(menuType==2) {
        var temp=location.hash;
        var bool=temp.lastIndexOf('pos=ID');
        if(bool==-1) {
            return ('');
        } else {
            i= 0;
            var pos=temp.substring(bool + 6,temp.length)
            while(isInteger(temp.substring(bool + 6,temp.length - i))==false) {
                pos=temp.substring(bool + 6,temp.length - i);
                i++;
            }
            return (pos);
        }
    }
}

// Définit la nouvelle position active du menu
// Et remet l'ancienne position active avec les class par défaut
function setPos(newPos,oldPos) {
    // ClassPosition est la classe de l'élément actif du menu
    var ClassPosition = 'posmenu';

    if (menuType==1) {document.getElementById('posMenu').value=newPos;}
    if (oldPos!='') {
        document.getElementById('aID' + oldPos).className=document.getElementById('h' + oldPos).alt;
    }
    document.getElementById('aID' + newPos).className=ClassPosition;
}


// Regarde si le texte est un nombre entier
function isInteger(sText)
{
    var ValidChars = "0123456789";
    var isNumber=true;
    var Char;
    for (i = 0; i < sText.length && isNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            isNumber = false;
        }
    }
    return isNumber;
}


// Construit le menu, noeud par noeud : a parametrer
function buildMenu() {
    // <!> : Ne pas oublier les 'new' sinon il se basera toujours le même objet Node
    //       Pour les actions utiliser des : \'
    var myMenu=new main(1);
    var node1=new addNode('<a href=?page=2>Livres</a>',myMenu,'var i=1;','amenu');
    var node2=new addSubNode('<a href=?page=2&catid=4&opt=1>Nouvelles</a>',node1,'','amenu');
    var node2=new addSubNode('<a href=?page=2&catid=5&opt=1>Essais</a>',node1,'','amenu');
    var node2=new addSubNode('<a href=?page=2&catid=6&opt=1>Récits</a>',node1,'','amenu');
    var node2=new addSubNode('<a href=?page=2&catid=7&opt=1>Romans</a>',node1,'','amenu');
    var node2=new addSubNode('<a href=?page=2&catid=8&opt=1>Savoir-faire</a>',node1,'','amenu');
    var node2=new addSubNode('<a href=?page=2&catid=9&opt=1>Région...</a>',node1,'','amenu');
    var node3=new addNode('<a href=?page=3>Revues</a>',myMenu,'var i=2;','amenu');
    var node2=new addSubNode('<a href=?page=3&catid=1&opt=1>Brèves</a>',node3,'','amenu');
    var node2=new addSubNode('<a href=?page=3&catid=2&opt=1>Le Gué</a>',node3,'','amenu');
    var node2=new addSubNode('<a href=?page=3&catid=3&opt=1>Les Cahiers...</a>',node3,'','amenu');
}

function OpenPopUp(MyFile,MyWindow,MyWidth,MyHeight)

//MyFile :      nom du fichier contenant le code HTML du pop-up
//MyWindow :    nom de la fenêtre (ne pas mettre d'espace)
//MyWidth :     entier indiquant la largeur de la fenêtre en pixels
//MyHeight :        entier indiquant la hauteur de la fenêtre en pixels

    {
    var ns4 = (document.layers)? true:false;            //NS 4
    var ie4 = (document.all)? true:false;               //IE 4
    var dom = (document.getElementById)? true:false;    //DOM
    var xMax, yMax, xOffset, yOffset;

    if (ie4 || dom)
        {
        xMax = screen.width;
        yMax = screen.height;
        }
    else if (ns4)
        {
        xMax = window.outerWidth;
        yMax = window.outerHeight;
        }
    else
        {
        xMax = 800;
        yMax = 600;
        }
    xOffset = (xMax - MyWidth)/2;
    yOffset = (yMax - MyHeight)/2;
    window.open(MyFile,MyWindow,'width='+MyWidth
+',height='+MyHeight
+',screenX='+xOffset
+',screenY='+yOffset
+',top='+yOffset
+',left='+xOffset
+',scrollbars=yes,resizable=no');
    }

-->