// Scroll con Drag 2002-2003
// Javascript: Fernando Beltrán fernando.beltran@tantacom.com
// (c)Todos los derechos reservados.™
// Realizado para Tanta http://www.tantacom.com 2003
// Modificaciones y adaptaciones posteriores: nombre, fecha.
// Se prohibe la distribucion, copia en parte o en su totalidad del código sin el pèrmiso del autor.
// Plataformas compatibles con DOM 4 y posteriores.

Upx1=new Image();
Upx1.src="/ficheros/img/up.gif";
Upx2=new Image();
Upx2.src="/ficheros/img/up2.gif";
Upx3=new Image();
Upx3.src="/ficheros/img/down.gif";
Upx4=new Image();
Upx4.src="/ficheros/img/down2.gif";
Upx5=new Image();
Upx5.src="/ficheros/img/scroll.gif";
Upx6=new Image();
Upx6.src="/ficheros/img/scroll2.gif";

function RollScroll(e,a){
eval("document.images['"+e+"'].src=Upx"+a+".src");

}


// Navegador
var ie=document.all;
var ns6=document.getElementById&&!document.all;
var n=document.layers;

var RatonY; // Raton Y al clicar
var RatonX; // Raton X al clicar

var ClickArriba = false; // Switch de clic flecha arriba
var ClickAbajo = false; // Switch de clic flecha abajo
var ClickArrastra = false; // Switch de clic elemento barra scroll
var BarraArriba = false; // Switch de clic sobre barra scroll
var BarraAbajo = false; // Switch de clic debajo barra scroll

var timer = setTimeout("",500); // Variable de repetición
var ArribaIzquierda; // Arriba X
var ArribaTop; // Arriba Y
var AbajoIzquierda; // Abajo X
var AbajoTop; // Abajo Y
var ArrastraIzquierda; // Elemento scrolable
var ArrastraTop; // Elemento scrolable
var ReglaIzquierda; // Regla X
var ReglaTop; // Regla Y
var contentT; // Y del contenedor
var contentH; // Altura contenido
var contentClipH; // Altura del clip del contenido
var scrollLength; // Numero de pixel que se tiene que mover la barra
var startY; // mantiene el carril entre el raton y la capa

/****************** PARAMETROS **********************/
var upH = 9; // Altura flecha arriba
var upW = 7; // Ancho flecha arriba
var downH = 9; // Altura flecha abajo
var downW = 7; // Ancho flecha abajo
var dragH = 38; // Altura elemento barra
var dragW = 7; // Ancho elemento Barra
var scrollH = 210; // Altura barra scroll
var velocidad = 4; // Velocidad
/****************** FIN PARAMETROS **********************/

//Devuelve si estamos posicionados sobre la flecha superior
function EsFlechaSuperior(){
if(RatonX >= ArribaIzquierda && (RatonX <= (ArribaIzquierda + upW)) && RatonY >= ArribaTop && (RatonY <= (ArribaTop + upH)))return true
else return false
}

// Raton abajo
function E_RatonAbajo(e){
	if((document.layers && e.which!=1) || (document.all && event.button!=1)) return true; // Activa el boton derecho
	DameRaton(e);
	startY = (RatonY - ArrastraTop);
	
	// Si clica sobre la flecha superior
	if(EsFlechaSuperior()){
		ClickArriba = true;
		return scrollUp();
	}	
	// Si clica sobre la flecha inferior
	else if(RatonX >= AbajoIzquierda && (RatonX <= (AbajoIzquierda + downW)) && RatonY >= AbajoTop && (RatonY <= (AbajoTop + downH))){
		ClickAbajo = true;
		return scrollDown();
	}
	// Si clica sobre el elemento de la barra de scroll
	else if(RatonX >= ArrastraIzquierda && (RatonX <= (ArrastraIzquierda + dragW)) && RatonY >= ArrastraTop && (RatonY <= (ArrastraTop + dragH))){
		ClickArrastra = true;
		return false;
	}
	else if(RatonX >= ArrastraIzquierda && (RatonX <= (ArrastraIzquierda + dragW)) && RatonY >= ReglaTop && (RatonY <= (ReglaTop + scrollH))){
		// Si clica sobre la barra de scroll encima del elemento
		if(RatonY < ArrastraTop){
			BarraArriba = true;
			ClickArriba = true;
			return scrollUp();
		}
		// Si clica sobre la barra de scroll debajo del elemento
		else{
			BarraAbajo = true;
			ClickAbajo = true;
			return scrollDown();
		}
	}
	// Si no se está haciendo scroll
	else{
		return true;
	}
}

// Función arrastrar
function E_RatonMueve(e){
	if(ClickArrastra && contentH > contentClipH){
		DameRaton(e);
		ArrastraTop = (RatonY - startY);
		
		if(ArrastraTop < (ReglaTop))
			ArrastraTop = ReglaTop;		
		if(ArrastraTop > (ReglaTop + scrollH - dragH))
			ArrastraTop = (ReglaTop + scrollH - dragH);
		
		contentT = ((ArrastraTop - ReglaTop)*(1/scrollLength));
		contentT = eval('-' + contentT);

		MueveA();
		
		// Algunos IE no seleccionan los gifs.
		if(ie)
			return false;
	}
}

function E_Arriba(){
	clearTimeout(timer);	
	ClickArriba = false;
	ClickAbajo = false;
	ClickArrastra = false;
	BarraArriba = false;
	BarraAbajo = false;
	return true;
}

