//=========================================================
// Modificado para soportar IE5 y NS/Mozilla mejor. También se ha cambiado el csdigo para permitir scrollo vertical y horizontal
// No se posiciona correctamente en Mozilla bajo Win2000.
// Versión M - 21-02-2003-1
//========================================================
var flag_onclick = false;

var Scroller = {
	speed: 100,
	aniLen: 1000,
	minRes: 10,
	ie4: navigator.appName == "Microsoft Internet Explorer" && !document.getElementById,
	ns4: document.layers ? 1 : 0,
	dom: document.getElementById ? 1 : 0,
	mac: navigator.platform == "MacPPC",
	mo5: navigator.userAgent.indexOf("Gecko") != -1,
	dir:0,lastTime:0,aniTimer:0,dragActive:0,dragLastPos:0,dragStartOffset:0,
	startPos:0,startTime:0,accel:0,endPos:0,dist:0
}

Scroller.init = function(id, orientation, ruta_simbolos)
{
	with (this)
	{
		this.scrolldir = orientation;

		this.lyrFrame = getLyr(id, document);
		scrolldir == "Vert"?this.lyrScrollUp = getLyr("scrollUp", lyrFrame):this.lyrScrollLeft = getLyr("scrollLeft", lyrFrame);
		scrolldir == "Vert"?this.lyrScrollDn = getLyr("scrollDn", lyrFrame):this.lyrScrollRight = getLyr("scrollRight", lyrFrame);
		this.lyrContainer = getLyr("container", lyrFrame);
		this.lyrContent = getLyr("content", lyrContainer);
		this.lyrScrollbar = getLyr("scrollbar", lyrFrame);
		this.lyrThumb = getLyr("thumb", lyrScrollbar);
		scrolldir == "Vert"?this.lyrElevUp = getLyr("elevUp", lyrScrollbar):this.lyrElevLeft = getLyr("elevLeft", lyrScrollbar);
		scrolldir == "Vert"?this.lyrElevDn = getLyr("elevDn", lyrScrollbar):this.lyrElevRight = getLyr("elevRight", lyrScrollbar);
		scrolldir == "Vert"?this.imgPath = ruta_simbolos:this.imgPath = ruta_simbolos;

		this.imgThumb1 = ypImage(imgPath + "thumb1.gif");
		this.imgThumb2 = ypImage(imgPath + "thumb2.gif");
		
		if(scrolldir == "Vert")
		{
			this.imgUp1 = ypImage(imgPath + "scrollUp1.gif");
			this.imgUp2 = ypImage(imgPath + "scrollUp2.gif");
			this.imgDn1 = ypImage(imgPath + "scrollDn1.gif");
			this.imgDn2 = ypImage(imgPath + "scrollDn2.gif");
		}
		else
		{
			this.imgLeft1 = ypImage(imgPath + "scrollLeft1.gif");
			this.imgLeft2 = ypImage(imgPath + "scrollLeft2.gif");
			this.imgRight1 = ypImage(imgPath + "scrollRight1.gif");
			this.imgRight2 = ypImage(imgPath + "scrollRight2.gif");
		}
		
		// calcula algunos valores
		this.clipL = scrolldir == "Vert"?ns4?this.lyrContainer.clip.height:this.lyrContainer.offsetHeight:ns4?this.lyrContainer.clip.width:this.lyrContainer.offsetWidth;
		this.scrollbarL = scrolldir == "Vert"?ns4?this.lyrScrollbar.clip.height:this.lyrScrollbar.offsetHeight : ns4?this.lyrScrollbar.clip.width:this.lyrScrollbar.offsetWidth;
		this.thumbL = scrolldir == "Vert"? ns4?this.lyrThumb.clip.height:this.lyrThumb.offsetHeight : ns4?this.lyrThumb.clip.width:this.lyrThumb.offsetWidth;
		this.thumbMax = scrollbarL - thumbL;
		this.scrollTop = this.lyrScrollbar.s.top;
		this.scrollLeft = this.lyrScrollbar.s.left;
//		this.scrollTop = this.lyrScrollbar.s.top;
//		this.scrollLeft = this.lyrScrollbar.s.left;
		this.scrollTop = "";
		this.scrollLeft = "";
		this.docL	= scrolldir == "Vert"?Math.max(ns4 ? lyrContent.document.height : lyrContent.offsetHeight, clipL):Math.max(ns4 ? lyrContent.document.width : lyrContent.offsetWidth, clipL)
		this.scrollL = docL - clipL
		
		if (this.docL > clipL)
		{		
			lyrThumb.onmousedown = startDrag
			lyrThumb.onmouseover = function() { Scroller.toggleThumb(true) }
			lyrThumb.onmouseout  = function() { Scroller.toggleThumb(false) }
			lyrThumb.ondragstart = function() { return false; }
			
			if(scrolldir == "Vert")
			{
				lyrScrollDn.onmouseover = function() { Scroller.toggleButton("Dn", 2); Scroller.startScroll('+'); Scroller.speed = 50; return false }
				lyrScrollDn.onmousedown = function() { Scroller.toggleButton("Dn", 2); Scroller.startScroll('+'); if (flag_onclick) { Scroller.speed = 100; flag_onclick = false; } else { flag_onclick=true; Scroller.speed = 300; };  return false }
				lyrScrollDn.onmouseup = function() { Scroller.toggleButton("Dn", 2);  }
				lyrScrollDn.onmouseout = function() { Scroller.toggleButton("Dn", 1); Scroller.endScroll(); }
				lyrScrollUp.onmouseover = function() { Scroller.toggleButton("Up", 2); Scroller.startScroll('-'); Scroller.speed = 50; return false }
				lyrScrollUp.onmousedown = function() { Scroller.toggleButton("Up", 2); Scroller.startScroll('-'); if (flag_onclick) { Scroller.speed = 100; flag_onclick = false; } else { flag_onclick=true; Scroller.speed = 300; }; return false }
				lyrScrollUp.onmouseup = function() { Scroller.toggleButton("Up", 2);  }
				lyrScrollUp.onmouseout = function() { Scroller.toggleButton("Up", 1); Scroller.endScroll()}
			}
			else
			{
//				lyrScrollRight.onmouseover = function() { Scroller.toggleButton("Right", 2); }
//				lyrScrollRight.onmousedown = function() { Scroller.toggleButton("Right", 2); Scroller.startScroll('+'); Scroller.speed = 100; return false }
//				lyrScrollRight.onmouseup = function() { Scroller.toggleButton("Right", 2); Scroller.endScroll(); }
//				lyrScrollRight.onmouseout = function() { Scroller.toggleButton("Right", 1); }
//				lyrScrollLeft.onmouseover = function() { Scroller.toggleButton("Left", 2); }
//				lyrScrollLeft.onmousedown = function() { Scroller.toggleButton("Left", 2); Scroller.startScroll('-');Scroller.speed = 100; return false }
//				lyrScrollLeft.onmouseup = function() { Scroller.toggleButton("Left", 2); Scroller.endScroll() }
//				lyrScrollLeft.onmouseout = function() { Scroller.toggleButton("Left", 1);}

				lyrScrollRight.onmouseover = function() { Scroller.toggleButton("Right", 2); Scroller.startScroll('+'); Scroller.speed = 50; return false }
				lyrScrollRight.onmousedown = function() { Scroller.toggleButton("Right", 2); Scroller.startScroll('+'); if (flag_onclick) { Scroller.speed = 100; flag_onclick = false; } else { flag_onclick=true; Scroller.speed = 300; };  return false }
				lyrScrollRight.onmouseup = function() { Scroller.toggleButton("Right", 2);  }
				lyrScrollRight.onmouseout = function() { Scroller.toggleButton("Right", 1); Scroller.endScroll(); }
				lyrScrollLeft.onmouseover = function() { Scroller.toggleButton("Left", 2); Scroller.startScroll('-'); Scroller.speed = 50; return false }
				lyrScrollLeft.onmousedown = function() { Scroller.toggleButton("Left", 2); Scroller.startScroll('-'); if (flag_onclick) { Scroller.speed = 100; flag_onclick = false; } else { flag_onclick=true; Scroller.speed = 300; }; return false }
				lyrScrollLeft.onmouseup = function() { Scroller.toggleButton("Left", 2);  }
				lyrScrollLeft.onmouseout = function() { Scroller.toggleButton("Left", 1); Scroller.endScroll()}
			}
			
			// inicializa algunos parametros
			scrolldir == "Vert"?lyrThumb.s.top = 0 : lyrThumb.s.left = 0;
			
			// ns4
			if (document.layers) { 
				lyrThumb.captureEvents(Event.MOUSEDOWN)
				
				if(scrolldir == "Vert"){
					lyrElevDn.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE)
					lyrElevUp.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE)
					lyrScrollUp.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP)
					lyrScrollDn.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP)
				}else{
					lyrElevRight.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE)
					lyrElevLeft.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE)
					lyrScrollLeft.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP)
					lyrScrollRight.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP)
				}
			}
		} 
		else 
		{
			this.lyrScrollbar.s.visibility = 'hidden';
			this.scrolldir == "Vert"? this.lyrScrollUp.s.visibility = this.lyrScrollDn.s.visibility = 'hidden': this.lyrScrollLeft.s.visibility = this.lyrScrollRight.s.visibility = 'hidden';
		}
		this.loaded = true
	}
}

