/**
 * Este codigo fuente es propiedad de quatredevirtual S.L.
 * No se autoriza el uso, reproducción, modificación y/o distribución sin autorización
 * explícita y por escrito de la empresa.
 **/
// VARIABLES DE FUNCIONAMIENTO
//indica si se está haciendo scroll
var loop = 0;
//paso en píxels cuando se hace scroll
var step = 0;
//número de pasadas, usado para acelerar el scroll
var passes = 0;
//indica si se está haciendo scroll con la scrollbar
var scrolling = false;
//máxima altura que tendrá el TD que contiene el div
var maxHeight = 150;
//factor de multiplicadión de la scrollbar y el div, inicializado a 1, pero hay que llamar a setFactor en onLoad
var factor = -1;
//id de la scrollbar
var scrollbarId = "_miScBar";
//id del div que hay que mover
var targetDivId;
// Temporary variables to hold mouse x-y pos.s
var tempX = 0
var tempY = 0
var lastY;
// Detect if the browser is IE or not.
// If it is not IE, we assume that the browser is NS.
var IE = document.all?true:false

// If NS -- that is, !IE -- then set up for mouse capture
if (!IE) document.captureEvents(Event.MOUSEMOVE)

// Set-up to use getMouseXY function onMouseMove
document.onmousemove = getMouseXY;
document.onmouseup = disableScrolling;

function drawScrollDownBtn(btnImgOn, btnImgOff, targetDiv){
  document.write('<a href="#" onMousedown="beginScrollDown(' + "'" + targetDiv + "'" +');" onMouseOut="stopLoop();document.getElementById(\'scbarBtnDown\').src=\'' + btnImgOff + '\';" onMouseup="stopLoop();" onMouseOver="document.getElementById(\'scbarBtnDown\').src=\'' + btnImgOn + '\'">');
  document.write('<img id="scbarBtnDown" src="' + btnImgOff + '" border="0">');
  document.write("</a>");
  targetDivId = targetDiv;
}
function drawScrollUpBtn(btnImgOn, btnImgOff, targetDiv){
  document.write('<a href="#" onMousedown="beginScrollUp(' + "'" + targetDiv + "'" +');" onMouseOut="stopLoop();document.getElementById(\'scbarBtnUp\').src=\'' + btnImgOff + '\';" onMouseup="stopLoop();" onMouseOver="document.getElementById(\'scbarBtnUp\').src=\'' + btnImgOn + '\';">');
  document.write('<img id="scbarBtnUp" src="' + btnImgOff + '" border="0">');
  document.write("</a>");
  targetDivId = targetDiv;
}

function drawScrollBar(scrollImage, targetDiv, height){
  var scbar = '<div onselectstart="return false" id="' + scrollbarId + '" style="position:relative;border:0px solid;top:0px;width:10px;height:10px;background-image:url(' + scrollImage + ')" onMouseDown="beginScrollBar();" onMouseUp="scrolling=false;"></div>';
  maxHeight = height;
  document.write(scbar);
  targetDivId = targetDiv;
}

/**
 * Arranca el scroll por botón hacia arriba
 */
function beginScrollUp(targetName){
  var target = document.getElementById(targetName);
  if(target == null) return false;
  step = -1;
  loop = 1;
  //esto en opera target.scrollTo(0, 100);
  target.scrollTop = target.scrollTop + step;
  setTimeout("doLoop('" + targetName + "');",100);
}
/**
 * Arranca el scroll por botón hacia abajo
 */
function beginScrollDown(targetName){
  var target = document.getElementById(targetName);
  if(target == null) return false;
  step = 1;
  loop = 1;
  //esto en opera target.scrollTo(0, 100);
  target.scrollTop = target.scrollTop + step;
  setTimeout("doLoop('" + targetName + "');",100);
}
/**
 * Da una vuelta más del scroll de botón que se esté haciendo
 */
function doLoop(targetName){
  var target = document.getElementById(targetName);
  if(target == null) return false;
  if(loop == 1){
  passes++;
  if(passes = 1000){
    step = 1.05 * step;
    passes = 0;
  }
  target.scrollTop = target.scrollTop + step;
  //mover también la barra del scroll
  document.getElementById(scrollbarId).style.top = (target.scrollTop / getFactor()) + "px";
  setTimeout("doLoop('" + targetName + "');",30);
  }
}
/**
 * Para el scroll de botón que se esté haciendo
 */
function stopLoop(){
  loop = 0;
  passes = 0;
}
/**
 * Inicia el scroll mediante la barra
 */
function beginScrollBar(){
  var target = document.getElementById(scrollbarId);
  lastY = tempY;
  scrolling = true;
}
/**
 * Para el scroll que se estaba haciendo mediante la barra
 */
function disableScrolling(){
  scrolling = false;
}

/**
 * Mueve la scrollbar la mover el mouse
 */
function doScrollBar(){
  if (scrolling){
    var target = document.getElementById(scrollbarId);
    //calcular el movimiento
    var diff = tempY - lastY;
    lastY = tempY;
    var divPos = parseInt(target.style.top+0);
    var divHeight = parseInt(target.style.height+0);
    //comprobar que la nueva posición estará dentro del rango
    if(divPos + diff >= 0 && (divPos + diff + divHeight)< maxHeight){
      target.style.top = (divPos + diff) + "px";
      document.getElementById(targetDivId).scrollTop = (divPos + diff) * getFactor();
    }else{
      if(divPos > maxHeight){
        target.style.top = maxHeight + "px";
      }else if (divPos < 0){
        target.style.top = "0px";
      }
    }
  }
}

/**
 * Da el valor correcto al factor
 */
 function getFactor(){
   if(factor <= 0){
     var targetDiv = document.getElementById(targetDivId);
     var divHeight = parseInt(targetDiv.style.height+0);
     var divScrollHeight = targetDiv.scrollHeight;
     factor = (divScrollHeight - divHeight) / (maxHeight - 10) ;
   }
   return factor;
 }

// Main function to retrieve mouse x-y pos.s
function getMouseXY(e) {
  if (IE) { // grab the x-y pos.s if browser is IE
    tempX = event.clientX + document.body.scrollLeft
    tempY = event.clientY + document.body.scrollTop
  } else {  // grab the x-y pos.s if browser is NS
    tempX = e.pageX
    tempY = e.pageY
  }  
  // catch possible negative values in NS4
  if (tempX < 0){tempX = 0}
  if (tempY < 0){tempY = 0}  
  // show the position values in the form named Show
  // in the text fields named MouseX and MouseY
  if(scrolling){
    doScrollBar();
  }
  return true
}
