/* LIBRERÍA X-CORE */
// x_core.js, X v3.15.2, Cross-Browser.com DHTML Library
// Copyright (c) 2004 Michael Foster, Licensed LGPL (gnu.org)

function xGetElementById(e) {
  if(typeof(e)!='string') return e;
  if(document.getElementById) e=document.getElementById(e);
  else if(document.all) e=document.all[e];
  else e=null;
  return e;
}

function xDef() {
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
  return true;
}

function xOffsetLeft(e) {
  if (!(e=xGetElementById(e))) return 0;
  if (xDef(e.offsetLeft)) return e.offsetLeft;
  else return 0;
}
function xOffsetTop(e) {
  if (!(e=xGetElementById(e))) return 0;
  if (xDef(e.offsetTop)) return e.offsetTop;
  else return 0;
}

/* Modifica la visibilidad del objeto spoileante/ocultable cuya ID sea igual a la del objeto pasado + "_spoiler" */
function spoiler(e){
  targetid = e.id + "_spoiler";
  jQuery('#'+targetid).toggle(300);
}


var currentPart = null;

function mostrarPartes(linkObj, file_id) {
	var fileObj = xGetElementById(file_id);
	
	if (fileObj) {
		var fileClass = 'partes_fichero';
		
		if (currentPart)
			currentPart.className = fileClass + ' hide';
		
		if (currentPart !== fileObj) {
			if(BrowserDetect.browser=='Explorer') { //explorer: la colocación es diferente
				if (BrowserDetect.version<=7) {
					var ml = -xOffsetLeft(linkObj);
					var m2 = xOffsetTop(linkObj) + xOffsetLeft(linkObj);
				} else { //explorer 8 es diferente
					var ml = xOffsetLeft(linkObj) - xOffsetLeft(linkObj.parentNode) + 90;
					var m2 = xOffsetTop(linkObj) - xOffsetTop(linkObj.parentNode) + 4;
				}
			} else {
				var ml = xOffsetLeft(linkObj) - xOffsetLeft(linkObj.parentNode) + 94; // Constantes a ojo adaptadas para Firefox y que en el resto no queden muy mal
				var m2 = xOffsetTop(linkObj) - xOffsetTop(linkObj.parentNode) + 16;
			}
			fileObj.style.marginLeft = ml + 'px';
			fileObj.style.marginTop = m2 + 'px';
			fileObj.className = fileClass;
			
			currentPart = fileObj;
		} else {
			currentPart = null;
		}
	}
}


/* Funciones auxiliares */
function findChild(parent, node) {
	var totalNodes = parent.childNodes.length;
	node = node.toUpperCase();
	
	for (var i = 0; i < totalNodes; i++) {
		if (parent.childNodes[i].tagName == node)
			return i;
	}
	return null;
}

function findLastChild(parent, node) {
	var totalNodes = parent.childNodes.length;
	node = node.toUpperCase();
	
	var ultimo = null;
	for (var i = 0; i < totalNodes; i++) {
		if (parent.childNodes[i].tagName == node)
			ultimo = i;
	}
	return ultimo;
}

function getChilds(parent, node) {
	var childs = parent.getElementsByTagName(node);
	return childs;
}


/* Funciones para agregar nuevos servidores y partes de descargas de una release */

/* Variables globales que tienen el número actual de servidores de dd y streaming */
var numServidores = null;
var numStreamings = null;

function init_num_servidores_dd(numDD) {
	numServidores = numDD;
}

function init_num_servidores_streaming(numStr) {
	numStreamings = numStr;
}

function add_servidor(servidorObj, tipo) {
	var container = servidorObj.parentNode.parentNode;
	var defaultIndex = findChild(container, "FIELDSET"); // Busca el anterior fieldset y lo copia tal cual
	var source = container.childNodes[defaultIndex];
	var nuevoServidor = source.cloneNode(true);
		
	defaultIndex = findChild(nuevoServidor, "SPAN"); // se queda con un único hijo
	defaultIndex = defaultIndex + 1;
	
	// se borran el resto de hijos
	while (nuevoServidor.childNodes.length > defaultIndex) {
		nuevoServidor.removeChild(nuevoServidor.childNodes[defaultIndex]);
	}
	
	/* PARTE NUEVA: SI EXISTE EL IMG EN EL HIJO, SE BORRA */
	defaultIndex = findChild(nuevoServidor, "SPAN");
	var nuevaParte = nuevoServidor.childNodes[defaultIndex];

	var indexImg = null;
	indexImg = findChild(nuevaParte, "IMG");
	if (indexImg!=null) {
		var parteImg = nuevaParte.childNodes[1];
		nuevaParte.removeChild(parteImg);
	}
	/* FIN PARTE NUEVA: SI EXISTE EL IMG EN EL HIJO, SE BORRA */
	
	var numS; // Variable global unificada que encapsulará
	var links; // Para encapsular "links" como "links_dd" y "links_streaming"
	if (tipo == "dd") {
		if (!numServidores) {
			var fieldsets = getChilds(container, "fieldset");
			numServidores = fieldsets.length;
		}
		nuevoServidor.id = "servidor_dd_" + numServidores;
		numS = numServidores;
		links = "links_dd";
	} else if (tipo == "streaming") {
		if (!numStreamings) {
			var fieldsets = getChilds(container, "fieldset");
			numStreamings = fieldsets.length;
		}
		nuevoServidor.id = "servidor_streaming_" + numStreamings;
		numS = numStreamings;
		links = "links_streaming";
	}

	nuevoServidor.className = "servidores_descarga";
	
	var newInputs = nuevoServidor.getElementsByTagName("input");
	newInputs[0].name = links + "[" + numS + "][0]";
	newInputs[0].value = "";
	
	var newSelects = nuevoServidor.getElementsByTagName("select");
	if (tipo == "dd") {
		newSelects[0].name = "servidor_dd[" + numS + "]";
	} else if (tipo == "streaming") {
		newSelects[0].name = "servidor_streaming[" + numS + "]";
	}
	
	var legendIndex = findChild(nuevoServidor, "LEGEND");
	var imgs = getChilds(nuevoServidor.childNodes[legendIndex], "img");
	
	if (imgs.length == 0) {
		add_delete_img(nuevoServidor.childNodes[legendIndex], 16, 16, "/img/descargas/list_delete_icon.png", "Borrar archivo", "delete_servidor(this)");
	} else {
		imgs[0].onclick = new Function("delete_servidor(this)");
	}
	
	var childs = getChilds(nuevoServidor, "span");
	
	container.appendChild(nuevoServidor);
	if (tipo == "dd")
		numServidores++;
	else if (tipo == "streaming")
		numStreamings++;
	
	check_image(container, "legend", "servidor");
	
	return false;
}

