Merge pull request #46 from apache/ROL-2157

Fixed: Variables should be declared explicitly in Custom JS code (ROL-2157)
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/MembersInvite.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/MembersInvite.jsp
index 0f3aabe..f285705 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/MembersInvite.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/MembersInvite.jsp
@@ -23,12 +23,12 @@
 <s:form action="invite!save" cssClass="form-horizontal">
 	<s:hidden name="salt" />
     <s:hidden name="weblog" value="%{actionWeblog.handle}" />
-    
+
     <div class="formrow">
        <label for="userName" class="formrow">
            <s:text name="inviteMember.userName" /></label>
        <div>
-           <input name="userName" id="userName" size="30" maxlength="30" 
+           <input name="userName" id="userName" size="30" maxlength="30"
                onfocus="onMemberNameFocus(true)" onkeyup="onMemberNameChange(true)" /><br />
        </div>
     </div>
@@ -38,8 +38,8 @@
        <div>
            <select id="userList" size="10" onchange="onMemberSelected()" style="width:400px"></select>
        </div>
-    </div>    
-    
+    </div>
+
     <div style="clear:left">
        <label for="userName" class="formrow" />
            <s:text name="inviteMember.permissions" /></label>
@@ -49,9 +49,9 @@
        <s:text name="inviteMember.author" />
        <input type="radio" name="permissionString" value="edit_draft" />
        <s:text name="inviteMember.limited" />
-    </div>  
-         
-    <br />      
+    </div>
+
+    <br />
     <s:submit id="inviteButton" value="%{getText('inviteMember.button.save')}"  cssClass="btn btn-default"/>
     <s:submit value="%{getText('generic.cancel')}" action="invite!cancel" cssClass="btn"/>
 
