/**
 * Funciones para el manejo de las capas asociadas a enlaces múltiples
 * en el CM.
 *
 */    
        
    /**
     * Variable que toma el valor de true cuando el cursor se
     * encuentre sobre el link
     */
    var onLink = false;
    
    /**
     * Variable que toma el valor de true cuando el cursor 
     * se encuentra sobre la capa de enlaces
     */
    var onLayer = false;
    
    
    /**
     * Debe ser llamada cuando el cursor entra en el espacio
     * del enlace.
     *
     * @param e     El evento de raton que se ha producido al
     *   entrar el cursor en el area del enlace.
     * @param name  Id de la capa de enlaces asociada a este enlace.
     */     
    function enterLink(e,name) {
        onLink = true;
        showLayer(e,name);
    }
    
    /**
     * Debe ser llamada cuando el cursor sale del espacio del enlace.
     * 
     * @param e     El evento de ratón que se ha producido al 
     *   salir el cursor del area de enlace.
     * @param name  Id de la capa de enlaces asociada a este enlace.
     */
    function leaveLink(e,name) {
        onLink = false;
        if ( onLayer == true ) {
           showLayer(e,name);
        } else {
           hideLayer(e,name);
        }
    }

    /**
     * Debe ser llamada cuando el cursor entra en el espacio
     * de la capa de enlaces
     *
     * @param e     El evento de raton que se ha producido al
     *   entrar el cursor en el area de la capa de enlaces.
     * @param name  Id de esta capa de enlaces.
     */         
    function enterLayer(e,name) {
        onLayer = true;
        showLayer(e,name);    
    }

    /**
     * Debe ser llamada cuando el cursor sale de la capa de enlaces.
     * 
     * @param e     El evento de ratón que se ha producido al 
     *   salir el cursor de la capa de enlaces.
     * @param name  Id de esta capa de enlaces.
     */
    function leaveLayer(e,name) {
        onLayer = false;
        if ( onLink == true ) {
           showLayer(e,name);
        } else {
           hideLayer(e,name);
        }    
    }
    
    
    /**
     * Función interna que muestra una capa de enlaces.
     *
     * Esta función requiere que la capa principal del contenido
     * (aquella que este por encima de la capa overflow) tenga
     * como identificador 'contentClass'
     *
     * @param e     El evento de ratón que origino la acción 
     *  de mostrar la capa
     * @param name  El identificador de la capa a mostrar.
     */
    function showLayer(e,name) {
      var links = document.getElementById(name);
      var contentClass = document.getElementById('bodyContentDiv');
      if ( links && links.style.visibility == 'hidden' ) {
            if ( onLink ) {
                // Hacemos que la capa sea hija de la capa denominada 'contentClass'
                // Si no fuese así y la pusiesemos debajo de la capa que tiene el
                // overflow (tal y como sale el contenido preformateado) la capa
                // nunca saldría por encima del scroll del contenido
                if ( contentClass ) {
                    links.parentNode.removeChild(links);
                    contentClass.appendChild(links);
                }
                if ( window.navigator.appName == 'Netscape' ) {
                    links.style.top = e.pageY-2;
                    links.style.left = e.pageX-2;
                } else {
                    links.style.top =  self.document.body.scrollTop+e.y-2;
                    links.style.left = e.x-2;
                }
            }
            document.body.style.overflowX='hidden';            
            links.style.visibility='visible';
      }      
   }
   
    /**
     * Función interna que muestra una capa sin controlar para nada que
     * nos encontremos dentro de la capa...
     *
     * @param e     El evento de ratón que origino la acción 
     *  de mostrar la capa
     * @param name  El identificador de la capa a mostrar.
     */
    function showLayer2(e,name) {
      e = (e) ? e : event;
      var links = document.getElementById(name);
      var doc = self.document.documentElement, body = self.document.body;
      var pageX, pageY, clientWidth;
      if ( links ) {
          if ( window.navigator.appName == 'Netscape' ) {
              pageX = e.pageX;
              pageY = e.pageY;
          } else if (e.pageX == null && e.clientX != null) {
              pageX = e.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
              pageY = e.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
          }
          else {
              pageX = e.x + doc.scrollLeft + body.scrollLeft;
              pageY = e.y + doc.scrollTop  + body.scrollTop;
          }
          clientWidth = (self.innerWidth || doc && doc.clientWidth || body && body.clientWidth || 0) - 15;
          pageX = (pageX + links.offsetWidth > clientWidth) ? pageX - links.offsetWidth + 12 : pageX;
          links.style.left = (pageX -  2) + 'px';
          links.style.top  = (pageY + 20) + 'px';
          links.style.visibility = 'visible';
      }
   }
   
    /**
     * Función interna que oculta una capa de enlaces.
     *
     * @param e     El evento de ratón que origino la acción 
     *  de ocultar la capa
     * @param name  El identificador de la capa a ocultar.
     */   
   function hideLayer(e,name) {
      var links = document.getElementById(name);
      if ( links ) {
          links.style.visibility='hidden';
          links.style.left = '0px';
          links.style.top  = '0px';
      }
   }