

//=============== Script général =================================

var debug = false ;
var niveauPage = -1 ;
var typePage = "" ;

var pageEnCours = null ;
var retour = new Array (10) ;
retour [0] = 'index' ;
var racine = null ; // racine de l'arbre binaire pour tri alpha
var repertoires = new Array (100) ;
var margeGauche = 0 ;
var margeHaut = 0 ;
// Gestion menus déroulants. Index 0 = racine (invisible)
var avecMenus ; 
var selectionOrigine = new Array (4) ;  // options initiales
var selectionEnCours = new Array (4) ;  // menus affichés
var offsetMenus = 0 ;
var ouvertureTop ;
var hauteurPageInitiale = 0 ;


  // GESTION DE L'OBJET PAGE 
  //========================


  function page (niveau, repert, type, nom, titre) {
    this.niveau     = niveau ;
    this.repert     = repert ;
    this.type       = type ;
    this.nom        = nom ;    
    this.titre      = titre ;

    this.minorant   = null ; 
    this.majorant   = null ;
    this.mere       = null ;
    this.filleAinee = null ;
    this.derniere   = null ;
    this.soeurAinee = null ;
    this.soeurCadette = null ;
    this.rang       = 0 ;
    this.niveauMenu = -1 ;
    this.styleMenu  = null ;
    this.styleItem  = null ;

    this.ranger     = ranger ;
    this.famille    = famille ;
    this.ancetre    = ancetre ;
    this.eve        = eve ;
    this.existe     = existe ;
    this.quellePage = quellePage ;
    this.auDessus   = auDessus ;
    this.auDessous  = auDessous ;
    this.lienPage   = lienPage ;
    this.enTete     = enTete ;
    this.titrer     = titrer ;
    this.pied       = pied ;
    this.liensFilles= liensFilles ;
    this.makeMap    = makeMap ;
    this.creeItemMenu = creeItemMenu ;
    this.creeMenuFils = creeMenuFils ;
    this.visibiliteMenuFils = visibiliteMenuFils ;
    this.menus      = menus ;
    this.deplacerMenu = deplacerMenu ;
    this.estatMark  = estatMark ;
  }

  // METHODES GENERALES POUR LA GESTION DE L'ARBORESCENCE
  //=====================================================
  
  // Range une page dans l'arbre binaire (ordre alphabétique)
  function ranger (nouvelle) {
    var plusPetit ;
    if (nouvelle.nom != this.nom) plusPetit = (nouvelle.nom < this.nom) ;
    else plusPetit = (nouvelle.titre < this.titre) ;
    if (plusPetit)
      if (this.minorant == null) this.minorant = nouvelle ;
      else this.minorant.ranger (nouvelle) ;
    else
      if (this.majorant == null) this.majorant = nouvelle ;
      else this.majorant.ranger (nouvelle) ;
  } // ranger

  // Mettre à jour les liens familiaux
  function famille () {
    retour [this.niveau] = this ;
    if (this.niveau > 0) {
      this.mere = retour [this.niveau-1] ;
      if (this.mere.filleAinee == null) {
        this.mere.filleAinee = this ;
        this.mere.derniere = this ;
        rang = 0 ;
      } else {
        this.soeurAinee = this.mere.derniere ;
        this.mere.derniere.soeurCadette = this ;
        this.rang = this.soeurAinee.rang + 1 ;
        this.mere.derniere = this ;
      }
    }
  } // famille

  // Rechercher l'ancètre de rang n
  function ancetre (rang) {
    if (rang < 0) return null ;
    if (rang == 0) return this ;
    if (this.mere == null) alert ('ancetre de '+this.nom+' inexistant') ;
    return this.mere.ancetre (rang-1) ;
  }

  // Rechercher l'ancètre de rang le plus élevé
  function eve () {
    if (this.mere != null) return this.mere.eve () ;
    return this ;
  }

  // Teste si une chaine existe dans l'arbre binaire 
  function existe (unNom) {
    if (unNom == this.nom) return true ; // existe deja
    if (unNom < this.nom) 
      if (this.minorant == null) return false ;
      else return (this.minorant.existe (unNom)) ;
    else
      if (this.majorant == null) return false ;
      else return (this.majorant.existe (unNom)) ;
  } // existe

  // Rend la page si elle existe dans l'arbre binaire 
  function quellePage (unNom) {
    if (unNom == this.nom) return this ; // existe deja
    if (unNom < this.nom) 
      if (this.minorant == null) return null ;
      else return (this.minorant.quellePage (unNom)) ;
    else
      if (this.majorant == null) return null ;
      else return (this.majorant.quellePage (unNom)) ;
  } // quellePage

  // Rend la profondeur de l'arborescence (au dessus de la page en cours)
  function auDessus () {
    if (this.mere == null) return 0 ;
    return this.mere.auDessus () + 1 ;
  } // auDessus
  
  // Rend la profondeur de l'arborescence (sous page en cours)
  function auDessous () {
    var p = 0 ; // profondeur à partir de ce noeud
    var fille = this.filleAinee ;
    while (fille != null) {
      p = Math.max (p, fille.auDessous()+1) ;
      fille = fille.soeurCadette ;
    }
    return p ;
  } // auDessous

  // METHODES DE L'OBJET PAGE POUR LA COMPOSITION ET LA NAVIGATION
  //==============================================================
  
  // Donne la liste des pages (triés par ordre alpha du nom) 
  function lienPage () {
    if (this.minorant != null) this.minorant.lienPage () ;
    with (document) {
        write ('<TR>') ;
        write ('<TD>'+this.nom+'.html</TD>') ;
        write ('<TD><A href="'+this.nom+'.html">'+this.titre+'</A></TD>') ;
        writeln ("</TR>") ;
    } // with
    if (this.majorant != null) this.majorant.lienPage () ;
  } // lienPage

  // Compose l'en tete d'une page de l'arborescence
  function enTete () {
    this.menus () ;
    with (document) {
      var rac = this.eve () ;
      var url = site + repertoires [rac.repert] + rac.nom + '.html' ;
      write ('<TABLE width=100% border=0><TR><TD width=120><A HREF="' + url + '">') ;
      var logoPages =   getCookie ("logoPages") ;
      if (logoPages != null) writeln ('<IMG border=0 src="' + site + 'images/' + logoPages + '"></A></TD>') ;
      else writeln ('<IMG border=0 src="' + site + moyenLogo + '"></A></TD>') ;
      writeln ('<TD valign="middle" align="center"><H2>' + this.titre + '</H2></TD>') ;
      writeln ('<TD width=120 align="center" valign="middle">') ;
      navigation (this.niveau, this.type, true) ;
      writeln ('</TD></TR></TABLE>') ;
      writeln ('<HR>') ;
      //espacer () ;
    }
  } // enTete

  function titrer () {
    document.writeln ('<TITLE>' +debutTitre + this.titre + '</TITLE>') ;
  }

  function pied () {
    var icone ;
    if (this.type=="D") icone = "Dir" ; 
    else icone = "Fil" ;
    with (document) {
      writeln ('<HR>') ;
      writeln ('<TABLE cellpadding=10 width=100%><TR><TD>') ;
      navigation (niveauPage, typePage, false) ;
      if (this.soeurAinee != null && this.soeurAinee.nom.indexOf("99")<0) {
        writeln ('</TD><TD>') ;
        iconeLien ('arriere' + icone + '.gif', this.soeurAinee.nom+'.html', this.soeurAinee.titre) ;
      }
      if (this.soeurCadette != null) {
        writeln ('</TD><TD>') ;
        iconeLien ('avant' + icone + '.gif', this.soeurCadette.nom+'.html', this.soeurCadette.titre) ;
      }
      writeln ('</TD><TD align="center">' + textePied) ;
      if (true) {writeln ('</TD><TD align="right">') ; this.estatMark () ;}
      writeln ('</TD></TR></TABLE>') ;
      writeln ('<DIV ID="bulle">Navigateur obsolète !!!</DIV>') ;
    }
  } // pied

  // Présente une liste de liens vers les pages filles
  function liensFilles () {
    with (document) {
      espacer () ;
      write ('<TABLE border=0>') ;
      var fille = this.filleAinee ;
      while (fille != null) {
        var url = site+repertoires[fille.repert]+fille.nom+".html" ;
        var titreFille = '&nbsp;' + formatNbsp (fille.titre) ;
        if (fille.type == "D") ligneDir (url, titreFille, false) ;
        else if (fille.type == "F") ligneFil (url, titreFille, false) ;
        else write ("ne sait pas quoi faire avec " + url) ;
        fille = fille.soeurCadette ;
      }
      writeln ('</TABLE>') ;
    }
  }

  function ligneHtml (codeHtml, ligne) {
    with (document) 
      if (codeHtml) writeln (formatHtml (ligne)) ;
      else writeln (ligne) ;
  }

  // Utilitaire pour faire la map du site
  function makeMap (codeHtml) {
    var ligne ;
    with (document) {
      if (this.mere == null) writeln ('<PRE>') ;
      if (this.nom.indexOf ("99") > 0) return ;
      if (this.mere != null) {
        var url = onLineSite + repertoires [this.repert] + this.nom + '.html">' ;
        if (this.titre.indexOf ('BO 20')<0)
          ligneHtml (codeHtml, '<LI><A href="' + url + formatNbsp (this.titre) +'</A>') ;
        else
          ligneHtml (codeHtml, '&nbsp;[<A href="' + url + formatNbsp (this.titre) +'</A>]&nbsp;') ;
      }
      var fille = this.filleAinee ;
      if (fille != null) {
        ligneHtml (codeHtml, '<UL>') ;
        while (fille != null) {
          fille.makeMap (codeHtml) ;
          fille = fille.soeurCadette ;
        }
        ligneHtml (codeHtml, '</UL>') ; 
      }
      if (this.mere == null) writeln ('</PRE>') ;
    }
  }
  
  // METHODES DE L'OBJET PAGE POUR LA GESTION DES MENUS
  //===================================================

  // Crée un item de menu déroulant
  function creeItemMenu () {
    with (document) {
      writeln ('<tr style="visibility: inherit;">' +
               '<td id="im_' + this.nom + '" style="visibility: inherit;"' +
               'onMouseover="javascript:sourisEntre (\''+this.nom+'\')" ' +
               'onMouseout="javascript:sourisSort (\''+this.nom+'\')" ' +
               'onCLick="javascript:clickSur (\''+this.nom+'\')">' +
               '<div style="visibility:inherit;width=194;' +
               'padding-top:0px;padding-bottom:0px;">' +
               this.titre + 
               '</div></td></tr>') ;
    }
    this.styleItem = getStyle ('im_' + this.nom) ;
  }
  
  // Crée un menu ou sous menu déroulant
  function creeMenuFils (niveau) {
    if (niveau > 2) return ;
    var fille = this.filleAinee ;
    if (fille == null) return ;
    var pere = getElement ('im_' + this.nom) ;
    var y0 ;
    if (pere == null) with (document) {
        y0 = margeHaut+20 ;
        writeln ('<A id="menuClose" href="javascript:ouvrirFermerMenus()"' +
          ' style="position:absolute ; top:'+ (y0-18) +' ;' +
          ' left:' + margeGauche +'">' +
          '<IMG src="'+site+'icones/menuClose.gif" border=0></A>') ;
        writeln ('<script>montrerCacher("menuClose", false)</script>') ;
    }
    else y0 = getAbsY (pere) ;
    with (document) {
      writeln ('<table id="tm_' + this.nom + '" ' +
               'cellpadding=1 cellspacing=0 border=1 width=200'  +
               '" style="position:absolute ; top:'+ y0 +' ;' +
               ' left:' + (margeGauche+202*niveau) +';' +
               'background-color:'+fondNonSelect+';cursor:pointer" >') ;
      writeln ('<script>montrerCacher("tm_' + this.nom +  '", false)</script>') ;
      while (fille != null && fille.rang < 10) {
        if (fille.nom.indexOf("99")<0) {
      	  fille.creeItemMenu () ;
      	  fille.niveauMenu = niveau+1 ;
      	}
        fille = fille.soeurCadette ;
      }
      writeln ('</table>') ;
      this.styleMenu = getStyle ('tm_' + this.nom) ;
      fille = this.filleAinee ;
      while (fille != null && fille.rang < 10) {
        if (fille.niveauMenu >= 0) fille.creeMenuFils (niveau+1) ;
        fille = fille.soeurCadette ;
      }
    }
  }

  // Montre ou cache un menu déroulant
  function visibiliteMenuFils (nonOui) {
    var fille = this.filleAinee ;
    if (fille == null) return ;
    montrerCacher ('tm_'+this.nom, nonOui) ;
    while (fille != null && fille.rang < 10) {
      montrerCacher ('im_' + fille.nom, nonOui) ;
      fille = fille.soeurCadette ;
    }
  }

  // Crée les pointeurs des menus déroulants accessibles à partir de cette page
  function menus () {
    for (i = 0 ; i <= 3 ; i++) {
      selectionOrigine [i] = null ;
      selectionEnCours [i] = null ;
    }
    var monte = Math.min (this.auDessus (), 3-this.auDessous ()) ;
    if (monte < 0) monte = 0 ;
    for (index=0 ; index <= 3 ; index++) {
      selectionOrigine[index] = this.ancetre (monte) ; // null si (monte < 0)
      monte-- ;
    }
    selectionOrigine[0].creeMenuFils (0) ;
  }
  
  function deplacerMenu (offset) {
    if (this == selectionOrigine [0]) {
      var style = getStyle ("menuClose") ;
      moveBy (style, 0, offset) ;
    }
    if (this.styleMenu != null) moveBy (this.styleMenu, 0, offset) ;
    else alert ('deplacer '+this.nom+'  '+offset+' styleMenu null') ;
    var fille = this.filleAinee ;
    while (fille != null) {
      if (fille.styleMenu != null) fille.deplacerMenu (offset) ;
      fille = fille.soeurCadette ;
    }
  }

  function estatMark () {
    var groupe = this.ancetre (this.niveau-1).nom ;
    if (!_UJS) return ;
    with (document) {
      if (location.protocol=="file:") return ;
      writeln ('<DIV id="marqueur">') ;
      _estat(estatId, this.nom, groupe);
      writeln ('</DIV>') ;
    }
    if (this.repert > 0) montrerCacher ("marqueur", false) ;
  }

  // FONCTIONS DIVERSES (HORS OBJET) POUR LA GESTION DES PAGES
  //==========================================================

  function liste () {
    with (document)  {
      write ("<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=10>") ;
      write ("<TR>") ;
      write ("<TH>Nom</TH>") ;
      write ("<TH>Titre</TH>") ;
      write ("</TR>");
      racine.lienPage  () ;
      write ("</TABLE>") ;
    }
  } // liste


  function rechercher (unNom) {
    var quoi ;
    var poshtm =  unNom.indexOf (".htm") ;
    if (poshtm > 0) quoi = unNom.substring (0, poshtm) ;
    else quoi = unNom ;
    var ou = racine.quellePage (quoi) ; 
    if (ou == null) alert ("pas trouve page pour " + quoi) ; 
    return ou ;
  }

  function ouvrirLeMenu (index) {
    if (index==0) montrerCacher ("menuClose", true) ;
    selectionEnCours [index] = selectionOrigine [index] ;
    if (index >= 1 && selectionEnCours[index-1] != null) 
      selectionEnCours[index-1].visibiliteMenuFils(true) ;
    if (index>0 && selectionEnCours[index] != null) 
      selectionEnCours[index].styleItem.backgroundColor = fondSelect ;
    if (index < 3) ouvrirLeMenu (index+1) ;
  }

  function fermerLeMenu (index) {
    if (index < 3) fermerLeMenu (index+1) ;
    if (index==0) montrerCacher ("menuClose", false) ;
    if (index>0 && selectionEnCours[index] != null) 
      selectionEnCours[index].styleItem.backgroundColor = fondNonSelect ;
    selectionEnCours [index] = null ;
    if (index >= 1 && selectionEnCours[index-1] != null)
      selectionEnCours[index-1].visibiliteMenuFils(false) ;
  }

  function ouvrirFermerMenus (top) {
    if (hauteurPage()==null) return ; // pb browser
    var ouvert = false ;
    for (index = 0 ; index <= 3 ; index++) 
      if (selectionEnCours[index] != null) ouvert = true ;
    if (ouvert) {
      fermerLeMenu (0) ;
      if (!ouvertureTop) selectionOrigine[0].deplacerMenu (-offsetMenus) ;
    } else {
      ouvertureTop = top ;
      with (document.body) {
        if (hauteurPageInitiale == 0) hauteurPageInitiale = hauteurPage () ;
        offsetMenus = hauteurPageInitiale - hauteurClient() - margeHaut ;
      }
      if (offsetMenus < 0) offsetMenus = 0 ;
      if (!ouvertureTop) selectionOrigine[0].deplacerMenu (offsetMenus) ;
      ouvrirLeMenu (0) ;
    }
  }

  function sourisEntre (unNom) {
    var quoi = rechercher (unNom) ;
    var nm = quoi.niveauMenu ;
    if (selectionEnCours[nm] != null) 
      selectionEnCours[nm].styleItem.backgroundColor = fondNonSelect ;
    fermerLeMenu (nm+1) ;
    selectionEnCours [nm] = quoi ;
    quoi.styleItem.backgroundColor = fondSelect ;
    quoi.visibiliteMenuFils (true) ;
  }

  function sourisSort (unNom) {
  }

  function clickSur (unNom) {
    var quoi = rechercher (unNom) ;
    var url = site + repertoires [quoi.repert] + quoi.nom + '.html' ;
    window.open (url, "_self", "") ;
  }

  function nomPage (quellePage) {
    if (document.location.protocol == "file:") 
      site = localSite ;
    selectionStyle () ;
    if (quellePage == "") return ;
    pageEnCours = rechercher (quellePage) ;
    if (quellePage != "") pageEnCours.titrer () ;
  }


  function ap (niveau, repert, type, nom, titre) {
    // Niveau = profondeur dans l'arborescence de nvaigation
    // repertoires = profondeur dans l'arborescende des répertoires
    // Type = répertoire (D), fichier (F), réseau (N)
    if (racine == null) {
      racine = new page (niveau, repert, type, nom, titre) ;
      retour [0] = racine ;
      pageEnCours = racine ;
    } else {
      var nouvelle = new page (niveau, repert, type, nom, titre) ;
      racine.ranger (nouvelle) ;
      nouvelle.famille () ;
    }
  }

  function insererSous (nom) {
    // Positionne sous une page particulière pour insérer une sous arborescence
    if (racine == null) {
      alert ('Insertion page '+this.nom+' sous racine nulle') ;
      return ;
    }
    var sousQuoi = racine.quellePage (nom) ;
    if (sousQuoi == null) {
      alert ('Insertion page '+this.nom+' sous page ' +nom+ ' : inexistante') ;
      return ;
    }
    if (!autorisationInsertionSous (sousQuoi.nom)) {
      alert ('Insertion page '+this.nom+' interdite sous page '+sousQuoi.nom) ;
      return ;
    }
    var niv = sousQuoi.niveau ;
    for (i = niv; i >= 0 ; i--) {
      retour [i] = sousQuoi ;
      if (i == 0 && sousQuoi != racine) 
          alert ('Fausse racine de site : '+sousQuoi.nom) ;
      sousQuoi = sousQuoi.mere ;
    }
  }


