/*

	Variable: ie6

		Indica si el navegador del usuario es Internet Explorer 6.

*/

var ie6 = (window.navigator.appVersion.indexOf('MSIE 6.0') != -1)?true:false;









/*

	Class: BUSCADOR

		Maneja el comportamiento del buscador de la parte superior derecha.

*/

var BUSCADOR = {

	

	/*

		Function: inicio

			Inicializa el valor del INPUT del buscador con el texto de su LABEL, y le añade sus eventos ONFOCUS y ONBLUR.

	*/

	inicio : function() {

		// recogemos el valor del LABEL

		var texto = document.getElementById('cabecera').getElementsByTagName('label')[0].innerHTML;

		// se lo asignamos al INPUT para que sea lo que vea el usuario

		document.getElementById('buscador').value = texto;

		// cuando el INPUT reciba el foco...

		document.getElementById('buscador').onfocus = function() {

			// ... comprobamos si es igual al valor inicial para limpiarlo o seleccionar el texto

			if (this.value == texto)

				this.value = '';

			else

				this.select();

			// le asignamos la clase que oculta la lupa

			document.getElementById('buscador').className = 'con-foco';

		}

		// cuando el INPUT pierda el foco...

		document.getElementById('buscador').onblur = function() {

			// ... comprobamos si está vacío para asignarle el valor inicial

			if (this.value == '')

				this.value = texto;

			// eliminamos la clase que oculta la lupa

			document.getElementById('buscador').className = '';

		}

	}

	

}









/*

	Class: RECOMENDACIONES

		Gestiona la parte central de la página, que contiene las recomendaciones de Clan.

*/

var RECOMENDACIONES = {

	

	/*

		Function: inicio

			Añade el evento ONCLICK a las pestañas de "Recomendamos" y "Lo más visto", y muestra inicialmente los vídeos.

		

		See Also:

			- <actualiza>

	*/

	inicio : function() {

		// añadimos el evento ONCLICK a las pestañas de "Recomendamos" y "Lo más visto"

		if ((document.getElementById('recomendamos') != null) && (document.getElementById('recomendamos').getElementsByTagName('ol').length > 0)) {

			document.getElementById('recomendamos').getElementsByTagName('a')[0].onclick = function() {

				RECOMENDACIONES.actualiza(this);

				return false;	

			}

			// añadimos la clase "videos" a "Recomendamos" para que sólo se muestren los vídeos

			document.getElementById('recomendamos').className = 'videos';

		}

		if ((document.getElementById('lo-mas-visto') != null) && (document.getElementById('lo-mas-visto').getElementsByTagName('ol').length > 0)) {

			document.getElementById('lo-mas-visto').getElementsByTagName('a')[0].onclick = function() {

				RECOMENDACIONES.actualiza(this);

				return false;	

			}

			// añadimos la clase "Lo más visto" para que sólo se muestren los vídeos

			document.getElementById('lo-mas-visto').className = 'videos';

		}

	},

	

	/*

		Function: actualiza

			Actualiza las pestañas de "Recomendamos" y "Lo más visto" en función de la selección del usuario.

		

		Parameters:

			cual - Pestaña seleccionada por el usuario (un <A> en el HTML)

		

		See Also:

			- <inicio>

	*/

	actualiza : function(cual) {

		// actualizamos la clase del DIV con la del A seleccionado

		cual.parentNode.parentNode.parentNode.className = cual.parentNode.className;

		// clonamos el A seleccionado

		var clonado = cual.cloneNode(true);

		// comprobamos si hemos seleccionado "juegos"...

		if (clonado.title.indexOf('juegos') != -1) {

			// modificamos el TITLE, HREF e innerHTML del elemento clonado, y preparamos la cadena que asignaremos más adelante al STRONG

			clonado.title = clonado.title.replace(/juegos/gi,'vídeos');

			clonado.href = clonado.href.replace(/juegos/gi,'videos');

			clonado.innerHTML = '<span>Vídeos</span>';

			var cadena = '<span>Juegos</span>';

		} else {

			// hacemos lo mismo pero en el caso en que hayamos seleccionado "vídeos"

			clonado.title = clonado.title.replace(/vídeos/gi,'juegos');

			clonado.href = clonado.href.replace(/videos/gi,'juegos');

			clonado.innerHTML = '<span>Juegos</span>';

			var cadena = '<span>Vídeos</span>';

		}

		// replicamos el evento del enlace

		clonado.onclick = cual.onclick;

		// recogemos el STRONG actual de la lista

		var estrong = cual.parentNode.parentNode.parentNode.getElementsByTagName('strong')[0];

		// lo reemplazamos por el enlace

		estrong.parentNode.replaceChild(clonado,estrong);

		// creamos un STRONG

		var estrong = document.createElement('strong');

		// le asignamos el valor que le corresponde

		estrong.innerHTML = cadena;

		// reemplazamos el A seleccionado por el STRONG

		cual.parentNode.replaceChild(estrong,cual);

	}

	

}







