Raw Source
Wirn_Cael / Hachede Plus

// ==UserScript==
// @name				Hachede Plus
// @namespace	    	hachedePlus
// @description		    Addon para +Hachede
// @icon				https://hachede.me/favicon.ico?lv=2.2
// @include				https://hachede.me/*
// @include				http://hachede.me/*
// @version				15.1
// @date				19/09/2016
// @author				darkvier & WirnCael
// @license             Apache-2.0
// @grant				none
// @require				https://code.jquery.com/jquery-2.2.2.js
// @priority			1
// @run-at				document-end
// @updateURL 			https://openuserjs.org/meta/darkvier/Hachede_Plus.meta.js
// @downloadURL			https://openuserjs.org/install/darkvier/Hachede_Plus.user.js
// ==/UserScript==

var timeStart = Date.now();
var j = jQuery.noConflict(true);


var site = location.href.match(/http[s]{0,1}:\/\/[a-z0-9\.]{4,}\//gi)[0];
var searchAjaxContador = 0;
var cssRatesIcon = "display: inline-block; height: 12px; font-size: 10px;"+
						"line-height: 1; padding: 3px; margin: 0px 2px;";

// Variables del Historial
var tipoHistorial = {
         Activos: 0,
         Inactivos: 1
};

var tipoHistorialActual = 0;
var ordenHistorialActualTipo = 1;  // 0 down, 1 up
var ordenHistorialActualNombre ="Actualización";
var arrayTorrentsActivos = [];
var arrayTorrentsInactivos = [];
var arrayTorrentsActivosOriginal = [];
var arrayTorrentsInactivosOriginal = [];


/*###########		INDICE		#########*/

j( document ).ready(function( $ ) {
	timeLog("j(document).ready");

	// Ejecutar siempre
	fInit();

	if(location.href === site+"?p=home&pid=1"){
		fHome();	// Seccion de inicio
	}else{
		fNoHome();	// No Seccion inicio
	}

	// Listado de torrents
	if(location.href.search("p=torrents&pid=32") !== -1){
		fTorrentsListado();
	}

	// Mostrar torrent individual
	if(location.href.search("p=torrents&pid=10&action=details&tid=") !== -1){
		fTorrentIndividual();

	// Busqueda de torrents
	}else if(location.href.search("p=torrents&pid=10") !== -1){
		fTorrentsBusqueda();
	}

	// Listado o busqueda de torrents
	if(location.href.indexOf("p=torrents") > -1){
		fImgRatios();
	}

	// Forum -> viendo hilo
	if(location.href.search(/p=forums&pid=[\d]+&fid=[\d]+&tid=[\d]+/gi) > -1){
		j("h3.posterInfo").css({"max-height":"205px"}); // Limita el alto del div de las medallas
	}

});

/*###########		FUNCIONES INDICE		#########*/

function timeLog(texto){
	console.log("Tiempo de carga: "+(Date.now()-timeStart)+" "+texto);
}

function fInit(){
	//Reubicar "Top 10"
	j("#menu").find("li").eq(2).find("div").find("div")
		.append("<a class='link' href='"+site+"?p=topten&pid=24' original-title=''>Top 10</a>");
	j("#menu").find("li").eq(7).remove();

	//Comprimir contacto
	j("#menu").find("li").eq(7).addClass("nodrop").find("div").remove();
	j("#menu").find("li").eq(7).find("a").removeClass("drop");

	//Buscador en la barra superior
	j("#menu").append(searchEncabezado);
	fBusquedaEventos("Encabezado");

	//link "Torrents" ya ordenados
	j("#menu").find("li").eq(2).find("a").first().attr("href",
		site+"?p=torrents&pid=10&sortOptions[sortBy]=added&sortOptions[sortOrder]=desc&page=1");

	// Para el historial de la barra de navegacion
    j('#history_link').click(function(){
        fDetectaHistorial();
    });

	// Mostrar nombre de script y version en la web
	j("#inner").find("fieldset").first().append("<span style='float: right;' class='crust'"+
		" itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'><a original-title=''"+
		" href='"+site+"?p=forums&pid=11&fid=3&tid=3675' class='crumb' rel='up' itemprop='url'>"+
		" <span original-title='' itemprop='title'>Hachede Plus v"+GM_info.script.version+
		"</span></a></span>");
}

function fHome(){
	// Para el Historial del panel de usuario de HOME (debajo del avatar)
	j('#logged').parent().delegate('span', 'click', function(){
		fDetectaHistorial();
	});

	//Cambia las img de los ratios
	fImgRatiosTorrentsRecientes();
}


function fNoHome(){
	//Ocultar Torrents Recientes Tipo 1
	j("#recentTorrentsHeader").hide();
	j("#recentTorrents").hide();

	//Ocultar Torrents Recientes Tipo 2
	if(j("#recentTorrents").length){
		j("#recentTorrents").parent().find("h4").find("img").each(function(){
			if(j(this).attr("rel") === "recentTorrents"){
				j(this).parent().hide();
			}
		});
	}
	j("#recentTorrents").hide();
}

function fBusquedaNormalInsertar(){
	// Eliminando HTML busqueda viejo
	j("#search_torrent").remove();	// Form busqueda
	j("#recentTorrentGenres").parent().remove();	// Form Generos
	j("#displayOptions").parent().parent().remove();	// Form orden

	// Insertar HTML busqueda nuevo
	if(j("#refreshDonateUs").length > 0){ //si esta el div donaciones
		j("#refreshDonateUs").after(searchNormal);
	}else{
		j("#content").prepend(searchNormal);
	}


	// Actualizar el form busqueda con los parametros de la URL
	var datos = location.href.split("&");

	for(var i=0; i<datos.length; i++){
		var param = datos[i].split("=");	//[0] nombre, [1] valor
		switch(param[0]){
			case "keywords":{
				var txt = decodeURI(param[1]).replace(/\+/g," ");
				j("#searchNormal").find("input[name='keywords']").val(txt);
				break;
			}
			case "search_type":{
				j("#searchNormal").find("select[name='search_type']").val(decodeURI(param[1]));
				break;
			}
			case "sortOptions[sortBy]":{
				j("#searchNormal").find("select[name='sortOptions[sortBy]']").val(decodeURI(param[1]));
				break;
			}
			case "sortOptions[sortOrder]":{
				j("#searchNormal").find("select[name='sortOptions[sortOrder]']").val(decodeURI(param[1]));
				break;
			}
			case "genre":{
				j("#searchNormal").find("select[name='genre']").val(decodeURI(param[1]));
				break;
			}
		}
	}
}

function fTorrentsListado(){
	//j("div.torrentDescription").remove();
	//Ampliando pagina
	j("#sidebar").remove();
	j("#content").removeClass("semiWidth");

	fBusquedaNormalInsertar();
	fBusquedaEventos("Normal");
}

function fTorrentsBusqueda(){
	//j("div.torrentDescription").remove();
	fBusquedaNormalInsertar();
	fBusquedaEventos("Normal");

}

function fTorrentIndividual(){
	//Visualizando un torrent
	j("#displayOptions").parent().parent().remove(); //borrar recuadro orden busqueda
}


/*###########		FUNCIONES ESPECIFICAS		#########*/

function fBusquedaEventos(tipo){

	var searchKeyword = j("#search"+tipo).find("input[name='keywords']");
	j(searchKeyword).focus();

	// Detecta cambios en searchKeyword y lanza autocompletado
	var keywordsOld = j(searchKeyword).val();
	setInterval(function(){
		if(keywordsOld != j(searchKeyword).val()){
			searchCheck(j(searchKeyword).parent());
		}
		keywordsOld = j(searchKeyword).val();
	}, 1000);
}

// Filtra las pulsaciones de teclado para reducir las llamadas ajax
function searchCheck(elemento){
	searchAjaxContador++;
	setTimeout(function(){
		searchAjaxContador--;
		if(searchAjaxContador === 0)
			searchAjax(elemento);
	}, 1000);
}

function searchAjax(elemento){
	// Solo se busca si hay mas de 2 caracteres escritos
	var keywords = j(elemento).find("input[name='keywords']").val();
	if(keywords.length <= 2){
		if(j("#autoSearchTorrentResult").length)
			j("#autoSearchTorrentResult").remove();
		return;
	}

	// Datos para realizar el ajax
	var logOutHref = j("#logout").attr("href");
	var StrIni = logOutHref.lastIndexOf("=");
	var securitytoken = logOutHref.substr(StrIni + 1);

	var ajax = j.ajax({
					type: "POST",
					url: "ajax.php",
					data: {
						action: "search_torrent",
						keywords: keywords,
						search_type: "name",
						securitytoken: securitytoken
					}
				});

	// Cuando carga completamente el ajax
	ajax.done(function( msg ) {

		//Crear div emergente resultados
		if(!j("#autoSearchTorrentResult").length){

			if(j(elemento).attr('id') === "searchEncabezado"){
				j(elemento).append("<div id='autoSearchTorrentResult' class='torrent-box' "+
				"style='max-width: 620px; position: relative; display: inline-block; "+
				"box-shadow: 8px 8px 9px rgb(136, 136, 136); min-width: 220px !important;'>");
			}else{
				j(elemento).append("<div id='autoSearchTorrentResult' class='torrent-box' "+
					"style='box-shadow: 8px 8px 9px rgb(136, 136, 136); min-width: 220px;'>");
			}
		}

		// Si se han encontrado resultados
		if(msg.length != 0){
			j("#autoSearchTorrentResult").html(msg).removeClass("error");
		}else{
			j("#autoSearchTorrentResult").html("Error! No se han encontrado torrents")
				.addClass("error").css({"border-top":"1px solid rgb(229, 153, 170) !important;"});
		}

		// Añadir Icono & crear eventos para cerrar ventana resultados
		j("#autoSearchTorrentResult").append("<img id='closeSearch' src='"+site+
		"styles/default/overlay/close.png' style='cursor: pointer; position: absolute; right: -10px; top: -10px;'>");
		j("#closeSearch").click(function(){
			j("#autoSearchTorrentResult").remove();
		});
		j('html').click(function() {
			j("#autoSearchTorrentResult").remove();
		});

		// Posicion horizontal div segun contenido
		if(j(elemento).attr('id') === "searchEncabezado"){
			var right = j("#autoSearchTorrentResult").width() - (j(elemento).width() + 20);
			j("#autoSearchTorrentResult").css({"right":right+"px"})
		}
	});
}

function fImgRatios(){
	// Descarga FREE
	j( "#content").find("img[title='FREE LEECH!'], img[original-title='FREE LEECH!']").each(function(){
		j(this).after("<div style='"+cssRatesIcon+
			"border: 1px solid rgb(2, 189, 4); background-color: green;'>↓ FREE</div>");
		j(this).remove();
	});

	// Descarga 0.X
	j( "#content").find("img[title^='Multiplicador de descarga:'], img[original-title^='Multiplicador de descarga:']")
	.each(function(){
		var cantidad = "?";

		if(j(this).attr("title") && j(this).attr("title").search(/([0-9]+[\\.0-9]{0,2})/g) !== -1){
			cantidad = j(this).attr("title").match(/([0-9]+[\.0-9]{0,2})/g)[0];
		}else if(j(this).attr("original-title") && j(this).attr("original-title")
		.search(/([0-9]+[\\.0-9]{0,2})/g) !== -1){
			cantidad = j(this).attr("original-title").match(/([0-9]+[\.0-9]{0,2})/g)[0];
		}

		j(this).after("<div style='"+cssRatesIcon+"border: 1px solid rgb(2, 189, 4); background-color: green;'>↓ "
					+cantidad+"x</div>");
		j(this).remove();
	});

	// Subida 1.X | 2
	j( "#content")
	.find("img[title^='Multiplicador de subida:'], img[original-title^='Multiplicador de subida:']")
	.each(function(){
		var cantidad = "?";

		if(j(this).attr("title") && j(this).attr("title").search(/([0-9]+[\\.0-9]{0,2})/g) !== -1){
			cantidad = j(this).attr("title").match(/([0-9]+[\.0-9]{0,2})/g)[0];
		}else if(j(this).attr("original-title") && j(this).attr("original-title")
			.search(/([0-9]+[\\.0-9]{0,2})/g) !== -1){
				cantidad = j(this).attr("original-title").match(/([0-9]+[\\.0-9]{0,2})/g)[0];
		}

		j(this).after("<div style='"+cssRatesIcon+"border: 1px solid rgb(0, 66, 255); "+
			"background-color: rgb(26, 26, 206);'>↑ "+cantidad+"x</div>");
		j(this).remove();
	});
}

function fImgRatiosTorrentsRecientes(){
	/* Cambia las bajadas FREE*/
	j( "#recentTorrents").find(".scrollable" ).find(".items").find(".widthoutSidebar, .widthSidebar")
		.find("img[alt*='FREE LEECH!']").closest("img").each(function(){
        var origTitle = $(this).attr("original-title");
		$(this).attr("original-title", origTitle.replace("<img src='"+
			"https://hachede.me/styles/default/torrents/torrent_free.png' alt='' title='FREE LEECH!'"+
			"class='middle' id='' rel='resized_by_tsue' />", "<div style='"+cssRatesIcon+
			"border: 1px solid rgb(2, 189, 4); background-color: green;'>↓ FREE</div>"));
	});

    /* Cambia el resto de bajadas*/
	j( "#recentTorrents").find(".scrollable" ).find(".items").find(".widthoutSidebar, .widthSidebar")
		.find("img[alt*='Multiplicador de descarga:']").closest("img").each(function(){
        var cantidad = -1;
		var origTitle = $(this).attr("original-title");
        var index = origTitle.indexOf("Multiplicador de descarga:");
        cantidad = origTitle.substring(index + 27, index + 30);
		$(this).attr("original-title", origTitle.replace("<img src='"+
			" https://hachede.me/styles/default/torrents/torrent_free.png' alt=''"+
			" title='Multiplicador de descarga: " + cantidad + "' class='middle' id=''"+
			" rel='resized_by_tsue' />", "<div style='"+cssRatesIcon+"border: 1px solid rgb(2, 189, 4);"+
			" background-color: green;'>↓ " + cantidad +"x</div>"));
	});

	/* Cambia las subidas */
	j( "#recentTorrents").find(".scrollable" ).find(".items").find(".widthoutSidebar, .widthSidebar")
		.find("img[alt*='Multiplicador de subida:']").closest("img").each(function(){
		var cantidad = -1;
		var origTitle = $(this).attr("original-title");
        var index = origTitle.indexOf("Multiplicador de subida:");
        cantidad = origTitle.substring(index + 25, index + 28);
        cantidad = cantidad.match(/([0-9]+[\.0-9]{0,2})/g)[0]; // Por el 2x
		$(this).attr("original-title", origTitle.replace("<img src='"+
			"https://hachede.me/styles/default/torrents/torrent_multiple_upload.png' alt=''"+
			"title='Multiplicador de subida: " + cantidad + "' class='middle' id='' rel='resized_by_tsue'"+
			"/>", "<div style='"+cssRatesIcon+"border: 1px solid rgb(0, 66, 255);"+
			"background-color: rgb(26, 26, 206);'>↑ "+cantidad+"x</div>"));
	});
}

// Funciones auxiliares del Historial

//Espera a que aparezca la ventana del Historial
function fDetectaHistorial(){
    if (j('#overlay').find('.overlay_header:visible').length > 0) {
        fDetectaPestActiva();
    }
    else{
        setTimeout(function() {
            fDetectaHistorial();
        }, 10);
    }
}

//Detecta la pestaña activa en el Historial
function fDetectaPestActiva(){
    j('a[href="#active_torrents').click(function(){
        tipoHistorialActual = tipoHistorial.Activos;
        fOrdenarTorrents( "Inicio" );
    });
    j('a[href="#inactive_torrents').click(function(){
        tipoHistorialActual = tipoHistorial.Inactivos;
        fOrdenarTorrents( "Inicio" );
    });

    if (j('a[href="#active_torrents').attr('class') === "current") {
      tipoHistorialActual = tipoHistorial.Activos;
      fGuardaHistorial();
    }

   // HACE FALTA ESTA? Empieza siempre en activos? Se deja hasta prueba.
    if (j('a[href="#inactive_torrents').attr('class') === "current") {
         tipoHistorialActual = tipoHistorial.Inactivos;
         fGuardaHistorial();
    }
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")').append(" (↓ Desc.)");
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")').css({"background":"#F5A04C"});
}

//Guarda el Historial
function fGuardaHistorial(){
	arrayTorrentsActivos = [];
	arrayTorrentsInactivos = [];
   j('#overlay').find('tr.trRow:visible').each(function(){
       if(tipoHistorialActual === tipoHistorial.Activos) arrayTorrentsActivos.push(this);
       else arrayTorrentsInactivos.push(this);
   });

   j('#overlay').find('tr.trRow:hidden').each(function(){
       if(tipoHistorialActual === tipoHistorial.Activos) arrayTorrentsInactivos.push(this);
       else arrayTorrentsActivos.push(this);
   });

    arrayTorrentsActivosOriginal = arrayTorrentsActivos.slice();
    arrayTorrentsInactivosOriginal = arrayTorrentsInactivos.slice();
    fHistorialClickable();

    if(tipoHistorialActual === tipoHistorial.Activos) fImprimirHistorial(arrayTorrentsActivos);
    else fImprimirHistorial(arrayTorrentsInactivos);
}

// Habilita la opcion de ordenar el Historial
function fHistorialClickable(){
    j('th.subHeader').css( 'cursor', 'pointer' );
    j('th.subHeader').click(function(){
        if(j(this).text() === "Activos") j(this).css( 'cursor', 'default' );
        else fOrdenarTorrents( j(this).text() );
    });

    //Tamaño ventana
     j('div.overlay_text').attr("style", "max-height: " + (j( window ).height() - 200)
			+ "px; max-with: " + (j( window ).width() - 200) +  "px;");
}

// Ordena los torrents del Historial actualmente visibles en funcion del tipo de orden elegido.
function fOrdenarTorrents( tipoOrden ){
    var array;
    if (tipoHistorialActual === tipoHistorial.Activos)
		array = arrayTorrentsActivos;
    else
		array = arrayTorrentsInactivos;

    // Para quitar las flechas anteriores
    var separators = [" \\(\\↑ Asc\\.\\)"," \\(\\↓ Desc\\.\\)"];
    tipoOrden = tipoOrden.split(new RegExp(separators.join('|'), 'g'))[0];
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")')
		.html(j('.subHeader:contains("' + ordenHistorialActualNombre + '")').text()
			.split(new RegExp(separators.join('|'), 'g'))[0]);
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")').css({"background":"#E47600"});

    if(tipoOrden.indexOf("Nombre del Torrent") >= 0){
        if(ordenHistorialActualNombre === "Nombre del Torrent"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase()
						.localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
            });
        }
    }
    else if(tipoOrden.indexOf("Tamaño") >= 0){
        if(ordenHistorialActualNombre === "Tamaño"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                a = j( a ).find('td.secondRow, td.firstRow').eq(1).text();
                b = j( b ).find('td.secondRow, td.firstRow').eq(1).text();
                a = fCalculaTB(a);
                b = fCalculaTB(b);
                if ((b - a) === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase()
						.localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return b - a;
            });
        }
    }
    else if(tipoOrden.indexOf("Seeders") >= 0){
       if(ordenHistorialActualNombre === "Seeders"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                var aux = j( b ).find('td.secondRow, td.firstRow').eq(2).text() - j( a )
											.find('td.secondRow, td.firstRow').eq(2).text();
                if(aux === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase()
					.localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return aux;
            });
        }
    }
    else if(tipoOrden.indexOf("Leechers") >= 0){
        if(ordenHistorialActualNombre === "Leechers"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                var aux = j( b ).find('td.secondRow, td.firstRow').eq(3).text() - j( a )
								.find('td.secondRow, td.firstRow').eq(3).text();
                if(aux === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase()
					.localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return aux;
            });
        }
    }
    else if(tipoOrden.indexOf("Descargado") >= 0){
        if(ordenHistorialActualNombre === "Descargado"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                a = j( a ).find('td.secondRow, td.firstRow').eq(4).html().split("<br>")[0];
                b = j( b ).find('td.secondRow, td.firstRow').eq(4).html().split("<br>")[0];

                a = fCalculaTB(a);
                b = fCalculaTB(b);

                if ((b - a) === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase()
							.localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return b - a;
            });
        }
    }
    else if(tipoOrden.indexOf("Subido") >= 0){
        if(ordenHistorialActualNombre === "Subido"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                a = j( a ).find('td.secondRow, td.firstRow').eq(5).html().split("<br>")[0];
                b = j( b ).find('td.secondRow, td.firstRow').eq(5).html().split("<br>")[0];

                a = fCalculaTB(a);
                b = fCalculaTB(b);

                if ((b - a) === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase()
					.localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return b - a;
            });
        }
    }
    else if(tipoOrden.indexOf("Ratio") >= 0){
        if(ordenHistorialActualNombre === "Ratio"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                var aux = j( b ).find('td.secondRow, td.firstRow').eq(6).text()
							- j( a ).find('td.secondRow, td.firstRow').eq(6).text();
                if(aux === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase()
					.localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return aux;
            });
        }
    }
    else if(tipoOrden.indexOf("Announce (Tiempo Semilla)") >= 0){
        if(ordenHistorialActualNombre === "Announce (Tiempo Semilla)"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                var aux = parseInt(j( b ).find('td.secondRow, td.firstRow').find('.small').text())
							- parseInt(j( a ).find('td.secondRow, td.firstRow').find('.small').text());
                if(aux === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase()
					.localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return aux;
            });
        }
    }
    else if(tipoOrden.indexOf("Actualización") >= 0){
        if(tipoHistorialActual === tipoHistorial.Activos) array = arrayTorrentsActivosOriginal.slice();
        else array = arrayTorrentsInactivosOriginal.slice();

        if(ordenHistorialActualNombre === "Actualización"){
            if(ordenHistorialActualTipo === 0){
                fOrdenInversoHistorial(array);
            }
            else{
                j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
                ordenHistorialActualTipo = 0;
            }
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
        }
    }
    else if(tipoOrden.indexOf("Inicio") >= 0){
        tipoOrden = "Actualización";
        j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
        ordenHistorialActualTipo = 0;
        if(tipoHistorialActual === tipoHistorial.Activos)	array = arrayTorrentsActivosOriginal.slice();
        else array = arrayTorrentsInactivosOriginal.slice();
    }

    j('.subHeader:contains("' + tipoOrden + '")').css({"background":"#F5A04C"});
    ordenHistorialActualNombre = tipoOrden;
    fImprimirHistorial(array);
}

