darkvier / 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.2
// @date        26/01/2018
// @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>";