  // Declaracion de variables
  var dlz;                              // Puntero al menu deslizante
  var dlz_to;                           // Puntero al contador que mueve el menu deslizante
  var dlz_min;                          // Limites de deslizamiento
  var dlz_max;
  var dlz_target;                       // Posicion objetivo
  var dlz_works = false;                // true = el menu se esta moviendo (hay un setTimeout en marcha)
  var dlz_actual;                       // Posicion actual del div deslizante
  var dlz_popup;                        // Puntero al div flotante (popup)
  var dlz_depopupto;                    // Puntero al contador que establece el suceso onclick
  var dlz_floatlinks;                   // Numero de links en el menu flotante
  var popup_target;                     // Target cuando se abrio el popup
  var popup_contenido = new Array();    // Array con los contenidos del popup
  var access_popup;                     // Puntero al div del acceso rapido (popup)
  var num_menu_cols = 3;                // Numero de columnas en los menus desplegables


  // Funcion que detecta la parte de la pantalla que se ha movido hacia abajo usando el primer metodo que funcione
  function dlz_findScrollTop()
  {
    if (typeof(window.pageYOffset) == 'number') return window.pageYOffset;
    if (document.documentElement && typeof(document.documentElement.scrollTop) == 'number' && document.documentElement.scrollTop > 0) return document.documentElement.scrollTop;
    if (typeof(document.body.scrollTop) == 'number') return document.body.scrollTop;

    return null;
  }


  // Funcion que calcula los limites posibles del deslizamiento
  function dlz_limites()
  {
    dlz_min = parseInt(document.getElementById("menulateral").offsetHeight);
    dlz_max = parseInt(document.getElementById("contenedor").offsetHeight) - parseInt(dlz.offsetHeight);
  }


  // Funcion que detecta el tamano vertical de la ventana
  function dlz_findWindowSize()
  {
    if( typeof( window.innerWidth ) == 'number' )
    {
      //Non-IE
      return window.innerHeight;
    }
    else if(document.documentElement && (document.documentElement.clientWidth||document.documentElement.clientHeight))
    {
      //IE 6+ in 'standards compliant mode'
      return document.documentElement.clientHeight;
    }
    else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
    {
      //IE 4 compatible
      return document.body.clientHeight;
    }
    return null;
  }

  // Funcion que detecta el tamano horizontal de la ventana
  function dlz_findWindowWidth()
  {
    if( typeof( window.innerWidth ) == 'number' )
    {
      //Non-IE
      return window.innerWidth;
    }
    else if(document.documentElement && (document.documentElement.clientWidth||document.documentElement.clientHeight))
    {
      //IE 6+ in 'standards compliant mode'
      return document.documentElement.clientWidth;
    }
    else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
    {
      //IE 4 compatible
      return document.body.clientWidth;
    }
    return null;
  }

  // Funcion que inicializa el mecanismo del menu deslizante
  function dlz_iniciar()
  {
    // Apuntamos al menu deslizante
    dlz = document.getElementById("deslizador");

    // Calcular los limites del desplazamiento y el menu flotante
    dlz_limites();
    dlz_popup = document.getElementById("menuflotante");


    // Inicializar el menu deslizante
    dlz_target = dlz_min;
    dlz.style.top = dlz_min+"px";
    dlz_actual = dlz_target;
    dlz.style.display = "block";

    // Si se puede encontrar la parte deslizada, y hay espacio suficiente para el menu deslizante,
    // definimos los sucesos
    if ((dlz_findScrollTop() != null) && (dlz_max > dlz_min+dlz.offsetHeight+100))
    {
      if (document.onscroll)
        document.onscroll = dlz_scroll;
      else
        window.onscroll = dlz_scroll;
    }
  }

  // Funcion que captura el evento onscroll
  function dlz_scroll()
  {
    //dlz_limites(); // Recalcular los limites (por si se ha desplegado algun menu)

    // Calcular la distancia objetivo como:
    //   parte oculta de la ventana por el scrollTop
    //   menos altura del bannersuperior (la altura se mide a partir de alli)
    //   75px de margen superior
    dlz_target = dlz_findScrollTop() - parseInt(document.getElementById("bannersuperior").offsetHeight)+75;
    if (dlz_target > dlz_max) dlz_target = dlz_max;
    if (dlz_target < dlz_min) dlz_target = dlz_min;

    // Si no hay ningun timeout ya activo, lo activamos
    if (!dlz_works)
    {
      dlz_mover()
    }

    // Si el menu flotante esta abierto, y la pagina se ha movido mas de 100px, lo cerramos
    if (((dlz_popup.style.display == "block")||(access_popup.style.display == "block")) && (Math.abs(dlz_findScrollTop() - popup_target) > 100)) dlz_depopup();
  }


  // Funcion encargada de mover el menu deslizante
  function dlz_mover()
  {
    // Conocer la posicion actual del menu deslizante
    // dlz_actual = parseInt(dlz.style.top);
    var dif = dlz_target - dlz_actual; // Distancia que queda a recorrer
    var sign = (dif > 0) ? 1 : -1; // Obtener el signo de dif (sign*dif sera positivo)

    // Si actualmente estamos en el minimo, el menu deslizante no hace falta
    dlz.style.visibility = (dlz_actual == dlz_min) ? "hidden" : "visible";

    if (dif == 0)
    {
      dlz_works = false; // Si ya estamos en el destino, desactivamos el movimiento
    }
    else
    {
      // Si aun no hemos llegado, realizamos un paso
      dlz_works = true;
      var speed =  Math.ceil(sign*dif/10); // La velocidad es proporcional a la distancia que falta
      if (sign*dif < 2) speed = 1;         // Precaucion para evitar saltos indefinidos de dos pixeles
      dlz_actual += sign*speed;            // Calcular la nueva posicion
      dlz.style.top = dlz_actual  + "px";  // Movemos el menu deslizante
      dlz_to = setTimeout("dlz_mover()",50)// Rellamamos la funcion dentro de 50ms
    }
  }


  // Funcion que abre el menu flotante al hacer click sobre el id-esimo link
  function dlz_dopopup(id)
  {
    // Cerramos el popup (para evitar parpadeos)
    dlz_depopup();

    // Preparar variables
    popup_target = dlz_findScrollTop();  // Almazenamos el target actual (si varia mas de 100px, se cierra el menu)
    var dlz_links = document.getElementById("deslizadorlinks");

    // Verter el contenido al menu
    dlz_popup.innerHTML = pupup_contents(id);
    dlz_popup.style.display = "block";

    // Calcular la posicion del popup:
    // Posicion que situaria el popup a la altura del boton pulsado
    var pos = dlz_target + dlz_links.offsetTop + Math.round((id)*dlz_links.offsetHeight / (dlz_floatlinks) );
    var anchoVentana = dlz_findWindowSize();   // Ancho de la ventana
    var anchoMenu = dlz_popup.offsetHeight;    // Ancho del menu
    var anchoBanner = document.getElementById("bannersuperior").offsetHeight; // Ancho del banner superior

    // Comprovar que cabe en la ventana
    if ( (anchoVentana != null) && (pos + anchoMenu + anchoBanner - dlz_findScrollTop() > anchoVentana ) )
    {
      pos = dlz_findScrollTop() + anchoVentana - anchoBanner - anchoMenu;
    }

    // Comprovar que el inicio sige estando en la pagina
    if ( (anchoVentana != null) && (pos + anchoBanner < dlz_findScrollTop() ) )
    {
      pos = dlz_findScrollTop() - anchoBanner;
    }

    dlz_popup.style.top = pos + "px"; // Poner el menu en la posicion deseada

    // Se asigna el evento onclick para cerrar el menu
    //   (se hace con 100ms de retraso para evitar que capture el mismo evento que abre el popup,
    //    ya que document podria capturarlo despues de <a>)
    dlz_depopupto = setTimeout("document.onclick = dlz_depopup",100);
  }





  // Funcion que hara desaparecer el menu
  function dlz_depopup()
  {
    if (dlz_popup) dlz_popup.style.display    = "none"; // Ocultar el menu del deslizante
    access_popup.style.display = "none"; // Ocultar el menu del accesso rapido
    clearTimeout(dlz_depopupto);         // Si el setTimeout aun estaba corriendo, lo cerramos (no deberia pasar)
    document.onclick = "";               // Limpiar los eventos
  }


  // Funcion que activa y desactiva el menu deslizante
  //  action = true --> activar
  //  action = false --> desactivar
  function dlz_activate(action)
  {
    if (action)
    {
      // Si la cookie para desactivar esta configurada, la borramos.
      if ( document.cookie.indexOf("web_fisica_float") >= 0 )
      {
        var fecha = new Date();
        fecha.setTime(1);
        document.cookie = "web_fisica_float=web_fisica_float; expires="+fecha.toGMTString()+"; path=/";
      }
      document.getElementById("deslizadoractivar").innerHTML = ""; // Vaciar el boton de activacion
      dlz_iniciar();                                               // Llamar a la inicializacion del sistema
      dlz_mover();                                                 // Realizar el primer paso (por si hace falta)
    }
    else
    {
      // Si el sistema ya ha sido inicializado (dlz_popup esta definido), lo desactivamos
      if (dlz_popup)
      {
        dlz_depopup();               // Cerrar el popup (por si esta abierto)
        document.onscroll = "";      // Limpiar los eventos
        window.onscroll = "";
        dlz.style.display = "none";  // Ocultar el menu flotante

        // Preguntar si la desactivacion es permanente, si lo es guardamos la coockie
        if (confirm("Desea desactivar permanentemente el menu deslizante?\n(Requiere el uso de coockies)"))
        {
        var fecha = new Date();
        fecha.setTime(fecha.getTime()+7*24*3600*1000);
        document.cookie = "web_fisica_float=web_fisica_nofloat; expires="+fecha.toGMTString()+"; path=/";
        }
      }

      // Rellenar el boton de activacion
      var temp = "";
      temp += '<a href="#" class="floatboton" onclick="dlz_activate(true); return false;">';
      temp += '  <img src="http://www.lawebdefisica.com/images/dlz_on.jpg" alt="Activar men&uacute; flotante" title="Activar men&uacute; flotante" border="0" />';
      temp += '<\/a>';
      document.getElementById("deslizadoractivar").innerHTML = temp;
    }
  }





  // Funcion que abre el menu flotante al hacer click sobre el id-esimo link del accesso rapido
  function access_dopopup(id)
  {
    // Cerramos el popup (para evitar parpadeos)
    dlz_depopup();

    // Preparar variables
    popup_target = dlz_findScrollTop();  // Almacenamos el target actual (si varia mas de 100px, se cierra el menu)

    // Verter el contenido al menu
    access_popup.innerHTML = pupup_contents(id);
    access_popup.style.display = "block";

    // Calcular la posicion del popup:
    // Posicion vertical
    var anchoVentana = dlz_findWindowSize();   // Ancho de la ventana
    var anchoMenu = access_popup.offsetHeight; // Ancho del menu
    var anchoBanner = document.getElementById("bannersuperior").offsetHeight; // Ancho del banner superior
    var pos = 60 + document.getElementById("accessb"+id).offsetHeight;

    // Comprovar que cabe en la ventana
    if ( (anchoVentana != null) && (pos + anchoMenu - dlz_findScrollTop() > anchoVentana ) )
    {
      pos = dlz_findScrollTop() + anchoVentana - anchoMenu;
    }

    // Comprovar que el inicio sige estando en la pagina
    if ( (anchoVentana != null) && (pos < dlz_findScrollTop() ) )
    {
      pos = dlz_findScrollTop();
    }

    access_popup.style.top = pos + "px"; // Poner el menu en la posicion deseada


    // Posicion horizontal
    pos = document.getElementById("accessup").offsetLeft+document.getElementById("accessb"+id).offsetLeft;

    // Comprovar que cabe en la ventana
    if (dlz_findWindowWidth() - 1 < pos + access_popup.offsetWidth)
    {
      access_popup.style.left = "";
      access_popup.style.right = "0px";
    }
    else
    {
      access_popup.style.right = "";
      access_popup.style.left = pos + "px";
    }

    // Se asigna el evento onclick para cerrar el menu
    //   (se hace con 100ms de retraso para evitar que capture el mismo evento que abre el popup, ya
    //    que document podria capturarlo despues de <a>)
    dlz_depopupto = setTimeout("document.onclick = dlz_depopup",100);
  }

  function pupup_contents(id)
  {
    var cols = 0;
    temp  = "\n";
    temp += "<table border='0' celspacing='0' celpadding='3'>\n<tbody>\n";
    temp += "<tr>\n";

    for (var col = 0; col < num_menu_cols; col++)
    {
      if (popup_contenido[col][id].length > 0)
      {
        temp +=  "<td>\n";
        for (var i = 0; i< popup_contenido[col][id].length; i++) temp += popup_contenido[col][id][i] + "\n";
        temp +=  "</td>\n";
      }
    }
    temp += "</tr>\n";
    temp += "</tbody></table>\n";
    return temp;
  }