Scroller.startScroll = function(dir)
{
	if (this.aniTimer) window.clearTimeout(this.aniTimer)

	this.dir = dir
	this.lastTime = (new Date()).getTime() - this.minRes
	this.startPos = Scroller.scrolldir == "Vert"?this.scrollTop : this.scrollLeft;
	this.aniTimer = window.setTimeout("Scroller.scroll()", this.minRes)
}

Scroller.scroll = function() {
	this.aniTimer = window.setTimeout("Scroller.scroll()", this.minRes)
	var now	= (new Date()).getTime()
	var elapsed = now - this.lastTime
	
	var ny = Scroller.scrolldir == "Vert"?eval(this.scrollTop + this.dir + (elapsed * this.speed / 1000)):eval(this.scrollLeft + this.dir + (elapsed * this.speed / 1000));
	this.lastTime = now

	if (ny > this.scrollL && this.dir == "+" || ny < 0 && this.dir == "-") {
		this.endScroll()
		this.jumpTo(this.dir == "+" ? this.scrollL : 0)
	}
	else this.jumpTo(ny)
}

Scroller.endScroll = function()
{
	if (this.aniTimer) this.aniTimer = window.clearTimeout(this.aniTimer)
}

Scroller.startDrag = function(e)
{
	if (!e) e = window.event
	with (Scroller) {
		if (aniTimer) window.clearTimeout(aniTimer)
		var ey = scrolldir == "Vert"?e.pageY ? e.pageY : e.y:e.pageX ? e.pageX : e.x;
		dragLastPos = ey
		dragStartOffset = scrolldir == "Vert"?ey - parseInt(lyrThumb.s.top):ey - parseInt(lyrThumb.s.left);
		dragActive = true
		if (ns4) window.document.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP)
		window.document.onmousemove = doDrag
		window.document.onmouseup = stopDrag
	}
	return false
}