function check_image(parent, node, type) {
	var childs = getChilds(parent, node);
	if (childs.length > 1) {
		var imgs = getChilds(childs[0], "img");
		if (imgs.length == 0) {
			if (type == "servidor")
				add_delete_img(childs[0], 16, 16, "/img/descargas/list_delete_icon.png", "Borrar grupo de enlaces del servidor", "delete_servidor(this)");
			else
				add_delete_img(childs[0], 10, 10, "/img/descargas/minus.gif", "Borrar parte", "delete_parte(this)")
		}
	}
}

function delete_servidor(obj) {
	obj = obj ? obj : this;
	var servidor = obj.parentNode.parentNode;
	
	var container = servidor.parentNode;
	container.removeChild(servidor);
	
	var childs = getChilds(container, "fieldset");
	var totalChilds = childs.length;
	
	if (totalChilds == 1) {
		var deleteImg = childs[0].getElementsByTagName("img")[0];
		if (deleteImg)
			deleteImg.parentNode.removeChild(deleteImg);
	}
}

function add_parte(partObj) {
	var servidor = partObj.parentNode.parentNode;
	var id = servidor.id.split("_")[1];
	
	var defaultIndex = findLastChild(servidor, "SPAN");
	var nuevaParte = servidor.childNodes[defaultIndex].cloneNode(true);
	nuevaParte.className = "";
	
	
	/* PARTE NUEVA: ACTUALIZAMOS EL VALOR DEL ARRAY DE PARTES */
	defaultIndex = findChild(nuevaParte, "LABEL");
	var labelInterna = nuevaParte.childNodes[defaultIndex];
	
	defaultIndex = findChild(labelInterna, "INPUT");
	var nombre = labelInterna.childNodes[defaultIndex].name;
	
	/* el nombre tendrá un formato del tipo links_x[i][j], queremos actualizar j */
	var j = parseInt(nombre.split("[")[2].split("]")[0]) + 1;
																								
	var nuevo_nombre = nombre.split("]")[0] + "][" + j + "]";
	
	labelInterna.childNodes[defaultIndex].name = nuevo_nombre;
	/* FIN PARTE NUEVA: ACTUALIZAMOS EL VALOR DEL ARRAY DE PARTES */
	
	var newInputs = getChilds(nuevaParte, "input");
	//nuevaParte.getElementsByTagName("input");
	newInputs[0].value = "";
	
	var imgs = getChilds(nuevaParte, "img");
	
	if (imgs.length == 0) {
		add_delete_img(nuevaParte, 10, 10, "/img/descargas/minus.gif", "Borrar parte", "delete_parte(this)");
	} else {
		imgs[0].onclick = new Function("delete_parte(this)");
	}
	
	servidor.appendChild(nuevaParte);
	
	check_image(servidor, "span", "part");
	
	return false;
}

function add_delete_img(parent, width, height, url, title, func) {
	var deleteImg = new Image(width, height);
	deleteImg.src = url;
	deleteImg.alt = "[borrar]";
	deleteImg.title = title;
	deleteImg.onclick = new Function(func);
	parent.appendChild(deleteImg);
}

function delete_parte(obj) {
	obj = obj ? obj : this;
	var part = obj.parentNode;
	var servidor = part.parentNode;
	
	servidor.removeChild(part);
	
	var childs = getChilds(servidor, "span");
	var totalChilds = childs.length;
	
	if (totalChilds == 1) {
		var deleteImg = childs[0].getElementsByTagName("img")[0];
		if (deleteImg)
			deleteImg.parentNode.removeChild(deleteImg);
	}
}
