var guiatv_running = false;
var tv_programas_running = false;
var deportes_running = false;
var smoothInterval;
var clicked = false;
var dragging = false;
var dragX = 0;
var dragY = 0;
var viewOffset = 0;
var maxWidth = 0;
var viewPortSize = 0;
var viewPortXi = 0;
var viewPortYi = 0;
var menu_inicial = 0;
var flotada_inicial = 'iflotadas';


function SmoothMovement(position, target, velocity)
{
  position = Math.round(position);
  target   = Math.round(target);
  velocity = (velocity ? Math.round(velocity) : 0);

  this.updatePosition = function(){
    position += velocity;
    if (velocity < 0){
      if (position - velocity * (velocity  - 1) / 2 < target){
        velocity++;
      }else if (position - (velocity - 1) * (velocity - 2) / 2 >= target){
        velocity--;
      }
    }else{
      if (position + velocity * (velocity + 1) / 2 > target){
        velocity--;
      }else if (position + (velocity + 1) * (velocity + 2) / 2 <= target){
        velocity++;
      }
    }
    return position;
  }
  
  this.changeTarget = function(newTarget){
    target = Math.round(newTarget);
  }
  
  this.getPosition = function(){
    return position;
  }

  this.getVelocity = function(){
    return velocity;
  }
  
  this.hasStopped = function(){
    return (position == target && velocity == 0);
  }
}

function buscar(termino)
{
	var offsetAmover = null;
	
	//console.log(termino);
	var aux = $$('input.guiatv-busqueda');
	for (i=0; i<aux.length; i++)
	{
		nombre = aux[i].name;
		//console.log(nombre);
		if (aux[i].name.search(termino.toLowerCase()) != -1)
		{
			if (offsetAmover == null)
			{
				offsetAmover = -(aux[i].value);
				ocultarBuscador();
				break;
			}
			
			el = aux[i].ancestors();
			el[0].style['color'] = '#FF0000';
		}
	}
	aMover = offsetAmover - viewOffset;
	movelo(aMover, 50);
}

function localizaIdPrograma()
{
	//console.log('XYi: ('+viewPortXi+', '+viewPortYi+')');
	//console.log('Px: '+pointerX+', Py: '+pointerY);
	//console.log('viewOffset: '+viewOffset);
	
	var coordX = Math.abs(viewOffset) + pointerX;
	var coordY = pointerY;
	var dia = Math.ceil(coordY/altoBarraProgramas);
	//console.log('coordX: '+coordX+', coordY: '+coordY+', dia: '+dia);
	
	for (i=0; i<coords_dias[dia].length; i++)
	{
		if ((coords_dias[dia][i] <= coordX) && (coordX <= coords_dias[dia][i+1]))
		{
			return ids_dias[dia][i];
		}
	}
}

function cargaPrograma(idPrograma)
{
	if (!idPrograma || (idPrograma == '')) return;
	
	new Ajax.Request(urlGuiaShow+idPrograma, {
		method: 'get',
		encoding: 'utf-8',
		onSuccess: function(transport) {
			var response = transport.responseText;
			//alert(response);
			
			if (response.substr(0, 4) == 'URL-')
			{
				//location.href = response.substr(4);
				window.open(response.substr(4), '_blank');
			}
			else
			{
				$(nombreDivFlotante+'-contenido').innerHTML = response;
				mostrarFlotante();
			}
		}
	});
}

function moveloPiveX(diffX)
{
	viewOffsetEnd = Math.abs(viewOffset) + viewPortSize;
	viewOffset += diffX;
	
	var aux = $$('div.timeline-band-layer');
	for (i=0; i<aux.length; i++)
	{
		if (diffX > 0)
		{
			if (viewOffset > 0)
				viewOffset = 0;

			aux[i].style.left = viewOffset+"px";
		}
		else if (diffX < 0)
		{
			if (viewOffsetEnd > maxWidth)
				viewOffset = -(maxWidth - viewPortSize) -5;
			
			aux[i].style.left = viewOffset+"px";
		}
	}
	//console.log(viewOffset);
}

function movelo(cuanto, vel_inicial)
{
	var movimiento = new SmoothMovement(viewOffset, viewOffset+cuanto);
	//console.log(viewOffset+' > '+(viewOffset+cuanto));
	
	/*clearInterval(smoothInterval);
	smoothInterval = setInterval(function ()
	{
		if (!movimiento.hasStopped())
		{
			x1 = movimiento.getPosition();
			movimiento.updatePosition();
			x2 = movimiento.getPosition();
			
			moveloPiveX(x2-x1);
		}
	else
		clearInterval(smoothInterval);
	}, 5);*/
	
	var pos_final = viewOffset+cuanto;
	var velocidad = 50;
	if (cuanto < 0)
		velocidad = -velocidad;
	//console.log('Vel: '+velocidad);
	
	clearInterval(smoothInterval);
	smoothInterval = setInterval(function ()
	{
		if ((velocidad > 0) && ((viewOffset+velocidad) < pos_final))
			moveloPiveX(velocidad);
		else if ((velocidad < 0) && ((viewOffset+velocidad) > pos_final))
			moveloPiveX(velocidad);
	else
		clearInterval(smoothInterval);
	}, 1);
}

