// Browser detection
var dom = document.getElementById ? true:false;
var nn4 = document.layers ? true:false;
var ie4 = document.all ? true:false;
var scArray = new Array();

var mouseY; // Mouse Y position onclick
var mouseX; // Mouse X position onclick

var clickUp = false; // If click on up-arrow
var clickDown = false; // If click on down-arrow
var clickDrag = false; // If click on scrollbar
var clickAbove = false; // If click above scrollbar
var clickBelow = false; // If click below scrollbar

var timer = setTimeout("",500); // Repeat variable
var startY; // Keeps track of offset between mouse and span
var cNameAct=""; // Nombre de la capa q queremos scrolear


function createObj()
{
	this.cNameScr; // Nombre del Scroll
	this.cNameCscr; // Nombre de la Capa que queremos Scrolear
	this.cScrLength;
	
	this.cNameInt; // Nombre de la capa interior
	
	this.cNIntH;
	this.cNIntT;
	
	this.cNameCscrH;

	this.cNameSub;// Nombre de la Capa que contiene el botón de subir
	this.nSubirH; // Valor numérico del Height del botón de subir
	this.nSubirW; // Valor numérico del Width del botón de subir
	this.nSubirL;
	this.nSubirT;
	
	this.cNameBaj; // Nombre de la Capa q Contiene el boton de bajar
	this.nBajarH; // Valor numerico del Height del boton de bajar
	this.nBajarW; // Valor numerico del Width del boton de bajar
	this.nBajarL;
	this.nBajarT;
	
	this.cNameDrag;	// Nombre de la Capa q Contiene el boton del Drag
	this.nDragH;  // Valor numerico del Height del boton del drag
	this.nDragW;  // Valor numerico del Width del boton del drag
	this.nDragL;
	this.nDragT;
	
	this.cNameRuler; // Nombre de la Capa que Contiene el espacio de scroleo
	this.cNameRulerT;
	
	this.Velocidad; // Valor numerico de la velocidad al scrolear
	this.HScroll; // El Height del Scroll
	this.scrLenght
	
}
	
function CreateScroll(scrollN,capaN,subirN,bajarN,dragN,rulerN,velocidad,sHeight,subirH,subirW,bajarH,bajarW,dragH,dragW)
{
	var nArrayTam=scArray.length;
	
	scArray[nArrayTam] = new createObj();
	
	scArray[nArrayTam].cNameScr=scrollN;
	
	scArray[nArrayTam].cNameInt=capaN;
	scArray[nArrayTam].cScrLength=capaN+"Length"
	scArray[nArrayTam].cNameCscr=capaN+"Clip";
	scArray[nArrayTam].cNIntH=capaN+"H";
	scArray[nArrayTam].cNIntT=0;
	
	scArray[nArrayTam].cNameCscrH=capaN+"ClipH";

	
	scArray[nArrayTam].cNameSub=subirN;
	scArray[nArrayTam].nSubirH=subirH;
	scArray[nArrayTam].nSubirW=subirW;
	scArray[nArrayTam].nSubirL=subirN+"L";
	scArray[nArrayTam].nSubirT=subirN+"T";
	
	scArray[nArrayTam].cNameBaj=bajarN;
	scArray[nArrayTam].nBajarH=bajarH;
	scArray[nArrayTam].nBajarW=bajarW;
	scArray[nArrayTam].nBajarL=bajarN+"L";
	scArray[nArrayTam].nBajarT=bajarN+"T";
	
	scArray[nArrayTam].cNameDrag=dragN;
	scArray[nArrayTam].nDragH=dragH;
	scArray[nArrayTam].nDragW=dragW;
	scArray[nArrayTam].nDragL=dragN+"L";
	scArray[nArrayTam].nDragT=0;
	
	scArray[nArrayTam].cNameRuler=rulerN;
	scArray[nArrayTam].cNameRulerT=rulerN+"T";
	
	scArray[nArrayTam].Velocidad=velocidad;
	
	scArray[nArrayTam].HScroll=sHeight;
	scArray[nArrayTam].scrLenght=scrollN+"Lenght";
}

