Fixed: Variables scoping in roller and searchhi js files (ROL-2157)
Pattern is identified and reported at  sonacloud.io as Blocker

JavaScript variable scope can be particularly difficult to understand and get right. The situation gets even worse when you consider the accidental creation of global variables, which is what happens when you declare a variable inside a function or the for clause of a for-loop without using the let, const or var keywords.
diff --git a/app/src/main/webapp/theme/scripts/roller.js b/app/src/main/webapp/theme/scripts/roller.js
index b60ca42..1ec4976 100644
--- a/app/src/main/webapp/theme/scripts/roller.js
+++ b/app/src/main/webapp/theme/scripts/roller.js
@@ -31,7 +31,7 @@
 	if (start===-1) {
 		return null;
 	}
-	
+
 	var end = document.cookie.indexOf(";", start+prefix.length);
 	if (end===-1) {
 		end=document.cookie.length;
@@ -55,7 +55,7 @@
     var expires = new Date();
     expires.setTime(expires.getTime() + 24 * 365 * 60 * 60 * 1000); // sets it for approx 365 days.
     // sets it for entire domain, so freeroller will remember for all users
-    setCookie("commentAuthor",theForm.name.value,expires,"/"); 
+    setCookie("commentAuthor",theForm.name.value,expires,"/");
     setCookie("commentEmail",theForm.email.value,expires,"/");
     setCookie("commentUrl",theForm.url.value,expires,"/");
 }
@@ -66,12 +66,12 @@
     deleteCookie("commentUrl","/");
 }
 