// Cojemos la altura
function DameTop(){
	if(ie)
		contentT = document.all.content.style.pixelTop;
	else if(n)
		contentT = document.contentClip.document.content.top;
	else if(ns6)
		contentT = parseInt(document.getElementById("content").style.top);
}

// Coordenadas del raton
function DameRaton(e){
	if(ie){
		RatonY = event.clientY + document.body.scrollTop;
		RatonX = event.clientX + document.body.scrollLeft;
	}
	else if(n || ns6){
		RatonY = e.pageY;
		RatonX = e.pageX;
	}
}

// Mover la capa
function MueveA(){
	if(ie){
		document.all.content.style.top = contentT;
		document.all.regla.style.top = ArrastraTop;
		document.all.drag.style.top = ArrastraTop;
	}
	else if(n){
		document.contentClip.document.content.top = contentT;
		document.regla.top = ArrastraTop;
		document.drag.top = ArrastraTop;
	}
	else if(ns6){
		document.getElementById("content").style.top = contentT + "px";
		document.getElementById("drag").style.top = ArrastraTop + "px";
		document.getElementById("regla").style.top = ArrastraTop + "px";
	}
}

// Scroll arriba
function scrollUp(){
	DameTop();
	
	if(BarraArriba){
		if(ArrastraTop <= (RatonY-(dragH/2)))
			return E_Arriba();
	}
	
	if(ClickArriba){
		if(contentT < 0){		
			ArrastraTop = ArrastraTop - (velocidad*scrollLength);
			
			if(ArrastraTop < (ReglaTop))
				ArrastraTop = ReglaTop;
				
			contentT = contentT + velocidad;
			if(contentT > 0)
				contentT = 0;
			
			MueveA();
			timer = setTimeout("scrollUp()",25);
		}
	}
	return false;
}

// Scroll abajo
function scrollDown(){
	DameTop();
	
	if(BarraAbajo){
		if(ArrastraTop >= (RatonY-(dragH/2)))
			return E_Arriba();
	}

	if(ClickAbajo){
		if(contentT > -(contentH - contentClipH)){			
			ArrastraTop = ArrastraTop + (velocidad*scrollLength);
			if(ArrastraTop > (ReglaTop + scrollH - dragH))
				ArrastraTop = (ReglaTop + scrollH - dragH);
			
			contentT = contentT - velocidad;
			if(contentT < -(contentH - contentClipH))
				contentT = -(contentH - contentClipH);
			
			MueveA();
			timer = setTimeout("scrollDown()",25);
		}
	}
	return false;
}

// Recarga la página para recargar posición de la capa
function RecargaPagina(){
	location.reload();
}

// Inicializamos
function CargaEventos(){
	if(ie){
		// Posiciones de la flecha superior
		ArribaIzquierda = document.all.up.style.pixelLeft;
		ArribaTop = document.all.up.style.pixelTop;		
		// Posiciones de la flecha inferior
		AbajoIzquierda = document.all.down.style.pixelLeft;
		AbajoTop = document.all.down.style.pixelTop;
		// Posiciones de la barra de scroll
		ArrastraIzquierda = document.all.drag.style.pixelLeft;
		ArrastraTop = document.all.drag.style.pixelTop;		
		// Posicion y de la regla
		ReglaTop = document.all.regla.style.pixelTop;		
		// altura del contenido y de la capa del clip
		contentH = parseInt(document.all.content.scrollHeight);
		contentClipH = parseInt(document.all.contentClip.style.height);
	}
	else if(n){
		// Posiciones de la flecha superior
		ArribaIzquierda = document.up.left;
		ArribaTop = document.up.top;		
		// Posiciones de la flecha inferior
		AbajoIzquierda = document.down.left;
		AbajoTop = document.down.top;		
		// Posiciones de la barra de scroll
		ArrastraIzquierda = document.drag.left;
		ArrastraTop = document.drag.top;		
		// Posicion y de la regla
		ReglaTop = document.regla.top;
		//Altura del contenido y del clip
		contentH = document.contentClip.document.content.clip.bottom;
		contentClipH = document.contentClip.clip.bottom;
	}
	else if(ns6){
		// Posiciones de la flecha superior
		ArribaIzquierda = parseInt(document.getElementById("up").style.left);
		ArribaTop = parseInt(document.getElementById("up").style.top);
		// Posiciones de la flecha inferior
		AbajoIzquierda = parseInt(document.getElementById("down").style.left);
		AbajoTop = parseInt(document.getElementById("down").style.top);
		// Posiciones de la barra de scroll
		ArrastraIzquierda = parseInt(document.getElementById("drag").style.left);
		ArrastraTop = parseInt(document.getElementById("drag").style.top);
		// Posicion y de la regla
		ReglaTop = parseInt(document.getElementById("regla").style.top);
		//Altura del contenido y del clip
		contentH = parseInt(document.getElementById("content").offsetHeight);
		contentClipH = parseInt(document.getElementById("contentClip").offsetHeight);
		document.getElementById("content").style.top = 0 + "px";
		
	}
	// Numero de pixel que desplaza la barra
	scrollLength = ((scrollH-dragH)/(contentH-contentClipH));
	// Captura de eventos
	
	document.onmousedown = E_RatonAbajo;
	document.onmousemove = E_RatonMueve;
	document.onmouseup = E_Arriba;
	if(n){
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
		window.onresize = RecargaPagina(); //Para volver a posicionar el scroll en el netscape
	}
}