//mouse position management
/*
	Variables para coger coordenadas de el puntero de raton
*/
var mousePositionX = null;
var mousePositionY = null;

/*
	Inicicación del algoritmo de detección del posicion del raton
*/
window.onload = init;

function init() {
	if (window.Event) {
		document.captureEvents(Event.MOUSEMOVE);
	}
	document.onmousemove = getCursorXY;
}

/*
	Guardación de la posicción del raton
*/
function getCursorXY(e) {
	mousePositionX = (window.Event) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
	mousePositionY = (window.Event) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
}


//element position management

  /*
		Obteniendo del posición X del objeto (elemento de pagina web, p.ej DIV)
  */
  function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

  /*
		Obteniendo del posición Y del objeto (elemento de pagina web, p.ej DIV)
  */  
  function findPosY(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }


  


//scrolling management

var running = false;					//variable informa si ahora contenodo esta desplazamiento la posición 
var killTimeout = null;					//el puntero de objeto de tarea del desplazamiento
var scrollVelocity=30;					//velocidad del desplazamiento
var stepDelay=20;						//tiempo entre cada paso
var stepIncrement = scrollVelocity;
var destination = null;					//posición de destino


/*
	Función calcula y lanza el función del desplazamiento
*/
function scrollObject(contentObj, scrollPrevObj, scrollVal, animated) {

	//valor por defecto
	if (animated==undefined)
		animated=true;

	//movimiento del contenido
	var content=contentObj;
	killScroll(content);
	
	
	var elHeight = parseInt(content.style.top);
	if ( isNaN(elHeight) ) {
		elHeight=0;
	}

	var newTop = elHeight+scrollVal;
	
	if (newTop > 0 ) {
		newTop = 0;
	}
	
	var containerHeight = content.offsetHeight-content.parentNode.offsetHeight;
	
	if (newTop < -containerHeight ) {
		newTop = -containerHeight;
	} 
	
	setScrollBar(scrollPrevObj, newTop/containerHeight);
	
	//animacion

	destination = newTop;
	
	if (animated==true) {
		running = true;
		killTimeout = window.setTimeout(function(a,b){killScroll(content)}, 1500);	
	
		// Start the scroll by calling scrollStep().
		
		var down=1;
		if (newTop-elHeight>0)
			down=-1;

		scrollStep(content, elHeight, newTop, down );
	} else {
		content.style.top = newTop;
	}
}

	/*
		Single paso del algortmo del desplazamiento
	*/
	function scrollStep(content, to, dest, down) {

		if(!running || (down>0 && to <= dest) || (down<0 && to >= dest)) {
			killScroll(content);
			return;
		}

		if((down>0 && to <= (dest + (2 * stepIncrement))) ||
		   (down<0 && to >= (dest - (2 * stepIncrement)))) {
			stepIncrement = stepIncrement * .55;
		}

		to = to - down*stepIncrement;
		content.style.top = to;
		
		// Assign the returned function to a public method.
		var next = function() { scrollStep(content, to, dest, down) };
		window.setTimeout( next, stepDelay);
	}

	
	/*
		Función de terminación del algoritmop del desplazamiento
	*/
	function killScroll(content) {
		content.style.top = destination;
		window.clearTimeout(killTimeout);
		running = false;
		killTimeout = null;
		stepIncrement = scrollVelocity;
	}

	
/*
	Levantar la posición de la barra
*/
function setScrollBar(scrollPrevObj, percentageHeight) {

	//movimiento del barra del preview
	var preview = scrollPrevObj;
	var barHeight = preview.parentNode.offsetHeight-preview.offsetHeight;
	
	preview.style.top = -(barHeight*percentageHeight);
}

/*
	Función prepara datos para lanzar función de calculación y desplazamiento
*/
function scrollElement(elemId, scrollVal, scrollPrevId)
{
	var content=document.getElementById(elemId);
	var preview=document.getElementById(scrollPrevId);	
	scrollObject(content, preview, scrollVal);
}	

/*
	Función utilizada para cambiar la posición de contenido despues pinchar al enlaces en pagina FAQ
*/
function scrollerJump(elemId, scrollPrevId, offsetId) {
	var content = document.getElementById(elemId);
	var preview = document.getElementById(scrollPrevId);
	
	var offsetObj = document.getElementById(offsetId);
	var scrollVal = -offsetObj.offsetTop;

	scrollObject(content, preview, scrollVal, false);
}


/*
	Función utilizada para cambiar la posición del conteniodo despues pinchar a la barra
*/
function scrollBarClick(scrollBarId, contentId, scrollPrevId) {

	var scrollObj = document.getElementById(scrollBarId);
	var posYinElement = mousePositionY-findPosY(scrollObj);	
	
	var content = document.getElementById(contentId);
	var preview = document.getElementById(scrollPrevId);	
	
	var percentPos = posYinElement/scrollObj.offsetHeight;
	var scrollVal = -(content.offsetHeight-content.parentNode.offsetHeight)*percentPos;
	var elHeight = parseInt(content.style.top);
	if ( isNaN(elHeight) ) {
		elHeight=0;
	}	
	var offsetVal = scrollVal-elHeight;

	scrollObject(content, preview, offsetVal, false);
}