// GESTION DE LA NAVIGATION DANS LE SITE
//======================================

// Remplace une sous-chaine par une autre dans une chaine
function replace (message, oldss, newss) {
  var positions = new Array (40) ;
  var index = 0 ;
  positions [index++] = 0 ;

  var pos = 0 ;
  var delta = oldss.length ;
  while (true) {
    pos = message.indexOf (oldss, pos) ;
    if (pos < 0) break ;
    positions [index++] = pos ;
    pos += delta ;
  }
  positions [index] = message.length ;
  if (index == 1) return message ;
  var corrige = message.substring (positions[0], positions[1]) + newss ;
  var ii ;
  for (ii = 2 ; ii <= index ; ii++) {
    corrige += message.substring (positions[ii-1]+delta, positions[ii]) ;
    if (ii < index) corrige += newss ;
  }
  return corrige ;
}

// Remplace les espaces et <BR> par &nbsp;
function formatNbsp (message) {
  var corrige = replace (message, " ", "&nbsp;") ;
  corrige = replace (corrige, "<BR>", "&nbsp;") ;
  return corrige ;
}

// Remplace les < et > par &lt; et &gt
function formatHtml (message) {
  var corrige = replace (message, "<", "&lt;") ;
  corrige = replace (corrige, ">", "&gt;") ;
  return corrige ;
}