/*

	Class: GENERALES

		Gestiona todas las propiedades comunes a todas las páginas

*/

var GENERALES = {

	

	/*

		Function: inicio

			Añade el evento que oculta el velo

	*/

	inicio : function() {

		// añadimos el evento que se dispara cuando se pulsa "esc" y que oculta el velo

		document.onkeypress = function esc(e) {	

			if (typeof(e) == 'undefined')

				e = event;

			if ((e.keyCode == 27) && (document.getElementById('contenedor-velo') != null)) {

				document.body.removeChild(document.getElementById('contenedor-velo'));

				// comprobamos si hay algún SELECT en el documento, y si estamos en IE6 lo mostramos

				if ((ie6) && (document.getElementsByTagName('select').length > 0)) {

		    		for (k=0;k<document.getElementsByTagName('select').length;k++) {

		    			document.getElementsByTagName('select')[k].style.visibility = 'visible';

		    		}

		    	}	

			}

		}

	},

	

	/*

		Function: evento

			Añade el evento un evento a un objeto y le asocia una función que lo maneje.

			(código de Jeremy Miller, sacado de http://bytes.com/topic/javascript/answers/510057-iframe-ie-onload-problem)

			

		Parameters:

			obj - Objeto al que se añade el evento

			event - Evento que añadimos

			handler - Función que manejerá el evento

			

	*/

	evento : function(obj, event, handler) {

		if (obj.addEventListener)

			obj.addEventListener(event, handler, false);

		else if (obj.attachEvent)

			obj.attachEvent('on'+event, handler);

	}

	

}









/*

	Function: addLoadEvent

		Añade todos los eventos que asignemos en el ONLOAD de la página

		(código sacado de http://simon.incutio.com/archive/2004/05/26/addLoadEvent)

*/

function addLoadEvent(fn) {

	var old = window.onload;

	if (typeof window.onload != 'function') {

		window.onload = fn;

	} else {

		window.onload = function() {

			old();

			fn();

		}

	}

}





addLoadEvent(function() {

	BUSCADOR.inicio();

});



addLoadEvent(function() {

	RECOMENDACIONES.inicio();

});



addLoadEvent(function() {

	GENERALES.inicio();

});













/***********************************************************

*********** FUNCIONES DE CARGA CON XMLHttpRequest **********

***********************************************************/





/*

	Class: AJAX

		Gestiona las peticiones AJAX que hagamos.

*/

