/* Javascript para mundoplus.tv :: global
   v1.1 2009/02/28 - atnbueno@mundoplus.tv */

// Si detecta que está dentro de un frameset, sale de él
if (top.location != location) {
	top.location.href = document.location.href
}

function arrayDiff(vector1, vector2) {
// Elimina valores de vector1 presentes en vector2
	for (var i=0; i<vector2.length; i++)
		for (var j=0; j<vector1.length; j++) {
			if (vector1[j] == vector2[i]) {
				vector1.splice(j,1)
			}
		}
}
function randomizeArray(vector) {
// Aleatoriza un vector usando el algoritmo Fisher-Yates
	var i = vector.length
	if (i==0) return false
	while (--i) {
		var j = Math.floor(Math.random()*(i+1))
		var temp = vector[i]
		vector[i] = vector[j]
		vector[j] = temp
   }
}
function removeDuplicates(vector) {
// Elimina valores duplicados de un vector (se queda con la primera aparición)
	for (var k=0; k<3; k++) // chapuza hasta repasar algoritmo, que falla
		for (var i=0; i<vector.length; i++)
			for (var j=i+1; j<vector.length; j++)
				if (vector[j] == vector[i])
					vector.splice(j,1)
}
function toFilename(texto) {
// convierte un texto en un nombre de fichero eliminando carácteres problemáticos
	return typeof(texto) == 'string' ? texto.toLowerCase().replace(/[ '&:;,áéíóöúñ\/\-\.\(\)¡!]/g,'') : texto
}

function trim(texto) {
// Elimina blancos al principio y al final del texto
	return typeof(texto) == 'string' ? texto.replace(/^\s*|\s*$/g,'') : texto
}

function blurLink() {
// Elimina la linea punteada de un enlace
	if (this.blur) this.blur()
}
function retocaEnlaces() {
// A ejecutar una vez se han creado todos los enlaces
	enlaces = document.getElementsByTagName('a')
	// Elimina la linea punteada de todos los enlaces de la página cuando adquieren el foco
	for (var i=0, enlace; enlace=enlaces[i]; i++)
		enlace.onfocus = blurLink
	// Añade target='_blank' a los enlaces con rel='externo'
	for (var i=0, enlace; enlace=enlaces[i]; i++)
		if (enlace.rel == 'externo') {
			enlace.target = '_blank'
			enlace.className = 'externo'
		}
	// Soluciona el problema de los enlaces a partes de la propia página y la cabecera
	for (var i=0, enlace; enlace=enlaces[i]; i++)
		if (enlace.name)
			enlace.style.top = '-'+(document.getElementById('cabecera').scrollHeight-4)+'px'
}

/* NAVEGACIÓN */
var itemActual = -1
var subItemActual = -1
function muestraSubmenu(id) {
// Muestra un submenú, ocultando todos los demás, activando además la "pestaña" correspondiente
// Si el ID no es válido, no se muestra ningún submenú
// A ejecutar una vez existe el objeto 'submenu'
	submenu_visible = 0
	for (var i=0, submenu; submenu=submenus[i]; i++)
		if (submenu.id==id) {
			itemsMenu[id.slice(1)].firstChild.className = 'activo'
			submenu.style.display = 'block'
			submenu_visible = 1
		} else {
			itemsMenu[submenu.id.slice(1)].firstChild.className = ''
			submenu.style.display = 'none'
		}
	if ((itemActual>=0) && (subItemActual>=0)) {
		if (id.slice(1)=='m'+itemActual)
			itemsSubmenu[subItemActual].className = 'activo'
		else
			itemsSubmenu[subItemActual].className = ''
	}
	submenuHackDIV = document.getElementById('submenu_hack')
	if (submenu_visible)
		submenuHackDIV.style.display = 'block'
	else
		submenuHackDIV.style.display = 'none'
}

var temporizador = 0
function menuActivo() {
// Anula el temporizador y muestra el submenú asociado al menú
	clearTimeout(temporizador)
	muestraSubmenu('s'+this.id)
}
function menuInactivo() {
// Anula el temporizador y muestra el submenú asociado al menú (con retardo, si no es el activo)
	clearTimeout(temporizador)
	if (this.id=='sm'+itemActual)
		muestraSubmenu('sm'+itemActual)
	else
		temporizador = setTimeout("muestraSubmenu('sm"+itemActual+"')", 1000)

}
function submenuActivo() {
// Anula el temporizador y, si hace falta, destaca la pestaña y la opción de submenú apropiadas
	clearTimeout(temporizador)
	if ((itemActual>=0) && (subItemActual>=0)) {
		if (this.id=='m'+itemActual)
			itemsSubmenu[subItemActual].className = 'activo'
		else
			itemsSubmenu[subItemActual].className = ''
	}
}
var itemsMenu, submenus
function inicializaMenu() {
// Se determina si la URL corresponde a un menú y/o a un submenú, se asignan IDs y se definen eventos de ratón
// A ejecutar una vez existen los objetos 'menu' y 'submenu'
	itemsMenu = document.getElementById('menu').getElementsByTagName('td')
	submenus = document.getElementById('submenu').getElementsByTagName('div')
	for (var i=0, itemMenu, submenu; itemMenu=itemsMenu[i]; i++) {
		submenu=submenus[i];
		itemMenu.onmouseover = menuActivo
		itemMenu.onmouseout = menuInactivo
		submenu.onmouseover = submenuActivo
		submenu.onmouseout = menuInactivo // sí, la misma función que el menú
		itemMenu.id = 'm'+i
		submenu.id = 'sm'+i
		if (document.location.href.indexOf(itemMenu.firstChild.getAttribute('href')) >= 0)
		{
			itemActual = i
			itemsSubmenu = submenu.getElementsByTagName('a')
			for (var j=0, subitemMenu; subitemMenu=itemsSubmenu[j]; j++)
				if (document.location.href.indexOf(subitemMenu.getAttribute('href')) >= 0)
					subItemActual = j
		}
	}
	if (itemActual>=0) {
		itemsSubmenu = submenus[itemActual].getElementsByTagName('a')
		muestraSubmenu('sm'+itemActual)
	}
	contenidoDIV = document.getElementById('contenido') // uso global: quizás no debería ir en esta función
}

/* NOMBRES */
function enlazaTexto(nodoTexto, urlEnlace, tituloEnlace) {
// Convierte un nodo de texto en un enlace con atributos href=urlEnlace y title=tituloEnlace
// Si urlEnlace o tituloEnlace contienen "{texto}", se substituye por el contenido de nodoTexto
// Si urlEnlace es una URL absoluta se añade el atributo rel="externo"
// La función devuelve el nuevo enlace por si se quiere modificar algo en él
// Parámetros sin validar
	var nodoEnlace = document.createElement('a') // Crea un enlace, de momento sin insertar en al árbol DOM
	nodoEnlace.setAttribute('href', urlEnlace.replace(/{texto}/, trim(nodoTexto.nodeValue)))
	if (urlEnlace.slice(0,7) == 'http://') {
		nodoEnlace.setAttribute('rel', 'externo')
	}
	if (tituloEnlace != '')
		nodoEnlace.setAttribute('title', tituloEnlace.replace(/{texto}/, trim(nodoTexto.nodeValue)))
	nodoTexto.parentNode.replaceChild(nodoEnlace, nodoTexto) // Inserta el nodo del enlace donde el nodo de texto
	nodoEnlace.appendChild(nodoTexto) // Reinserta el nodo de texto dentro del enlace
	return nodoEnlace
}
var nodoFoto, contenidoDIV // document.getElementById('contenido'), para IE
function mueveFoto(e) {
	mouseX = (e) ? e.pageX : event.clientX + contenidoDIV.scrollLeft
	mouseY = (e) ? e.pageY : event.clientY + contenidoDIV.scrollTop - contenidoDIV.offsetTop
	nodoFoto.style.left = (mouseX+2)+'px'
	nodoFoto.style.top = (mouseY-135)+'px'
}
function muestraFoto(e) {
	nodoFoto.src = '/imagenes/nombres/'+toFilename(this.firstChild.nodeValue)+'.jpg'
	mueveFoto(e)
	nodoFoto.style.visibility = 'visible'
	this.onmousemove = mueveFoto
}
function ocultaFoto() {
	nodoFoto.src=null
	this.onmousemove = null
	nodoFoto.style.visibility = 'hidden'
	nodoFoto.style.top = '0'
	nodoFoto.style.left = '0'
}
function precargaFoto(nombre) {
	var foto = new Image(100,133)
	foto.src = '/imagenes/nombres/'+toFilename(nombre)+'.jpg'
}
function enlazaNombreIMDb(nodo, nombre, conFoto) {
// Recorre el arbol DOM a partir de 'nodo' buscando 'nombre', convirtiéndolo en enlace a la IMDb mediante enlazaTexto
// Si conFoto es TRUE, añade los eventos onmouseover y onmouseout
// Cuando encuentra una etiqueta <em>, no busca nombres dentro
// Falta validar los parametros
	if (nodo.nodeType == 3) { // texto (3)
		nodo.data = nodo.data.replace(/[\t\n\r ]+/g, ' ') // convierte cualquier separador en un solo espacio
		var posicion = nodo.data.indexOf(nombre)
		if (posicion != -1) {
			var nodoNombre = nodo.splitText(posicion) // de momento, el texto a partir del nombre
			nodoNombre.splitText(nombre.length) // nodoNombre sólo es el nombre ahora
			var enlace = enlazaTexto(nodoNombre, 'http://www.google.com/search?btnI&q={texto} site:imdb.com', '{texto} en la IMDb')
			if (conFoto) {
				enlace.onmouseover = muestraFoto
				enlace.onmouseout = ocultaFoto
			}
			return 1 // sirve para evitar recursividad infinita (enlace dentro de enlace dentro de ...)
		}
	} else if (nodo.nodeType == 1 && nodo.childNodes && (nodo.nodeName != 'EM')) // etiqueta (1) diferente de <em> con contenido (childNodes)
		for (var i=0; i<nodo.childNodes.length; i++)
			i += enlazaNombreIMDb(nodo.childNodes[i], nombre, conFoto)
	return 0
}

function arreglaFlashes() {
/*
	for(var j=0; tagName=["object","embed","applet"][j]; j++)
		for(var i=0; elem = document.getElementsByTagName(tagName)[i]; i++)
			elem.outerHTML = elem.outerHTML;
*/			
}