function tagIcone2 (nom, alternate) {
  var alt = formatNbsp (alternate) ;
  return ('<IMG border=0 src="' + site + 'icones/' + nom + 
    '" alt="' + alt + '" title="' + alt + '">') ;
}

function tagIcone (nom) {
  return ('<IMG border=0 src="' + site + 'icones/' + nom + '">') ;
}

function iconeSimple (nom, alternate) {
  if (alternate == "") document.write (tagIcone (nom)) ;
  else document.write (tagIcone2 (nom, alternate)) ;
}

function iconeLien (nom, lien, alternate) {
  var iar ;
  with (document) {
    var ou = rechercher (lien) ;
    if (ou == null) return ;
    var link = '<A href="' + site + repertoires [ou.repert] + ou.nom + '.html">' ;
    link +=  tagIcone2(nom, alternate) + '</A>' ;
    write (link) ;
  }
}

function iconeNiveau (nom, renvoi) {
  var versQuelle = pageEnCours.ancetre (renvoi) ;
  if (versQuelle == null) iconeSimple (nom, "Page inconnue dans le site") ;
  else {
    iconeLien (nom, versQuelle.nom + '.html', versQuelle.titre) ;
  }
}

function menuDeroulant (p, q, top) {
  with (document) if (hauteurClient()==null) // browser pas trop ringard
    write ('&nbsp;') ;
  else {
    write ('<A href="javascript:ouvrirFermerMenus('+top+')">') ;
    write ('<IMG src="'+site+'icones/menu'+p+q+'.gif"'+
           ' title="Menu d&eacute;roulant" border=0>') ;
    write ('</A>') ;
  }
}

