xREL Release Filter

Release filter for xREL. Also hides the "new comments" box upon clicking on its title. Special thanks to GarionCZ for his SteamGifts filter script.

目前為 2015-07-22 提交的版本,檢視 最新版本

// ==UserScript==
// @name        xREL Release Filter
// @namespace   tag:https://github.com/0657code/greasemonkey-xrel-filter,2015-07-16
// @description Release filter for xREL. Also hides the "new comments" box upon clicking on its title. Special thanks to GarionCZ for his SteamGifts filter script.
// @author      0657_Code
// @include     http://www.xrel.to/movie/*/releases.html*
// @include     http://www.xrel.to/tv/*/releases.html*
// @version     1.0
// @grant       GM_getValue
// @grant       GM_setValue
// ==/UserScript==

// Constants
{
  var ID_DIV_HEADER = "idDivHeader";
  var ID_DIV_CONTENT = "idDivContent";
  
  var CONST_TYPE_TELESYNC = ' TeleSync';
  var CONST_TYPE_WEBRIP = ' Web-Rip';
  var CONST_TYPE_DVD_RIP = ' DVD-Rip';
  var CONST_TYPE_DVD_SCR = ' DVD-Scr.';
  var CONST_TYPE_DVD = ' DVD-R';
  var CONST_TYPE_HDTV = ' HDTV';
  var CONST_TYPE_BLURAY = ' Blu-ray';
  var CONST_CAT_XVID = 'XviD';
  var CONST_CAT_X264 = 'x264';
  var CONST_CAT_DVD = 'DVD-R';
  var CONST_CAT_HDTV = 'HDTV';
  var CONST_CAT_COMPLETE_HD = 'Compl. HD';
  var CONST_RLSNAME_BDRIP = /BDRip/i;
  var CONST_RLSNAME_720P = /720p/i;
  var CONST_RLSNAME_1080P = /1080p/i;
  var CONST_RLSNAME_COMPLETE_BLURAY = /Complete.Bluray/i;

  var KEY_FILTER_TYPE_TELESYNC = "filterTypeTeleSync";
  var KEY_FILTER_TYPE_WEBRIP = "filterTypeWebRip";
  var KEY_FILTER_TYPE_DVD_RIP = "filterTypeDvdRip";
  var KEY_FILTER_TYPE_DVD_SCR = "filterTypeDvdScr";
  var KEY_FILTER_TYPE_DVD = "filterTypeDvd";
  var KEY_FILTER_TYPE_HDTV = "filterTypeHdtv";
  var KEY_FILTER_TYPE_BLURAY = "filterTypeBluRay";
  var KEY_FILTER_CAT_XVID = "filterCatXvid";
  var KEY_FILTER_CAT_X264 = "filterCatX264";
  var KEY_FILTER_CAT_DVD = "filterCatDvd";
  var KEY_FILTER_CAT_HDTV = "filterCatHdtv";
  var KEY_FILTER_CAT_COMPLETE_HD = "filterCatCompleteHd";
  var KEY_FILTER_RLSNAME_BDRIP = "filterRlsnameBdRip";
  var KEY_FILTER_RLSNAME_720P = "filterRlsname720p";
  var KEY_FILTER_RLSNAME_1080P = "filterRlsname1080p";
  var KEY_FILTER_RLSNAME_COMPLETE_BLURAY = "filterRlsnameCompleteBluRay";
  var KEY_HIDE_NEW_COMMENTS = "hideNewComments";
  
  var DEFAULT_FILTER_STATUS = false;
}