-/* This function is used to show/hide elements with a display:none style attribute */ 
+/* This function is used to show/hide elements with a display:none style attribute */
 function toggle(targetId) {
     if (document.getElementById) {
         target = document.getElementById(targetId);
     	if (target.style.display === "none") {
-    		target.style.display = "";            
+    		target.style.display = "";
     	} else {
     		target.style.display = "none";
     	}
@@ -84,14 +84,14 @@
     if (document.getElementById) {
         target = document.getElementById(targetId);
     	if (target.style.display === "none") {
-    		target.style.display = "";    
-            expanded = true;        
+    		target.style.display = "";
+            expanded = true;
     	} else {
     		target.style.display = "none";
             expanded = false;
     	}
         togglePlusMinus("i" + targetId);
-        
+
         // set a cookie to remember this preference
         var expires = new Date();
         expires.setTime(expires.getTime() + 24 * 365 * 60 * 60 * 1000); // sets it for approx 365 days.
@@ -114,14 +114,14 @@
 function folderPreference(folderId) {
     var folderCookie = getCookie("rfolder-"+folderId);
     if (folderCookie != null) { // we have user's last setting
-        folder = document.getElementById(folderId);
-        plusMinus = document.getElementById("i"+folderId);
+        var folder = document.getElementById(folderId);
+        var plusMinus = document.getElementById("i"+folderId);
         if (folderCookie === "true") { // show
             folder.style.display = "";
             plusMinus.innerHTML = "-";
         } else { // hide
             folder.style.display = "none";
-            plusMinus.innerHTML = "+"; 
+            plusMinus.innerHTML = "+";
         }
     }
 }
@@ -138,7 +138,7 @@
     var thisRow = e.parentNode.parentNode;
     var tableBody = thisRow.parentNode;
     var nextRow = tableBody.getElementsByTagName("tr")[thisRow.rowIndex+1];
-    
+
     if (checked === true) {
         nextRow.style.display = "";
     } else {
@@ -152,15 +152,15 @@
         target = document.getElementById(targetId);
         toggle = document.getElementById(toggleId);
     	if (target.style.display === "none") {
-    		target.style.display = "";  
-            expanded = true;  
-                  
+    		target.style.display = "";
+            expanded = true;
+
     	} else {
-    		target.style.display = "none";  
+    		target.style.display = "none";
             expanded = false;
     	}
         togglePlusMinus("i" + targetId);
-        
+
         // set a cookie to remember this preference
         var expires = new Date();
         expires.setTime(expires.getTime() + 24 * 365 * 60 * 60 * 1000); // sets it for approx 365 days.
diff --git a/app/src/main/webapp/theme/scripts/searchhi.js b/app/src/main/webapp/theme/scripts/searchhi.js
index 776d30b..8205281 100644
--- a/app/src/main/webapp/theme/scripts/searchhi.js
+++ b/app/src/main/webapp/theme/scripts/searchhi.js
@@ -25,23 +25,23 @@
 			highlightWord(node.childNodes[hi_cn],word);
 		}
 	}
-	
+
 	// And do this node itself
 	if (node.nodeType == 3) { // text node
-		tempNodeVal = node.nodeValue.toLowerCase();
-		tempWordVal = word.toLowerCase();
+		var tempNodeVal = node.nodeValue.toLowerCase();
+		var tempWordVal = word.toLowerCase();
 		if (tempNodeVal.indexOf(tempWordVal) != -1) {
-			pn = node.parentNode;
+			var pn = node.parentNode;
 			if (pn.className != "searchword") {
 				// word has not already been highlighted!
-				nv = node.nodeValue;
-				ni = tempNodeVal.indexOf(tempWordVal);
+				var nv = node.nodeValue;
+				var ni = tempNodeVal.indexOf(tempWordVal);
 				// Create a load of replacement nodes
-				before = document.createTextNode(nv.substr(0,ni));
-				docWordVal = nv.substr(ni,word.length);
-				after = document.createTextNode(nv.substr(ni+word.length));
-				hiwordtext = document.createTextNode(docWordVal);
-				hiword = document.createElement("span");
+				var before = document.createTextNode(nv.substr(0,ni));
+				var docWordVal = nv.substr(ni,word.length);
+				var after = document.createTextNode(nv.substr(ni+word.length));
+				var hiwordtext = document.createTextNode(docWordVal);
+				var hiword = document.createElement("span");
 				hiword.className = "searchword";
 				hiword.appendChild(hiwordtext);
 				pn.insertBefore(before,node);
@@ -55,16 +55,16 @@
 
 function googleSearchHighlight() {
 	if (!document.createElement) return;
-	ref = document.referrer;
+	var ref = document.referrer;
 	if (ref.indexOf('?') == -1) return;
-	qs = ref.substr(ref.indexOf('?')+1);
-	qsa = qs.split('&');
-	for (i=0;i<qsa.length;i++) {
-		qsip = qsa[i].split('=');
+	var qs = ref.substr(ref.indexOf('?')+1);
+	var qsa = qs.split('&');
+	for (var i=0;i<qsa.length;i++) {
+		var qsip = qsa[i].split('=');
         if (qsip.length == 1) continue;
         if (qsip[0] == 'q' || qsip[0] == 'p') { // q= for Google, p= for Yahoo
-            words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
-            for (w=0;w<words.length;w++) {
+            var words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
+            for (var w=0;w<words.length;w++) {
                 highlightWord(document.getElementsByTagName("body")[0],words[w]);
             }
         }
diff --git a/app/src/main/webapp/themes/fauxcoly/searchhi.js b/app/src/main/webapp/themes/fauxcoly/searchhi.js
index 339308a..901bc60 100644
--- a/app/src/main/webapp/themes/fauxcoly/searchhi.js
+++ b/app/src/main/webapp/themes/fauxcoly/searchhi.js
@@ -5,7 +5,7 @@
 /* Modified 20081218 to scroll to first hit like
    http://www.woolyss.free.fr/js/searchhi_Woolyss.js and say when not found */
 
-searchhi = {
+var searchhi = {
   highlightWord: function(node,word) {
     // Iterate into this nodes childNodes
     if (node.hasChildNodes) {
@@ -16,8 +16,8 @@
 
     // And do this node itself
     if (node.nodeType == 3) { // text node
-	    tempNodeVal = node.nodeValue.toLowerCase();
-	    tempWordVal = word.toLowerCase();
+	    var tempNodeVal = node.nodeValue.toLowerCase();
+	    var tempWordVal = word.toLowerCase();
 	    if (tempNodeVal.indexOf(tempWordVal) != -1) {
 		    var pn = node.parentNode;
 		    // check if we're inside a "nosearchhi" zone
@@ -70,7 +70,7 @@
   process: function(wordstring) {
     searchhi.found = 0;
     var words = wordstring.split(/\s+/);
-    for (w=0;w<words.length;w++) {
+    for (var w=0;w<words.length;w++) {
 	    searchhi.highlightWord(document.getElementsByTagName("body")[0],words[w]);
     }
     if (searchhi.found === 0) {
diff --git a/app/src/main/webapp/themes/gaurav/js/searchhi.js b/app/src/main/webapp/themes/gaurav/js/searchhi.js
index 339308a..901bc60 100755
--- a/app/src/main/webapp/themes/gaurav/js/searchhi.js
+++ b/app/src/main/webapp/themes/gaurav/js/searchhi.js
@@ -5,7 +5,7 @@
 /* Modified 20081218 to scroll to first hit like
    http://www.woolyss.free.fr/js/searchhi_Woolyss.js and say when not found */
 
-searchhi = {
+var searchhi = {
   highlightWord: function(node,word) {
     // Iterate into this nodes childNodes
     if (node.hasChildNodes) {
@@ -16,8 +16,8 @@
 
     // And do this node itself
     if (node.nodeType == 3) { // text node
-	    tempNodeVal = node.nodeValue.toLowerCase();
-	    tempWordVal = word.toLowerCase();
+	    var tempNodeVal = node.nodeValue.toLowerCase();
+	    var tempWordVal = word.toLowerCase();
 	    if (tempNodeVal.indexOf(tempWordVal) != -1) {
 		    var pn = node.parentNode;
 		    // check if we're inside a "nosearchhi" zone
@@ -70,7 +70,7 @@
   process: function(wordstring) {
     searchhi.found = 0;
     var words = wordstring.split(/\s+/);
-    for (w=0;w<words.length;w++) {
+    for (var w=0;w<words.length;w++) {
 	    searchhi.highlightWord(document.getElementsByTagName("body")[0],words[w]);
     }
     if (searchhi.found === 0) {