function Slider()
{
	
	this.enDesplazamiento = false;
	this.posYMouse = 0;
	this.posYMarker = 0;
	this.marcadorDesplazamiento;
	this.pistaMarcador;
	this.contenedorSL;
	this.contenidoSL;
	this.botonAbajo;
	this.botonArriba;
	this.idTimeOut = -1;
	
	this.CrearSliderVertical = CrearSliderVertical;
	this.wheelNonIE = wheelNonIE;
	this.wheelIE = wheelIE;
	this.muDown = muDown;
	this.mdDown = mdDown;
	this.muUp = muUp;
	this.mdUp = mdUp;
	this.desplazarScroll = desplazarScroll;
	this.recalcularPosicion = recalcularPosicion;
	this.mDown = mDown;
	this.deselect = deselect;
	this.mUp = mUp;
	this.mmoveSlider = mmoveSlider;
	
	if(!document.Sliders)
		document.Sliders = new Array();
	
	if(!document.SliderCount)
		document.SliderCount = 1;
	else
		document.SliderCount++;
		
	document.Sliders[document.SliderCount - 1] = this;
		
}

function CrearSliderVertical(elementoBotonArriba, elementoBbotonAbajo, elementoSlider, contenedorElementoSlider, contenidoDesplazar, contenedorContenido)
{


	this.botonArriba = document.getElementById(elementoBotonArriba);
	this.botonAbajo = document.getElementById(elementoBbotonAbajo);
	this.marcadorDesplazamiento = document.getElementById(elementoSlider);
	this.pistaMarcador = document.getElementById(contenedorElementoSlider);
	this.contenedorSL = document.getElementById(contenedorContenido);
	this.contenidoSL = document.getElementById(contenidoDesplazar);
	
	this.botonArriba.sliderObject = this;
	this.botonAbajo.sliderObject = this;
	this.marcadorDesplazamiento.sliderObject = this;
	this.pistaMarcador.sliderObject = this;
	this.contenedorSL.sliderObject = this;
	this.contenidoSL.sliderObject = this;
	
	this.marcadorDesplazamiento.style.position = "relative";
	this.contenidoSL.style.position = "relative";
	this.contenedorSL.style.position = "relative";
	
	this.marcadorDesplazamiento.onmousedown = this.mDown;
	this.marcadorDesplazamiento.onmousemove = document.onmousemove = this.mmoveSlider;
	this.marcadorDesplazamiento.onmouseup = document.onmouseup = this.mUp;
	
	window.onresize = this.recalcularPosicion;
	
	this.botonArriba.onmousedown = this.mdUp;
	this.botonArriba.onmouseup = this.muUp;
	
	this.botonAbajo.onmousedown = this.mdDown;
	this.botonAbajo.onmouseup = this.muDown;
	
	if(window.addEventListener)
	{
		this.pistaMarcador.addEventListener('DOMMouseScroll', this.wheelNonIE, false);
		this.botonArriba.addEventListener('DOMMouseScroll', this.wheelNonIE, false);
		this.botonAbajo.addEventListener('DOMMouseScroll', this.wheelNonIE, false);
		this.contenedorSL.addEventListener('DOMMouseScroll', this.wheelNonIE, false);

	}
	else if(document.attachEvent)
	{
	
		this.pistaMarcador.attachEvent('onmousewheel', this.wheelIE);
		this.botonArriba.attachEvent('onmousewheel',this.wheelIE);
		this.botonAbajo.attachEvent('onmousewheel', this.wheelIE);
		this.contenedorSL.attachEvent('onmousewheel', this.wheelIE);		
	
	}
	
}

function wheelNonIE(event)
{

	if(this.toString() != "[object CustomSlider]")
	{

		if(!this.sliderObject)
			return false;

		var sliderObject = this.sliderObject;
		sliderObject.wheelNonIE(event);
		return false;
				
	}

	var delta = event.detail/3;
	delta *= (this.pistaMarcador.offsetHeight - this.marcadorDesplazamiento.offsetHeight - 2) / 40;
	
	this.desplazarScroll(delta);
	
	event.stopPropagation();
    	event.preventDefault();
    	event.cancelBubble = true;
    
	return false;


}

function wheelIE()
{

	if(this.toString() != "[object CustomSlider]")
	{
	
		var parent = window.event.srcElement;
		
		while(parent)
		{
		
			if(parent.sliderObject)
			{
			
				var sliderObject = parent.sliderObject;
				sliderObject.wheelIE();
				return;
			
			}
			else
				parent = parent.parentNode;
		
		}

	}

	
	var event = window.event;
	var delta = -event.wheelDelta/120;

	
	delta *= (this.pistaMarcador.offsetHeight - this.marcadorDesplazamiento.offsetHeight - 2) / 40;
	
	this.desplazarScroll(delta);
	
	event.returnValue = false;
    	event.cancelBubble = true;
    
	return false;


}

function muDown()
{
	
	if(this.toString() != "[object CustomSlider]")
	{
		
		if(!this.sliderObject)
			return;
			
		var sliderObject = this.sliderObject;
		sliderObject.muDown();
		return;
		
	}
	
	if(this.idTimeOut != -1)
		clearTimeout(this.idTimeOut);
	
	this.idTimeOut = -1;
	deselect();
	
}

function mdDown()
{

	if(this.toString() != "[object CustomSlider]")
	{
		if(!this.sliderObject)
			return;
			
		var sliderObject = this.sliderObject;
		sliderObject.mdDown();
		return;
		
	}

	this.posYMarker = parseInt(this.marcadorDesplazamiento.style.top.replace("px", ""));
    	this.posYMarker = isNaN(this.posYMarker) ? 0 : this.posYMarker;
	
	this.desplazarScroll((this.pistaMarcador.offsetHeight - this.marcadorDesplazamiento.offsetHeight - 2) / 20);
	
	this.idTimeOut = setTimeout(function(thisObj) { thisObj.mdDown(); }, 100, this);
}