function mouseDownHandler(event)
{
	var element = event.element();

	clearInterval(smoothInterval);
	
	clicked = true;

	dragX = event.clientX;
	dragY = event.clientY;
}

function mouseUpHandler(event)
{
	var element = event.element();

	clicked = false;
	
	//$('parche').focus();
}

function mouseMoveHandler(event)
{
	var element = event.element();
	
	if (clicked)
	{
		dragging = true;

		var diffX = event.clientX - dragX;
		var diffY = event.clientY - dragY;

		dragX = event.clientX;
		dragY = event.clientY;

		moveloPiveX(diffX);
	}
}

function mouseOutHandler(event)
{
	var element = event.element();
	
	clicked = false;
	
	//$('parche').focus();
}

function mouseClickHandler(event)
{
	var element = event.element();
	//console.log(element.id);
	
	if (!dragging)
	{
		//[offsetX, offsetY] = document.viewport.getScrollOffsets(); // en el explorer esto no va
		var aux = document.viewport.getScrollOffsets();
		offsetX = aux[0];
		offsetY = aux[1];
		pointerX = event.clientX-viewPortXi-anchoBarraDias+offsetX;
		pointerY = event.clientY-viewPortYi-anchoBarraHoras+offsetY;

		//console.log('XYi: ('+viewPortXi+', '+viewPortYi+')');
		//console.log('Px: '+pointerX+', Py: '+pointerY);		
		
		var idPrograma = localizaIdPrograma();
		//console.log('idPrograma: '+idPrograma);
		cargaPrograma(idPrograma);
	}
	dragging = false;
}

function documentResizeHandler()
{
	//[viewPortXi, viewPortYi] = $(nombreDivContenedor).cumulativeOffset(); // en el explorer esto no va
	var aux = $(nombreDivContenedor).cumulativeOffset();
	viewPortXi = aux[0];
	viewPortYi = aux[1];
}

function mostrarFlotante()
{
	$(nombreDivScroller).stopObserving('mousedown', mouseDownHandler);
	$(nombreDivScroller).stopObserving('mouseup', mouseUpHandler);
	$(nombreDivScroller).stopObserving('mousemove', mouseMoveHandler);
	$(nombreDivScroller).stopObserving('mouseout', mouseOutHandler);

	$(nombreDivFlotante).style.display='';
}

function ocultarFlotante()
{
	$(nombreDivFlotante).style.display='none';
	
	$(nombreDivScroller).observe('mousedown', mouseDownHandler);
	$(nombreDivScroller).observe('mouseup', mouseUpHandler);
	$(nombreDivScroller).observe('mousemove', mouseMoveHandler);
	$(nombreDivScroller).observe('mouseout', mouseOutHandler);
}

function mostrarBuscador()
{
	$(nombreDivBuscador).style.display='';
}

function ocultarBuscador()
{
	$(nombreDivBuscador).style.display='none';
}

function guiatv_init()
{	
	var aux = $$('li.calculadores');
	for (i=0; i<aux.length; i++)
	{
		//if((aux[i]))
			maxWidth += aux[i].getWidth();
	}
	//console.log(maxWidth);
	viewPortSize = $(nombreDivContenedor).getWidth();
	//[viewPortXi, viewPortYi] = $(nombreDivContenedor).cumulativeOffset(); // en el explorer esto no va
	aux = $(nombreDivContenedor).cumulativeOffset();
	viewPortXi = aux[0];
	viewPortYi = aux[1];
	
	$('item02_a').observe('click', menuHandler);
	guiatv_running = true;
}

function tv_programs_init()
{
	$('item03_a').observe('click', menuHandler);
	tv_programas_running = true;
}

function deportes_init()
{
	
	$('item04_a').observe('click', function (){
			if(!urlLocationDeportes)
				urlLocationDeportes='http://www.lasextadeportes.com/';
			window.location.href=urlLocationDeportes;
			}
		);
	deportes_running = true;
}