function interrogation (p, q) {
  with (document) {
    write ('<A href="javascript:petitPopup(\''+site+'aideNav.html\', \'aide\', 500, 350)">'+
           '<IMG src="'+site+'icones/interro'+p+q+'.gif"'+
           ' title="Comment naviguer dans ce site" border=0></A>') ;
  }
}

function navigation (niveau, type, top) {  
  with (document) {
    niveauPage = niveau ;
    typePage = type ;
    writeln ('<TABLE border=0 cellspacing=0 cellpadding=0>') ;
    var lignes = niveau ;
    if (lignes < 3) lignes = 3 ;
    for (i = 0; i <= lignes ; i++) {
      write ('<TR>') ;
      for (j = 0 ; j <= lignes ; j++) {
        write ('<TD>') ;
        if ((i==0) && (j==0)) {
          if (i==niveau) iconeSimple ("icon-home2.gif", "Vous &ecirc;tes ici") ;
          else iconeNiveau ("icon-home2.gif", niveau) ;
        }
        else if (j==niveau && i==niveau) {
          if (type == 'D') iconeSimple ("icon-open.gif", "Vous &ecirc;tes ici") ;
          else iconeSimple ("icon-file.gif", "Vous &ecirc;tes ici") ;
        }
        else if (j==i-1 && i<=niveau) iconeSimple ("icon-angle.gif", "") ;
        else if (j==i && i<niveau) iconeNiveau ("icon-closed.gif", niveau-i) ;
        else if (i <= 1 && j >= lignes-1) interrogation (i+1, j-lignes+2) ;
        else if (i == lignes-1 && j == 0) menuDeroulant (1, 1, top) ;
        else if (i == lignes && j <= 1) menuDeroulant (2, j+1, top) ;
        else document.write ('<small>&nbsp;</small>') ;
        writeln ('</TD>') ;
      } // for
      writeln ('</TR>') ;
    } // for
    writeln ('</TABLE>') ;
  }
}