// Variables, settings
{
  var HIDE_FILTER_DEFAULT = true;
  var HIDE_NEW_COMMENTS_DEFAULT = true;
  var HIDE_BOTTOM_CLEARFIX = true; // autimatically deactivated if there more than one page
  var HIDE_BOTTOM_BANNER = false;
  
  var FILTER_US_RELEASE = false;
  var FILTER_SEASON_WHITELIST = [
  ]
  var FILTER_GROUP_WHITELIST = [
  ]

  var filter_Type_TeleSync = GM_getValue(KEY_FILTER_TYPE_TELESYNC, DEFAULT_FILTER_STATUS);
  var filter_Type_WebRip = GM_getValue(KEY_FILTER_TYPE_WEBRIP, DEFAULT_FILTER_STATUS);
  var filter_Type_DvdRip = GM_getValue(KEY_FILTER_TYPE_DVD_RIP, DEFAULT_FILTER_STATUS);
  var filter_Type_DvdScr = GM_getValue(KEY_FILTER_TYPE_DVD_SCR, DEFAULT_FILTER_STATUS);
  var filter_Type_Dvd = GM_getValue(KEY_FILTER_TYPE_DVD, DEFAULT_FILTER_STATUS);
  var filter_Type_Hdtv = GM_getValue(KEY_FILTER_TYPE_HDTV, DEFAULT_FILTER_STATUS);
  var filter_Type_BluRay = GM_getValue(KEY_FILTER_TYPE_BLURAY, DEFAULT_FILTER_STATUS);
  var filter_Cat_Xvid = GM_getValue(KEY_FILTER_CAT_XVID, DEFAULT_FILTER_STATUS);
  var filter_Cat_X264 = GM_getValue(KEY_FILTER_CAT_X264, DEFAULT_FILTER_STATUS);
  var filter_Cat_Dvd = GM_getValue(KEY_FILTER_CAT_DVD, DEFAULT_FILTER_STATUS);
  var filter_Cat_Hdtv = GM_getValue(KEY_FILTER_CAT_HDTV, DEFAULT_FILTER_STATUS);
  var filter_Cat_CompleteHd = GM_getValue(KEY_FILTER_CAT_COMPLETE_HD, DEFAULT_FILTER_STATUS);
  var filter_Rlsname_BdRip = GM_getValue(KEY_FILTER_RLSNAME_BDRIP, DEFAULT_FILTER_STATUS);
  var filter_Rlsname_720p = GM_getValue(KEY_FILTER_RLSNAME_720P, DEFAULT_FILTER_STATUS);
  var filter_Rlsname_1080p = GM_getValue(KEY_FILTER_RLSNAME_1080P, DEFAULT_FILTER_STATUS);
  var filter_Rlsname_CompleteBluRay = GM_getValue(KEY_FILTER_RLSNAME_COMPLETE_BLURAY, DEFAULT_FILTER_STATUS);

  var contentDivStyleDisplay;
  var commentDivStyleDisplay;
}

