//
// Affichette dynamique et notes avec option de persistance...
// Ca en jette comme titre, hein?
//
// Copyright © Ircam 1999-2000 et Gilles Karmasyn 2000
//
// En cas de "recuperation", merci de laisser le copyright dans le code...
//


charge    = false;
refnum    = false;
attente   = 0;      // temps de fermeture apres onMouseOut de la reference
surLaNote = false;
tempoIE   = 0;      // tempo de fermeture pour IE, necessaire pour Mac
                     // cat la detection de la sortie de la note se fait par
                     // rapport au bas du curseur et non au haut du curseur...
                     // cette tempo donne le temps de cliquer sur un lien
                     // eventuel...


// initialisation et capture de la taille de l'ecran, tout ca...
function init()
{
     if (document.all) // IE
     {
         largeur = document.body.offsetWidth;
         hauteur = document.body.offsetHeight;
         charge  = true;
         tempoIE = 500;
     }
     else if (document.layers) // Netscape
     {
         largeur = window.innerWidth;
         hauteur = window.innerHeight;
         charge  = true;
     }

     // desactivation des notes pour IE4 non Windows
     // Mais si IE5, on active...
     // le calcul de la hauteur de fenetre change aussi... :-(
     if ((document.all) && (navigator.platform != "Win32"))
     {
         nomApplication = navigator.appVersion;
         nOccurrence = nomApplication.indexOf("MSIE 5", 0);

         if (nOccurrence > 0) // IE5
         {
             charge  = true;
             hauteur = document.body.clientHeight;
             // hauteur = screen.availHeight; alert(hauteur);
         }
         else charge=false;
     }
}


// ---------------------------------------
// reload()
// Teste si la page est dans le bon frame
// top si booself est true...
// pagecourante contient la reference
// a la page qui *doit* etre dans top
// ---------------------------------------
function reload(pagecourante, boolSelf)
{
     if (boolSelf)
     {
         if (top.location != self.location) top.location=pagecourante;
     }
     else
     {
         if (top.location == self.location) top.location=pagecourante;
     }
     init();
}


// -----------------------------------------------------
// Initialisation des reflexes onMouseOver et onMouseOut
// de la Layer/note courante
// Appele uniquement s'il y a un lien dans la note...
//
// nb layers: Netscape: document.layers.length
//            IE:       document.all.tags('SPAN').length
//
// On aura note que le fonctionnement pour IE et NC n'est
// pas tout a fait le meme...
// Comme dirait un gourou unix de ma connaissance:
// bestial... :-)
//
// -----------------------------------------------------
function initReflexesNote()
{
     if (document.layers)
     {
         document[refnum].onmouseover = new Function ("SignalerOnMouseOver();");
         document[refnum].onmouseout  = new Function ("fermerNoteBrute();");
     }

     if (document.all)
     {
         document.all[refnum].onmouseover = new Function 
("SignalerOnMouseOver();");
         document.all[refnum].onmouseout  = new Function 
("SignalerOnMouseOut();");
     }
}


function riendutout()
{
     // rien du tout!
     // puissant, hein?
}


function ouvrirFenDyn(event, note, largeurFen)
{
     if (charge)
     {
         ouvert = true;
         refnum = note;

         if (document.layers) // Netscape
         {
             abscisse=event.pageX; //  abscisse=event.screenX;
             ordonnee=event.pageY; //  ordonnee=event.screenY;

             if (abscisse>(largeur/2))
             {
                 l = largeurFen+5 ;
             } else
             {
                 l = -5;
             }

             // pageYOffset = decalage de la partie sup. gauche de la partie
             //               visible de la page ŕ l'intérieur de la fenetre

             if (ordonnee>pageYOffset + (hauteur/2))
             {
                 h = (document[note].clip.height+5); // note au dessus
             } else
             {
                 h = -5;   // note en dessous
             }

             var cote_gauche = abscisse - l;
             var sommet      = ordonnee - h;


             document[note].left       = cote_gauche;
             document[note].top        = sommet;
             document[note].visibility = "show";
         }


         if (document.all) //IE
         {
             abscisse=event.clientX;
             ordonnee=event.clientY;

             if (document.all[note].offsetWidth> (largeur/2))
             {
                 document.all[note].style.width = ((largeur/2)-15)
             }

             if (abscisse>(largeur/2))
             {
                 l = document.all[note].offsetWidth+5 ;
             } else
             {
                 l = -10;
             }

             if (ordonnee>(hauteur/2))
             {
                 h = (document.all[note].offsetHeight+5);
             } else
             {
                 h = -5;
             }

             var cote_gauche = document.body.scrollLeft + abscisse - l;
             var sommet      = document.body.scrollTop  + ordonnee - h;

             document.all[note].style.pixelTop   = sommet;
             document.all[note].style.pixelLeft  = cote_gauche;
             document.all[note].style.visibility = "visible";
         }
     }
     else // affichettes non fonctionnelles
     {
         // rien du tout
     }
}



