Climate denialists filter for Climate-debate.com

Blocks posts of offensive climate deniers on forum Climate-debate.com

// ==UserScript==
// @name        Climate denialists filter for Climate-debate.com
// @namespace   https://greasyfork.org/pl/users/439127
// @description Blocks posts of offensive climate deniers on forum Climate-debate.com
// @include     https://www.climate-debate.com/forum/
// @include     https://www.climate-debate.com/forum/*
// @include     https://www.climate-debate.com/find.php*
// @include     https://www.climate-debate.com/
// @include     https://www.climate-debate.com/users*
// @include     https://www.climate-debate.com/topusers.php
// @version     1.0.6
// @author      Tomasz Dąbski "CzarnyZajaczek"
// @license     GPL-3.0 http://www.gnu.org/licenses/gpl-3.0.txt
// @grant       none
// ==/UserScript==

function denialFilterClimateDebateCom() {
   
  var options = {
    'hide_quoted_comments' : true,
  };
  
  
  var userNameList = [
    'aaronlevaugh',
    'Aikido',
    'AK_User',
    'alej',
    'AlfonsoHiguera',
    'allecnarf',
    'aloysious',
    'Anders',
    'ansi2018',
    'antialiased',
    'arthur18',
    'BarnabyJones',
    'Ben-ove',
    'bfoster',
    'Bigal',
    'Billio',
    'Billy000',
    'Blair Macdonald',
    'Bode',
    'Botulism',
    'bowlesj',
    'Braden',
    'BruceWilliams',
    'Budstar',
    'Buildreps',
    'campy',
    'CanIGiveAnIdea',
    'CantStumpTheTrump',
    'Clarity john',
    'Cnuk',
    'cofu',
    'Common Sense',
    'Commonsense',
    'confused about temps',
    'Convection Is a Thing',
    'Cornelius',
    'crede',
    'cthor29',
    'dadmansabode',
    'Dalerams',
    'Daniel',
    'dapork',
    'darkwulfe',
    'davidlaing',
    'Dawlish',
    'Deanster',
    'dehammer',
    'Diesel burner',
    'dougjones423',
    'dtremaine',
    'duncan61',
    'Earth_Master',
    'Earthling',
    'eheat',
    'einnor',
    'Eric Crews',
    'Eric4898',
    'evolutionist',
    'Exodus',
    'fcimeson',
    'flogger',
    'Frank Lansner',
    'Frank Schnabel',
    'Frescomexico',
    'FriendOfOrion',
    'Gamul1',
    'GasGuzler',
    'GasGuzzler',
    'Gaynor',
    'Geoff Sherrington',
    'gfm7175',
    'Glitch',
    'GlobalPerspectiveSGL',
    'Globalwarmingisfake',
    'Gogsy',
    'greyviper',
    'HappySikalengo',
    'Harry C',
    'HarveyH55',
    'Hayduke',
    'headcasey',
    'High Treason',
    'hopboyd',
    'hotandcold',
    'Howie',
    'hubble',
    'Humidity2',
    'IBdaMann',
    'Into the Night',
    'IsaacTorus11',
    'ipur',
    'JackCapp',
    'jackkarter',
    'James___',
    'James__',
    'James_',
    'James145',
    'jamesmatheson',
    'jdm',
    'Jeffvw',
    'Jesse Christopher',
    'Jethro Bodine',
    'jjcast',
    'joeh917',
    'John Niclasen',
    'Jonson Ket',
    'jørgen petersen',
    'joshuah',
    'Jsurguy',
    'just sayin',
    'JustTheFacts',
    'Kano',
    'Kenneth William Griffith',
    'killemwithscience',
    'kingsolution',
    'KKING',
    'kullboys',
    'kuts muth',
    'L8112',
    'LaplacesDemon',
    'Larry',
    'larrymac',
    'Laws of Nature',
    'leempoels',
    'Leitwolf',
    'Lewis Carlson',
    'Liam1156',
    'LifeIsThermal',
    'Longview',
    'mama nature',
    'markmendlovitz',
    'Masked Nostradamus',
    'MattS',
    'mememine69',
    'micole66',
    'miketolstoy',
    'MK001',
    'MonteCristo',
    'MosesApostaticus',
    'Mr Dynamic Solver',
    'MrMarvelousandtheUnicorn',
    'Mrs Wiggles',
    'mygor',
    'Myleader73',
    'mywifesatan',
    'nemodawson',
    'oldendays',
    'olyz',
    'One Punch Man',
    'Pablobellins',
    'paramount99',
    'Pariga',
    'patrick',
    'Paul O',
    'peterlward',
    'PeterOleKvint',
    'Petester',
    'Philled',
    'PitonObserver',
    'ProHuman',
    'Ptychodus',
    'RealityCheck',
    'redpillminded',
    'RenaissanceMan',
    'RichardP',
    'RightIdea',
    'Robertgreene3',
    'RobWigglezz',
    'Ruben',
    'rwswan',
    'sceptic777',
    'sculptor',
    'SDRAmerica',
    'seaninak',
    'Seeking Bliss',
    'seosecrets4',
    'serdariscool',
    'shagsnacks',
    'simlify',
    'snu',
    'Solarwind',
    'SpaceShot76',
    'spicez',
    'Spongy Iris',
    'StarMan',
    'starryowl',
    'student33',
    'SuperCSG',
    'swills123',
    'Tai Hai Chen',
    'Takashi-san',
    'Takashi',
    'tantalus',
    'The Humidity',
    'thenerdyone314',
    'TheSaviorMessiah',
    'TheThirdAngel144',
    'TheWeatherGirls',
    'Third world guy',
    'ThoAbEl',
    'thomasistrouble1',
    'Thunderbomb1982',
    'Tideman',
    'Tim the plumber',
    'tmb2610',
    'tommy100010',
    'TommytheKitty',
    'Tony Argieri',
    'too',
    'Trumpsupport',
    'Tudoceros',
    'update',
    'Vic',
    'Wake',
    'whitehat',
    'wisewilly',
    'woody',
    'Xadoman',
    'xiaoyouyou1hao',
    'YoucefZX',
    'yuno44907',
    'zenblaster',
    'Zloppino',
    'ZurichBlunte'
  ];
    
  /*
   * Variable below contains javascript which is added to page with <script> tag, since it has to be available from scope of page to show/hide post JS links
   * */
  
    var scriptValue = "function denialFilterClimateDebateComShowComment(comment_id) {\n"+
"  var postIdLink = document.getElementById(comment_id);\n"+
"  \n"+
"  var commentTitleTR;\n"+
"  \n"+
"  var commentTitleTRFound = false;\n"+
"  \n"+
"  var parentNode = postIdLink;\n"+
"  \n"+
"  var commentTitleTD;\n"+
"  \n"+
"  while (!commentTitleTRFound) {\n"+
"    var parentNode = parentNode.parentNode;\n"+
"    \n"+
"    if (parentNode.tagName == 'TD') {\n"+
"      commentTitleTD = parentNode;\n"+
"    }\n"+
"    \n"+
"    if (parentNode.tagName == 'TR') {\n"+
"      commentTitleTR = parentNode;\n"+
"      commentTitleTRFound = true;\n"+
"    }\n"+
"  }\n"+
"  \n"+
"  var parentOfTR = commentTitleTR.parentNode;\n"+
"  \n"+
"  var commentContentsTR = commentTitleTR.nextElementSibling;\n"+
"  \n"+
"  commentContentsTR.style.display = '';\n"+
"  \n"+
"  // replace link \"Show comment\"\n"+
"  var showCommentLink = document.getElementById('denialFilterClimateDebateComShowComment_'+comment_id);\n"+
"  var postJsShowLink = document.createElement('A');\n"+
"  var postJsShowLinkText = document.createTextNode(\"Hide comment\");\n"+
"  postJsShowLink.appendChild(postJsShowLinkText);\n"+
"  postJsShowLink.title = \"Hide this comment\";\n"+
"  postJsShowLink.href = \"javascript:denialFilterClimateDebateComHideComment('\"+comment_id+\"');\";\n"+
"  postJsShowLink.id = 'denialFilterClimateDebateComHideComment_'+comment_id;\n"+
"  postJsShowLink.className = 'denialFilterClimateDebateComHideComment small2';\n"+
"  postJsShowLink.style.color = '#003D71';\n"+
"  \n"+
"  commentTitleTD.insertBefore(postJsShowLink, showCommentLink);\n"+
"  \n"+
"  showCommentLink.parentNode.removeChild(showCommentLink);\n"+
" \n"+
"  var postTitleUserName = document.getElementById('denialFilterClimateDebateComHiddenUserName_'+comment_id);\n"+
"  postTitleUserName.style.display = 'none';\n"+
"}\n"+
"function denialFilterClimateDebateComHideComment(comment_id) {\n"+
"  var postIdLink = document.getElementById(comment_id);\n"+
"  \n"+
"  var commentTitleTR;\n"+
"  \n"+
"  var commentTitleTRFound = false;\n"+
"  \n"+
"  var parentNode = postIdLink;\n"+
"  \n"+
"  var commentTitleTD;\n"+
"  \n"+
"  while (!commentTitleTRFound) {\n"+
"    var parentNode = parentNode.parentNode;\n"+
"    \n"+
"    if (parentNode.tagName == 'TD') {\n"+
"      commentTitleTD = parentNode;\n"+
"    }\n"+
"    \n"+
"    if (parentNode.tagName == 'TR') {\n"+
"      commentTitleTR = parentNode;\n"+
"      commentTitleTRFound = true;\n"+
"    }\n"+
"  }\n"+
"  \n"+
"  var parentOfTR = commentTitleTR.parentNode;\n"+
"  \n"+
"  var commentContentsTR = commentTitleTR.nextElementSibling;\n"+
"  \n"+
"  commentContentsTR.style.display = 'none';\n"+
"  \n"+
"  var showCommentLink = document.getElementById('denialFilterClimateDebateComHideComment_'+comment_id);\n"+
"  var postJsShowLink = document.createElement('A');\n"+
"  var postJsShowLinkText = document.createTextNode(\"Show hidden comment\");\n"+
"  postJsShowLink.appendChild(postJsShowLinkText);\n"+
"  postJsShowLink.title = \"Show this comment\";\n"+
"  postJsShowLink.href = \"javascript:denialFilterClimateDebateComShowComment('\"+comment_id+\"');\";\n"+
"  postJsShowLink.id = 'denialFilterClimateDebateComShowComment_'+comment_id;\n"+
"  postJsShowLink.className = 'denialFilterClimateDebateComShowComment small2';\n"+
"  postJsShowLink.style.color = '#003D71';\n"+
"  \n"+
"  commentTitleTD.insertBefore(postJsShowLink, showCommentLink);\n"+
"  \n"+
"  showCommentLink.parentNode.removeChild(showCommentLink);\n"+
"  \n"+
"  var postTitleUserName = document.getElementById('denialFilterClimateDebateComHiddenUserName_'+comment_id);\n"+
"  postTitleUserName.style.display = '';\n"+
"}\n"+
"function denialFilterClimateDebateComShowAllComments(commentsBlocked) {\n"+
"  allLinks = document.getElementsByTagName('A');\n"+
"  \n"+
"  for (i = 0; i < allLinks.length; i++) {\n"+
"    if ((' ' + allLinks[i].className + ' ').indexOf(' ' + 'denialFilterClimateDebateComShowComment' + ' ') > -1) {\n"+
"      allLinks[i].click();\n"+
"    }\n"+
"  }\n"+
"  \n"+
"  var postJsShowAllLink = document.getElementById('denialFilterClimateDebateComShowAllComments');\n"+
"  \n"+
"  var postJsShowLink = document.createElement('A');\n"+
"  var postJsShowLinkText = document.createTextNode(\"Hide all blocked comments (\"+commentsBlocked+\")\");\n"+
"  postJsShowLink.appendChild(postJsShowLinkText);\n"+
"  postJsShowLink.title = \"Hide all blocked comments (\"+commentsBlocked+\")\";\n"+
"  postJsShowLink.href = \"javascript:denialFilterClimateDebateComHideAllComments('\"+commentsBlocked+\"');\";\n"+
"  postJsShowLink.id = 'denialFilterClimateDebateComHideAllComments';\n"+
"  postJsShowLink.className = 'denialFilterClimateDebateComHideAllComments small2';\n"+
"  postJsShowLink.style.color = '#003D71';\n"+
"  postJsShowLink.style.float = 'right';\n"+
"  \n"+
"  postJsShowAllLink.parentNode.insertBefore(postJsShowLink, postJsShowAllLink);\n"+
"  \n"+
"  postJsShowAllLink.parentNode.removeChild(postJsShowAllLink);\n"+
"}\n"+
"function denialFilterClimateDebateComHideAllComments(commentsBlocked) {\n"+
"  allLinks = document.getElementsByTagName('A');\n"+
"  \n"+
"  for (i = 0; i < allLinks.length; i++) {\n"+
"    if ((' ' + allLinks[i].className + ' ').indexOf(' ' + 'denialFilterClimateDebateComHideComment' + ' ') > -1) {\n"+
"      allLinks[i].click();\n"+
"    }\n"+
"  }\n"+
"  \n"+
"  var postJsShowAllLink = document.getElementById('denialFilterClimateDebateComHideAllComments');\n"+
"  \n"+
"  var postJsShowLink = document.createElement('A');\n"+
"  var postJsShowLinkText = document.createTextNode(\"Show all hidden comments (\"+commentsBlocked+\")\");\n"+
"  postJsShowLink.appendChild(postJsShowLinkText);\n"+
"  postJsShowLink.title = \"Show all hidden comments (\"+commentsBlocked+\")\";\n"+
"  postJsShowLink.href = \"javascript:denialFilterClimateDebateComShowAllComments('\"+commentsBlocked+\"');\";\n"+
"  postJsShowLink.id = 'denialFilterClimateDebateComShowAllComments';\n"+
"  postJsShowLink.className = 'denialFilterClimateDebateComShowAllComments small2';\n"+
"  postJsShowLink.style.color = '#003D71';\n"+
"  postJsShowLink.style.float = 'right';\n"+
"  \n"+
"  postJsShowAllLink.parentNode.insertBefore(postJsShowLink, postJsShowAllLink);\n"+
"  \n"+
"  postJsShowAllLink.parentNode.removeChild(postJsShowAllLink);\n"+
"}";
    
  // find table containing posts
  var tableElements = document.getElementsByTagName('table');
  
  var commentsTable;
  var commentsTableFound = false;
  
  var  i;

  for (i = 0; i < tableElements.length; i++) {
    if ((' ' + tableElements[i].className + ' ').indexOf(' ' + 'ramme2' + ' ') > -1) {
      commentsTable = tableElements[i];
      commentsTableFound = true;
      break;
    }
  }
  
  var pageType;
  pageType = false;
  if (window.location.pathname == '/') {
    pageType = 'main';
  } else {
    var currentUrlParts = window.location.pathname.split('/');
    if (currentUrlParts[1] == 'forum' && currentUrlParts.length>2 && currentUrlParts[2].indexOf('.') > -1) {
      currentUrlParts = currentUrlParts[2].split('.');
      
      if (currentUrlParts[0].indexOf('-') > -1) {
        currentUrlParts = currentUrlParts[0].split('-');
        var i;
        var j;
        i = currentUrlParts.length;
        i--;
        j = i;
        j--;
        if (currentUrlParts[i].indexOf('f') == 0) {
          pageType = 'f';
        }
        
        if (currentUrlParts[i].indexOf('e') == 0) {
          pageType = 'e';
        }
        
        if (currentUrlParts[i].indexOf('s') == 0 && currentUrlParts[j].indexOf('e') == 0) {
          pageType = 'e';
        }
      }
    } else {
      if (currentUrlParts[1] == 'users.php') {
        pageType = 'users';
      }
      if (currentUrlParts[1] == 'topusers.php') {
        pageType = 'topusers';
      }
      if (currentUrlParts[1].indexOf('.') > -1 && currentUrlParts[1].indexOf('-') > -1) {
        currentUrlParts = currentUrlParts[1].split('.');
        currentUrlParts = currentUrlParts[0].split('-');
        if (currentUrlParts.length == 2 && currentUrlParts[0] == 'users' && currentUrlParts[1].indexOf('s') == 0) {
          pageType = 'users';
        }
      }
    }
    
  }
  
  
  
  if (pageType == 'e' && commentsTableFound) {
    
    var parentDiv = document.getElementById('hoejre');
    var denialFilterClimateDebateComScriptTag = document.createElement('SCRIPT');
    denialFilterClimateDebateComScriptTag.type = "text/javascript";
    
    var denialFilterClimateDebateComScriptTagContents = document.createTextNode(scriptValue);
    denialFilterClimateDebateComScriptTag.appendChild(denialFilterClimateDebateComScriptTagContents); 
    
    parentDiv.insertBefore(denialFilterClimateDebateComScriptTag, commentsTable);
    
    
    var commentsTableTR = commentsTable.getElementsByTagName('tr');
    
    var  i;
    var j;
    
    var commentsBlocked = 0;
    
    for (i = 0; i < commentsTableTR.length; i+=2) {
      j = i
      j++;
      
      var rowTdS = commentsTableTR[j].getElementsByTagName('td');
      
      if (rowTdS.length < 2) {
        i++;
        j++;
      }
      
      var profileTd = commentsTableTR[j].getElementsByTagName('td')[0];
      
      var profileHrefs = profileTd.getElementsByTagName('a');
      var userName;
      if (profileHrefs && profileHrefs.length > 0) {
        
        var profileHref = profileTd.getElementsByTagName('a')[0];
        userName = profileHref.innerHTML;
      } else {
        // first text node from TD
        userName = profileTd.childNodes[0].nodeValue;
      }
      // check if username is on blacklist
      var k;
      var usernameToTest;
      
      var userIsBanned;
      userIsBanned = false;
      
      for (k = 0; k < userNameList.length; k++) {
        usernameToTest = userNameList[k];
        
        if (userName == usernameToTest) {
          userIsBanned = true;
          break;
        }
        
      }
      
      if (userIsBanned) {
        var commentTitleTDs = commentsTableTR[i].getElementsByTagName('td');
        
        for (k = 0; k < commentTitleTDs.length; k++) {
          commentTitleTDs[k].style.backgroundColor = '#FFEEEE';
        } 
      
        var commentEntryTDs = commentsTableTR[j].getElementsByTagName('td');
        for (k = 0; k < commentEntryTDs.length; k++) {
          commentEntryTDs[k].style.backgroundColor = '#FFEEEE';
        }
        
         var l = commentTitleTDs[0].childNodes.length;
        l--;
        
        var postIdLinks = commentTitleTDs[0].getElementsByTagName('a');
        var postIdLink;
        var postIdLinkFound = false;
        for (m=0; m<postIdLinks.length; m++) { 
          if ((' ' + postIdLinks[m].className + ' ').indexOf(' ' + 'post' + ' ') > -1) {
            postIdLink = postIdLinks[m];
            break;
          }
        }
        
        // get instead first link in this TD, it may have different class in some cases
        if (!postIdLinkFound) {
          postIdLink = postIdLinks[0];
        }
        
        var postEntryDate = commentTitleTDs[0].childNodes[1];
        
        var postDateText = postEntryDate.textContent ? postEntryDate.textContent : postEntryDate.innerText;
         
        var postTitleClear = document.createElement('DIV');
        postTitleClear.style.clear = 'both';
        commentTitleTDs[0].insertBefore(postTitleClear, postEntryDate);
        commentTitleTDs[0].insertBefore(postEntryDate, postTitleClear);
        
        var postJsShowLink = document.createElement('A');
        postJsShowLink.id = 'denialFilterClimateDebateComShowComment_'+postIdLink.id;
        var postJsShowLinkText = document.createTextNode("Show hidden comment");
        postJsShowLink.appendChild(postJsShowLinkText);
        postJsShowLink.title = "Show this comment";
        postJsShowLink.href = "javascript:denialFilterClimateDebateComShowComment('"+postIdLink.id+"');";
        postJsShowLink.className = 'denialFilterClimateDebateComShowComment small2';
        postJsShowLink.style.color = '#003D71';
        
        commentTitleTDs[0].insertBefore(postJsShowLink, postTitleClear);
        commentTitleTDs[0].insertBefore(postTitleClear, postJsShowLink);
        
        commentsTableTR[j].style.display='none';
        
        var postTitleUserNameSpan = document.createElement('SPAN');
        postTitleUserNameSpan.style.float = 'left';
        postTitleUserNameSpan.id = 'denialFilterClimateDebateComHiddenUserName_'+postIdLink.id;
        postTitleUserNameSpan.className = 'small2';
        
        var postTitleUserName = document.createElement('A');
        postTitleUserName.href = profileHref.href;
        postTitleUserName.innerHTML = userName;
        postTitleUserName.style.color = '#003D71';
        
        postTitleUserNameSpan.appendChild(postTitleUserName);
        commentTitleTDs[0].insertBefore(postTitleUserNameSpan, postJsShowLink);
        
        postTitleUserNameSpan.innerHTML = 'posted by: '+postTitleUserNameSpan.innerHTML;
        
        commentsBlocked++;
      } else {
        if (options.hide_quoted_comments) {
          // check in quotes, and optionally hide cited content from banned users
          var postTd = commentsTableTR[j].getElementsByTagName('td')[1];
          var packDiv;
          packDiv = false;
          var blockedCommentQuote;
          blockedCommentQuote = false;
          var isQuote;
          isQuote = false;
          denialFilterClimateDebateComHideQuote(userNameList, postTd, packDiv, isQuote, blockedCommentQuote);
          
          
        }
      }
    }
    
    if (commentsBlocked>0) {
      var postJsShowAllLink = document.createElement('A');
      postJsShowAllLink.id = 'denialFilterClimateDebateComShowAllComments';
      var postJsShowAllLinkText = document.createTextNode("Show all hidden comments ("+commentsBlocked+")");
      postJsShowAllLink.appendChild(postJsShowAllLinkText);
      postJsShowAllLink.title = "Show all hidden comments ("+commentsBlocked+")";
      postJsShowAllLink.href = "javascript:denialFilterClimateDebateComShowAllComments('"+commentsBlocked+"');";
      postJsShowAllLink.className = 'denialFilterClimateDebateComShowAllComments small2';
      postJsShowAllLink.style.color = '#003D71';
      postJsShowAllLink.style.float = 'right';
      commentsTable.parentNode.insertBefore(postJsShowAllLink, commentsTable);
    }
    
    var currentUrlParts = window.location.href.split('#');
    var i = currentUrlParts.length;
    i--;
    var anchorId = currentUrlParts[i];
    document.getElementById(anchorId).scrollIntoView();
  }
  
  // /find.php? page
  if (!pageType) {
    var currentUrlParts = window.location.pathname.split('/');
    if (currentUrlParts[1] == 'find.php') {
      var resultsDiv = document.getElementById('hoejre');
      
      var spanElements = resultsDiv.getElementsByTagName('span');
      var  i;
      
      for (i = 0; i < spanElements.length; i++) {
        if ((' ' + spanElements[i].className + ' ').indexOf(' ' + 'small2' + ' ') > -1) {
          var profileHref = spanElements[i].getElementsByTagName('a')[0];
          var userName = profileHref.innerHTML;
          // check if username is on blacklist
          var k;
          var usernameToTest;
          
          var userIsBanned;
          userIsBanned = false;
          
          var alertTestMSG;
          for (k = 0; k < userNameList.length; k++) {
            usernameToTest = userNameList[k];
            
            if (userName == usernameToTest) {
              userIsBanned = true;
              break;
            }
          }
          
          if (userIsBanned) {
            spanElements[i].style.backgroundColor = '#FFEEEE';
            
            var commentTitleAFound = false;
            
            var currentElement = spanElements[i];
            
            while (!commentTitleAFound) {
              currentElement = currentElement.previousElementSibling;
              
              currentElement.style.backgroundColor = '#FFEEEE';
              if (currentElement.tagName == 'A') {
                commentTitleAFound = true;
              }
            }
            var commentTitleAFound = false;
            var currentElement = spanElements[i];
            while (!commentTitleAFound) {
              currentElement = currentElement.nextElementSibling;
              
              currentElement.style.backgroundColor = '#FFEEEE';
              if (currentElement.tagName == 'SPAN') {
                commentTitleAFound = true;
              }
            }
          }
        }
      }
    }
  }
  
  // list of topics on forums
  /* // username of poster is removed, so this part no longer works
  if (pageType == 'f') {
    var resultsDiv = document.getElementById('hoejre');
    var tableElements = resultsDiv.getElementsByTagName('table');
    var resultsTable;
    var i;
    
    for (i = 0; i < tableElements.length; i++) {
      if ((' ' + tableElements[i].className + ' ').indexOf(' ' + 'ramme' + ' ') > -1) {
        
        resultsTable = tableElements[i];
        var commentsTableTR = resultsTable.getElementsByTagName('tr');
        var firstRow;
        firstRow = true;
        
        var j;
        
        var commentsBlocked = 0;
        
        for (j = 0; j < commentsTableTR.length; j++) {
          if (firstRow) {
            // skip table header
            firstRow = false;
            continue;
          }
          
          var tdElements = commentsTableTR[j].getElementsByTagName('td');
          
          var profileTd = tdElements[2];
          var userName = profileTd.innerHTML;
          
          // check if username is on blacklist
          var k;
          var usernameToTest;
          
          var userIsBanned;
          userIsBanned = false;
          
          for (k = 0; k < userNameList.length; k++) {
            usernameToTest = userNameList[k];
            
            if (userName == usernameToTest) {
              userIsBanned = true;
              break;
            }
          }
          if (userIsBanned) {
            for (k = 0; k < tdElements.length; k++) {
              tdElements[k].style.backgroundColor = '#FFEEEE';
            }
          }
        }
      }
    }
  }*/
  
  // highlight on latest posts on main page
  if (pageType == 'main') {
    var resultsDiv = document.getElementById('hoejre');
    var tableElements = resultsDiv.getElementsByTagName('table');
    var resultsTable;
    var i;
    
    for (i = 0; i < tableElements.length; i++) {
      if ((' ' + tableElements[i].className + ' ').indexOf(' ' + 'ramme' + ' ') > -1) {
        
        resultsTable = tableElements[i];
        var commentsTableTR = resultsTable.getElementsByTagName('tr');
        var j;
        for (j = 0; j < commentsTableTR.length; j++) {
          var tdElements = commentsTableTR[j].getElementsByTagName('td');
          var skipHeader;
          skipHeader = false;
          var firstTdLinks;
          
          if (tdElements.length<4) {
            skipHeader = true;
          }
          if (skipHeader) {
            // skip table header
            continue;
          }
          
//           var profileHref = tdElements[2].getElementsByTagName('a')[0];
//           var userName = profileHref.innerHTML;
          var userName = tdElements[2].innerHTML;
          
          // check if username is on blacklist
          var k;
          var usernameToTest;
          
          var userIsBanned;
          userIsBanned = false;
          
          for (k = 0; k < userNameList.length; k++) {
            usernameToTest = userNameList[k];
            
            if (userName == usernameToTest) {
              userIsBanned = true;
              break;
            }
          }
          if (userIsBanned) {
            for (k = 0; k < tdElements.length; k++) {
              tdElements[k].style.backgroundColor = '#FFF8F8';
            }
            tdElements[2].style.backgroundColor = '#FFEEEE';
          }
        }
      }
    }
  }
  
  // highlight on list of users
  if (pageType == 'users' || pageType == 'topusers') {
    var resultsDiv = document.getElementById('hoejre');
    var tableElements = resultsDiv.getElementsByTagName('table');
    var resultsTable;
    var i;
    
    for (i = 0; i < tableElements.length; i++) {
      if ((' ' + tableElements[i].className + ' ').indexOf(' ' + 'ramme' + ' ') > -1) {
        
        resultsTable = tableElements[i];
        var commentsTableTR = resultsTable.getElementsByTagName('tr');
        var firstRow;
        firstRow = true;
        
        var j;
        
        var commentsBlocked = 0;
        
        for (j = 0; j < commentsTableTR.length; j++) {
          if (firstRow) {
            // skip table header
            firstRow = false;
            continue;
          }
          
          var tdElements = commentsTableTR[j].getElementsByTagName('td');
          
          if (pageType == 'users') {
            var profileTd = tdElements[0];
          } else {
            var profileTd = tdElements[1];
          }
          var profileHref = profileTd.getElementsByTagName('a');
          var userName;
          if (!profileHref || profileHref.length == 0) {
            userName = profileTd.innerHTML;
          } else {
            userName = profileHref[0].innerHTML;
          }
          
          // check if username is on blacklist
          var k;
          var usernameToTest;
          
          var userIsBanned;
          userIsBanned = false;
          
          for (k = 0; k < userNameList.length; k++) {
            usernameToTest = userNameList[k];
            
            if (userName == usernameToTest) {
              userIsBanned = true;
              break;
            }
          }
          if (userIsBanned) {
            for (k = 0; k < tdElements.length; k++) {
              tdElements[k].style.backgroundColor = '#FFEEEE';
            }
          }
        }
      }
    }
  }
}