// Imprime el Historial visible
function fImprimirHistorial(array){
   var color = 0;
    j('#overlay').find('tr.trRow:visible').remove();
    for(var i = 0; i < array.length; i++){
        if(color === 0){
            j(array[i]).find('td.secondRow, td.firstRow').each(function(){
                j(this).attr("class", "secondRow");
            });
            color = 1;
        }
        else{
            j(array[i]).find('td.secondRow, td.firstRow').each(function(){
                j(this).attr("class", "firstRow");
            });
            color = 0;
        }
        fCalculaEnPeligro(array[i]);
        j('#overlay').find('tr:visible').parent().append(array[i]);
    }
}

// Comprueba el ratio y el tiempo de semilla minimo exigido
function fCalculaEnPeligro(actual){
    var ratio = parseInt(j(actual).find('td.secondRow, td.firstRow').eq(6).find('.ratioBad, .ratioGood, .ratioNull').text());
    var tiempoSemilla =j(actual).find('td.secondRow, td.firstRow').find('.small').eq(0).text();
    // Parseamos el tiempo de semilla
    tiempoSemilla = parseInt(tiempoSemilla.substring(1, tiempoSemilla.indexOf(" horas")));
    if(ratio < 1 && tiempoSemilla < 72){
        j(actual).find('td.secondRow, td.firstRow').css("background", "#ff8080");
        j(actual).find('td.secondRow a, td.firstRow a').css("color", "#804d00");
        j(actual).find('td.secondRow, td.firstRow').css("color", "#000000");
    }
}