// Mousedown
function down(e){
	var opScroll=false;

	for(var y=0; y<scArray.length; y++)
	{
			if((document.layers && e.which!=1) || (document.all && event.button!=1)) return true; // Enables the right mousebutton
			getMouse(e);
			startY = (mouseY - scArray[y].nDragT);
			
			if(mouseX >= scArray[y].nSubirL && (mouseX <= (scArray[y].nSubirL + scArray[y].nSubirW)) && mouseY >= scArray[y].nSubirT && (mouseY <= (scArray[y].nSubirT + scArray[y].nSubirH))){
				cNameAct=scArray[y].cNameScr;
				clickUp = true;
				opScroll= true ;
				return scrollUp();
			}	

			else if(mouseX >= scArray[y].nBajarL && (mouseX <= (scArray[y].nBajarL + scArray[y].nBajarW)) && mouseY >= scArray[y].nBajarT && (mouseY < (scArray[y].nBajarT + scArray[y].nBajarH))){

				cNameAct=scArray[y].cNameScr;
				clickDown = true;
				opScroll= true ;
				return scrollDown();
			}
//Controlamos con el número 15 el tamaño de la zona de influencia del botón del tirador del scroll.			
			else if(mouseX >= scArray[y].nDragL && (mouseX <= (scArray[y].nDragL + scArray[y].nDragW)) && mouseY >= scArray[y].nDragT && (mouseY <= (scArray[y].nDragT + scArray[y].nDragH +15)))
			{
				cNameAct=scArray[y].cNameScr;
				clickDrag = true;
				opScroll= true ;
				return false;
			}
		
			else if(mouseX >= scArray[y].nDragL && (mouseX <= (scArray[y].nDragL + scArray[y].nDragW)) && mouseY >= scArray[y].cNameRulerT && (mouseY <= (scArray[y].cNameRulerT + scArray[y].HScroll))){
			// If click above drag
				if(mouseY < scArray[y].nDragT){
					cNameAct=scArray[y].cNameScr;
					clickAbove = true;
					clickUp = true;
					opScroll= true ;
					return scrollUp();
				}
				// Else click below drag
				else{
					cNameAct=scArray[y].cNameScr;
					clickBelow = true;
					clickDown = true;
					opScroll= true ;
					
					return scrollDown();
				}
			}
	}
	if(opScroll==false){return true;}
}

// Drag function
function move(e){

var opScroll=false;
	for(var y=0; y<scArray.length; y++)
	{
		if(cNameAct==scArray[y].cNameScr)
		{		
				if(clickDrag && scArray[y].cNIntH > scArray[y].cNameCscrH){				
					getMouse(e);
					scArray[y].nDragT = (mouseY - startY);
		
					if(scArray[y].nDragT < (scArray[y].cNameRulerT))
					{
						scArray[y].nDragT = scArray[y].cNameRulerT; 
						opScroll=true;
					}
							
					if (scArray[y].nDragT > (scArray[y].cNameRulerT + scArray[y].HScroll - scArray[y].nDragH))
					{
						scArray[y].nDragT = (scArray[y].cNameRulerT + scArray[y].HScroll - scArray[y].nDragH);
						opScroll=true;
					} 	
		
					scArray[y].cNIntT = ((scArray[y].nDragT - scArray[y].cNameRulerT)*(1/scArray[y].cScrLength));
					scArray[y].cNIntT = eval('-' +scArray[y].cNIntT);
		
					moveTo(scArray[y].cNameScr);
					
					// So ie-pc doesn't select gifs
					if(ie4)
					{
						opScroll=false;
						//return false; 
					}
				}
		}	
	}
	if(opScroll==false){return false;}
		
}

function up(){

	clearTimeout(timer);
	// Resetting variables
	cNameAct="";
	clickUp = false;
	clickDown = false;
	clickDrag = false;
	clickAbove = false;
	clickBelow = false;
	
	return true;
}

// Reads content layer top
function getT()
{
	for(var y=0; y<scArray.length; y++)
	{
		if(ie4)	
		{	
			scArray[y].cNIntT = document.all.item(scArray[y].cNameInt).style.pixelTop;
		}	
		else if(nn4)
		{	
			eval("scArray[y].cNIntT = document."+scArray[y].cNameCscr+".document."+scArray[y].cNameInt+".top");
		}	
		else if(dom)
		{
			eval("scArray[y].cNIntT = parseInt(document.getElementById("+scArray[y].cNameInt+").style.top)");
		}	
	}		
}

// Reads mouse X and Y coordinates
function getMouse(e){
	if(ie4){
		mouseY = event.clientY + document.body.scrollTop;
		mouseX = event.clientX + document.body.scrollLeft;
	}
	else if(nn4 || dom){
		mouseY = e.pageY;
		mouseX = e.pageX;
	}
}

