var ie = document.all && !self.innerHeight;
var ff = !document.all && document.getElementById;
var op = document.all && self.innerHeight;

function $(element)
{
	if (typeof(element) == "string")
		element = document.getElementById(element);
	
	return 	element;
}

//------------------------------------------------------------------------

function entryDate(inputObj)
{
	var today = inputObj.checked;
	var member_form = document.forms["member_form"];
	var day = member_form.Day;
	var month = member_form.Month;
	var year = member_form.Year;
	
	if (today)
	{
		day.disabled = "true";
		month.disabled = "true";
		year.disabled = "true";
		
		var d = new Date();
		
		day.selectedIndex = d.getDate();
		month.selectedIndex = d.getMonth() + 1;
		year.selectedIndex = d.getFullYear() - (d.getFullYear() - 101);
	}
	else
	{
		day.disabled = "";
		month.disabled = "";
		year.disabled = "";
		
		day.selectedIndex = 0;
		month.selectedIndex = 0;
		year.selectedIndex = 0;
	}
}

//------------------------------------------------------------------------

function setReleaseDate(checkObj)
{
	var checkClass = "hide";
	
	if (checkObj.checked)
		checkClass = "show";
	else
		$("exisiting_error").className = "error hide";
	
	$("started_date").className = checkClass;
	$("set_ep_num").className = checkClass;
}

//------------------------------------------------------------------------

function validateFansubForm()
{
	var reg = document.forms["member_form"];
	var errors = 0;
	var empty = Array("username");
	
	for (var i in empty)
	{
		if (i >= 0)
		{
			var field = empty[i];
			var errorTag = $(empty[i] + "_error");
			
			if (reg[field].value == "")
			{
				errors++;
				errorTag.innerHTML = "No puedes dejar el campo en blanco.";
				errorTag.className = errorTag.className.replace("hide", "show");
			}
			else
			{
				errorTag.className = errorTag.className.replace("show", "hide");
			}
		}
	}
	
	if ((reg["Day"].selectedIndex != 0 || reg["Month"].selectedIndex != 0 || reg["Year"].selectedIndex != 0) && !reg["today"].checked)
	{
		var dateRegx = RegExp("[0-9]{2}-[0-9]{2}-[0-9]{4}");
		var day = reg["Day"];
		var month = reg["Month"];
		var year = reg["Year"];
		var date =  day[day.selectedIndex].value + "-" + month[month.selectedIndex].value + "-" + year[year.selectedIndex].value;
		
		var errorTag = $("date_error");
		if (!dateRegx.test(date))
		{
			errors++;
			errorTag.className = errorTag.className.replace("hide", "show");
		}
		else
		{
			errorTag.className = errorTag.className.replace("show", "hide");
		}
	}
	
	return !errors;
}

//------------------------------------------------------------------------

function mostrarPartes(linkObj, file_id)
{
	var fileObj = $(file_id);
	
	if (fileObj)
	{
		var fileClass = 'file_parts';
		
		if (currentPart)
			currentPart.className = fileClass + ' hide';
		
		if (currentPart !== fileObj)
		{
			var ml = linkObj.offsetLeft - linkObj.parentNode.offsetLeft;
			fileObj.style.marginLeft = ml + 'px';
			fileObj.className = fileClass;
			
			currentPart = fileObj;
		}
		else
		{
			currentPart = null;
		}
	}
}

//------------------------------------------------------------------------

function searchSerie(ref, e, where)
{
	var searchObj = $(ref);
	var searchText = escape(searchObj.value);
	var searchType = $('series_type') ? $('series_type').value : 'anime';
	var doSearch = false;
	
	if (typeof(e) == "object")
	{
		ie ? key = window.event.keyCode : "";
		ff ? key = e.which : "";
		
		if (key == 13)
			doSearch = true;
	}
	else if (typeof(e) == "boolean" && e)
	{
		doSearch = true;
	}
	
	if (doSearch && searchText.length > 1)
	{
		var resultsDiv = $("search_results");
		resultsDiv.innerHTML = "";
		resultsDiv.className = "loading";
		
		var ajax = new XHConn();
		ajax.connect("/" + where + "/busqueda/", "GET", "q=" + searchText + "&t=" + searchType, searchResults);
		ajax = null;
		
		return false;
	}
	else if (typeof(key) == "number" && key == 13)
	{
		return false;
	}
}

//------------------------------------------------------------------------