var AJAX = {

	

		

		/*

		Function: cargaFans

			Realiza la petición AJAX en función de los parámetros de entrada.

			

		Parameters:

				serie - id de la serie

				nombre - nombre de la serie

				

		

		*/

		cargaFans : function(serie,nombre) {

			$.ajax({

				 "type":"GET",

				 url: "/sm/services/queryFansHTML?codeSerie="+serie,

				 dataType: "html",

				 success: function(data){					 

					$("#comunidadClan").empty();

					$("#comunidadClan").append(data);
					$("#comunidadClan h2").text("El clan de " + nombre);

		//			$("#comunidadClan").fadeIn("slow");

				}

			})

		},

		

	/*

	Function: cargaDatos

		Realiza la petición AJAX en función de los parámetros de entrada.

		

	Parameters:

			accion - Indica qué tipo de petición se desea realizar

			url - URL a la que se hará la petición

			instancia - Instancia del objeto XMLHttpRequest que estamos utilizando

			parametros - Parámetros que se pasarán a la URL a la que se hará la petición (opcional)

			

	See Also:

		- <construirParametros>

		- <procesaCambios>

	*/

	cargaDatos : function(accion,instancia,parametros) {

		instancia = false;

		if (window.XMLHttpRequest) {

			try {

				instancia = new XMLHttpRequest();

			} catch(e) {

				instancia = false;

			}

		} else if(window.ActiveXObject) {

			try {

				instancia = new ActiveXObject("Msxml2.XMLHTTP");

			} catch(e) {

				try {

					instancia = new ActiveXObject("Microsoft.XMLHTTP");

				} catch(e) {

					instancia = false;

				}

			}

		}

		if (instancia) {

			instancia.onreadystatechange = function() {

				AJAX.procesaCambios(accion,instancia);

			}

			instancia.open("GET", AJAX.construirURL(accion,parametros), true);

			instancia.send(null);

		} else {

			/*if (console != null)

				console.log('ERROR AJAX: Se ha producido un error al intentar crear el objeto');*/

		}

	},

	

	/*

	Function: construirURL

		Construye la URL a la que se hará la petición.

		

	Parameters:

		accion - Indica qué tipo de petición se desea realizar

		parametros - Parámetros que se pasarán a la URL a que se hará la petición (opcional)



	Return:

		cadena - Cadena de texto que contiene la URL construída.

		

	See also:

		- <cargaDatos>

			

	*/

	construirURL : function(accion,parametros) {

		var uerreele;

		//var cadena = 'accion=' + accion;

		if (accion == 'serie') {

			uerreele = parametros;

		} else if (accion == 'videos') {

			// comprobamos si la acción la ha disparado un vídeo o la paginación

			if (typeof(parametros) == 'string')

				uerreele = '/infantil/components/' + parametros + '/videos/videos-1.inc';

			else

				uerreele = '/infantil/components/' + parametros[0] + '/videos/' + parametros[1];

		} else if (accion == 'juegos') {

			// comprobamos si la acción la ha disparado un vídeo o la paginación

			if (typeof(parametros) == 'string')

				uerreele = '/infantil/components/' + parametros + '/juegos/juegos-1.inc';

			else

				uerreele = '/infantil/components/' + parametros[0] + '/juegos/' + parametros[1];

		} else if (accion == 'recomendado') {

			uerreele = '/infantil/components/' + parametros + '/relacionadas.inc';

		} else if (accion == 'series') {

			uerreele = '/infantil/components/' + parametros[0];

		}

		return uerreele;

	},	

	

	/*

	Function: procesaCambios

		Controla cuando ha finalizado la petición XLHttpRequest y llama a la función correspondiente para gestionar los datos devueltos.

		

	Parameters:

		accion - Indica qué tipo de petición se desea realizar

		instancia - Instancia del objeto XMLHttpRequest que estamos utilizando



	See also:

		- <cargaDatos>

		- <serie>

			

	*/

	procesaCambios : function(accion,instancia) {

		if (instancia.readyState == 4) {

			if ((instancia.status == 200) || (instancia.status == 304)) {

				var datos = new Object(instancia.responseText)

				// si estamos recuperando la descripción de una serie

				if (accion == 'serie')

					AJAX.serie(datos);

				else if (accion == 'videos')

					AJAX.videos(datos);

				else if (accion == 'juegos')

					AJAX.juegos(datos);

				else if (accion == 'recomendado')

					AJAX.recomendado(datos);

				else if (accion == 'series')

					AJAX.series(datos);

			} else {

				/*if (console != null)

					console.log('ERROR AJAX: Se produjo un error al intentar recuperar los datos');*/

			}

		}

	},

	

	/*

	Function: serie

		Recibe los datos de una serie y crea el velo para mostrarlos en la página de inicio. Es llamada desde la zona de "Programación TV" de la portada o desde la sección "Programación".

		

	Parameters:

		datos - Datos devueltos por el servidor con la información correspondiente a la serie seleccionada.



	See also:

		- <cargaDatos>

		- <procesaCambios>

			

	*/

	serie : function(datos) {

		// creamos los contenedores necesarios

		var div_contenedor = document.createElement('div');

		div_contenedor.id = 'contenedor-velo';

		// le asignamos la altura necesaria al velo

		div_contenedor.style.height = document.documentElement.scrollHeight + 'px';

		var div_velo = document.createElement('div');

		div_velo.id = 'velo';

		var div_contenidos = document.createElement('div');

		div_contenidos.id = 'contenidos-velo';

		// creamos el último contenedor

		var div_contenido = document.createElement('div');

		div_contenido.id = 'contenedor-contenido';

		div_contenido.innerHTML = datos;

		// creamos el BUTTON para cerrar el velo

		var boton = document.createElement('button');

		boton.setAttribute('type','button');

		boton.setAttribute('title','Cerrar esta ventana');

		boton.innerHTML = 'Cerrar';

		// le añadimos el evento ONCLICK

		boton.onclick = function() {

			document.body.removeChild(document.getElementById('contenedor-velo'));

			// comprobamos si hay algún SELECT en el documento, y si estamos en IE6 lo mostramos

			if ((ie6) && (document.getElementsByTagName('select').length > 0)) {

	    		for (k=0;k<document.getElementsByTagName('select').length;k++) {

	    			document.getElementsByTagName('select')[k].style.visibility = 'visible';

	    		}

	    	}

		}

		// añadimos unos contenedores a otros

		div_contenido.appendChild(boton);

		div_contenidos.appendChild(div_contenido);

		div_velo.appendChild(div_contenidos);

		div_contenedor.appendChild(div_velo);

		// lo añadimos al final del documento

		document.body.appendChild(div_contenedor);

		// centramos en vertical los contenidos

		var altura = parseInt((window.getComputedStyle != null)?window.getComputedStyle(document.getElementById('contenidos-velo'), null).getPropertyValue("height"):document.getElementById('contenidos-velo').offsetHeight);

		if (navigator.appVersion.indexOf('Chrome') != -1)

			var escrol = document.body.scrollTop;

		else

			var escrol = document.documentElement.scrollTop;

		div_contenidos.style.top = (document.documentElement.clientHeight - altura)/2 + parseInt(escrol) + 'px';

		// llamamos a la función que hace el reemplazo sIFR

		if (typeof sIFR == "function") {

    		sIFR.replaceElement(named({sSelector:"body #contenedor-velo h3", sFlashSrc:"/swf/infantil/itc_officina_rtve.swf",sColor:"#004276",nPaddingBottom:1}));

    	};

		// comprobamos si hay algún SELECT en el documento, y si estamos en IE6 lo ocultamos

		if ((ie6) && (document.getElementsByTagName('select').length > 0)) {

    		for (k=0;k<document.getElementsByTagName('select').length;k++) {

    			document.getElementsByTagName('select')[k].style.visibility = 'hidden';

    		}

    	}

		// si estamos en IE6, aplicamos el filtro para la transparencia de los PNG...

		if (ie6) {

			// ...al velo...

			var fondo = document.getElementById('velo').currentStyle.backgroundImage.split('"')[1];

			document.getElementById('velo').style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + fondo + '", sizingMethod="scale")';

			document.getElementById('velo').style.backgroundImage = 'url("")';

			// ...y al botón de "Cerrar"

			var fondo = document.getElementById('velo').getElementsByTagName('button')[0].currentStyle.backgroundImage.split('"')[1];

			document.getElementById('velo').getElementsByTagName('button')[0].style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + fondo + '", sizingMethod="crop")';

			document.getElementById('velo').getElementsByTagName('button')[0].style.backgroundImage = 'url("")';

		}

	},

	

	/*

	Function: videos

		Recibe los datos de los vídeos que han de mostrarse en la zona de "Vídeos" de la sección "Vídeos y juegos".

		

	Parameters:

		datos - Datos devueltos por el servidor con la información de los vídeos correspondientes, incluyendo la paginación si la hubiera.



	See also:

		- <cargaDatos>

		- <procesaCambios>

			

	*/

	videos : function(datos) {

		// si hay párrafo anterior, lo destruimos

		if (document.getElementById('videos').getElementsByTagName('p').length > 1)

			document.getElementById('videos').removeChild(document.getElementById('videos').getElementsByTagName('p')[1]);	

		// comprobamos si hay vídeos disponibles

		if (datos == '') {

			datos = '<p>No hay vídeos disponibles en este momento.</p>';

			document.getElementById('videos').className = 'sin-resultados';

		} else {

			document.getElementById('videos').className = '';

		}

		// si hay lista anterior, la destruimos

		if (document.getElementById('videos').getElementsByTagName('ol').length > 0)

			document.getElementById('videos').removeChild(document.getElementById('videos').getElementsByTagName('ol')[0]);

		// si hay paginación, la destruimos también

		if (document.getElementById('videos').getElementsByTagName('ul').length > 0)

			document.getElementById('videos').removeChild(document.getElementById('videos').getElementsByTagName('ul')[0]);

		// si hay enlace de "ver todos", lo destruimos también

		if (document.getElementById('videos').getElementsByTagName('a').length > 0) {

			if (document.getElementById('videos').getElementsByTagName('a')[document.getElementById('videos').getElementsByTagName('a').length-1].className == 'ver-todos')

				document.getElementById('videos').removeChild(document.getElementById('videos').getElementsByTagName('a')[document.getElementById('videos').getElementsByTagName('a').length-1]);

		}

		// cargamos el nuevo contenido

		document.getElementById('videos').innerHTML += datos;

		// añadimos el evento ONCLICK a todos los enlaces

		if (document.getElementById('videos').getElementsByTagName('ol').length > 0) {

			var enlaces = document.getElementById('videos').getElementsByTagName('ol')[0].getElementsByTagName('a');

			for (i=0;i<enlaces.length;i++) {

				enlaces[i].onclick = function() {

					LLAMADAS.ejecutar(this,'videos');

					return false;

				}

			}

		}

		// añadimos el evento ONCLICK a todos los enlaces de la paginación, si es que la hay

		if (document.getElementById('videos').getElementsByTagName('ul').length > 0) {

			enlaces = document.getElementById('videos').getElementsByTagName('ul')[0].getElementsByTagName('a');

			for (i=0;i<enlaces.length;i++) {

				enlaces[i].onclick = function() {

					LLAMADAS.ejecutar(this,'paginacion');

					return false;

				}

			}

		}

	},

	

	/*

	Function: juegos

		Recibe los datos de los juegos que han de mostrarse en la zona de "Juegos" de la sección "Vídeos y juegos".

		

	Parameters:

		datos - Datos devueltos por el servidor con la información de los juegos correspondientes, incluyendo la paginación si la hubiera.



	See also:

		- <cargaDatos>

		- <procesaCambios>

			

	*/

	juegos : function(datos) {

		// si hay párrafo anterior, lo destruimos

		if (document.getElementById('juegos').getElementsByTagName('p').length > 0)

			document.getElementById('juegos').removeChild(document.getElementById('juegos').getElementsByTagName('p')[0]);	

		// comprobamos si hay juegos disponibles

		if (datos == '') {

			datos = '<p>No hay juegos disponibles en este momento.</p>';

			document.getElementById('juegos').className = 'sin-resultados';

		} else {

			document.getElementById('juegos').className = '';

		}

		// si hay lista anterior, la destruimos

		if (document.getElementById('juegos').getElementsByTagName('ol').length > 0)

			document.getElementById('juegos').removeChild(document.getElementById('juegos').getElementsByTagName('ol')[0]);

		// si hay paginación, la destruimos también

		if (document.getElementById('juegos').getElementsByTagName('ul').length > 0)

			document.getElementById('juegos').removeChild(document.getElementById('juegos').getElementsByTagName('ul')[0]);

		// si hay enlace de "ver todos", lo destruimos también

		if (document.getElementById('juegos').getElementsByTagName('a').length > 0) {

			if (document.getElementById('juegos').getElementsByTagName('a')[document.getElementById('juegos').getElementsByTagName('a').length-1].className == 'ver-todos')

				document.getElementById('juegos').removeChild(document.getElementById('juegos').getElementsByTagName('a')[document.getElementById('juegos').getElementsByTagName('a').length-1]);

		}

		// cargamos el nuevo contenido

		document.getElementById('juegos').innerHTML += datos;

		// añadimos el evento ONCLICK a todos los enlaces

		if (document.getElementById('juegos').getElementsByTagName('ol').length > 0) {

			var enlaces = document.getElementById('juegos').getElementsByTagName('ol')[0].getElementsByTagName('a');

			for (i=0;i<enlaces.length;i++) {

				enlaces[i].onclick = function() {

					LLAMADAS.ejecutar(this,'juegos');

					return false;

				}

			}

		}

		// añadimos el evento ONCLICK a todos los enlaces de la paginación, si es que la hay

		if (document.getElementById('juegos').getElementsByTagName('ul').length > 0) {

			enlaces = document.getElementById('juegos').getElementsByTagName('ul')[0].getElementsByTagName('a');

			for (i=0;i<enlaces.length;i++) {

				enlaces[i].onclick = function() {

					LLAMADAS.ejecutar(this,'paginacion');

					return false;

				}

			}

		}

	},

	

	/*

	Function: recomendado

		Recibe los datos de los vídeos que han de mostrarse en la zona de "También te puede gustar..." de la sección "Vídeos y juegos".

		

	Parameters:

		datos - Datos devueltos por el servidor con la información de los vídeos correspondientes.



	See also:

		- <cargaDatos>

		- <procesaCambios>

			

	*/

	recomendado : function(datos) {

		// si hay párrafo anterior, lo destruimos

		if (document.getElementById('recomendado').getElementsByTagName('p').length > 0)

			document.getElementById('recomendado').removeChild(document.getElementById('recomendado').getElementsByTagName('p')[0]);

		// comprobamos si hay vídeos disponibles

		if (datos == '') {

			datos = '<p>No hay vídeos disponibles en este momento.</p>';

			document.getElementById('recomendado').className = 'sin-resultados';

		} else {

			document.getElementById('recomendado').className = '';

		}

		// si hay lista anterior, la destruimos

		if (document.getElementById('recomendado').getElementsByTagName('ol').length > 0)

			document.getElementById('recomendado').removeChild(document.getElementById('recomendado').getElementsByTagName('ol')[0]);

		// cargamos el nuevo contenido

		document.getElementById('recomendado').innerHTML += datos;

		// añadimos el evento ONCLICK a todos los enlaces

		if (document.getElementById('recomendado').getElementsByTagName('ol').length > 0) {

			var enlaces = document.getElementById('recomendado').getElementsByTagName('ol')[0].getElementsByTagName('a');

			for (i=0;i<enlaces.length;i++) {

				enlaces[i].onclick = function() {

					LLAMADAS.ejecutar(this,'videos');

					return false;

				}

			}

		}

	},

	

	/*

	Function: series

		Recibe los datos de las series que han de mostrarse en la zona de "Todas las series" de la página de inicio.

		

	Parameters:

		datos - Datos devueltos por el servidor con la información de las series correspondientes, incluyendo la paginación si la hubiera.



	See also:

		- <cargaDatos>

		- <procesaCambios>

			

	*/

	series : function(datos) {

		// destruimos la paginacion y la lista anterior

		document.getElementById('todas-las-series').removeChild(document.getElementById('todas-las-series').getElementsByTagName('ul')[1]);

		document.getElementById('todas-las-series').removeChild(document.getElementById('todas-las-series').getElementsByTagName('ul')[0]);

		// cargamos el nuevo contenido

		document.getElementById('todas-las-series').innerHTML += datos;

		// añadimos el evento ONCLICK a todos los enlaces

		var enlaces = document.getElementById('todas-las-series').getElementsByTagName('ul')[1].getElementsByTagName('a');

		for (i=0;i<enlaces.length;i++) {

			enlaces[i].onclick = function() {

				TODAS_LAS_SERIES.ejecutar(this);

				return false;

			}

		}

	}

	

}