// Moves the layer
function moveTo(cNombreScroll){
	for(var y=0; y<scArray.length; y++)
	{
	
		if(cNameAct==scArray[y].cNameScr)
		{		
			if(ie4){
				document.all.item(scArray[y].cNameInt).style.top = scArray[y].cNIntT;
				document.all.item(scArray[y].cNameRuler).style.top = scArray[y].nDragT;
				document.all.item(scArray[y].cNameDrag).style.top = scArray[y].nDragT;
			}
			else if(nn4){
				eval("document."+scArray[y].cNameCscr+".document."+scArray[y].cNameInt+".top = scArray[y].cNIntT");
				eval("document."+scArray[y].cNameRuler+".top = scArray[y].nDragT");
				eval("document."+scArray[y].cNameDrag+".top = scArray[y].nDragT");
			}
			else if(dom){
				eval("document.getElementById("+scArray[y].cNameInt+").style.top = scArray[y].cNIntT + 'px'");
				eval("document.getElementById("+scArray[y].cNameDrag+").style.top = scArray[y].nDragT + 'px'");
				eval("document.getElementById("+scArray[y].cNameRuler+").style.top = scArray[y].nDragT + 'px'");
			}
		}	
	}	
	
}

// Scrolls up
function scrollUp(){
var opScroll=false;	
	for(var y=0; y<scArray.length; y++)
	{
		if(cNameAct==scArray[y].cNameScr)
		{
			getT();
			if(clickAbove){
				if(scArray[y].nDragT <= (mouseY-(scArray[y].nDragH/2)))
					return up();
					opScroll=true;
			}
			
			if(clickUp){
				if(scArray[y].cNIntT < 0){	
					scArray[y].nDragT = scArray[y].nDragT - (scArray[y].Velocidad*scArray[y].cScrLength);
	
					if(scArray[y].nDragT < (scArray[y].cNameRulerT))
						scArray[y].nDragT = scArray[y].cNameRulerT;
						
					scArray[y].cNIntT = scArray[y].cNIntT + scArray[y].Velocidad;
					if(scArray[y].cNIntT > 0)
						scArray[y].cNIntT = 0;
					
					moveTo();
					opScroll=true;
//					timer = setTimeout("scrollUp()",25);
					
					//extension añadida para habilitar anclas
						if (arguments.length > 0){
							if (scArray[y].nDragT > arguments[0]){
								timer = setTimeout("scrollUp(" + arguments[0] + ")",1);						
							}
						}else
							timer = setTimeout("scrollUp()",1);					
				}
			}
		}
	}	
	if(opScroll==false){return false;}
}

// Scrolls down
function scrollDown(){
var opScroll=false;

	for(var y=0; y<scArray.length; y++)
	{
		//alert(cNameAct);
		if(cNameAct==scArray[y].cNameScr)
		{
			getT();
			if(clickBelow){
				if(scArray[y].nDragT >= (mouseY-(scArray[y].nDragH/2)))
				{
					opScroll=true;
					return up(); 
				}
			}
		
			if(clickDown){
				if(scArray[y].cNIntT > -(scArray[y].cNIntH - scArray[y].cNameCscrH)){			
					scArray[y].nDragT = scArray[y].nDragT + (scArray[y].Velocidad*scArray[y].cScrLength);
					
					if(scArray[y].nDragT > (scArray[y].cNameRulerT + scArray[y].HScroll - scArray[y].nDragH))
						{ scArray[y].nDragT = (scArray[y].cNameRulerT + scArray[y].HScroll - scArray[y].nDragH);}
					
					scArray[y].cNIntT = scArray[y].cNIntT - scArray[y].Velocidad;
					if(scArray[y].cNIntT < -(scArray[y].cNIntH - scArray[y].cNameCscrH))
						{ scArray[y].cNIntT = -(scArray[y].cNIntH - scArray[y].cNameCscrH); }

					moveTo();
					opScroll=true;
					
					//extension añadida para habilitar anclas
						if (arguments.length > 0){
							if (scArray[y].nDragT < arguments[0]){
								timer = setTimeout("scrollDown(" + arguments[0] + ")",10);						
							}
						}else
							timer = setTimeout("scrollDown()",10);													
				}
			}
		}
	}	
	if(opScroll==false){return false;}
}