Scroller.doDrag = function(e)
{
	if (!e) e = window.event
	var s  = Scroller
	var ey = s.scrolldir == "Vert"?(e.pageY ? e.pageY : e.y):(e.pageX ? e.pageX : e.x);
	var dy = ey - s.dragLastPos
	var ny = s.scrolldir == "Vert"?parseInt(Scroller.lyrThumb.s.top) + dy : parseInt(Scroller.lyrThumb.s.left) + dy;
 
	if (ny >= s.thumbMax) s.dragLastPos = s.thumbMax + s.dragStartOffset
	else if (ny < 0) s.dragLastPos = s.dragStartOffset
	else s.dragLastPos = ey
	ny = Math.min(Math.max(ny, 0), s.thumbMax)

	s.jumpTo(ny * s.scrollL / s.thumbMax)
	return false;
}

Scroller.stopDrag = function()
{
	Scroller.dragActive = false
	Scroller.toggleThumb(false)
	if (Scroller.ns4) window.document.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP)
	window.document.onmousemove = null
	window.document.onmouseup   = null
}
 
Scroller.slideTo = function(e)
{
	if (!e) e = window.event
	var ey = Scroller.scrolldir == "Vert"?e.offsetY ? e.offsetY : e.layerY : e.offsetX ? e.offsetX : e.layerX;
	if (typeof ey == "undefined") ey = 0;
	
	var ny = Scroller.scrolldir == "Vert"?(this.id == "elevDn") ? ey - Scroller.thumbL : ey : (this.id == "elevRight") ? ey - Scroller.thumbL : ey;
	ny += Scroller.scrolldir == "Vert"?this.s.top == "" ? 0 : parseInt(this.s.top) : this.s.left == "" ? 0 : parseInt(this.s.left);
	ny *= Scroller.scrollL / Scroller.thumbMax;
	ny = Math.min(ny, Scroller.scrollL);

	with (Scroller)
	{
		if (aniTimer) aniTimer = window.clearInterval(aniTimer)
		startTime = (new Date()).getTime()
		startPos = scrolldir == "Vert"? scrollTop : scrollLeft;
		endPos = ny
		dist = endPos - startPos
		accel = dist / 1000 / 1000
		
		aniTimer = window.setInterval("Scroller.slide()", 10)
	}
}