function muestra_guiatv()
{
	$(nombreDivContenedor).style.visibility = 'visible';
	if ($('featuredContent'))
		$('featuredContent').style.visibility = 'hidden';
	
	if ($(nombreDivScroller))
	{
		$(nombreDivScroller).observe('mousedown', mouseDownHandler);
		$(nombreDivScroller).observe('mouseup', mouseUpHandler);
		$(nombreDivScroller).observe('mousemove', mouseMoveHandler);
		$(nombreDivScroller).observe('mouseout', mouseOutHandler);
		$(nombreDivScroller).observe('click', mouseClickHandler);
	}
	
	if ($('guiatv_cerrar'))
		$('guiatv_cerrar').observe('click', menuHandler);
}

function oculta_guiatv()
{
	if ($(nombreDivScroller))
	{
		$(nombreDivScroller).stopObserving('mousedown', mouseDownHandler);
		$(nombreDivScroller).stopObserving('mouseup', mouseUpHandler);
		$(nombreDivScroller).stopObserving('mousemove', mouseMoveHandler);
		$(nombreDivScroller).stopObserving('mouseout', mouseOutHandler);
		$(nombreDivScroller).stopObserving('click', mouseClickHandler);
	}
	
	if ($('guiatv_cerrar'))
		$('guiatv_cerrar').stopObserving('click', menuHandler);
	
	if ($('featuredContent'))
		$('featuredContent').style.visibility = 'visible';
	$(nombreDivContenedor).style.visibility = 'hidden';
}

function muestra_tv_programs()
{
	$(nombreDivContenedor2).style.visibility = 'visible';
	if ($('featuredContent'))
		$('featuredContent').style.visibility = 'hidden';
	
	if ($('tv_cerrar_sup'))
		$('tv_cerrar_sup').observe('click', menuHandler);
	
	if ($('tv_cerrar_inf'))
		$('tv_cerrar_inf').observe('click', menuHandler);
}

function oculta_tv_programs()
{
	if ($('tv_cerrar_sup'))
		$('tv_cerrar_sup').stopObserving('click', menuHandler);
	
	if ($('tv_cerrar_inf'))
		$('tv_cerrar_inf').stopObserving('click', menuHandler);
	
	if ($('featuredContent'))
		$('featuredContent').style.visibility = 'visible';
	$(nombreDivContenedor2).style.visibility = 'hidden';
}

function muestra_deportes()
{
	$(nombreDivContenedor3).style.visibility = 'visible';
	
	if ($('deportes_cerrar_sup'))
		$('deportes_cerrar_sup').observe('click', menuHandler);
	
	if ($('deportes_cerrar_inf'))
		$('deportes_cerrar_inf').observe('click', menuHandler);
}

function oculta_deportes()
{
	if ($('deportes_cerrar_sup'))
		$('deportes_cerrar_sup').stopObserving('click', menuHandler);
	
	if ($('deportes_cerrar_inf'))
		$('deportes_cerrar_inf').stopObserving('click', menuHandler);

	$(nombreDivContenedor3).style.visibility = 'hidden';
}

function cambia_menu(i)
{
	var aux = $('sextaNavWhite').getElementsByTagName('a');
	for (j=0; j<aux.length; j++)
	{
		$('item0'+(j+1)+'_a').className = '';
	}
	
	if (i > 0)
	{
		$('bgprogramas').className = 'iflotadas bg0'+i;
		$('item0'+i+'_a').className = 'activo';
	}
	else
		$('bgprogramas').className = flotada_inicial;
}

function menuHandler(event)
{
	var element = event.element();
	
	if ((element.id == 'item02_a') || (element.id == 'guiatv_cerrar'))
	{
		if ($('bgprogramas').className == 'iflotadas bg02')
		{
			oculta_guiatv();
			cambia_menu(menu_inicial);
		}
		else
		{
			cambia_menu(2);
			oculta_tv_programs();
			oculta_deportes();
			muestra_guiatv();
		}
	}
	if ((element.id == 'item03_a') || 
			(element.id == 'tv_cerrar_sup') || 
			(element.id == 'tv_cerrar_inf') || 
			(element.id == 'guiatv_otrasseries'))
	{
		if ($('bgprogramas').className == 'iflotadas bg03')
		{
			oculta_tv_programs();
			cambia_menu(menu_inicial);
		}
		else
		{
			cambia_menu(3);
			oculta_guiatv();
			oculta_deportes();
			muestra_tv_programs();
		}
	}
	if ((element.id == 'item04_a') || 
			(element.id == 'deportes_cerrar_sup') || 
			(element.id == 'deportes_cerrar_inf'))
	{
		if ($('bgprogramas').className == 'iflotadas bg04')
		{
			oculta_deportes();
			cambia_menu(menu_inicial);
		}
		else
		{
			cambia_menu(4);
			oculta_guiatv();
			oculta_tv_programs();
			muestra_deportes();
		}
	}
}