// reloads page to position the layers again
function reloadPage(){location.reload();}

// Preload
function eventLoader(){

	for(var y=0; y<scArray.length; y++)
	{
			if(ie4){
				// Up-arrow X and Y variables
				eval ("scArray[y].nSubirL= document.all."+scArray[y].cNameSub+".style.pixelLeft");
				eval ("scArray[y].nSubirT= document.all."+scArray[y].cNameSub+".style.pixelTop");		

				// Down-arrow X and Y variables
				eval ("scArray[y].nBajarL= document.all."+scArray[y].cNameBaj+".style.pixelLeft");
				eval ("scArray[y].nBajarT= document.all."+scArray[y].cNameBaj+".style.pixelTop");
				
				// Scrollbar X and Y variables
				eval ("scArray[y].nDragL= document.all."+scArray[y].cNameDrag+".style.pixelLeft");
				eval ("scArray[y].nDragT= document.all."+scArray[y].cNameDrag+".style.pixelTop");	
				
				// Ruler Y variable
				eval ("scArray[y].cNameRulerT= document.all."+scArray[y].cNameRuler+".style.pixelTop");		
				
				// Height of content layer and clip layer
				
				eval ("scArray[y].cNIntH= parseInt(document.all."+scArray[y].cNameInt+".scrollHeight)");
				eval ("scArray[y].cNameCscrH= parseInt(document.all."+scArray[y].cNameCscr+".style.height)");
			}
			else if(nn4){
			
				// Up-arrow X and Y variables
				eval ("scArray[y].nSubirL= document." + scArray[y].cNameSub + ".left");
				eval ("scArray[y].nSubirT= document." + scArray[y].cNameSub + ".top");
						
				// Down-arrow X and Y variables
				eval ("scArray[y].nBajarL= document."+scArray[y].cNameBaj+".left");
				eval ("scArray[y].nBajarT= document."+scArray[y].cNameBaj+".top");		
				
				// Scrollbar X and Y variables
				eval ("scArray[y].nDragL= document."+scArray[y].cNameDrag+".left");
				eval ("scArray[y].nDragT= document."+scArray[y].cNameDrag+".top");		
				
				// Ruler Y variable
				eval ("scArray[y].cNameRulerT= document."+scArray[y].cNameRuler+".top");
				
				// Height of content layer and clip layer
				eval ("scArray[y].cNIntH= document."+scArray[y].cNameCscr+".document."+scArray[y].cNameInt+".clip.bottom");
				//alert(scArray[y].cNIntH= document.scArray[y].cNameCscr.document.scArray[y].cNameInt.clip.bottom)
				eval ("scArray[y].cNameCscrH= document."+scArray[y].cNameCscr+".clip.bottom");
			}
			else if(dom)
			{
				// Up-arrow X and Y variables
				eval ("scArray[y].nSubirL = parseInt(document.getElementById("+scArray[y].cNameSub+").style.left)");
				eval ("scArray[y].nSubirT= parseInt(document.getElementById("+scArray[y].cNameSub+").style.top)");
				
				// Down-arrow X and Y variables
				eval ("scArray[y].nBajarL= parseInt(document.getElementById("+scArray[y].cNameBaj+").style.left)");
				eval ("scArray[y].nBajarT= parseInt(document.getElementById("+scArray[y].cNameBaj+").style.top)");
				
				// Scrollbar X and Y variables
				eval ("scArray[y].nDragL= parseInt(document.getElementById("+scArray[y].cNameDrag+").style.left)");
				eval ("scArray[y].nDragT= parseInt(document.getElementById("+scArray[y].cNameDrag+").style.top)");
				
				// Ruler Y variable
				eval ("scArray[y].cNameRulerT= parseInt(document.getElementById("+scArray[y].cNameRuler+").style.top)");
				
				// Height of content layer and clip layer
				eval ("scArray[y].cNIntH= parseInt(document.getElementById("+scArray[y].cNameInt+").offsetHeight)");
				eval ("scArray[y].cNameCscrH= parseInt(document.getElementById("+scArray[y].cNameCscr+").offsetHeight)");
				
				eval("document.getElementById("+scArray[y].cNameInt+").style.top = 0 + 'px'");
				
			}
		scArray[y].cScrLength = ((scArray[y].HScroll-scArray[y].nDragH)/(scArray[y].cNIntH-scArray[y].cNameCscrH) );	
	}
	
}