// Calcula el espacio en TB
function fCalculaTB(elem){
    if(elem.indexOf("KB") !== -1)
        elem = parseFloat(elem) / 1024 / 1024 / 1024;
    else if(elem.search("MB") !== -1)
        elem = parseFloat(elem) / 1024 / 1024;
    else if (elem.search("GB") !== -1)
        elem = parseFloat(elem) / 1024;
    else
        elem = parseFloat(elem);
    return elem;
}

// Invierte el orden y la flecha en el Historial
function fOrdenInversoHistorial(array){
    if(ordenHistorialActualTipo === 0){
        j('.subHeader:contains("' + ordenHistorialActualNombre + '")').append(" (↑ Asc.)");
        ordenHistorialActualTipo = 1;
    }
    else{
        j('.subHeader:contains("' + ordenHistorialActualNombre + '")').append(" (↓ Desc.)");
        ordenHistorialActualTipo = 0;
    }
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")').css({"background":"#F5A04C"});
    array.reverse();
}

timeLog(" final");



/*###########		VARIABLES LARGAS		#########*/


var searchEncabezado = "<form id='searchEncabezado'"+
	"		style='float: right; height: 41px; width: 161px;' action='"+site+"' method='get'>"+
	"	<input type='hidden' name='p' value='torrents'>"+
	"	<input type='hidden' name='pid' value='10'>"+
	"	<input type='hidden' name='search_type' value='name'>"+
	"	<input type='text' placeholder='nombre del torrent...' name='keywords'"+
	"		style='border-radius:7px; margin-top:10px; padding:2px; width:151px !important;'></form>";