Scroller.slide = function()
{
	with (this)
	{
		var now = (new Date()).getTime()
		var elapsed = now - startTime
		if (elapsed > 1000) endScroll()
		else
		{
			var t = 1000 - elapsed
			var ny = endPos - t * t * accel
			jumpTo(ny)
		}
	}
}

Scroller.jumpTo = function(ny)
{
	var thumbPos = ny * this.thumbMax / this.scrollL ;
		
	if(this.scrolldir == "Vert")
	{
		this.lyrElevUp[document.layers ? "clip" : "style"].height = thumbPos;
		this.lyrElevDn[document.layers ? "clip" : "style"].height = this.scrollbarL - thumbPos + 1;
		this.lyrElevDn.s.top = thumbPos ;
		this.lyrThumb.s.top = thumbPos ;
		this.lyrContent.s.top = -ny ;
		this.scrollTop = ny ;
//		this.lyrThumb.s.left = Math.round(30 - ny * (30/this.scrollL));
		this.lyrThumb.s.left = 0;

	}
	else
	{
		this.lyrElevLeft[document.layers ? "clip" : "style"].width = thumbPos;
		this.lyrElevRight[document.layers ? "clip" : "style"].width = this.scrollbarL - thumbPos + 1;
		this.lyrElevRight.s.left = thumbPos;
		this.lyrThumb.s.left = thumbPos;
		this.lyrContent.s.left = -ny;
		this.scrollLeft = ny;
	}
}

Scroller.toggleThumb = function(bOn)
{
	var img = this.getFirstImage(this.lyrThumb)
	img.src = !bOn && !this.dragActive ? this.imgThumb1.src : this.imgThumb2.src
}

Scroller.toggleElev = function(lyr, iState)
{
	with (this)
	{
		var img = eval("imgElevBack" + iState)
		if (!dragActive && !ns4) lyr.s.backgroundImage = "url("+img.src+")"
	}
}

Scroller.toggleButton = function(suffix, iState)
{
	var lyr = eval("Scroller.lyrScroll" + suffix)
	var img = this.getFirstImage(lyr)
	img.src = Scroller.imgPath+"scroll"+suffix+iState+".gif"
}

Scroller.getLyr = function(sLyrId, oNestRef)
{
	var o;
	if(document.getElementById) o = document.getElementById(sLyrId);
	else if (document.all) o = oNestRef.all[sLyrId];
	else if (document.layers) o = oNestRef.layers[sLyrId];
	document.layers ? o.s = o : o.s = o.style
	return o
}

Scroller.getFirstImage = function(lyr)
{
	return document.layers ? lyr.document.images[0] : document.all ? lyr.all.tags("IMG")[0] : lyr.getElementsByTagName("IMG")[0]
}

function ypImage(s)
{
	var oImg  = new Image()
	oImg.src = s
	return oImg
}