// Lignes avec puce, avec ou sans lien

function bloc (quelUrl, texte, suiteTexte, popup) {
  var lu = quelUrl.length ;
  with (document) {
    write ('<TD><B>') ;
    if (quelUrl == "") write (texte) ;
    else if (popup) {
        action = '\"javascript:popupPleinEcran (\'' + quelUrl + '\', \'popupWindow\', true)\"' ;
        write ('<A Href=' + action + '>' + texte + '</A>') ;
    }
    else  write ('<A Href=\"' + quelUrl + '\">' + texte + '</A>') ;
    if (suiteTexte != "") writeln (' ' + suiteTexte) ;
    writeln ('</B></TD>') ;
  }
}
 

function ligneQuoi (type, quelUrl, texte, suiteTexte, popup) {
  with (document) {
    write ('<TR valign="top">') ;
    if (quelUrl == "") bloc (quelUrl, tagIcone("puce-coche.gif", popup), "") ;
    else if (type == "F") bloc (quelUrl, tagIcone("puce-file.gif", popup), "") ;
    else if (type == "G") bloc (quelUrl, tagIcone("puce-file.gif", popup), "") ;
    else if (type == "N") bloc (quelUrl, tagIcone("puce-net.gif", popup), "") ;
    else if (type == "P") bloc (quelUrl, tagIcone("puce-pdf.gif", popup), "") ;
    else bloc (quelUrl, tagIcone("puce-closed.gif"), "", popup) ;
    bloc (quelUrl, texte, suiteTexte, popup) ;
    writeln ('</TR>') ; 
  }
}