var searchResults = function (oXML)
{
	var results = oXML.responseText;
	
	if (results.indexOf("error") != 0)
	{
		var resultsDiv = $("search_results");
		var resultsText = "\n";
		var animeList = results.split("||");
		var totalAnime = animeList.length;
		
		for (var i = 0; i < totalAnime; i++)
		{
			var anime = animeList[i].split("|");
			
			resultsText = resultsText + '<span onclick="selectSeries(this, ' + anime[0] + ')">' + anime[1] + ' <i>(' + anime[2] + ')</i></span>\n';
		}
		
		resultsDiv.innerHTML = resultsText;
		resultsDiv.className = "loaded";
	}
	else
	{
		var error = results.split("|")[1];
		$("search_results").innerHTML = error;
	}
}

//------------------------------------------------------------------------

function selectSeries(spanObj, seriesId)
{
	$("series_id").value = seriesId;
	$("series_name").value = spanObj.childNodes[0].nodeValue + spanObj.childNodes[1].childNodes[0].nodeValue;
	$("series_name_error").className = "error hide";
}

//------------------------------------------------------------------------

function confirmDelete(type)
{
	var doDelete = confirm("�Estas seguro que quieres remover este " + type + "?");
	
	return doDelete;
}

//------------------------------------------------------------------------

// Funciones para agregar nuevos hosters y partes a los archivos de un aporte.
var hosterNum = null;

function addHoster(hosterObj)
{
	var container = hosterObj.parentNode.parentNode;
	var defaultIndex = findChild(container, "FIELDSET");
	var source = container.childNodes[defaultIndex];
	var newHoster = source.cloneNode(true);
	
	defaultIndex = findChild(newHoster, "P");
	defaultIndex = defaultIndex + 1;
	
	while (newHoster.childNodes.length > defaultIndex)
	{
		newHoster.removeChild(newHoster.childNodes[defaultIndex]);
	}
	
	if (!hosterNum)
	{
		var fieldsets = getChilds(container, "fieldset");
		hosterNum = fieldsets.length;
	}
	
	newHoster.id = "hoster_" + hosterNum;
	newHoster.className = "hosters";
	
	var newInputs = newHoster.getElementsByTagName("input");
	newInputs[0].name = "links[" + hosterNum + "][]";
	newInputs[0].value = "";
	newInputs[1].name = "sizes[" + hosterNum + "][]";
	newInputs[1].value = "";
	
	var newSelects = newHoster.getElementsByTagName("select");
	newSelects[0].name = "hoster[" + hosterNum + "]";
	newSelects[1].name = "size_suffix[" + hosterNum + "][]";
	
	var legendIndex = findChild(newHoster, "LEGEND");
	var imgs = getChilds(newHoster.childNodes[legendIndex], "img");
	
	if (imgs.length == 0)
	{
		addDeleteImg(newHoster.childNodes[legendIndex], 16, 16, "http://images.mcanime.net/images/list_delete_icon.png", "Borrar archivo", "deleteHoster(this)");
	}
	else
	{
		imgs[0].onclick = new Function("deleteHoster(this)");
	}
	
	var childs = getChilds(newHoster, "p");
	
	container.appendChild(newHoster);
	hosterNum++;
	
	checkImg(container, "legend", "hoster");
	
	return false;
}

//------------------------------------------------------------------------

function checkImg(parent, node, type)
{
	var childs = getChilds(parent, node);
	if (childs.length > 1)
	{
		var imgs = getChilds(childs[0], "img");
		if (imgs.length == 0)
		{
			if (type == "hoster")
				addDeleteImg(childs[0], 16, 16, "http://images.mcanime.net/images/list_delete_icon.png", "Borrar archivo", "deleteHoster(this)");
			else
				addDeleteImg(childs[0], 10, 10, "http://images.mcanime.net/images/minus.gif", "Borrar parte", "deletePart(this)")
		}
	}
}

//------------------------------------------------------------------------