/**
 * @param array userNameList
 *  list of banned usernames
 * @param node parentDiv 
 *  DOM element to search quotes in
 * @param bool packDiv
 *  false: in comment main content, do not pack contents in div's
 *  true: content of current level of quote except nested quotes will be 'packed' into divs to allow independent of other nested quotes levels hiding per quote
 * @param bool isQuote
 *  true: parentDiv is quote
 * @param bool blockedCommentQuote
 *  true: parentDiv is quote of blocked comment
 *  
 * 
 * **/
function denialFilterClimateDebateComHideQuote(userNameList, parentDiv, packDiv, isQuote, blockedCommentQuote) {
  // CANCELLLED:TODO just add class here, actual hiding/unhiding will be done in functions in var scriptValue
  // just add backgroundColor
  
  // find all 
  var commentTextNodes = parentDiv.childNodes;
  
  var i;
  var newDivPackNeeded;
  newDivPackNeeded = true;
  var currentDivPack;
  
  if (isQuote) {
    if (blockedCommentQuote) {
      parentDiv.style.backgroundColor = '#FFEEEE';
    } else {
      parentDiv.style.backgroundColor = '#F6F6F6';
    }
  }
  
  for (i = 0; i < commentTextNodes.length; i++) {
    if (commentTextNodes[i].tagName == 'BLOCKQUOTE') {
      var subPackDiv;
      subPackDiv = true;
      var subIsQuote;
      subIsQuote = true;
      var subBlockedCommentQuote;
      subBlockedCommentQuote = false;
      
      // check first line && first <b> tag if quote was written by banned username
      var quotedCommentTextNodes = commentTextNodes[i].childNodes;
      
      var quoteTitle;
      var quoteTitleParts;
      var quoteTitleParsed;
      var userName;
      
      var j;
      for (j = 0; j < quotedCommentTextNodes.length; j++) {
        if (quotedCommentTextNodes[j].nodeType == 1) {
          if (quotedCommentTextNodes[j].tagName == 'B') {
            quoteTitle = quotedCommentTextNodes[j].innerText;
            quoteTitleParts = quoteTitle.split(' wrote:');
            var k;
            if (!quoteTitleParts.length || quoteTitleParts.length==1) {
              // only username
              quoteTitleParsed = quoteTitle;
            } else {
              // pop last element, and glue the rest with ' wrote:'
              var prevPartAdded;
              prevPartAdded = false;
              var k_limit;
              k_limit = quoteTitleParts.length;
              k_limit--;
              
              for (k = 0; k < k_limit; k++) {
                if (prevPartAdded) {
                  quoteTitleParsed = quoteTitleParsed+' wrote:'+quoteTitleParts[k];
                } else {
                  quoteTitleParsed = quoteTitleParts[k];
                }
              }
              
            }
            userName = quoteTitleParsed;
            // check if banned user
            var usernameToTest;
            
            for (k = 0; k < userNameList.length; k++) {
              usernameToTest = userNameList[k];
              
              if (userName == usernameToTest) {
                subBlockedCommentQuote = true;
                break;
              }
              
            }
          }
          break;
        }
      }
      
      
      denialFilterClimateDebateComHideQuote(userNameList, commentTextNodes[i], subPackDiv, subIsQuote, subBlockedCommentQuote);
      //  TODO new pack div here
      newDivPackNeeded = true;
    }
    
    if (newDivPackNeeded) {
      // prepare new div for quoted comment contents
    }
    
    //
  }
}

denialFilterClimateDebateCom();