function ligneDir2 (quelUrl, texte, suiteTexte, popup) {
  ligneQuoi ('D', quelUrl, texte, suiteTexte, popup) ;
}

function ligneDir (quelUrl, texte, popup) {
  ligneQuoi ('D', quelUrl, texte, "", popup) ;
}

function ligneFil2 (quelUrl, texte, suiteTexte, popup) {
  ligneQuoi ('F', quelUrl, texte, suiteTexte, popup) ;
}
function ligneFil (quelUrl, texte, popup) {
  ligneQuoi ('F', quelUrl, texte, "", popup) ;
}

function ligneNet2 (quelUrl, texte, suiteTexte, popup) {
  ligneQuoi ('N', quelUrl, texte, suiteTexte, popup) ;
}

function ligneNet (quelUrl, texte, popup) {
  ligneQuoi ('N', quelUrl, texte, "", popup) ;
}

function ligneListe (texte, popup) {
  ligneQuoi ("L", "", texte, "", popup) ;
}

function lignePdf2 (quelUrl, texte, suiteTexte, popup) {
  ligneQuoi ("P", quelUrl, texte, suiteTexte, popup) ;
}

function lignePdf (quelUrl, texte, popup) {
  ligneQuoi ("P", quelUrl, texte, "", popup) ;
}


function enTravaux () {
  with (document) {
    writeln ('<P><CENTER>') ;
    writeln ('<IMG src="'+site+'images/enCours.gif" alt="Ecriture en cours">') ;
    writeln ('</CENTER></P>') ;
  }
}


function getCookie(name) { 
  var re = new RegExp(name + "=([^;]+)");
  var value = re.exec(document.cookie);
  return (value != null) ? unescape(value[1]) : null;
}

/*
var bikky = document.cookie;

function getCookie(name) { // use: getCookie("name");
if (document.location.pathname.indexOf ('essais') >= 0) alert ("get cookie "+document.cookie) ;
  var index = bikky.indexOf(name + "=");
  if (index == -1) return null;
  index = bikky.indexOf("=", index) + 1; // first character
  var endstr = bikky.indexOf(";", index);
  if (endstr == -1) endstr = bikky.length; // last character
  return unescape(bikky.substring(index, endstr));
}
*/

function setCookie(name, value, directory, days) { 
  var today = new Date();
  var expiry = new Date(today.getTime() + days * 24 * 60 * 60 * 1000); 
  var cook = name + "=" + escape(value) ;
  cook += "; expires=" + expiry.toGMTString() ;
  cook += "; path=" + directory ;
  document.cookie = cook ;
}


//DIVERSES FONCTIONS POUR FAIRE DES POPUP EN TABLE
//================================================

function popup (quelUrl, texte, suiteTexte) {
  var lu = quelUrl.length ;
  var pdf = (quelUrl.substring (lu-4, lu) == ".pdf") ;
  var protocole = quelUrl.substring (0, 6) ;
  var surLeNet = (protocole == "http:/") || (protocole == "ftp://") ;
  if (surLeNet) ligneQuoi ('N', quelUrl, texte, suiteTexte, true) ;
  else if (pdf) ligneQuoi ('P', site + quelUrl, texte, suiteTexte, true) ;
  else ligneQuoi ('F', site + quelUrl, texte, suiteTexte, true) ;
}

function titrePopup (balise, texte) {
  with (document) {
    write ('<tr><td colspan=2>') ;
    write ('<'+balise+'>&nbsp;<br>'+texte+'</'+balise+'>') ;
    writeln ('</td></tr>') ;
  }
}

function espacePopup (balise) {
  titrePopup (balise, '&nbsp;') ;
}


// FONCTIONS DHTML
//================

function listerObjet (objet) {
  s = "" ;
  for (var elem in objet) {
    var contenu = new String (objet[elem]);
    if (contenu.indexOf("function") > 0) contenu="function" ;
    s += elem + "=" + contenu +" ; " ;
  }
  alert (s) ;
}
  
function getElement (quelId) {
  var element = null ;
  if (document.getElementById) 
    element = document.getElementById (quelId) ;
  else if (document.layers) 
    element = document.layers[quelId] ;
  else if (document.all) 
    element = document.all [quelId] ;
  if (debug && element == null) 
    alert ('Element '+quelId+' inexistant') ;
  return element ;
}

function getStyle (quelId) {
  var quelElement = getElement (quelId) ;
  if (quelElement == null) return null ;
  var leStyle = null ;
  if (document.getElementById) 
    leStyle = quelElement.style ;
  else if (document.layers) 
    leStyle = quelElement ;
  else if (document.all) 
    leStyle = quelElement.style ;
  if (debug && leStyle == null) 
    alert ('Element '+quelId+' n a pas de style') ;
  return leStyle ;
}