// Main function
filterReleases();
function filterReleases() {
  var releasesToRemove = [];
  var releases = getReleases();
  
  // Filter loop, fills releasesToRemove array
  for (i = 0; i < releases.length; i++) {
    // Remove the filtering
    removeFiltering(releases[i]);
    
    // Type filters
    {
      if (filter_Type_TeleSync) {
        if (isReleaseType(releases[i], CONST_TYPE_TELESYNC)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Type_WebRip) {
        if (isReleaseType(releases[i], CONST_TYPE_WEBRIP)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Type_DvdRip) {
        if (isReleaseType(releases[i], CONST_TYPE_DVD_RIP)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Type_DvdScr) {
        if (isReleaseType(releases[i], CONST_TYPE_DVD_SCR)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Type_Dvd) {
        if (isReleaseType(releases[i], CONST_TYPE_DVD)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Type_Hdtv) {
        if (isReleaseType(releases[i], CONST_TYPE_HDTV)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Type_BluRay) {
        if (isReleaseType(releases[i], CONST_TYPE_BLURAY)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
    }
    
    // Category filters
    {
      if (filter_Cat_Xvid) {
        if (isReleaseCat(releases[i], CONST_CAT_XVID)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Cat_X264) {
        if (isReleaseCat(releases[i], CONST_CAT_X264)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Cat_Dvd) {
        if (isReleaseCat(releases[i], CONST_CAT_DVD)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Cat_Hdtv) {
        if (isReleaseCat(releases[i], CONST_CAT_HDTV)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Cat_CompleteHd) {
        if (isReleaseCat(releases[i], CONST_CAT_COMPLETE_HD)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
    }
    
    // Releasename filters
    {
      if (filter_Rlsname_BdRip) {
        if (isReleaseName(releases[i], CONST_RLSNAME_BDRIP)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Rlsname_720p) {
        if (isReleaseName(releases[i], CONST_RLSNAME_720P)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Rlsname_1080p) {
        if (isReleaseName(releases[i], CONST_RLSNAME_1080P)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
      if (filter_Rlsname_CompleteBluRay) {
        if (isReleaseName(releases[i], CONST_RLSNAME_COMPLETE_BLURAY)) {
          releasesToRemove.push(releases[i]);
          continue;
        }
      }
    }
    
    // US-Release filter
    if (typeof FILTER_US_RELEASE !== 'undefined' && FILTER_US_RELEASE) {
      if (releases[i].className == "release_item release_us") {
        releasesToRemove.push(releases[i]);
        continue;
      }
    }
    
    // Season filter
    if (typeof FILTER_SEASON_WHITELIST !== 'undefined' && FILTER_SEASON_WHITELIST.length > 0 && window.location.pathname.search(/\/tv\//i) != -1) {
      if (!isReleaseSeason(releases[i], FILTER_SEASON_WHITELIST)) {
        releasesToRemove.push(releases[i]);
        continue;
      }
    }
    
    // Group filter
    if (typeof FILTER_GROUP_WHITELIST !== 'undefined' && FILTER_GROUP_WHITELIST.length > 0) {
      if (!isReleaseByGroup(releases[i], FILTER_GROUP_WHITELIST)) {
        releasesToRemove.push(releases[i]);
        continue;
      }
    }
  }
  
  // Remove the releases in releasesToRemove array
  for (i = 0; i < releasesToRemove.length; i++) {
    releasesToRemove[i].style.display = 'none';
    releasesToRemove[i].nextElementSibling.style.display = 'none';
  }
}

// Parses the release elements from the whole page
function getReleases() {
  var releasesOdd = document.getElementsByClassName('release_item release_odd');
  var releasesEven = document.getElementsByClassName('release_item release_even');
  var releasesUS = document.getElementsByClassName('release_item release_us');
  var releasesHighlight = document.getElementsByClassName('release_item release_highlight');
  var allReleases = [];
  allReleases.push.apply(allReleases, releasesOdd);
  allReleases.push.apply(allReleases, releasesEven);
  allReleases.push.apply(allReleases, releasesUS);
  allReleases.push.apply(allReleases, releasesHighlight);
  return allReleases;
}

function isReleaseType(release, type) {
  var release_type = release.getElementsByClassName('release_type') [0];
  return release_type.firstChild.textContent == type;
}

function isReleaseCat(release, cat) {
  var release_cat = release.getElementsByClassName('release_cat') [0];
  var sub_link = release_cat.getElementsByClassName('sub_link') [0];
  var span = sub_link.getElementsByTagName('span') [0];
  return span.textContent == cat;
}

function isReleaseName(release, filter) {
  var release_title = release.getElementsByClassName('release_title') [0];
  var sub_link = release_title.getElementsByClassName('sub_link') [0];
  var span = sub_link.getElementsByTagName('span') [0];
  return span.textContent.search(filter) != -1;
}

function isReleaseSeason(release, seasonArray) {
  var release_title = release.getElementsByClassName('release_title')[0];
  var sub = release_title.getElementsByClassName('sub') [0];
  for (j = 0; j < seasonArray.length; j++)
    if (sub.textContent.indexOf(seasonArray[j]) != - 1)
      return true;
  return false;
}

function isReleaseByGroup(release, groupArray) {
  var release_grp = release.getElementsByClassName('release_grp')[0];
  for (j = 0; j < groupArray.length; j++)
    if (release_grp.textContent.indexOf(groupArray[j]) != - 1)
      return true;
  return false;
}

// Removes filtering from a given release
function removeFiltering(release) {
  release.style.display = '';
}

// Draws the UI
drawUi();
function drawUi() {
  // HeaderDiv
  {
    var headerDiv = document.createElement("div");
    headerDiv.id = ID_DIV_HEADER;
    headerDiv.style.fontWeight = "700";
    headerDiv.style.paddingTop = "5px";
    headerDiv.style.paddingBottom = "5px";
    headerDiv.style.paddingLeft = "10px";
    headerDiv.style.paddingRight = "10px";
    headerDiv.style.cursor = "pointer";
    headerDiv.style.font = '700 14px/22px "Open Sans",sans-serif';
    headerDiv.appendChild(document.createTextNode( "Filter"/*getFilterCaption()*/));
    headerDiv.onclick = function() {
      // Clicking on the header opens/closes the filter details UI
      var contentDiv = document.getElementById(ID_DIV_CONTENT);
      if (contentDiv.style.display !== "none"){
        contentDivStyleDisplay = contentDiv.style.display;
        contentDiv.style.display = "none";
      }
      else
        contentDiv.style.display = contentDivStyleDisplay;
    };
  }

  // ContentDiv
  {
    // CatDiv
    {
      // XviD
      {
        var catXvidSpan = document.createElement("span");
        catXvidSpan.appendChild(document.createTextNode("XviD"));

        var catXvidCheckbox = document.createElement("input");
        catXvidCheckbox.setAttribute("type", "checkbox");
        catXvidCheckbox.checked = !filter_Cat_Xvid;
        catXvidCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_CAT_XVID, !catXvidCheckbox.checked);
          filter_Cat_Xvid = !catXvidCheckbox.checked;
          filterReleases();
        };

        var catXvidDiv = document.createElement("div");
        catXvidDiv.appendChild(catXvidSpan);
        catXvidDiv.appendChild(catXvidCheckbox);
      }
      // X264
      {
        var catX264Span = document.createElement("span");
        catX264Span.appendChild(document.createTextNode("X264"));

        var catX264Checkbox = document.createElement("input");
        catX264Checkbox.setAttribute("type", "checkbox");
        catX264Checkbox.checked = !filter_Cat_X264;
        catX264Checkbox.onclick = function() {
          GM_setValue(KEY_FILTER_CAT_X264, !catX264Checkbox.checked);
          filter_Cat_X264 = !catX264Checkbox.checked;
          filterReleases();
        };

        var catX264Div = document.createElement("div");
        catX264Div.appendChild(catX264Span);
        catX264Div.appendChild(catX264Checkbox);
      }
      // DVD
      {
        var catDvdSpan = document.createElement("span");
        catDvdSpan.appendChild(document.createTextNode("DVD-R"));

        var catDvdCheckbox = document.createElement("input");
        catDvdCheckbox.setAttribute("type", "checkbox");
        catDvdCheckbox.checked = !filter_Cat_Dvd;
        catDvdCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_CAT_DVD, !catDvdCheckbox.checked);
          filter_Cat_Dvd = !catDvdCheckbox.checked;
          filterReleases();
        };

        var catDvdDiv = document.createElement("div");
        catDvdDiv.appendChild(catDvdSpan);
        catDvdDiv.appendChild(catDvdCheckbox);
      }
      // HDTV
      {
        var catHdtvSpan = document.createElement("span");
        catHdtvSpan.appendChild(document.createTextNode("HDTV"));

        var catHdtvCheckbox = document.createElement("input");
        catHdtvCheckbox.setAttribute("type", "checkbox");
        catHdtvCheckbox.checked = !filter_Cat_Hdtv;
        catHdtvCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_CAT_HDTV, !catHdtvCheckbox.checked);
          filter_Cat_Hdtv = !catHdtvCheckbox.checked;
          filterReleases();
        };

        var catHdtvDiv = document.createElement("div");
        catHdtvDiv.appendChild(catHdtvSpan);
        catHdtvDiv.appendChild(catHdtvCheckbox);
      }
      // Complete HD
      {
        var catCompleteHdSpan = document.createElement("span");
        catCompleteHdSpan.appendChild(document.createTextNode("Compl. HD"));

        var catCompleteHdCheckbox = document.createElement("input");
        catCompleteHdCheckbox.setAttribute("type", "checkbox");
        catCompleteHdCheckbox.checked = !filter_Cat_CompleteHd;
        catCompleteHdCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_CAT_COMPLETE_HD, !catCompleteHdCheckbox.checked);
          filter_Cat_CompleteHd = !catCompleteHdCheckbox.checked;
          filterReleases();
        };

        var catCompleteHdDiv = document.createElement("div");
        catCompleteHdDiv.appendChild(catCompleteHdSpan);
        catCompleteHdDiv.appendChild(catCompleteHdCheckbox);
      }

      var catDiv = document.createElement("div");
      catDiv.appendChild(document.createTextNode("Category"));
      catDiv.appendChild(catXvidDiv);
      catDiv.appendChild(catX264Div);
      catDiv.appendChild(catDvdDiv);
      catDiv.appendChild(catHdtvDiv);
      catDiv.appendChild(catCompleteHdDiv);
    }

    // TypeDiv
    {
      // TeleSync
      {
        var typeTeleSyncSpan = document.createElement("span");
        typeTeleSyncSpan.appendChild(document.createTextNode("TeleSync"));

        var typeTeleSyncCheckbox = document.createElement("input");
        typeTeleSyncCheckbox.setAttribute("type", "checkbox");
        typeTeleSyncCheckbox.checked = !filter_Type_TeleSync;
        typeTeleSyncCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_TYPE_TELESYNC, !typeTeleSyncCheckbox.checked);
          filter_Type_TeleSync = !typeTeleSyncCheckbox.checked;
          filterReleases();
        };

        var typeTeleSyncDiv = document.createElement("div");
        typeTeleSyncDiv.appendChild(typeTeleSyncSpan);
        typeTeleSyncDiv.appendChild(typeTeleSyncCheckbox);
      }

      // Web-Rip
      {
        var typeWebRipSpan = document.createElement("span");
        typeWebRipSpan.appendChild(document.createTextNode("Web-Rip"));

        var typeWebRipCheckbox = document.createElement("input");
        typeWebRipCheckbox.setAttribute("type", "checkbox");
        typeWebRipCheckbox.checked = !filter_Type_WebRip;
        typeWebRipCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_TYPE_WEBRIP, !typeWebRipCheckbox.checked);
          filter_Type_WebRip = !typeWebRipCheckbox.checked;
          filterReleases();
        };

        var typeWebRipDiv = document.createElement("div");
        typeWebRipDiv.appendChild(typeWebRipSpan);
        typeWebRipDiv.appendChild(typeWebRipCheckbox);
      }

      // DVD-Rip
      {
        var typeDvdRipSpan = document.createElement("span");
        typeDvdRipSpan.appendChild(document.createTextNode("DVD-Rip"));

        var typeDvdRipCheckbox = document.createElement("input");
        typeDvdRipCheckbox.setAttribute("type", "checkbox");
        typeDvdRipCheckbox.checked = !filter_Type_DvdRip;
        typeDvdRipCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_TYPE_DVD_RIP, !typeDvdRipCheckbox.checked);
          filter_Type_DvdRip = !typeDvdRipCheckbox.checked;
          filterReleases();
        };

        var typeDvdRipDiv = document.createElement("div");
        typeDvdRipDiv.appendChild(typeDvdRipSpan);
        typeDvdRipDiv.appendChild(typeDvdRipCheckbox);
      }

      // DVD-Scr
      {
        var typeDvdScrSpan = document.createElement("span");
        typeDvdScrSpan.appendChild(document.createTextNode("DVD-Scr."));

        var typeDvdScrCheckbox = document.createElement("input");
        typeDvdScrCheckbox.setAttribute("type", "checkbox");
        typeDvdScrCheckbox.checked = !filter_Type_DvdScr;
        typeDvdScrCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_TYPE_DVD_SCR, !typeDvdScrCheckbox.checked);
          filter_Type_DvdScr = !typeDvdScrCheckbox.checked;
          filterReleases();
        };

        var typeDvdScrDiv = document.createElement("div");
        typeDvdScrDiv.appendChild(typeDvdScrSpan);
        typeDvdScrDiv.appendChild(typeDvdScrCheckbox);
      }

      // DVD
      {
        var typeDvdSpan = document.createElement("span");
        typeDvdSpan.appendChild(document.createTextNode("DVD-R"));

        var typeDvdCheckbox = document.createElement("input");
        typeDvdCheckbox.setAttribute("type", "checkbox");
        typeDvdCheckbox.checked = !filter_Type_Dvd;
        typeDvdCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_TYPE_DVD, !typeDvdCheckbox.checked);
          filter_Type_Dvd = !typeDvdCheckbox.checked;
          filterReleases();
        };

        var typeDvdDiv = document.createElement("div");
        typeDvdDiv.appendChild(typeDvdSpan);
        typeDvdDiv.appendChild(typeDvdCheckbox);
      }

      // HDTV
      {
        var typeHdtvSpan = document.createElement("span");
        typeHdtvSpan.appendChild(document.createTextNode("HDTV"));

        var typeHdtvCheckbox = document.createElement("input");
        typeHdtvCheckbox.setAttribute("type", "checkbox");
        typeHdtvCheckbox.checked = !filter_Type_Hdtv;
        typeHdtvCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_TYPE_HDTV, !typeHdtvCheckbox.checked);
          filter_Type_Hdtv = !typeHdtvCheckbox.checked;
          filterReleases();
        };

        var typeHdtvDiv = document.createElement("div");
        typeHdtvDiv.appendChild(typeHdtvSpan);
        typeHdtvDiv.appendChild(typeHdtvCheckbox);
      }

      // BluRay
      {
        var typeBluRaySpan = document.createElement("span");
        typeBluRaySpan.appendChild(document.createTextNode("BluRay"));

        var typeBluRayCheckbox = document.createElement("input");
        typeBluRayCheckbox.setAttribute("type", "checkbox");
        typeBluRayCheckbox.checked = !filter_Type_BluRay;
        typeBluRayCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_TYPE_BLURAY, !typeBluRayCheckbox.checked);
          filter_Type_BluRay = !typeBluRayCheckbox.checked;
          filterReleases();
        };

        var typeBluRayDiv = document.createElement("div");
        typeBluRayDiv.appendChild(typeBluRaySpan);
        typeBluRayDiv.appendChild(typeBluRayCheckbox);
      }

      var typeDiv = document.createElement("div");
      typeDiv.style.paddingLeft = "15px";
      typeDiv.appendChild(document.createTextNode("Type"));
      typeDiv.appendChild(typeTeleSyncDiv);
      typeDiv.appendChild(typeWebRipDiv);
      typeDiv.appendChild(typeDvdRipDiv);
      typeDiv.appendChild(typeDvdScrDiv);
      typeDiv.appendChild(typeDvdDiv);
      typeDiv.appendChild(typeHdtvDiv);
      typeDiv.appendChild(typeBluRayDiv);
    }

    // RlsnameDiv
    {
      // BD-Rip
      {
        var rlsnameBdRipSpan = document.createElement("span");
        rlsnameBdRipSpan.appendChild(document.createTextNode("BD-Rip"));

        var rlsnameBdRipCheckbox = document.createElement("input");
        rlsnameBdRipCheckbox.setAttribute("type", "checkbox");
        rlsnameBdRipCheckbox.checked = !filter_Rlsname_BdRip;
        rlsnameBdRipCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_RLSNAME_BDRIP, !rlsnameBdRipCheckbox.checked);
          filter_Rlsname_BdRip = !rlsnameBdRipCheckbox.checked;
          filterReleases();
        };

        var rlsnameBdRip = document.createElement("div");
        rlsnameBdRip.appendChild(rlsnameBdRipSpan);
        rlsnameBdRip.appendChild(rlsnameBdRipCheckbox);
      }

      // 720p
      {
        var rlsname720pSpan = document.createElement("span");
        rlsname720pSpan.appendChild(document.createTextNode("720p"));

        var rlsname720pCheckbox = document.createElement("input");
        rlsname720pCheckbox.setAttribute("type", "checkbox");
        rlsname720pCheckbox.checked = !filter_Rlsname_720p;
        rlsname720pCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_RLSNAME_720P, !rlsname720pCheckbox.checked);
          filter_Rlsname_720p = !rlsname720pCheckbox.checked;
          filterReleases();
        };
        
        var rlsname720p = document.createElement("div");
        rlsname720p.appendChild(rlsname720pSpan);
        rlsname720p.appendChild(rlsname720pCheckbox);
      }

      // 1080p
      {
        var rlsname1080pSpan = document.createElement("span");
        rlsname1080pSpan.appendChild(document.createTextNode("1080p"));

        var rlsname1080pCheckbox = document.createElement("input");
        rlsname1080pCheckbox.setAttribute("type", "checkbox");
        rlsname1080pCheckbox.checked = !filter_Rlsname_1080p;
        rlsname1080pCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_RLSNAME_1080P, !rlsname1080pCheckbox.checked);
          filter_Rlsname_1080p = !rlsname1080pCheckbox.checked;
          filterReleases();
        };

        var rlsname1080p = document.createElement("div");
        rlsname1080p.appendChild(rlsname1080pSpan);
        rlsname1080p.appendChild(rlsname1080pCheckbox);
      }

      // Complete BluRay
      {
        var rlsnameCompleteBluRaySpan = document.createElement("span");
        rlsnameCompleteBluRaySpan.appendChild(document.createTextNode("Compl. BluRay"));

        var rlsnameCompleteBluRayCheckbox = document.createElement("input");
        rlsnameCompleteBluRayCheckbox.setAttribute("type", "checkbox");
        rlsnameCompleteBluRayCheckbox.checked = !filter_Rlsname_CompleteBluRay;
        rlsnameCompleteBluRayCheckbox.onclick = function() {
          GM_setValue(KEY_FILTER_RLSNAME_COMPLETE_BLURAY, !rlsnameCompleteBluRayCheckbox.checked);
          filter_Rlsname_CompleteBluRay = !rlsnameCompleteBluRayCheckbox.checked;
          filterReleases();
        };

        var rlsnameCompleteBluRay = document.createElement("div");
        rlsnameCompleteBluRay.appendChild(rlsnameCompleteBluRaySpan);
        rlsnameCompleteBluRay.appendChild(rlsnameCompleteBluRayCheckbox);
      }

      var rlsnameDiv = document.createElement("div");
      rlsnameDiv.style.paddingLeft = "15px";
      rlsnameDiv.appendChild(document.createTextNode("Rls.-Name"));
      rlsnameDiv.appendChild(rlsnameBdRip);
      rlsnameDiv.appendChild(rlsname720p);
      rlsnameDiv.appendChild(rlsname1080p);
      rlsnameDiv.appendChild(rlsnameCompleteBluRay);
    }

    var contentDiv = document.createElement("div");
    contentDiv.id = ID_DIV_CONTENT;
    contentDiv.style.display = "flex";
    contentDiv.style.paddingTop = "5px";
    contentDiv.style.paddingBottom = "5px";
    contentDiv.appendChild(catDiv);
    contentDiv.appendChild(typeDiv);
    contentDiv.appendChild(rlsnameDiv);
  }
  
  if(typeof HIDE_FILTER_DEFAULT !== 'undefined' && HIDE_FILTER_DEFAULT){
    contentDivStyleDisplay = contentDiv.style.display;
    contentDiv.style.display = "none";
  }

  // Add the filter UI to the correct place on the current page
  insertFilterUi(headerDiv);
  insertFilterUi(contentDiv);
}