function fermerNoteBrute()
{
     if (refnum && ouvert)
     {
         if (document.layers)
         {
             document[refnum].visibility="hide";
         }
         if (document.all)
         {
             document.all[refnum].style.visibility = "hidden";
         }

         ouvert    = false;
         surLaNote = false;
     }
}


// ---------------------------------------
// fermeture de la note seulement si on
// n'est pas sur la Layer note
// ---------------------------------------
function fermerNoteIntelligent()
{
     if (!surLaNote) // le test sur refnum et ouvert
     {               // est dans fermerNoteBrute
         fermerNoteBrute();
     }
}


// ---------------------------------------
// Appele par onMouseOver de la Layer note
// ---------------------------------------
function SignalerOnMouseOver()
{
     surLaNote = true;
}

// ---------------------------------------
// Appele par onMouseOut de la Layer note
// ---------------------------------------
function SignalerOnMouseOut()
{
     surLaNote = false;
}


// ---------------------------------------
// fermerNote()
// Entree principale de fermeture de note
// Fermeture selon tempo avec enclenchement
// de la mecanique de detection d'entree
// sortie de la layer
// ---------------------------------------
function fermerNote(boolFermerImmediat)
{

     if (refnum && ouvert)
     {
         if (attente == 0 || boolFermerImmediat)
         {
             fermerNoteBrute();
         }
         else // cas d'une note contenant des liens: on doit
              // pouvoir se positionner dessus...
         {
             initReflexesNote();
	        tempo = setTimeout("enfinFermerNote()", attente);
	    }
	}
}


// ---------------------------------------
// enfinFermerNote()
// Tentative de fermeture initiale si hors
// de la layer, puis mecanique de detection
// de sortie de la layer
// ---------------------------------------
function enfinFermerNote()
{
     fermerNoteIntelligent(); // ferme la note si on n'est pas dessus

     if (ouvert)              // note non fermee => on est dessus
     {
         if (document.layers) document.captureEvents(Event.MOUSEMOVE);
         document.onmousemove = dedansDehors;
     }
}


// ---------------------------------------
// dedansDehors()
// Ferme la note des que l'on sort de la
// Layer note
// ---------------------------------------
function dedansDehors(e)
{
     if (IsInside(e) == false)
     {
         tempo = setTimeout("fermerNoteBrute()", tempoIE);

     	if (document.layers)
         {
	       document.releaseEvents(Event.MOUSEMOVE);
         }
     	if (document.all)
     	{
	       document.onmousemove = null;
     	}
     }
}


// ---------------------------------------
// IsInside()
// Informe si on est dans ou hors de la
// Layer note
// Surtout utile pour IE5 Mac, mais utilise
// pour IE5 systematiquement... En attendant de
// tester l'aute mecanisme sur IE5 PC
// ---------------------------------------
function IsInside(e)
{
     wecy= (document.all) ? 
window.event.clientY+document.body.scrollTop : e.pageY;
     wecx= (document.all) ? 
window.event.clientX+document.body.scrollLeft : e.pageX;
     som = (document.all) ? document.all[refnum].offsetTop : 
document[refnum].top;

     cote_gau=(document.all) ? document.all[refnum].offsetLeft : 
document[refnum].left;
     larg    =(document.all) ? document.all[refnum].offsetWidth : 
document[refnum].clip.right;
     haut    =(document.all) ? document.all[refnum].offsetHeight : 
document[refnum].clip.bottom;

	if (document.layers)
	{
	   if((wecy>som && wecy<som+haut) && (wecx>cote_gau && 
wecx<cote_gau+larg))
	   {
	       return true;
	   }
	   else
	   {
            return false;
   	   }
     }

	if (document.all)
	{
	   if((wecy>som && wecy<som+haut) && (wecx>cote_gau && 
wecx<cote_gau+larg))
	   {
	       return true;
	   }
	   else
	   {
	       return false;
	   }
	}
}

function ouvrirNote(event, note)
{
     if (refnum && ouvert) fermerNoteBrute();
     ouvrirFenDyn(event, note, 300);
     attente = 1000;
}

function ouvrirCommentaire(event, note)
{
     if (refnum && ouvert) fermerNoteBrute();
     ouvrirFenDyn(event, note, 120);
     attente = 0;
}