function getElementByTag (quelTag, rang) {
  var element = null ;
  if (document.getElementsByTagName) 
    element = document.getElementsByTagName (quelTag)[rang] ;
  else return null ;
  if (debug && element == null) 
    alert ('Element '+quelTag+' rang '+rang+' introuvable') ;
  return element ;
}

function getEventObject (event) {
  var objet ;
  if (document.all) objet = event.srcElement;
  else if (document.getElementById) objet = event.target;
  else if (document.layers) objet = event.target;
  if (debug && objet == null) 
    alert ('Objet evenement vide') ;
  return objet ;
}

function montrerCacher (quoi, vu) {
  var style = getStyle (quoi) ;
  if (style == null) return ;
  if (document.layers) style.visibility = (vu ? "show" : "hide") ;
  else style.visibility = (vu ? "visible" : "hidden") ;
}

function visibilite (quoi) {
  var style = getStyle (quoi) ;
  if (style == null) return false ;
  if (document.layers) return (style.visibility == "show") ;
  else return (style.visibility == "visible") ;
}

// trouver l'offset d'un élément, même s'il est dans une table !
function getAbsX(elt) { return (elt.x) ? elt.x : getAbsPos(elt,"Left"); }
function getAbsY(elt) { return (elt.y) ? elt.y : getAbsPos(elt,"Top"); }

function getAbsPos(elt,which) {
 iPos = 0;
 while (elt != null) {
  iPos += elt["offset" + which];
  elt = elt.offsetParent;
 }
 return iPos;
}

// détail ennuyeux : IE and NS6 stockent elt.top et elt.left en chaînes
function moveBy(elt,deltaX,deltaY) {
 elt.left = parseInt(elt.left) + deltaX;
 elt.top = parseInt(elt.top) + deltaY;
}

// Positionner un élément sous un référent
function setPosition(elt,referent,isPlacedUnder) {
 elt.left = getAbsX(referent);
 elt.top = getAbsY(referent) + (isPlacedUnder ? referent.height : 0);
}

function hauteurClient () {
	if (window.innerHeight != null)
		return window.innerHeight; // NS : pas de scrollBar horizontal !
	if (document.body.clientHeight != null)
		return document.body.clientHeight;
	return (null);
}

function largeurClient () {
	if (window.innerWidth != null)
		return window.innerWidth-20; // NS : scrollBar vertical !
	if (document.body.clientWidth != null)
		return document.body.clientWidth;
	return (null);
}

function largeurPage () {
	if (document.width != null)
		return document.width ; 
	if (document.body.scrollWidth != null)
		return document.body.scrollWidth;
	return (null);
}

function hauteurPage () {
	if (document.height != null)
		return document.height; 
	if (document.body.scrollHeight != null)
		return document.body.scrollHeight;
	return (null);
}

function scrollX () {
	if (window.pageXOffset != null)
		return window.pageXOffset; // NS !
	if (document.body.scrollLeft != null)
		return document.body.scrollLeft;
	return (null);
}

function scrollY () {
	if (window.pageYOffset != null)
		return window.pageYOffset; // NS !
	if (document.body.scrollTop != null)
		return document.body.scrollTop;
	return (null);
}



// FONCTIONS POUR LES INFOBULLES
//==============================

function helpGetOffset(obj, coord) {
  var val = obj["offset"+coord] ;
  if (coord == "Top") val += obj.offsetHeight;
  while ((obj = obj.offsetParent )!=null) {
    val += obj["offset"+coord];
    if (obj.border && obj.border != 0) val++;
  }
  return val;
}

function helpDown () {
  montrerCacher ("bulle", false) ;
  return true ;
}

function infoBulle (evenement,texte) {
  var ptrElement = getElement ("bulle") ;
  if (ptrElement == null) return ;
  var ptrStyle = getStyle ("bulle") ;
  if (ptrStyle == null) return ;
  var ptrObj = getEventObject (evenement) ;
  if (ptrObj == null) return ;
  if (!ptrObj.onmouseout) ptrObj.onmouseout = helpDown;

  var str = '<DIV class="bulleDIV">'+texte+'</DIV>';
  //var str = '<DIV>'+texte+'</DIV>';

  if (document.all) {
    ptrElement.innerHTML = str;
    ptrStyle.top  = helpGetOffset (ptrObj,"Top") + 20;
    ptrStyle.left = helpGetOffset (ptrObj,"Left");
    ptrStyle.visibility = "visible";
  }
  else if (document.getElementById) {
    if (window.HTMLElement) {
      while (ptrElement.hasChildNodes()) ptrElement.removeChild(ptrElement.lastChild);
      var range = document.createRange();
      range.selectNodeContents(ptrElement);
      ptrElement.appendChild(range.createContextualFragment(str));
    } else {
      // alert ('DOM full browser') ;
      // Opera merde !!!
    }
    ptrStyle.top  = helpGetOffset (ptrObj,"Top") + 20;
    ptrStyle.left = helpGetOffset (ptrObj,"Left");
    ptrStyle.visibility = "visible";
  }
  else if (document.layers) {
    ptrElement.document.open() ;
    ptrElement.document.write (str);
    ptrElement.document.close ();
    //ptrElement.document.bgColor = "yellow";
    ptrStyle.top  = ptrObj.y + 20;
    ptrStyle.left = ptrObj.x;
    ptrStyle.visibility = "show";
  }
  return true ;
}

