Index: trunk/webapps/common/js/fileutils.js
===================================================================
--- trunk/webapps/common/js/fileutils.js	(revision 442)
+++ trunk/webapps/common/js/fileutils.js	(revision 551)
@@ -1,27 +1,48 @@
-    // Load the dynamic json file for highways, etc.
-    // Ref: https://codepen.io/KryptoniteDove/post/load-json-file-locally-using-pure-javascript
-    function loadJSON(inFile, callback)
+// Load the dynamic json file for highways, etc.
+// Ref: https://codepen.io/KryptoniteDove/post/load-json-file-locally-using-pure-javascript
+function loadJSON(inFile, callback)
+{
+    var xobj = new XMLHttpRequest();
+    // Assume XML unless filename ends with .json
+    if (inFile.endsWith(".json"))
     {
-        var xobj = new XMLHttpRequest();
-        // Assume XML unless filename ends with .json
-        if (inFile.endsWith(".json"))
+        xobj.overrideMimeType("application/json");
+    }
+    if (inFile.endsWith(".csv"))
+    {
+        xobj.overrideMimeType("text/csv");
+    }
+    xobj.open('GET', inFile, true);
+    xobj.onreadystatechange = function()
+    {
+        if (xobj.readyState == 4 && xobj.status == "200")
         {
-            xobj.overrideMimeType("application/json");
+            callback(xobj.responseText);
         }
-        if (inFile.endsWith(".csv"))
-        {
-            xobj.overrideMimeType("text/csv");
-        }
-        xobj.open('GET', inFile, true);
-        xobj.onreadystatechange = function()
-        {
-            if (xobj.readyState == 4 && xobj.status == "200")
-            {
-                callback(xobj.responseText);
-            }
-        };
-        // We want ajax to ignore any cached responses
-        xobj.setRequestHeader('If-Modified-Since', 'Sat, 01 Jan 2000 01:01:01 GMT')
-        xobj.send(null);
+    };
+    // We want ajax to ignore any cached responses
+    xobj.setRequestHeader('If-Modified-Since', 'Sat, 01 Jan 2000 01:01:01 GMT')
+    xobj.send(null);
+}
+
+/* Retrieve URL parameters passed to a web page
+   @return a dictionary of key/value pairs
+*/
+function getQueryParms()
+{
+    var items = {};
+    var query = window.location.search.substring(1);
+    var parms = query.split("&");
+    // Examine each parameter
+    for (var i = 0, max = parms.length; i < max; i++)
+    {
+        // check for trailing & with no param
+        if (parms[i] === "") 
+            continue; // skip it
+
+        var param = parms[i].split("=");
+        // If it's valid add it to dictionary
+        items[decodeURIComponent(param[0])] = decodeURIComponent(param[1] || "");
     }
-
+    return items
+}