// Inserts a node into the rls_filter_selection div
function insertFilterUi(filterUi) {
  var element = document.getElementById("rls_filter_selection");
  if (element !== 'undefined') {
    if(element.firstElementChild.className == "sub")
      element.replaceChild(filterUi, element.firstElementChild);
    else
      element.appendChild(filterUi);
  }
}

// Makes the "new comments" header clickable (hide/unhide)
clickableNewComments();
function clickableNewComments(){
  var divs_titles = document.getElementsByClassName('box_title1');
  if (divs_titles.length > 1){
    commentTitleDiv = divs_titles[1];
    commentTitleDiv.style.cursor = "pointer";
    commentTitleDiv.onclick = function() {
      var commentDiv = commentTitleDiv.nextElementSibling;
      GM_setValue(KEY_HIDE_NEW_COMMENTS, commentDiv.style.display !== "none");
      if (commentDiv.style.display !== "none"){
        commentDivStyleDisplay = commentDiv.style.display;
        commentDiv.style.display = "none";
      }
      else
        commentDiv.style.display = commentDivStyleDisplay;
    };
  }
  if (GM_getValue(KEY_HIDE_NEW_COMMENTS, HIDE_NEW_COMMENTS_DEFAULT)){
    var commentDiv = commentTitleDiv.nextElementSibling;
    commentDivStyleDisplay = commentDiv.style.display;
    commentDiv.style.display = "none";
  }
}

// Remove bottom banner
if (typeof HIDE_BOTTOM_BANNER !== 'undefined' && HIDE_BOTTOM_BANNER)
{
  document.getElementById('bottom').style.display = 'none';
}

// Remove bottom clearfix (if only one page exists)
if (typeof HIDE_BOTTOM_CLEARFIX !== 'undefined' && HIDE_BOTTOM_CLEARFIX)
{
  var clearfix = document.getElementsByClassName('releases_bottom clearfix')[0];
  if(clearfix.childElementCount == 0)
    clearfix.style.display = 'none';
}