var searchNormal = "<form id='searchNormal' method='get' action='"+site+"' "+
	"		style='margin-top: 5px; display: inline-block;' class='torrent-box'>"+
	"	<input type='hidden' original-title='' class='' name='p' value='torrents'>"+
	"	<input type='hidden' original-title='' class='' name='pid' value='10'>"+
	"	<input type='text' original-title='' style='margin-right: 10px;width: 200px !important;'"+
	"		name='keywords' class='s' placeholder='palabra a buscar...'>"+

	"	<select class='' style='margin-right: 10px; height: 28px;' name='search_type'"+
	"		id='cat_content_tin' original-title=''>"+
	"		<option value='name'>en el nombre</option>"+
	"		<option value='description'>en la descripción</option>"+
	"		<option selected='selected' value='both'>en el nombre y la descripción</option>"+
	"		<option value='uploader'>por Uploader</option>"+
	"	</select>"+

	"	<select original-title='' class='' id='' name='sortOptions[sortBy]'"+
	"		style='margin-right: 10px; height: 28px;'>"+
	"		<option selected='selected' value='added'>Fecha añadido</option>"+
	"		<option value='seeders'>Seeders</option>"+
	"		<option value='leechers'>Leechers</option>"+
	"		<option value='size'>Tamaño</option>"+
	"		<option value='times_completed'>Completado</option>"+
	"	</select>"+

	"	<select original-title='' class='' id='' name='sortOptions[sortOrder]'"+
	"    style='margin-right: 10px; height: 28px;'>"+
	"		<option selected='selected' value='desc'>Descendente</option>"+
	"		<option value='asc'>Ascendente</option>"+
	"	</select>"+

	"	 <select id='genre' name='genre' style='margin-right: 10px; height: 28px;'>"+
	"		<option selected='selected' value=''>Todos</option><option value='3De'>3De</option>"+
	"		<option value='Acción'>Acción</option><option value='Aventuras'>Aventuras</option>"+
	"		<option value='Bélico'>Bélico</option><option value='Ciencia_Ficción'>Ciencia_Ficción</option>"+
	"		<option value='Clásico'>Clásico</option><option value='Comedia'>Comedia</option>"+
	"		<option value='Crimen'>Crimen</option><option value='Deportes'>Deportes</option>"+
	"		<option value='Documental'>Documental</option><option value='Drama'>Drama</option>"+
	"		<option value='Estrenos'>Estrenos</option><option value='Familiar'>Familiar</option>"+
	"		<option value='Fantástico'>Fantástico</option><option value='Historico'>Historico</option>"+
	"		<option value='Infantil'>Infantil</option><option value='Megapack'>Megapack</option>"+
	"		<option value='Misterio'>Misterio</option><option value='Moderno'>Moderno</option>"+
	"		<option value='Musical'>Musical</option><option value='Policíaco'>Policíaco</option>"+
	"		<option value='Reciente'>Reciente</option><option value='Romántico'>Romántico</option>"+
	"		<option value='Teatro'>Teatro</option><option value='Terror'>Terror</option>"+
	"		<option value='Thriller'>Thriller</option><option value='Western'>Western</option>"+
	"		<option value='XXX'>XXX</option>"+
	"	</select>"+

	"	<input type='submit' value='Buscar' class='submit' style='height: 32px; width: 115px;'>"+
	"</form>";