// JavaScript Document
var oSlider = new function(){
	this.iniciarEfecto = function(conf){
		var ef = new Slider(conf);		
	}
}

var Slider = function(conf){
	
	var asignarClick = function(indice,cuadro){
		AddEvent(cuadro,'click',function(){
			nextCont(indice+1,true);
		})
		
	}
	
	var nextCont = function(indice,forzar){

		if(!enMovimiento){
			intervaloTrans = clearInterval(intervaloTrans);
			enMovimiento = true;
			var desde = 0;
			var hasta = 0;
			var propiedad = '';
			
			if(oConf['aleatorio'] && !forzar){
				indice = obtenerRango();
				var siguiente = Ext.get(contGeneral.dom.childNodes[indice-1]);
			}
			else{
				if(!indice){
					var siguiente = Ext.get(contActual.dom.nextSibling);
					if(!siguiente){
						siguiente = Ext.get(contGeneral.dom.firstChild);
					}
				}
				else{
					var siguiente = Ext.get(contGeneral.dom.childNodes[indice-1]);
				}
			}
			if(oConf['desplazamiento'] == 'transparencia')siguiente.setOpacity(0);
			contActual.dom.style.visibility = 'visible';
			siguiente.dom.style.visibility = 'visible';
			
			contActual.dom.style.zIndex = 1;
			siguiente.dom.style.zIndex = 2;
			if(oConf['desplazamiento'] == 'izquierda'){
				siguiente.dom.style.marginLeft = (-ancho) + 'px';
				desde = -ancho;
				propiedad = 'marginLeft';
			}
			else if(oConf['desplazamiento'] == 'derecha'){
				siguiente.dom.style.marginLeft = (ancho) + 'px';
				desde = ancho;
				hasta = 0;
				propiedad = 'marginLeft';			
			}
			else if(oConf['desplazamiento'] == 'arriba'){
				siguiente.dom.style.marginTop = (-oConf['alto']) + 'px';
				desde = (-oConf['alto']);
				hasta = 0;
				propiedad = 'marginTop';			
			}
			else if(oConf['desplazamiento'] == 'abajo'){
				siguiente.dom.style.marginTop = (oConf['alto']) + 'px';
				desde = oConf['alto'];
				hasta = 0;
				propiedad = 'marginTop';			
			}
			else if(oConf['desplazamiento'] == 'ninguno'){
				siguiente.dom.style.zIndex = 1;
				contActual.dom.style.zIndex = 0;
				if(oConf['paso'] == 'numeracion' || oConf['paso'] == 'reproducir'){
					contCuadrosClick.childNodes[siguiente.dom.indice].className = 'on';
					contCuadrosClick.childNodes[contActual.dom.indice].className = '';
				}
				
				contActual = siguiente;
				enMovimiento = false;
				if(oConf['tipoPaso'] != 'manual')intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);				

			}
			else if(oConf['desplazamiento'] == 'transparencia'){
				siguiente.fadeIn({
				 callback : function(){
						siguiente.dom.style.zIndex = 1;
						contActual.dom.style.zIndex = 0;
						contActual = siguiente;				
						enMovimiento = false;
						if(oConf['tipoPaso'] != 'manual')intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);				
					 },duration:oConf['tiempoEfecto']
				});
				if(oConf['paso'] == 'numeracion' || oConf['paso'] == 'reproducir'){
					contCuadrosClick.childNodes[siguiente.dom.indice].className = 'on';
					contCuadrosClick.childNodes[contActual.dom.indice].className = '';
				}
				
			}
			
			
			
			if(propiedad != ''){
				if(oConf['paso'] == 'numeracion' || oConf['paso'] == 'reproducir'){
					contCuadrosClick.childNodes[siguiente.dom.indice].className = 'on';
					contCuadrosClick.childNodes[contActual.dom.indice].className = '';
				}
			}
			
			if(propiedad == 'marginLeft'){
				siguiente.animate(
					{marginLeft: {from: desde, to: hasta}},
					oConf['tiempoEfecto'], 
					function () {
						siguiente.dom.style.zIndex = 1;
						contActual.dom.style.zIndex = 0;
						contActual.dom.style.visibility = 'hidden';

						contActual = siguiente;
						enMovimiento = false;
						
						if(oConf['tipoPaso'] != 'manual')intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);
					
					},
					oConf['efecto']
				);
			}
			else if(propiedad == 'marginTop'){
				siguiente.animate(
					{marginTop: {from: desde, to: hasta}},
					oConf['tiempoEfecto'], 
					function () {
						siguiente.dom.style.zIndex = 1;
						contActual.dom.style.zIndex = 0;
						contActual.dom.style.visibility = 'hidden';	
						contActual = siguiente;
						enMovimiento = false;						
						if(oConf['tipoPaso'] != 'manual')intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);
					
					},
					oConf['efecto']
				);
			}		
		}
	}
	var obtenerRango = function(){
		var i,aleatorio,continuar = true;
		var indexAnt = -1;
		while(continuar){
			continuar = false;
			
			
			if(arrAleatorios.length == cantConts){
				indexAnt = arrAleatorios[arrAleatorios.length-1];
				arrAleatorios = new Array();
			}
			aleatorio = Math.floor(Math.random()*(rango_superior-(rango_inferior-1))) + rango_inferior;	
			for(i=0;i<arrAleatorios.length;i++){
				if(arrAleatorios[i] == aleatorio){
					continuar = true;
					break;
				}
			}
			if(aleatorio == indexAnt)continuar = true;
			if(!continuar)arrAleatorios.push(aleatorio)
			
		}
		
		return aleatorio;
	}
	var prevCont = function(){
		
		if(!enMovimiento){
			intervaloTrans = clearInterval(intervaloTrans);
			enMovimiento = true;
			var desde = 0;
			var hasta = 0;
			var propiedad = '';
			var anterior = Ext.get(contActual.dom.previousSibling);
			if(!anterior){
				anterior = Ext.get(contGeneral.dom.lastChild);
			}
			var i;
			for(i=0;i<cantConts;i++){
				contGeneral.dom.childNodes[i].style.visibility = 'hidden';
			}
			
			anterior.dom.style.zIndex = 1;
			contActual.dom.style.zIndex = 2;
			contActual.dom.style.visibility = 'visible';
			anterior.dom.style.visibility = 'visible';
			
			
			
			if(oConf['desplazamiento'] == 'izquierda'){
				desde = 0;
				hasta = -ancho;				
				propiedad = 'marginLeft';
			}
			else if(oConf['desplazamiento'] == 'derecha'){
				desde = 0;
				hasta = ancho;
				propiedad = 'marginLeft';			
			}
			else if(oConf['desplazamiento'] == 'arriba'){
				desde = 0;
				hasta = (-oConf['alto']);
				propiedad = 'marginTop';			
			}
			else if(oConf['desplazamiento'] == 'abajo'){
				hasta = (oConf['alto']);
				propiedad = 'marginTop';			
			}
			else if(oConf['desplazamiento'] == 'ninguno'){
				anterior.dom.style.zIndex = 1;
				contActual.dom.style.zIndex = 0;
				
				contActual = anterior;
				enMovimiento = false;
				if(oConf['tipoPaso'] != 'manual')intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);				
			}
			else if(oConf['desplazamiento'] == 'transparencia'){
				contActual.fadeOut({
								callback : function()
								{
								anterior.dom.style.zIndex = 1;
								contActual.dom.style.zIndex = 0;
								contActual.dom.style.visibility = 'visible';
								contActual = anterior;
								enMovimiento = false;
								if(oConf['tipoPaso'] != 'manual')intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);				
									
							},duration:oConf['tiempoEfecto']
						});
			}
			
			
			if(propiedad == 'marginLeft'){
				contActual.animate(
					{marginLeft: {from: desde, to: hasta}},
					oConf['tiempoEfecto'], 
					function () {
						anterior.dom.style.zIndex = 1;
						contActual.dom.style.zIndex = 0;
						contActual.dom.style.margin = 0 + 'px';
						contActual.dom.style.visibility = 'hidden';
						contActual = anterior;
						enMovimiento = false;
						if(oConf['tipoPaso'] != 'manual')intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);
						
					
					},
					oConf['efecto']
				);
			}
			else if(propiedad == 'marginTop'){
				contActual.animate(
					{marginTop: {from: desde, to: hasta}},
					oConf['tiempoEfecto'], 
					function () {
						anterior.dom.style.zIndex = 1;
						contActual.dom.style.zIndex = 0;
						contActual.dom.style.margin = 0 + 'px';
						contActual.dom.style.visibility = 'hidden';						
						contActual = anterior;
						enMovimiento = false;						
						if(oConf['tipoPaso'] != 'manual')intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);
					
					},
					oConf['efecto']
				);
			}		
		}		
		
	}
	var pausar = function(){
		if(contPausar.className == 'pausarSlider'){
			contPausar.className = 'playSlider';
			intervaloTrans = clearInterval(intervaloTrans);
		}
		else{
			contPausar.className = 'pausarSlider';
			intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);			
		}
	}
	

	var oConf = conf;
	if(!oConf['tiempoEfecto'])oConf['tiempoEfecto'] = 1;
	var indiceSlide = 0;
	var i;
	var intervaloTrans = 0;
	var enMovimiento = false;
	var contGeneral = Ext.get('contElemSlider' + oConf['indice']);
	contGeneral.dom.style.position = 'relative';
	var ancho = contGeneral.dom.offsetWidth;
	var elemTemp = null;
	var cantConts = contGeneral.dom.childNodes.length;
	var cuadroAnterior = null;
	if(cantConts > 0){
		var indice = 0;
		if(!Nav.esIE){
			var continuar = true;
			while(continuar){
				continuar = false;
				for(i=0;i<contGeneral.dom.childNodes.length;i++){
					if(!contGeneral.dom.childNodes[i].tagName){
						contGeneral.dom.removeChild(contGeneral.dom.childNodes[i]);	
						continuar = true;
					}
				}
			}
			cantConts = contGeneral.dom.childNodes.length;		
		}
		var indAct = 0;		
		if(oConf['aleatorio'] == 1){
			var rango_superior = 0;  
			var rango_inferior = cantConts + 1; 		
			var arrAleatorios = new Array();
			indAct = obtenerRango();
			indAct = indAct-1;
		}

		
		for(i=0;i<cantConts;i++){
			contGeneral.dom.childNodes[i].style.margin = '0px';	
			elemTemp = contGeneral.dom.childNodes[i];
			var divCont = document.createElement('div');
			contGeneral.dom.insertBefore(divCont,elemTemp);
			divCont.appendChild(elemTemp);
			if(Nav.esIE7)divCont.style.height = (oConf['alto'] + 1) + 'px';
			else divCont.style.height = (oConf['alto']) + 'px';
			divCont.style.overflowX = 'hidden';
			divCont.style.position = 'absolute';
			if(oConf['centrar'] == 'si')divCont.style.textAlign = 'center';
			divCont.indice = i;
			if(i == indAct){
				divCont.style.zIndex = 1;
			}
			else{
				divCont.style.zIndex = 0;
				divCont.style.visibility = 'hidden';				
			}
			if(oConf['scrollContenido'] != 'no')divCont.style.overflowY = 'auto';
			else divCont.style.overflowY = 'hidden';
			divCont.style.backgroundColor = '#FFFFFF';
			divCont.style.width = ancho + 'px';

		}
		var contActual = Ext.get(contGeneral.dom.childNodes[indAct]);		
		if(conf['paso'] == 'flechas'){
			var flechaAnt = $('sliderAnt' + oConf['indice']);				
			if(flechaAnt){
				var mitad = Math.round((oConf['alto'] - flechaAnt.offsetHeight)/2);
				flechaAnt.style.marginTop = (-mitad) - flechaAnt.offsetHeight + 'px';
				var flechaSig = $('sliderSig' + oConf['indice']);			
				flechaSig.style.marginTop = (-mitad) - flechaSig.offsetHeight + 'px';
				flechaSig.style.marginLeft = (contGeneral.dom.offsetWidth - flechaSig.offsetWidth) + 'px';
				AddEvent(flechaAnt,'click',function(){prevCont(false)});
				AddEvent(flechaSig,'click',function(){nextCont(false)});			
			}
		}
		else if(conf['paso'] == 'numeracion'){
			var contCuadrosClick = $('numeracionSlider' + oConf['indice']);
			if(contCuadrosClick){
				contCuadrosClick.style.marginLeft = (contGeneral.dom.offsetWidth - contCuadrosClick.offsetWidth) + 'px';
				for(i=0;i<contCuadrosClick.childNodes.length;i++){
					asignarClick(i,contCuadrosClick.childNodes[i]);
				}
				contCuadrosClick.childNodes[0].className = 'on';			
			}
		}
		else if(conf['paso'] == 'pausar'){
			var contPausar = $('pausarSlider' + oConf['indice']);
			if(contPausar){
				contPausar.style.display = 'block';
				contPausar.style.marginLeft = Math.round((contGeneral.dom.offsetWidth - contPausar.offsetWidth)/2) + 'px';
				contPausar.style.marginTop = -Math.round((contGeneral.dom.offsetHeight - contPausar.offsetHeight)/2) - contPausar.offsetHeight + 'px';
				contPausar.style.display = 'none';
				AddEvent(contGeneral.dom,'mouseover',function(){
					contPausar.style.display = 'block';
				})			
				AddEvent(contGeneral.dom,'mouseout',function(){
					contPausar.style.display = 'none';
				})			
				AddEvent(contPausar,'mouseover',function(){
					contPausar.style.display = 'block';
				})			
				AddEvent(contPausar,'mouseout',function(){
					contPausar.style.display = 'none';
				})			
				AddEvent(contPausar,'click',pausar);
			}
			
		}
		else{
			

		}
		if(oConf['tipoPaso'] != 'manual')intervaloTrans = setTimeout(function(){nextCont()},oConf['tiempo']);
	}

}