// FONCTIONS DIVERSES POUR ERGONOMIE
//==================================

function lienDocument (nomFichier, texte) {
  with (document) {
    write ('<A href="javascript:popupPleinEcran (\'') ;
    if (nomFichier.indexOf ("http://")==0) write (nomFichier) ;
    else write (site + nomFichier) ;
    write ('\', \'popupWindow\', true)" title="' + nomFichier + '">') ;
    writeln (texte + '</A>') ;
  }
}


function espacer () {
  with (document) {
    if (screen.height >= 768)
      writeln ('<p>&nbsp;</p>') ;
  }
}


function lignePointee (texte) {
  with (document) {
    write ('<TABLE><TR><TD><IMG src="'+site+'icones/crayon_pointing_black_wm.gif"></TD>') ;
    write ('<TD align="center" type="text/css" style="text-align:center">') ;
    write ('<P class="slogan">' + texte + '</P></TD>') ;
    writeln ('</TR></TABLE>') ;
  }
}

function popupPleinEcran (url, nom, ascenseurs) {
  var largeur, hauteur ;
  if (screen) {
    l = screen.width-100 ;
    h = screen.height-100 ;
  } else {
    l = 640 ;
    h = 480 ;
  }
  var options = 'directories=no, status=no, menubar=no, toolbar=yes' ;
  if (ascenseurs) options += ', scrollbars=yes' 
  else options += ', scrollbars=no' ;
  options += ', resizable=yes, width='+l+', height='+h ;
  window.open(url, nom, options);
}

function petitPopup (url, nom, largeur, hauteur) {
  var options = 'directories=no, status=no, menubar=no' ;
  options += ', scrollbars=no' ;
  options += ', resizable=no, width='+largeur+', height='+hauteur ;
  window.open(url, nom, options);
}

function enTetePage (titre) {
  var enPopup = (window.name == "popupWindow") ;
  with (document) {
    writeln ('<table border=0 cellpadding=5 width=100%>') ;
    writeln ('<tr><td>') ;
    if (!enPopup) write ('<A href="' + site + 'index.html">') ;
    write ('<IMG border=0 src="' + site + moyenLogo + '">') ;
    if (!enPopup) write ('</A>') ;
    write ('</TD>') ;
    write ('<td align="center" valign="baseline"><h2>' + titre + '</h2></td></tr></table><hr>') ;
  }
}

function piedDePage () {
  var enPopup = (window.name == "popupWindow") ;
  with (document) {
    writeln ('<table border=0 cellpadding=0 width=100%><tr>') ;
    write ('<td width=90% valign="baseline"><hr></td>') ;
    writeln ('<td width=10%>') ;
    if (!enPopup) write ('<A href="' + site + 'index.html">') ;
    write ('<IMG border=0 src="' + site + petitLogo + '">') ;
    if (!enPopup) write ('</A>') ;
    write ('</TD>') ;
    writeln ('</tr></table><br><br>') ;
  }
}

// GESTION DES DATES
//==================

function dateDuJour () {
  var months=new Array(13);
  months[1]="janvier";
  months[2]="f&eacute;vrier";
  months[3]="mars";
  months[4]="avril";
  months[5]="mai";
  months[6]="juin";
  months[7]="juillet";
  months[8]="ao&ucirc;t";
  months[9]="septembre";
  months[10]="octobre";
  months[11]="novembre";
  months[12]="d&eacute;cembre";
  var time=new Date();
  var lmonth=months[time.getMonth() + 1];
  var date=time.getDate();
  var year = time.getYear()%100 ;
  if (year < 10) year = "200" + year ;
  else year = "20" + year ; // Bug de l'an 2100
  return ("" + date + " " + lmonth + " " + year);
}


// DETECTION ECRAN ET SELECTION FICHIER DE STYLE
//==============================================

function largeurFenetreNavigateur () {
    var image ;
    if (navigator.javaEnabled()) {
        var toolkit= java.awt.Toolkit.getDefaultToolkit();
        var taille_ecran = toolkit.getScreenSize();
        largeur_ecran = taille_ecran.width;
        return largeur_ecran ;
    } else {
        /*Inclure dans le fichier html la ligne :
        <IMG NAME="Ligne" SRC="images/pixel.gif" WIDTH=100% WEIGHT=1>*/
	return document.Ligne.width ;
    }
}


function selectionStyle() {
    s = '<link rel="stylesheet" href="' + site + css + '.css" type="text/css">' ;
    document.writeln (s) ;
    s = '<link rel="stylesheet" href="' ;
    if (screen.width < 800) {
    	s += site + css + '640.css';
    	margeGauche = 20 ;
    	margeHaut = 0 ;
    }
    else if (screen.width < 1024) {
    	s += site + css + '800.css' ;
    	margeGauche = 50 ;
    	margeHaut = 10 ;
    }
    else {
    	s += site + css + '1024.css' ;
    	margeGauche = 120 ;
    	margeHaut = 20 ;
    }
    s += '" type="text/css">' ;
    document.writeln (s) ;
}