@@ -67,12 +67,12 @@
     });
 
     function onMemberNameChange(enabled) {
-        u = userURL;
+        var u = userURL;
         if (enabled != null) {
             u = u + "&enabled=" + enabled;
         }
 
-        userName = $('#userName').val();
+        var userName = $('#userName').val();
         if (userName.length > 0) {
             u = u + "&startsWith=" + userName;
         }
@@ -81,7 +81,7 @@
     }
 
     function onMemberSelected() {
-        userName = $('#userList').children("option:selected").val();
+        var userName = $('#userList').children("option:selected").val();
         if (userName !== '') {
             $('#inviteButton').attr("disabled", false);
         }
@@ -90,7 +90,7 @@
     function onMemberNameFocus(enabled) {
         if (!init) {
             init = true;
-            u = userURL;
+            var u = userURL;
 
             if (enabled != null) {
                 u = u + "&enabled=" + enabled;
diff --git a/app/src/main/webapp/WEB-INF/velocity/weblog.vm b/app/src/main/webapp/WEB-INF/velocity/weblog.vm
index 32b4cb9..d9eb6f4 100644
--- a/app/src/main/webapp/WEB-INF/velocity/weblog.vm
+++ b/app/src/main/webapp/WEB-INF/velocity/weblog.vm
@@ -16,7 +16,7 @@
   directory of this distribution.
 *#
 
-#** 
+#**
 Set of essential macros needed in Roller velocity templates.
 These are the documented macros in order defined in this file:
 
@@ -52,16 +52,16 @@
     #showMobileSearchAgainForm($weblog)
     #showNextPrevSearchControl($pager)
     #showMobileNextPrevSearchControl($pager)
-    
+
     #showMobilePopupDialog($id $header $message)
 
     #_showCommonJavaScript()
-    
+
     #showEntryTags($entry)
 *#
 
 
-#** 
+#**
 Parse and include page template from weblog.
 *#
 #macro(includeTemplate $weblog $pageName)
@@ -74,14 +74,14 @@
 #end
 
 
-#** 
+#**
 Show RSS, Atom and RSD auto-discovery links as HTML link elements.
 *#
 #macro(showAutodiscoveryLinks $weblog)
     #if ($weblog.enableBloggerApi)
        <link rel="EditURI"   type="application/rsd+xml" title="RSD" href="$url.rsd"/>
     #end
-    
+
     ## main feed urls are always available
     #if (!$model.searchResults)
     <link rel="alternate" type="application/atom+xml" title="Recent Entries (Atom)"  href="$url.feed.entries.atom" />
@@ -168,8 +168,8 @@
     #end
 #end
 
-#** 
-Shows weblog entries pager via default day template 
+#**
+Shows weblog entries pager via default day template
 *#
 #macro(showWeblogEntriesPager $pager)
     #set($dayPage = $model.weblog.getTemplateByName("_day"))
@@ -201,7 +201,7 @@
         #set($nextName = $pager.nextCollectionName)
     #end
     #if ($prevLink)
-        &laquo; <a href="$prevLink">$prevName</a> | 
+        &laquo; <a href="$prevLink">$prevName</a> |
     #end
     #if ($prevLink || $nextLink)
         <a href="$pager.getHomeLink()">$pager.getHomeName()</a>
@@ -256,11 +256,11 @@
       </ul>
     </div>
   #end
-    
+
 #end
 
 
-#** 
+#**
 Show comments for weblog entry according to Roller configuration.
 *#
 #macro(showWeblogEntryComments $entry)
@@ -355,8 +355,8 @@
 #end
 
 
-#** 
-Show comments form for weblog entry. 
+#**
+Show comments form for weblog entry.
 *#
 #macro(showWeblogEntryCommentForm $entry)
     #set($cform = $model.getCommentForm())
@@ -474,7 +474,7 @@
 #end
 
 
-#** 
+#**
 Show entries as a HTML ul list.
 *#
 #macro(showWeblogEntryLinksList $entriesList)
@@ -486,7 +486,7 @@
 #end
 
 
-#** 
+#**
 Show bookmarks as a HTML ul list.
 *#
 #macro(showBookmarkLinksList $folderObject)
@@ -519,7 +519,7 @@
 #end
 
 
-#** 
+#**
 Show weblog's categories in specified parent category.
 *#
 #macro(showWeblogCategoryLinksList)
@@ -651,14 +651,14 @@
 #end
 
 
-#** 
+#**
 Show weblog entry calendar, with optional category restriction.
 *#
 #macro(showWeblogEntryCalendar $weblog $category)
 $calendarModel.showWeblogEntryCalendar($weblog, $category)
 #end
 
-#** 
+#**
 Show large format weblog entry calendar, with optional category restriction.
 *#
 #macro(showWeblogEntryCalendarBig $weblog $category)
@@ -666,11 +666,11 @@
 #end
 
 
-#** 
+#**
 Show weblog author menu with vertical or horizontal orientation.
 *#
 #macro(showAuthorMenu $vertical)
-  
+
   #set( $authorMenu = $menuModel.authorMenu )
   #if( $authorMenu )
       #if( $vertical )
@@ -696,11 +696,11 @@
 #end
 
 
-#** 
+#**
 Show weblog author menu with vertical or horizontal orientation.
 *#
 #macro(showAdminMenu $vertical)
-  
+
   #set( $adminMenu = $menuModel.adminMenu )
   #if( $adminMenu )
       #if( $vertical )
@@ -726,7 +726,7 @@
 #end
 
 
-#** 
+#**
 Show search form for a weblog.
 *#
 #macro(showWeblogSearchForm $weblog $showCatChooser)
@@ -790,7 +790,7 @@
 #end
 
 
-#** 
+#**
 Show search again form for a weblog.
 *#
 #macro(showWeblogSearchAgainForm $weblog)
@@ -835,7 +835,7 @@
 #end
 
 
-#** 
+#**
 Show next/prev pager for search results.
 *#
 #macro(showNextPrevSearchControl $pager)
@@ -857,7 +857,7 @@
         #set($nextName = $pager.nextName)
     #end
     #if ($prevLink)
-        &laquo; <a href="$prevLink">$prevName</a> |  
+        &laquo; <a href="$prevLink">$prevName</a> |
     #end
     #if ($prevLink || $nextLink)
         <a href="$pager.getHomeLink()">$pager.getHomeName()</a>
@@ -917,7 +917,7 @@
 #end
 
 
-#** 
+#**
 Show mobile alert popup.
 *#
 #macro(showMobilePopupDialog $id $header $message)
@@ -945,12 +945,12 @@
         ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
     }
     function getCookie(name) {
-        var prefix = name + "=" 
-        var start = document.cookie.indexOf(prefix) 
+        var prefix = name + "="
+        var start = document.cookie.indexOf(prefix)
         if (start==-1) return null;
-        var end = document.cookie.indexOf(";", start+prefix.length) 
+        var end = document.cookie.indexOf(";", start+prefix.length)
         if (end==-1) end=document.cookie.length;
-        var value=document.cookie.substring(start+prefix.length, end) 
+        var value=document.cookie.substring(start+prefix.length, end)
         return unescape(value);
     }
     /* The toggleFolder and togglePlusMinus functions are for expanding/contracting folders */
@@ -959,13 +959,13 @@
         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);        
+            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.
@@ -985,14 +985,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 = "+";
             }
         }
     }