function muUp()
{

	if(this.toString() != "[object CustomSlider]")
	{
	
		if(!this.sliderObject)
			return;
			
		var sliderObject = this.sliderObject;
		sliderObject.muUp();
		return;
		
	}

	if(this.idTimeOut != -1)
		clearTimeout(this.idTimeOut);
	
	this.idTimeOut = -1;
	deselect();

}

function mdUp()
{

	if(this.toString() != "[object CustomSlider]")
	{
		if(!this.sliderObject)
			return;
			
		var sliderObject = this.sliderObject;
		sliderObject.mdUp();
		return;
		
	}

	this.posYMarker = parseInt(this.marcadorDesplazamiento.style.top.replace("px", ""));
    	this.posYMarker = isNaN(this.posYMarker) ? 0 : this.posYMarker;
	
	this.desplazarScroll(-((this.pistaMarcador.offsetHeight - this.marcadorDesplazamiento.offsetHeight - 2) / 20));
	
	this.idTimeOut = setTimeout(function(thisObj) { thisObj.mdUp(); }, 100, this);
}

function desplazarScroll(desplazamiento)
{

	this.posYMarker += desplazamiento;

	if (this.posYMarker < 0)
		this.posYMarker = 0;

	var topBottom = this.pistaMarcador.offsetHeight - this.marcadorDesplazamiento.offsetHeight - 2;

	if (this.posYMarker > topBottom)
		this.posYMarker = topBottom;

	this.marcadorDesplazamiento.style.top = this.posYMarker + "px";

	var pctDesp = 100 / topBottom * this.posYMarker;

	topBottom = this.contenedorSL.offsetHeight - this.contenidoSL.offsetHeight;

	if (topBottom >= 0)
		this.contenidoSL.style.top = "0px";
	else
		this.contenidoSL.style.top = Math.round(topBottom / 100 * pctDesp) + "px";

}

function recalcularPosicion()
{
	
	if(this.toString() != "[object CustomSlider]")
	{

		for(buc = 0; buc < document.SliderCount; buc++)
		{
			
			var sliderObject = document.Sliders[buc];
			sliderObject.mmoveSlider(e);
			
		}
		
		return;
		
	}
	
	var topBottom = this.contenedorSL.offsetHeight - this.contenidoSL.offsetHeight;
	var posY = parseInt(this.contenidoSL.style.top.replace("px", ""));
	posY = isNaN(posY) ? 0 : posY;
	
	if(topBottom < 0 && posY < topBottom)
		posY = topBottom;
		
	this.contenidoSL.style.top = posY + "px";
	
	var pPos = posY / topBottom;
	
	topBottom = this.pistaMarcador.offsetHeight - this.marcadorDesplazamiento.offsetHeight - 2;
	
	this.marcadorDesplazamiento.style.top = Math.round(topBottom * pPos) + "px";

}

function mDown(e) 
{
	
	if(this.toString() != "[object CustomSlider]")
	{
		if(!this.sliderObject)
			return;
			
		var sliderObject = this.sliderObject;
		sliderObject.mDown(e);
		return;
		
	}
	
	this.deselect();
	
	if(typeof(event) != 'undefined')
		e = event;
	
    this.posYMouse = e.screenY;
    this.posYMarker = parseInt(this.marcadorDesplazamiento.style.top.replace("px", ""));
    this.posYMarker = isNaN(this.posYMarker) ? 0 : this.posYMarker;
    this.enDesplazamiento = true;
}

function deselect () 
{

  if (document.selection)
    document.selection.empty();
  else if (window.getSelection)
    window.getSelection().removeAllRanges();
}


function mUp() 
{

	if(this.toString() != "[object CustomSlider]")
	{

		for(buc = 0; buc < document.SliderCount; buc++)
		{

			var sliderObject = document.Sliders[buc];
			sliderObject.mUp();

		}

		return;

	}
	
    this.enDesplazamiento = false;
}

function mmoveSlider(e) {

	if(this.toString() != "[object CustomSlider]")
	{

		for(buc = 0; buc < document.SliderCount; buc++)
		{
			
			var sliderObject = document.Sliders[buc];
			sliderObject.mmoveSlider(e);
			
		}
		
		return;
		
	}
	
    if (this.enDesplazamiento) 
    {

		deselect();
	
		if(typeof(event) != 'undefined')
			e = event;

        var desp = e.screenY - this.posYMouse;
        this.posYMarker += desp;
        this.posYMouse = e.screenY;

        if (this.posYMarker < 0)
            this.posYMarker = 0;

        var topBottom = this.pistaMarcador.offsetHeight - this.marcadorDesplazamiento.offsetHeight - 2;

        if (this.posYMarker > topBottom)
            this.posYMarker = topBottom;

        this.marcadorDesplazamiento.style.top = this.posYMarker + "px";

        var pctDesp = 100 / topBottom * this.posYMarker;

        topBottom = this.contenedorSL.offsetHeight - this.contenidoSL.offsetHeight;

        if (topBottom >= 0)
            this.contenidoSL.style.top = "0px";
        else
            this.contenidoSL.style.top = Math.round(topBottom / 100 * pctDesp) + "px";

    }
    else
    {

		if(this.idTimeOut != -1)
		{
			clearTimeout(this.idTimeOut);		
			this.idTimeOut = -1;
		}

	}

}

Slider.prototype.toString =
function(){
	return "[object CustomSlider]";
}