function deleteHoster(obj)
{
	obj = obj ? obj : this;
	var hoster = obj.parentNode.parentNode;
	
	//------------------------
	history("hoster", hoster);
	//------------------------
	
	var container = hoster.parentNode;
	container.removeChild(hoster);
	
	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 addPart(partObj)
{
	var hoster = partObj.parentNode.parentNode;
	var id = hoster.id.split("_")[1];
	var lastPart = $("last_part_" + id);
	
	var defaultIndex = findChild(hoster, "P");
	var newPart = hoster.childNodes[defaultIndex].cloneNode(true);
	newPart.className = "";
	
	var newInputs = getChilds(newPart, "input");
	//newPart.getElementsByTagName("input");
	newInputs[0].value = "";
	newInputs[1].value = "";
	
	if (lastPart)
	{
		var lastPartNum = parseInt(lastPart.value) + 1;
		lastPart.value = lastPartNum;
		
		newInputs[0].name = "links[" + id + "][" + lastPartNum + "]";
		newInputs[1].name = "sizes[" + id + "][" + lastPartNum + "]";
		
		var newSelects = getChilds(newPart, "select");
		//var tmp = newSelects[0].name.lastIndexOf("[");
		newSelects[0].name = "size_suffix[" + id + "][" + lastPartNum + "]";
	}
	
	var imgs = getChilds(newPart, "img");
	
	if (imgs.length == 0)
	{
		addDeleteImg(newPart, 10, 10, "http://images.mcanime.net/images/minus.gif", "Borrar parte", "deletePart(this)");
	}
	else
	{
		imgs[0].onclick = new Function("deletePart(this)");
	}
	
	hoster.appendChild(newPart);
	
	checkImg(hoster, "p", "part");
	
	return false;
}

//------------------------------------------------------------------------

function addDeleteImg(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 deletePart(obj)
{
	obj = obj ? obj : this;
	var part = obj.parentNode;
	var hoster = part.parentNode;
	
	//------------------------
	history("part", part);
	//------------------------
	
	hoster.removeChild(part);
	
	var childs = getChilds(hoster, "p");
	var totalChilds = childs.length;
	
	if (totalChilds == 1)
	{
		var deleteImg = childs[0].getElementsByTagName("img")[0];
		if (deleteImg)
			deleteImg.parentNode.removeChild(deleteImg);
	}
}

//------------------------------------------------------------------------

var urls = Array();

function validateFileForm()
{
	urls = Array();
	var errors = 0;
	var parts = getChilds($("hosters"), "P");
	var pLength = parts.length;
    var redirect = false;
	var t = getFileType();
    
    if ($('episode_number') && (t == 'E' || t == 'V' || t == 'C'))
    {
        var epValue = getSelectValue('episode_number');
        $('episode_number_error').className = 'error hide';
        
        if (epValue == 0 || epValue == 's' || epValue == -1)
        {
            errors++;
            $('episode_number_error').className = 'error';
            redirect = true;
        }
    }
    
    if ($('new_ep_num') && !epNum('new_ep_num'))
        errors++;
    
    if (checkEmpty('file_name'))
        errors++;
    
    if (errors > 0)
    {
        redirect = true;
        switchTab('archivo_info_tab');
    }
    
	for (var i = 0; i < pLength; i++)
	{
		var pInputs = getChilds(parts[i], "INPUT");
        var h = getChilds(parts[i].parentNode, "SELECT")[0];
        var hUrl = new RegExp(h[h.selectedIndex].getAttributeNode('url').nodeValue, 'i');
        var hName = h[h.selectedIndex].innerHTML;
		var u = pInputs[0].value;
        
		if (pInputs[1].value == "")
		{
			// el input del tamaño del archivo esta vacio
			// arreglar size = tamanio
			setErrorDisplay(parts[i], "sizeEmpty", "No puedes dejar el size de la parte en blanco.");
			
			errors++;
		}
		else
		{
			removeErrorDisplay(parts[i], "sizeEmpty");
		}
        
        if (pInputs[0].value == "")
		{
			// el input de URL esta vacio
			setErrorDisplay(parts[i], "urlEmpty", "No puedes dejar el URL de la parte en blanco.");
			
			errors++;
		}
		else
		{
			removeErrorDisplay(parts[i], "urlEmpty");
			removeErrorDisplay(parts[i], "urlError");
			
			// el input de URL no esta vacio, asi que vamos a ver si no se repite el URL
			var inUrls = checkUrl(u);
			
			if (!inUrls)
			{
                if (hName != "Bittorrent" && !hUrl.test(u))
                {
                    setErrorDisplay(parts[i], "urlError", "El URL contiene errores, revisar el URL del proveedor.");
                    errors++;
                }
                else
                {
                    // el URL no esta repetido, lo almacenamos para futura comparacion
                    urls.push(u);
                    
                    removeErrorDisplay(parts[i], "urlDuplicate");
                }
			}
			else
			{
				// el URL esta repetido, avisar el respecto
				setErrorDisplay(parts[i], "urlDuplicate", "El URL de la parte esta repetido.");
				
				errors++;
			}
		}
	}
	
	if (errors > 0)
    {
		if (!redirect)
            switchTab('archivo_file_tab');
        return false;
    }
	
	// Aqui agregamos los hidden de los archivos o las partes que fueron eliminados
	setDeletedFields();
	
	return true;
}

//------------------------------------------------------------------------

function checkUrl(u)
{
	var uLength = urls.length;
	
	for (var i = 0; i < uLength; i++)
	{
		if (urls[i] == u)
			return true;
	}
	
	return false;
}

//------------------------------------------------------------------------

function checkEmpty(refObj)
{
    refObj = $(refObj);
    $(refObj.id + '_error').className = 'error hide';
    
    if (refObj.value == '')
    {
        $(refObj.id + '_error').className = 'error';
        return true;
    }
    
    return false;
}

//------------------------------------------------------------------------

function setErrorDisplay(node, ident, text)
{
	var parent = node.parentNode;
	
	var errorDiv = document.createElement("div");
	var errorText = document.createTextNode(text);
	errorDiv.appendChild(errorText);
	errorDiv.className = "error " + ident;
	
	if (node.nextSibling)
	{
		var tag = node.nextSibling;
		
		if (tag.tagName == "DIV" && tag.className.indexOf("error") != -1)
		{
			parent.replaceChild(errorDiv, tag);
		}
		else
		{
			parent.insertBefore(errorDiv, tag);
		}
	}
	else
	{
		parent.appendChild(errorDiv);
	}
}

//------------------------------------------------------------------------

function removeErrorDisplay(node, ident)
{
	var tag = node.nextSibling;
	
	if (tag && tag.tagName == "DIV" && tag.className.indexOf("error") != -1 && tag.className.indexOf(ident) != -1)
	{
		var parent = tag.parentNode;
		parent.removeChild(tag);
	}
}

//------------------------------------------------------------------------

function setDeletedFields()
{
	var container = $("hosters");
	
	if (hosters.length > 0)
	{
		for (var hk in hosters)
		{
			if (hosters[hk].index && hosters[hk].content.className.indexOf("old") != -1)
			{
				var f = createHiddenField("hoster", hosters[hk].file_id);
				container.appendChild(f);
			}
			else
			{
				for (var pk in hosters[hk].parts)
				{
					if (hosters[hk].parts[pk].content.className == "old")
					{
						var p = hosters[hk].parts[pk];
						var i = getChilds(p.content, "INPUT");
						var u = i[0].value;
						var f = createHiddenField("part", hosters[hk].file_id, u);
						container.appendChild(f);
					}
				}
			}
		}
	}
}

//------------------------------------------------------------------------

function createHiddenField(type, id)
{
	var f = document.createElement("input");
	f.type = "hidden";
	
	if (type == "hoster")
	{
		f.name = "deleted_hosters[]";
		f.value = id;
	}
	else if (type == "part")
	{
		f.name = "deleted_parts[" + id + "][]";
		f.value = arguments[2];
	}
	
	return f;
}

//------------------------------------------------------------------------

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 getChilds(parent, node)
{
	var childs = parent.getElementsByTagName(node);
	
	return childs;
}

//------------------------------------------------------------------------

var hosters = Array();

// Funciones para el undo
function history(type, node)
{
	if (type == "hoster")
	{
		var id = node.id.split("_")[1];
		var file = findChild(node, "INPUT");
		
		var h = !hosters[id] ? new hoster() : hosters[id];
		h.index = id;
		h.content = node;
		if (file)
			h.file_id = node.childNodes[file].value;
		
		hosters[id] = h;
		h = null;
	}
	else if (type == "part")
	{
		var parent = node.parentNode;
		var file = findChild(parent, "INPUT");
		var id = parent.id.split("_")[1];
		
		var obj = node;
		var ix = 0;
		
		while (obj.previousSibling)
		{
			obj = obj.previousSibling;
			if (obj.tagName == "P")
				ix++;
		}
		
		var p = new parts();
		p.index = ix;
		p.content = node;
		
		var h = !hosters[id] ? new hoster() : hosters[id];
		if (file)
			h.file_id = parent.childNodes[file].value;
		h.parts.push(p);
		
		hosters[id] = h;
		
		h = p = null;
	}
}

//------------------------------------------------------------------------

function undo(type)
{
	if (type == "hoster")
	{
		if (hosters.length == 0)
			return false;
		
		var lastIndex = getLastIndex();
		
		if (lastIndex == null)
			return false;
		
		var hoster = hosters[lastIndex];
		var position = parseInt(hoster.index);
		var container = $("hosters");
		var childs = getChilds(container, "fieldset");
		
		if (childs.length == 1)
		{
			var parent = childs[0].childNodes[0];
			while (parent.nodeType != 1)
				parent = parent.nextSibling;
			
			addDeleteImg(parent, 16, 16, "http://images.mcanime.net/images/list_delete_icon.png", "Borrar archivo", "deleteHoster(this)");
		}
		
		if (childs[hoster.index])
		{
			container.insertBefore(hoster.content, childs[position]);
		}
		else
		{
			container.appendChild(hoster.content);
		}
		
		if (hosters[lastIndex].parts.length > 0)
		{
			hosters[lastIndex].index = null;
			hosters[lastIndex].content = null;
		}
		else
		{
			delete(hosters[lastIndex]);
		}
	}
	else if (type == "part")
	{
		var hoster = arguments[1].parentNode.parentNode;
		var id = hoster.id.split("_")[1];
		
		if (!hosters[id] || hosters[id].parts.length == 0)
			return false;
		
		var childs = getChilds(hoster, "p");
		var part = hosters[id].parts.pop();
		
		if (childs.length == 1)
		{
			addDeleteImg(childs[0], 10, 10, "http://images.mcanime.net/images/minus.gif", "Borrar parte", "deletePart(this)");
		}
		
		if (childs[part.index])
		{
			hoster.insertBefore(part.content, childs[part.index]);
		}
		else
		{
			hoster.appendChild(part.content)
		}
	}
}

//------------------------------------------------------------------------

/**
 * Funcion tipo clase para hacer instancias de objeto tipo hoster
 * 
 * @return void
 */
function hoster()
{
	// Propiedad que guarda el lugar donde estaba antes de ser eliminado.
	this.index = null;
	// Propiedad que guarda el id del archivo
	this.file_id = null;
	// Propiedad que guarda el contenido del hoster
	this.content = null;
	// Propiedad que guarda la referencia a las partes del hoster
	this.parts = Array();
}

//------------------------------------------------------------------------

/**
 * Funcion tipo clase para hacer instancias de objeto tipo parts
 * 
 * @return void
 */
function parts()
{
	// Propiedad que guarda el lugar donde estaba antes de ser eliminado
	this.index = null;
	// Propiedad que guarda el contenido de las partes
	this.content = null;
}

//------------------------------------------------------------------------

/**
 * Funcion para traer el ultimo hoster valido para hacer undo (es decir, que tenga la propiedad de index)
 * 
 * @return mixed
 */
function getLastIndex()
{
	var i = null;
	for (var k in hosters)
	{
		if (hosters[k].index)
			i = k;
	}
	
	return i;
}

//------------------------------------------------------------------------

function switchType(typeObj)
{
	//var infos = Array($('episode_number_div'), $('audio_dl'), $('subtitle_dl'), $('more'));
	var infos = Array($('episode_number_div'), $('audio_div'), $('subtitle_div'), $('image_quality_div'));
	var showArray = Array('E', 'C', 'V', 'PV', 'P', 'OK', 'A', 'D');
    // Arreglo condicional para los nuevos tipos de archivos
    var condArray = Array('PV', 'P', 'OK', 'A', 'D');
	var iLen = infos.length;
	var c = 'hide';
    
	if (in_array(showArray, typeObj[typeObj.selectedIndex].value) !== false)
	{
		c = 'show';
		//adicional para habilitar el enlace de mas info.
		if ($('archivo_add_tab'))
			$('archivo_add_tab').className = '';
	}
	else
	{
		//adicional para deshabilitar el enlace de mas info.
		if ($('archivo_add_tab'))
			$('archivo_add_tab').className = 'disabled';
	}
    
    if (!$('archivo_add_tab'))
        switchMangaType(typeObj);
	
	for (var i = 0; i < iLen; i++)
		if (infos[i])
			infos[i].className = c;
    
    if (in_array(condArray, typeObj[typeObj.selectedIndex].value) !== false)
        $('episode_number_div').className = 'hide';
}

function switchMangaType(typeObj)
{
	setMangaText(typeObj);
    
    if($('episode_number'))
        $('episode_number').parentNode.removeChild($('episode_number'));
    appendType();
}

//------------------------------------------------------------------------

function setMangaText(typeRef)
{
    var typeObj = $(typeRef);
    var mangaTxt = 'Capítulo';
    if (typeObj[typeObj.selectedIndex].value == 'V')
        mangaTxt = 'Volumen';
    
    $('chvol').innerHTML = mangaTxt;
    $('chvol_t').innerHTML = mangaTxt;
    $('chvol_w').innerHTML = mangaTxt;
}

//------------------------------------------------------------------------

var searchFansubs =
{
	resultsDiv: null,
	
	search: function(formObj, resultsId)
	{
		this.resultsDiv = $(resultsId);
		
		// Clean results area
		this.clean();
		
		var form = document.forms[formObj.name];
		var q = form.q.value;
		q = q.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
		var a = form.a.value;
		
		if (q.length == 0)
		{
			this.msg("Porfavor espec\xEDfica un criterio de b\xFAsqueda");
		}
		else if (q.length < 2)
		{
			this.msg("Debe introducir 2 o m\xE1s car\xE1cteres para realizar la b\xFAsqueda.");
		}
		else
		{
			var ajax = new XHConn();
			ajax.connect("/busqueda/fansubs/", "GET", "a=" + a + "&q=" + q, this.results)
		}
		
		return false;
	},
	
	results: function(oXML)
	{
		var r = oXML.responseText;
		
		if (r.indexOf("error") != -1)
		{
			this.searchFansubs.msg(r.split("|")[1]);
		}
		else
		{
			r = r.split("||");
			rLength = r.length;
			
			for (var i = 0; i < rLength; i++)
			{
				this.searchFansubs.row(r[i]);
			}
		}
	},
	
	row: function (str)
	{
		
		// [fansub_id, fansub_name, fansub_alias]
		var v = str.split("|");
		
		var a = document.createElement("a");
		var aText = document.createTextNode("[" + v[2] + "] " + v[1]);
		a.href= "/seleccionar/" + v[0];
		a.appendChild(aText);
		
		var h3 = document.createElement("h3");
		h3.className = "fansub";
		h3.appendChild(a);
		
		var br = document.createElement("br");
		
		this.resultsDiv.appendChild(h3);
		this.resultsDiv.appendChild(br);
	},
	
	msg: function (str)
	{
		var d = document.createTextNode(str);
		
		this.resultsDiv.appendChild(d);
	},
	
	clean: function()
	{
		while (this.resultsDiv.childNodes[0])
		{
			this.resultsDiv.removeChild(this.resultsDiv.childNodes[0]);
		}
	}
}

//------------------------------------------------------------------------

function moreInfo(spanObj)
{
	var tmpObj = spanObj.nextSibling;
	
	while (tmpObj.tagName != "DIV")
	{
		tmpObj = tmpObj.nextSibling;
	}
	
	if (tmpObj.className == "hide")
	{
		var c = "show";
		spanObj.innerHTML = spanObj.innerHTML.replace("[+]", "[-]");
	}
	else
	{
		var c = "hide";
		spanObj.innerHTML = spanObj.innerHTML.replace("[-]", "[+]");
	}
	
	tmpObj.className = c;
}

//------------------------------------------------------------------------

function addImage(obj, t)
{
	var types = {
		'image': 'Remover imagen',
		'audio': 'Remover audio',
		'subtitle': 'Remover subtítulo'
	};
	var childs = {
		'image': 1,
		'audio': 3,
		'subtitle': 3
	};
	
	var dli = $(t + '_dl');
	var dds = dli.getElementsByTagName('dd');
	var ddLen = dds.length;
	
	if (ddLen == 1 && dds[0].childNodes.length == childs[t])
	{
		addDeleteImg(dds[0], 10, 10, 'http://images.mcanime.net/images/minus.gif', types[t], 'deleteImg(this)');
	}
	
	var ddClone = dds[0].cloneNode(true);
	if (t == 'image')
		ddClone.childNodes[0].value = '';
	ddClone.removeChild(ddClone.childNodes[childs[t]]);
	addDeleteImg(ddClone, 10, 10, 'http://images.mcanime.net/images/minus.gif', types[t], 'deleteImg(this)');
	
	dli.appendChild(ddClone);
}

//------------------------------------------------------------------------

function deleteImg(obj)
{
	var pNode = obj.parentNode;
	var dli = pNode.parentNode;
	pNode.parentNode.removeChild(pNode);
	
	var dds = dli.getElementsByTagName('dd');
	var ddLen = dds.length;
	
	if (ddLen == 1)
	{
		dds[0].removeChild(dds[0].getElementsByTagName('img')[0]);
	}
}

//------------------------------------------------------------------------

var archivoImages =
{
	obj: null,
	
	del: function (obj, str, seriesId)
	{
		if (str != '' && typeof(str) == 'string' && confirm('¿Seguro que deseas borrar esta imagen?'))
		{
			while (obj.nodeName != 'DD')
				obj = obj.parentNode;
			
			this.obj = obj;
			
			var ajax = new XHConn();
			ajax.connect('/archivos/borrar_imagen/', 'GET', 'q=' + escape(str) + '&s=' + seriesId, this.results);
		}
		
		return false;
	},
	
	results: function (oXML)
	{
		var r = oXML.responseText.split(':');
		
		if (r[0] == 'confirm')
		{
			alert(r[1]);
			this.archivoImages.obj.parentNode.removeChild(this.archivoImages.obj);
		}
		else
			alert(r[1]);
	}
}

//------------------------------------------------------------------------

function mangaUpload(aObj, file_id, online)
{
	if ($('manga_upload').className == 'hide' || (file_id && $('file_id').value != file_id))
	{
		$('warn').className = 'hide';
		
		if (online)
		{
			$('warn').innerHTML = 'Este capítulo se encuentra enlínea.<br />Utiliza el formulario si deseas resubirlo.';
			$('warn').className = 'show';
		}
		
		$('file_id').value = file_id;
		var pos = findPos(aObj);
		
		$('manga_upload').style.left = pos[0] + 4 + 'px';
		$('manga_upload').style.top = pos[1] + 15 + 'px';
		$('manga_upload').className = 'show';
	}
	else
	{
		$('manga_upload').className = 'hide';
	}
}

//------------------------------------------------------------------------

function findPos(obj)
{
	var curleft = curtop = 0;
	
	if (obj.offsetParent)
	{
		do
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			
			if (obj.offsetParent.id == "wrapper")
				break;
		}
		while (obj = obj.offsetParent);
		
		return [curleft,curtop];
	}
}

//------------------------------------------------------------------------

function checkUpload()
{
	var fileType = /\.(zip|rar)$/i;
	$('warn').innerHTML = '';
	$('warn').className = 'hide';
	
	if ($('manga_upload')['archivo'].value == '')
	{
		$('warn').innerHTML = 'Debes especificar el archivo a subir.';
		$('warn').className = 'show';
		return false;
	}
	else if (!fileType.test($('manga_upload')['archivo'].value))
	{
		$('warn').innerHTML = 'Sólo se aceptan archivos comprimidos ZIP o RAR.';
		$('warn').className = 'show';
		return false;
	}
	
	$('manga_upload')['subir'].value = 'Enviando...';
	$('manga_upload')['subir'].disabled = 'disabled';

}

//------------------------------------------------------------------------

var currentTab = null;
var tabs = Array();
	
function switchTab(tabRef)
{
	var tabObj = $(tabRef);
    
    if (!currentTab)
		currentTab = $('archivo_info_tab');
	
	if (currentTab != tabObj && tabObj.className == '')
	{
		currentTab.className = '';
		tabObj.className = 'selected';
		
		$(currentTab.id.replace('_tab', '_div')).className = 'hide';
		$(tabObj.id.replace('_tab', '_div')).className = 'show';
		
		currentTab = tabObj;
	}
}

//------------------------------------------------------------------------

function switchButtonTab(dir)
{
    if (tabs.length == 0)
    {
        var pma = $('profile_menu').childNodes[0];
        
        do
        {
            if (pma.nodeType == 1)
                tabs.push(pma.id);
            
            pma = pma.nextSibling;
        }
        while (pma.nextSibling);
    }
    
    if (!currentTab)
		currentTab = $(tabs[0]);
    
    var d = (dir == 'n') ? 1 : -1;
    var i = in_array(tabs, currentTab.id) + d;
    
    if ($(tabs[i]).className == 'disabled')
        i += d;
    
    switchTab (tabs[i]);
}

//------------------------------------------------------------------------

var episodeObj = null;
var currentEp = null;

function setEpisodeNumber(selObj)
{
    var sv = selObj[selObj.selectedIndex].value;
    if (sv == -1)
    {
        if (!episodeObj) episodeObj = selObj.cloneNode(true);
        if (currentEp == null) currentEp = episodeObj.selectedIndex;
        selObj.parentNode.removeChild(selObj);
        
        var t = getFileType();
        var e = (t == 'E' || t == 'V' || t == 'V') ? ' onkeyup="epNum(this);"' : '';
        
        var s = document.createElement('span');
        s.innerHTML = '<input type="text" value="" name="archivo[new_episode_number]" id="new_ep_num" size="5" class="text" onkeydown="return digits(this, event);"' + e + ' /> <img src="http://images.mcanime.net/images/delete.gif" width="16" height="16" class="listback" onclick="listEpisodeNumbers(this);" />';
        
        $('chvol').parentNode.appendChild(s);
    }
}

//------------------------------------------------------------------------

//o = input object, e = event, k = key, t = file_type
function digits(o, e)
{
    var t = getFileType();
    
    if (!e.which && ((e.charCode || e.charCode === 0) ? e.charCode : e.keyCode))
        e.which = e.charCode || e.keyCode;
    
    var k = e.which.toString();
    if (k.match(/^(4[8-9]|5[0-7]|9[6-9]|10[0-5]|8|46|3(7|9))$/) || (k == 109 && o.value.indexOf('-') == -1 && t == 'E'))
        return true;
    
    return false;
}

//------------------------------------------------------------------------

function epNum(o)
{
    o = $(o);
    var t = getFileType();
    
    if (t == 'E' && o.value.match(/^[0-9]{1,4}-[0-9]{1,4}$/))
    {
        var en = o.value.split('-');
        if (en[1] - en[0] != 1)
        {
            $('episode_number_error').className = 'error';
            return false;
        }
        else
            $('episode_number_error').className = 'error hide';
    }
    else if (o.value.match(/^[0-9]{1,4}-$/))
    {
        $('episode_number_error').className = 'error';
        return false;
    }
    else if (o.value.match(/^[0-9]{1,4}$/))
        $('episode_number_error').className = 'error hide';
    else
    {
        $('episode_number_error').className = 'error';
        return false;
    }
    
    return true;
}

//------------------------------------------------------------------------

function listEpisodeNumbers(imgObj)
{
    if ($('archivo_add_tab'))
    {
        episodeObj.selectedIndex = currentEp;
        $('chvol').parentNode.appendChild(episodeObj);
    }
    else
        appendType();
    
    $('episode_number_error').className = 'error hide';
    imgObj.parentNode.parentNode.removeChild(imgObj.parentNode);
}

//------------------------------------------------------------------------

function appendType()
{
    var t = getFileType();
    if (t == 'V')
    {
        volumeObj.selectedIndex = currentVol;
        $('chvol').parentNode.appendChild(volumeObj);
    }
    else if (t == 'C')
    {
        episodeObj.selectedIndex = currentEp;
        $('chvol').parentNode.appendChild(episodeObj);
    }
    
    setMangaText('file_type');
}

//------------------------------------------------------------------------

function getFileType()
{
    var t = $('file_type');
    
    return t[t.selectedIndex].value;
}

//------------------------------------------------------------------------

function setMainImage(aObj, seriesId, mirrorOf, imgName)
{
    if (!aObj.id)
    {
        var ajax = new XHConn();
        ajax.connect('/archivos/set_main_image', 'POST', 'q='+imgName+'&s='+seriesId+'&m='+mirrorOf, function(oXML){
            if (oXML.responseText == 'success')
            {
                if ($('ismain'))
                {
                    $('ismain').className = 'notmain';
                    $('ismain').id = '';
                }
                aObj.className = '';
                aObj.id = 'ismain';
                
                if ($('mainImgError') && $('mainImgError').className.indexOf('hide') == -1)
                    $('mainImgError').className = 'error hide';
            }
            else
            {
                alert(oXML.responseText);
            }
        });
        ajax = null;
    }
}

//------------------------------------------------------------------------

function deleteFileImage(aObj, seriesId, mirrorOf, imgName, isMain)
{
    if (confirm('¿Elminar imagen?'))
    {
        var ajax = new XHConn();
        ajax.connect('/archivos/borrar_imagen', 'POST', 'q='+imgName+'&s='+seriesId+'&m='+mirrorOf+'&d='+(isMain ? 'true' : 'false'), function(oXML){
            if (oXML.responseText == 'success')
            {
                aObj.parentNode.parentNode.parentNode.removeChild(aObj.parentNode.parentNode);
                if (isMain)
                    $('mainImgError').className = 'error';
            }
            else
            {
                alert(oXML.responseText);
            }
        });
        ajax = null;
    }
}

//------------------------------------------------------------------------

function setNewVersion(doSet)
{
    if (doSet)
        var nvInput = 'Versión: <input type="text" name="version_number" value="" size="1" maxlength="1" class="text" onkeydown="return digits(this, event);" /> <img src="http://images.mcanime.net/images/delete.gif" width="16" height="16" class="listback" onclick="setNewVersion(false);" />';
    else
        var nvInput = '<input type="checkbox" name="new_v" value="1" class="chk" onclick="setNewVersion(true);" /> ¿Nueva versión?';
    
    $('new_version').innerHTML = nvInput;
}

//------------------------------------------------------------------------

function help (ref)
{
	var element = $(ref + '_help');
	element.className = element.className.indexOf('hide') >= 0 ? 'help' : 'help hide';
}

//------------------------------------------------------------------------

function in_array(p_arr, p_val)
{
	for(var i = 0, l = p_arr.length; i < l; i++)
	{
		if(p_arr[i] == p_val)
			return i;
	}
	
	return false;
}