@@ -1019,12 +1019,12 @@
  Display a list of tag urls for the tags on a given entry.
 *#
 #macro(showEntryTags $entry)
-  
+
   #set ( $tags = $entry.tags )
   #foreach($tag in $tags)
-	    <a href="$url.tag($tag.name)" rel="tag">$tag.name</a> 
+	    <a href="$url.tag($tag.name)" rel="tag">$tag.name</a>
   #end
-  
+
 #end
 
 
diff --git a/app/src/main/webapp/roller-ui/scripts/ajax-user.js b/app/src/main/webapp/roller-ui/scripts/ajax-user.js
index f3bbfb2..49715b3 100644
--- a/app/src/main/webapp/roller-ui/scripts/ajax-user.js
+++ b/app/src/main/webapp/roller-ui/scripts/ajax-user.js
@@ -37,30 +37,30 @@
 function onUserNameFocus(enabled) {
     if (!init) {
         init = true;
-        u = userURL;
+        var u = userURL;
         if (enabled != null) u = u + "&enabled=" + enabled;
         sendUserRequest(u);
     } else {
-        userSubmitButton = document.getElementById("user-submit");
+        var userSubmitButton = document.getElementById("user-submit");
         userSubmitButton.disabled = true;
     }
 }
 
 function onUserNameChange(enabled) {
-    u = userURL;
+    var u = userURL;
     if (enabled != null) u = u + "&enabled=" + enabled;
-    userName = document.getElementById("userName");
+    var userName = document.getElementById("userName");
     if (userName.value.length > 0) u = u + "&startsWith=" + userName.value;
     sendUserRequest(u);
 }
 
 function onUserSelected() {
-    userList = document.getElementById("userList");
-    user = userList.options[userList.options.selectedIndex];
-    userName = document.getElementById("userName");
+    var userList = document.getElementById("userList");
+    var user = userList.options[userList.options.selectedIndex];
+    var userName = document.getElementById("userName");
     userName.value = user.value;
 
-    userSubmitButton = document.getElementById("user-submit");
+    var userSubmitButton = document.getElementById("user-submit");
     userSubmitButton.disabled = false;
 }
 
@@ -74,21 +74,21 @@
 
 function handleUserResponse() {
     if (http.readyState === 4) {
-        userList = document.getElementById("userList");
-        for (i = userList.options.length; i >= 0; i--) {
+        var userList = document.getElementById("userList");
+        for (var i = userList.options.length; i >= 0; i--) {
             userList.options[i] = null;
-        }   
-        data = http.responseText;
+        }
+        var data = http.responseText;
         if (data.indexOf("\n") !== -1) {
-            lines = data.split('\n');
-            for (i = 0; i < lines.length; i++) {
+            var lines = data.split('\n');
+            for (var i = 0; i < lines.length; i++) {
                 if (lines[i].indexOf(',') !== -1) {
-                   userArray = lines[i].split(',');
-                   userList.options[userList.length] = 
+                   var userArray = lines[i].split(',');
+                   userList.options[userList.length] =
                       new Option(userArray[0] + " (" + userArray[1] + ")", userArray[0]);
                 }
             }
-        }  
+        }
 
     }
     isBusy = false;
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) {