Index: /trunk/webapps/js/cmsLayer.js
===================================================================
--- /trunk/webapps/js/cmsLayer.js	(revision 326)
+++ /trunk/webapps/js/cmsLayer.js	(revision 327)
@@ -13,5 +13,5 @@
             pic = "images/btnDepressed_CMS.png"
             // It's nice when icons become visible that the messages have been refreshed.
-            loadAllMessages();
+            loadAllcmsMessages();
         }
         else
@@ -48,5 +48,5 @@
     cmsLayer.addListener('click', function(event)
     {
-        var dialog = document.getElementById('dialog');
+        var dialog = document.getElementById('cms-dialog');
         // Note: If the dialog is already being displayed when someone else
         // updates the message, it won't be reflected in the dialog, until
@@ -63,10 +63,13 @@
         document.getElementById('msgcontent2').value = "";
         document.getElementById('msgcontent3').value = "";
+        document.getElementById('msgcontent4').value = "";
+        document.getElementById('msgcontent5').value = "";
+        document.getElementById('msgcontent6').value = "";
         document.getElementById('msgcontent1').focus();
-        var span = document.getElementsByClassName("close")[0]
+        var span = document.getElementById("cms-close");
             // When the user clicks on <span> (x), close the modal
         span.onclick = function()
         {
-            handleDialogClose();
+            handleDialogClose('cms-dialog');
         }
     });
@@ -76,6 +79,10 @@
     function justifyCMStext(message)
     {
+        // don't bother justifying a blank message
+        if (message.length == 0) return message;    
+        // determine how much padding is needed
         var kBlanks = "                ";
         var padLen = (16 - message.length) / 2;
+        // apply the padding
         var padding = kBlanks.substring(0, padLen);
         return padding + message;
@@ -88,8 +95,11 @@
         var response2 = justifyCMStext(document.getElementById('msgcontent2').value.trim());
         var response3 = justifyCMStext(document.getElementById('msgcontent3').value.trim());
-        var newMsg = response1 + response2 + response3;
+        var response4 = justifyCMStext(document.getElementById('msgcontent4').value.trim());
+        var response5 = justifyCMStext(document.getElementById('msgcontent5').value.trim());
+        var response6 = justifyCMStext(document.getElementById('msgcontent6').value.trim());
+        var newMsg = response1 + response2 + response3 + response4 + response5 + response6;
         if (newMsg.length == 0)
         {
-            alert("Nothing to Send ... Proposed is empty.");
+            alert("Nothing to Send ... input fields are empty.");
         }
         else
@@ -98,12 +108,10 @@
             document.getElementById('msgdisplay2').value = response2;
             document.getElementById('msgdisplay3').value = response3;
-            saveMessage(response1 + "|" + response2 + "|" + response3);
-        }
-    }
-
-    function handleDialogClose()
-    {
-        // hide the display
-        document.getElementById('dialog').style.display = 'none'
+            document.getElementById('msgdisplay4').value = response4;
+            document.getElementById('msgdisplay5').value = response5;
+            document.getElementById('msgdisplay6').value = response6;
+            saveMessage(response1 + "|" + response2 + "|" + response3 + "|" +
+                        response4 + "|" + response5 + "|" + response6);
+        }
     }
 
@@ -113,10 +121,52 @@
         document.getElementById('msgdisplay2').value = "";
         document.getElementById('msgdisplay3').value = "";
-        saveMessage("||");
-    }
+        document.getElementById('msgdisplay4').value = "";
+        document.getElementById('msgdisplay5').value = "";
+        document.getElementById('msgdisplay6').value = "";
+        saveMessage("|||||");
+    }
+
+    // Save an updated cms message to the file
+    function saveMessage(outMessage)
+    {
+        // Fetch cmsID from hidden field where it was put when dialog opened.
+        var cmsID = document.getElementById('cmsID').value;
+        //console.log("Saving " + outMessage + " for cmsID " + cmsID)
+        msgParts = outMessage.split("|");
+        messageDict[cmsID].cms.message.phase1.Line1 = msgParts[0];
+        messageDict[cmsID].cms.message.phase1.Line2 = msgParts[1];
+        messageDict[cmsID].cms.message.phase1.Line3 = msgParts[2];
+        messageDict[cmsID].cms.message.phase2.Line1 = msgParts[3];
+        messageDict[cmsID].cms.message.phase2.Line2 = msgParts[4];
+        messageDict[cmsID].cms.message.phase2.Line3 = msgParts[5];
+        // Set icon to reflect message state
+        if (outMessage == "|||||")
+        {
+            currentIcon = {icon: yellowFlag};
+        }
+        else
+        {
+            currentIcon = {icon: blueFlag};
+        }
+        cmsLayer.overrideStyle(cmsLayer.getFeatureById(cmsID), currentIcon)
+        // break the json string into lines for readability
+        jsonstring = JSON.stringify(Object.values(messageDict)); //,null,4);
+        outString = "{\"data\":" + jsonstring + "}";
+
+        var xhttp = new XMLHttpRequest();
+        xhttp.open("GET", "cgi-bin/saveCMSmessage.py?msg=" + outString, true);
+        xhttp.send();
+        // Using POST might be a better idea ... haven't tried this yet
+        //      var xhr = new XMLHttpRequest();
+        //      xhr.open("POST", "/cgi-bin/saveMessage.py?", true);
+        //      xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
+        // send the collected data as JSON
+        //      xhr.send(JSON.stringify(messageList));
+    }
+
     // retrieve the current cms message file
     function showMessage(cmsID)
     {
-        loadAllMessages();  // because someone else may have made a recent update
+        loadAllcmsMessages();  // because someone else may have made a recent update
         // lookup the message for this cms ID
         var message = messageDict[cmsID].cms.message;
@@ -125,6 +175,9 @@
         document.getElementById('msgdisplay2').value = message.phase1.Line2;
         document.getElementById('msgdisplay3').value = message.phase1.Line3;
-    }
-    function loadAllMessages()
+        document.getElementById('msgdisplay4').value = message.phase2.Line1;
+        document.getElementById('msgdisplay5').value = message.phase2.Line2;
+        document.getElementById('msgdisplay6').value = message.phase2.Line3;
+    }
+    function loadAllcmsMessages()
     {
         loadJSON("cms_messages.json", function(response)
@@ -141,5 +194,8 @@
                 if (item.cms.message.phase1.Line1 + 
                     item.cms.message.phase1.Line2 +
-                    item.cms.message.phase1.Line3 == "")
+                    item.cms.message.phase1.Line3 +
+                    item.cms.message.phase2.Line1 + 
+                    item.cms.message.phase2.Line2 +
+                    item.cms.message.phase2.Line3 == "")
                 {
                     cmsLayer.overrideStyle(cmsLayer.getFeatureById(item.cms.index), {icon: yellowFlag})
@@ -153,35 +209,3 @@
     }
 
-    // Save an updated cms message to the file
-    function saveMessage(outMessage)
-    {
-        // Fetch cmsID from hidden field where it was put when dialog opened.
-        var cmsID = document.getElementById('cmsID').value;
-        //console.log("Saving " + outMessage + " for cmsID " + cmsID)
-        msgParts = outMessage.split("|");
-        messageDict[cmsID].cms.message.phase1.Line1 = msgParts[0];
-        messageDict[cmsID].cms.message.phase1.Line2 = msgParts[1];
-        messageDict[cmsID].cms.message.phase1.Line3 = msgParts[2];
-        // Set icon to reflect message state
-        if (outMessage == "||")
-        {
-            currentIcon = {icon: yellowFlag};
-        }
-        else
-        {
-            currentIcon = {icon: blueFlag};
-        }
-        cmsLayer.overrideStyle(cmsLayer.getFeatureById(cmsID), currentIcon)
-        outString = "{\n\t\"data\":\n\t\t" + JSON.stringify(Object.values(messageDict)) + "}";
-
-        var xhttp = new XMLHttpRequest();
-        xhttp.open("GET", "cgi-bin/saveMessage.py?msg=" + outString, true);
-        xhttp.send();
-        // Using POST might be a better idea ... haven't tried this yet
-        //      var xhr = new XMLHttpRequest();
-        //      xhr.open("POST", "/cgi-bin/saveMessage.py?", true);
-        //      xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
-        // send the collected data as JSON
-        //      xhr.send(JSON.stringify(messageList));
-    }
-
+
Index: /trunk/webapps/js/harLayer.js
===================================================================
--- /trunk/webapps/js/harLayer.js	(revision 327)
+++ /trunk/webapps/js/harLayer.js	(revision 327)
@@ -0,0 +1,160 @@
+function initHARbutton()
+{
+    var harBtnDiv = document.getElementById('harButton');
+    map.controls[google.maps.ControlPosition.LEFT_BOTTOM].push(harBtnDiv)
+    harBtnDiv.title = 'Click to toggle har view';
+    // Setup the click event listeners to toggle icon display
+    harBtnDiv.addEventListener('click', function()
+    {
+        har_showing = !har_showing;
+        // Determine which button image to show
+        if (har_showing)
+        {
+            pic = "images/btnDepressed_HAR.png"
+            // It's nice when icons become visible that the messages have been refreshed.
+            loadAllharMessages();
+        }
+        else
+        {
+            pic = "images/btnReady_HAR.png"
+        }
+        document.getElementById('harBtnImg').src = pic;
+        // reveal or hide all the icons
+        harLayer.forEach(function(feature)
+        {
+            harLayer.overrideStyle(feature,
+            {
+                visible: har_showing
+            });
+        });
+    });
+}
+function loadHARlayer()
+{
+    harLayer = new google.maps.Data();
+    harLayer.setMap(map);
+    harLayer.loadGeoJson(kHARfile);  
+    harLayer.setStyle(function(feature)
+    {
+        // return the StyleOptions
+        return {
+            icon: harActive,
+            title: feature.getId()+ " " +feature.getProperty("location")+ " " 
+                    + feature.getProperty("street"),
+            visible: false
+        };
+    });
+    
+    harLayer.addListener('click', function(event)
+    {
+        var dialog = document.getElementById('har-dialog');
+        // Note: If the dialog is already being displayed when someone else
+        // updates the message, it won't be reflected in the dialog, until
+        // you close and reopen it.
+        dialog.style.display = 'block';
+        harID = event.feature.getId();
+        // Assign to the hidden field
+        document.getElementById('harID').value = harID;
+        showHARMessage(harID); // note: this is async
+        document.getElementById('har-info-label').innerHTML = "HAR ID: " +
+            harID + "&nbsp;&nbsp;&nbsp;LOCATION: " + event.feature.getProperty("location");
+        // clear input fields
+        document.getElementById('har-msgcontent1').value = "";
+        document.getElementById('har-msgcontent1').focus();
+        var span = document.getElementById('har-close');
+            // When the user clicks on <span> (x), close the modal
+        span.addEventListener('click',function()
+        {
+            handleDialogClose('har-dialog');
+        });
+    });
+}
+
+    function handleHARsubmit()
+    {
+        // recover the user's response
+        var response1 = document.getElementById('har-msgcontent1').value.trim();
+
+        var newMsg = response1;
+        if (newMsg.length == 0)
+        {
+            alert("Nothing to Send ... input fields are empty.");
+        }
+        else
+        {
+            document.getElementById('har-msgdisplay1').value = response1;
+
+            saveHARMessage(response1);
+        }
+    }
+
+    function handleHARclear()
+    {
+        document.getElementById('har-msgdisplay1').value = "";
+        saveMessage("");
+    }
+
+    // Save an updated har message to the file
+    function saveHARMessage(outMessage)
+    {
+        // Fetch harID from hidden field where it was put when dialog opened.
+        var harID = document.getElementById('harID').value;
+        HARmessageDict[harID].har.message.phase1.Line1 = outMessage;
+
+        // TODO Set icon to reflect message state
+        if (outMessage == "")
+        {
+        }
+        else
+        {
+        }
+        //harLayer.overrideStyle(harLayer.getFeatureById(harID), currentIcon)
+        // break the json string into lines for readability
+        jsonstring = JSON.stringify(Object.values(HARmessageDict));
+        outString = "{\"data\":" + jsonstring + "}";
+
+        var xhttp = new XMLHttpRequest();
+        xhttp.open("GET", "cgi-bin/saveHARmessage.py?msg=" + outString, true);
+        xhttp.send();
+        // Using POST might be a better idea ... haven't tried this yet
+        //      var xhr = new XMLHttpRequest();
+        //      xhr.open("POST", "/cgi-bin/saveMessage.py?", true);
+        //      xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
+        // send the collected data as JSON
+        //      xhr.send(JSON.stringify(messageList));
+    }
+
+    // retrieve the current har message file
+    function showHARMessage(harID)
+    {
+        loadAllharMessages();  // because someone else may have made a recent update
+        // lookup the message for this har ID
+        var message = HARmessageDict[harID].har.message;
+        // show the message in the display
+        document.getElementById('har-msgdisplay1').value = message.phase1.Line1;
+
+    }
+    function loadAllharMessages()
+    {
+        loadJSON("har_messages.json", function(response)
+        {
+            // Parse JSON string into object
+            messagejson = JSON.parse(response);
+            // Add each message to a lookup dictionary 
+            for (var i = 0; i < messagejson.data.length; i++)
+            {
+                var item = messagejson.data[i];
+                HARmessageDict[item.har.index] = item;
+                // TODO Set the appropriate icon on the har icon
+                //  if there's currently no message
+                if (item.har.message.phase1.Line1 == "")
+                {
+                }
+                else
+                {
+                }
+            }
+        });
+    }
+
+
Index: /trunk/webapps/js/common.js
===================================================================
--- /trunk/webapps/js/common.js	(revision 315)
+++ /trunk/webapps/js/common.js	(revision 327)
@@ -17,2 +17,11 @@
         xobj.send(null);
     }
+
+
+    function handleDialogClose(id)
+    {
+        // hide the display
+        document.getElementById(id).style.display = 'none'
+    }
+
+
Index: /trunk/webapps/cms_messages.json
===================================================================
--- /trunk/webapps/cms_messages.json	(revision 326)
+++ /trunk/webapps/cms_messages.json	(revision 327)
@@ -1,1 +1,1 @@
-{"data":[{"cms":{"index":"1200022","message":{"displayTime":"","phase1":{"Line1":"   Near Vista","Line2":"    Hermosa","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200023","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200024","message":{"displayTime":"","phase1":{"Line1":"bottom of fifth","Line2":"dodgers up by 2","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200025","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200026","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200027","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200028","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200029","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200030","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200031","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200032","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200033","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200034","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200035","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200036","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200037","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200038","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200039","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200040","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200041","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200042","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200043","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200044","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200045","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200046","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200047","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200048","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200049","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200050","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200051","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200052","message":{"displayTime":"","phase1":{"Line1":"  airport exit","Line2":"    1/2 mile","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200053","message":{"displayTime":"","phase1":{"Line1":"  slow for the","Line2":"   cone zone","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200055","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200056","message":{"displayTime":"","phase1":{"Line1":"    caution","Line2":"  slow traffic","Line3":"     ahead"},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200057","message":{"displayTime":"","phase1":{"Line1":"  I must be a","Line2":"     Lucky","Line3":"   Irishwoman"},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200058","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1208488","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1211184","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1211185","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1211967","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1211978","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1212138","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1212822","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1212823","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214503","message":{"displayTime":"","phase1":{"Line1":" You're heading","Line2":"     south.","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214504","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214505","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214506","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214507","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214508","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214509","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214510","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214511","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214512","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214513","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214514","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214956","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1217542","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218442","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218482","message":{"displayTime":"","phase1":{"Line1":"  San Clemente","Line2":"   Next Exit","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218483","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218484","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218485","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218486","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}}]}
+{"data":[{"cms":{"index":"1200022","message":{"displayTime":"","phase1":{"Line1":"      have","Line2":"       a","Line3":"    nice day"},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200023","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200024","message":{"displayTime":"","phase1":{"Line1":"bottom of fifth","Line2":"dodgers up by 2","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200025","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200026","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200027","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200028","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200029","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200030","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200031","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200032","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200033","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200034","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200035","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200036","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200037","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200038","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200039","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200040","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200041","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200042","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200043","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200044","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200045","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200046","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200047","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200048","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200049","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200050","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200051","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200052","message":{"displayTime":"","phase1":{"Line1":"  airport exit","Line2":"    1/2 mile","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200053","message":{"displayTime":"","phase1":{"Line1":"  slow for the","Line2":"   cone zone","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200055","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200056","message":{"displayTime":"","phase1":{"Line1":""},"phase2":{}}}},{"cms":{"index":"1200057","message":{"displayTime":"","phase1":{"Line1":"     drive","Line2":"     safely","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1200058","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1208488","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1211184","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1211185","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1211967","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1211978","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1212138","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1212822","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1212823","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214503","message":{"displayTime":"","phase1":{"Line1":" You're heading","Line2":"     south.","Line3":"        "},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214504","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214505","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214506","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214507","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214508","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214509","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214510","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214511","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214512","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214513","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214514","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1214956","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1217542","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218442","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218482","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218483","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218484","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218485","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},{"cms":{"index":"1218486","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}}]}
Index: /trunk/webapps/cgi-bin/saveHARmessage.py
===================================================================
--- /trunk/webapps/cgi-bin/saveHARmessage.py	(revision 327)
+++ /trunk/webapps/cgi-bin/saveHARmessage.py	(revision 327)
@@ -0,0 +1,22 @@
+#!/usr/bin/python
+# Save parameter to a file
+# Import modules for CGI handling 
+import cgi, cgitb, os 
+
+# Create instance of FieldStorage 
+form = cgi.FieldStorage() 
+
+# Get data from fields
+outMessage = form.getvalue('msg')
+   
+# write message to file
+text_file = open("har_messages.json", "w")
+text_file.write(outMessage)
+text_file.close()
+
+#print "Content-type:text/html\n\n"
+#print "<html><body>"
+#print "Here is the message<br>"
+#print outMessage
+#print "<br>"
+#print "</body></html>"
Index: /trunk/webapps/cgi-bin/saveCMSmessage.py
===================================================================
--- /trunk/webapps/cgi-bin/saveCMSmessage.py	(revision 327)
+++ /trunk/webapps/cgi-bin/saveCMSmessage.py	(revision 327)
@@ -0,0 +1,22 @@
+#!/usr/bin/python
+# Save parameter to a file
+# Import modules for CGI handling 
+import cgi, cgitb, os 
+
+# Create instance of FieldStorage 
+form = cgi.FieldStorage() 
+
+# Get data from fields
+outMessage = form.getvalue('msg')
+   
+# write message to file
+text_file = open("cms_messages.json", "w")
+text_file.write(outMessage)
+text_file.close()
+
+#print "Content-type:text/html\n\n"
+#print "<html><body>"
+#print "Here is the message<br>"
+#print outMessage
+#print "<br>"
+#print "</body></html>"
Index: unk/webapps/cgi-bin/saveMessage.py
===================================================================
--- /trunk/webapps/cgi-bin/saveMessage.py	(revision 311)
+++ 	(revision )
@@ -1,22 +1,0 @@
-#!/usr/bin/python
-# Save parameter to a file
-# Import modules for CGI handling 
-import cgi, cgitb, os 
-
-# Create instance of FieldStorage 
-form = cgi.FieldStorage() 
-
-# Get data from fields
-outMessage = form.getvalue('msg')
-   
-# write message to file
-text_file = open("cms_messages.json", "w")
-text_file.write(outMessage)
-text_file.close()
-
-#print "Content-type:text/html\n\n"
-#print "<html><body>"
-#print "Here is the message<br>"
-#print outMessage
-#print "<br>"
-#print "</body></html>"
Index: /trunk/webapps/data_layers/har_locations_D12.gjson
===================================================================
--- /trunk/webapps/data_layers/har_locations_D12.gjson	(revision 327)
+++ /trunk/webapps/data_layers/har_locations_D12.gjson	(revision 327)
@@ -0,0 +1,47 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+  {
+  "type": "Feature",
+  "id": "HAR1",
+  "geometry":
+      {
+      "type": "Point",
+      "coordinates": [-117.807584,33.728551]
+      },
+  "properties":
+      {
+      "location":"N I-5 28.54",
+      "street":"S/O REDHILL"
+      }
+  },
+  {
+  "type": "Feature",
+  "id": "HAR2",
+  "geometry":
+      {
+      "type": "Point",
+      "coordinates": [-117.766893,33.687054]
+      },
+  "properties":
+      {
+      "location":"S I-5 24.78",
+      "street":"JEFFREY"
+      }
+  },
+  {
+  "type": "Feature",
+  "id": "HAR3",
+  "geometry":
+      {
+      "type": "Point",
+      "coordinates": [-117.847695,33.712247]
+      },
+  "properties":
+      {
+      "location":"N SR-55  8.21",
+      "street":"DYER ROAD"
+      }
+  }
+]
+}
Index: /trunk/webapps/cptms.html
===================================================================
--- /trunk/webapps/cptms.html	(revision 326)
+++ /trunk/webapps/cptms.html	(revision 327)
@@ -25,5 +25,5 @@
       }
         /* A line of the CMS message display */
-        textarea {
+        .cms_sign {
            height: 33px;
            width: 272px;
@@ -35,8 +35,15 @@
         }
         /* Field for entering CMS Message line */
-       input {
+       .cms-input {
            border: thin solid #333;
            padding: 2px;
            font-family: "Lucida Console", Monaco, monospace;
+           font-size: medium;
+           width: 163px;
+        }
+        /* Field for entering HAR Message line */
+       .har-input {
+           border: thin solid #333;
+           padding: 2px;
            font-size: medium;
         }
@@ -71,12 +78,15 @@
        }
       #message-display {
-           height: 172px;
+           height: 300px;
            width: 300px;
            overflow: hidden;
            float: left;
        }
+      #har-msgdisplay1 {
+            background-color: darkgray;
+      }
       #message-input {
            height: 122px;
-           width: 165px;
+           width: 170px;
            background-color: #729FFF;
            float: left;
@@ -85,7 +95,6 @@
        #buttonPanel {
            height: 122px;
-           width: 130px;
+           width: 125px;
            background-color: #729FFF;
-           border-left: none;
            float: left;
            padding: 20px;
@@ -95,5 +104,5 @@
         }
         /* CMS Edit Message Dialog */
-       #dialog {
+       .dialog {
           position: absolute;
           top: 10%;
@@ -104,4 +113,5 @@
           border: 1px solid #888;
           width: 680px;
+          height: 360px;
           display: none;           
         }
@@ -155,28 +165,55 @@
     <div id="mapdiv"></div>
     <!-- The div element for the popup dialog. Best results when placed here. -->
-    <div id="dialog" style="display:none;">
-        <span class="close">&#x2612;</span>  <!-- close button symbol -->
+    <div id="cms-dialog" class="dialog">
+        <span id="cms-close" class="close">&#x2612;</span>  <!-- close button symbol -->
         <br>
         <div id="cms-info-label" style="font-family:'Courier New'">CMS ID: xxx LOCATION: </div>
         <br>
         <input id='cmsID' value="" type='hidden'/>
-        <div id="message-input">Proposed:
-        <input id="msgcontent1"  maxlength="16" type="text"/><br><br>
-        <input id="msgcontent2"  maxlength="16" type="text"/><br><br>
-        <input id="msgcontent3"  maxlength="16" type="text"/>
+        <div id="message-input">Phase 1:
+        <input id="msgcontent1" class="cms-input"  maxlength="16" type="text"/><br><br>
+        <input id="msgcontent2" class="cms-input"  maxlength="16" type="text"/><br><br>
+        <input id="msgcontent3" class="cms-input"  maxlength="16" type="text"/><br><br>
+        Phase 2:
+        <input id="msgcontent4" class="cms-input"  maxlength="16" type="text"/><br><br>
+        <input id="msgcontent5" class="cms-input"  maxlength="16" type="text"/><br><br>
+        <input id="msgcontent6" class="cms-input"  maxlength="16" type="text"/><br><br>
         </div>        
-        <div id="buttonPanel"    style="display: block;">
-        <button onclick="handleCMSsubmit();">Send >></button><br>
-        <button onclick="handleCMSclear();">Clear >></button><br>
-        <button onclick="handleDialogClose();">Close </button>
+        <div id="buttonPanel"    style="display: block;"><br><br>
+        <button onclick="handleCMSsubmit();">Send >></button><br><br>
+        <button onclick="handleCMSclear();">Clear >></button><br><br>
+        <button onclick="handleDialogClose('cms-dialog');">Close </button>
         </div>
         <div id="message-display"  style="display: block;">Current:
-         <textarea readonly id="msgdisplay1" maxlength="16" rows="1" cols="16"></textarea>
-         <textarea readonly id="msgdisplay2" maxlength="16" rows="1" cols="16"></textarea>
-         <textarea readonly id="msgdisplay3" maxlength="16" rows="1" cols="16"></textarea>
+         <textarea class="cms_sign" readonly id="msgdisplay1" maxlength="16" rows="1" cols="16"></textarea>
+         <textarea class="cms_sign" readonly id="msgdisplay2" maxlength="16" rows="1" cols="16"></textarea>
+         <textarea class="cms_sign" readonly id="msgdisplay3" maxlength="16" rows="1" cols="16"></textarea>
+         <br><br><br>
+         <textarea class="cms_sign" readonly id="msgdisplay4" maxlength="16" rows="1" cols="16"></textarea>
+         <textarea class="cms_sign" readonly id="msgdisplay5" maxlength="16" rows="1" cols="16"></textarea>
+         <textarea class="cms_sign" readonly id="msgdisplay6" maxlength="16" rows="1" cols="16"></textarea>
+        </div>
+    </div>
+    <div id="har-dialog" class="dialog">
+        <span id="har-close" class="close">&#x2612;</span>  <!-- close button symbol -->
+        <div id="har-info-label" style="font-family:'Courier New'">HAR ID: xxx LOCATION: </div>
+        <br>
+        <input id='harID' value="" type='hidden'/>
+        <!--div id="har-message-input"-->Proposed:<br>
+        <input id="har-msgcontent1" class="har-input" type="text" size="50"><br>
+        <!--textarea id="har-msgcontent1" maxlength="150" rows="2" cols="50"/><br><br-->
+
+        <div id="har-buttonPanel" style="display: block;"><br>
+        <button onclick="handleHARsubmit();">Send >></button>
+        <button onclick="handleHARclear();">Clear >></button>
+        <button onclick="handleDialogClose('har-dialog');">Close </button><br><br>
+        </div>
+        <div id="har-message-display"  style="display: block;">Current:<br>
+         <textarea readonly id="har-msgdisplay1" maxlength="150" rows="3" cols="50"></textarea>
         </div>
     </div>
     <!--The div elements where the buttons appear  -->
     <div id="ctrButton"><img width="30" src="images/btn_mapcenter.png"</div>
+    <button id="harButton" class="unstyled-button"><img id="harBtnImg" src="images/btnReady_HAR.png"></button>
     <button id="cctvButton" class="unstyled-button"><img id="cctvBtnImg" src="images/btnReady_CCTV.png"></button>
     <button id="cmsButton" class="unstyled-button"><img id="cmsBtnImg" src="images/btnReady_CMS.png"></button>
@@ -192,4 +229,6 @@
     // the cms message local dictionary
     var messageDict = {}; 
+    // the har message local dictionary
+    var HARmessageDict = {}; 
     // Constant for map center location: The John Wayne Airport
     //var centerPoint = {lat: 33.687228, lng: -117.872148};
@@ -215,4 +254,5 @@
     var kCMSfile = "data_layers/cms_locations_D12.gjson"; // CMS locations 
     var kCCTVfile = "data_layers/cctv_locations_D12.gjson"; // CCTV locations
+    var kHARfile = "data_layers/har_locations_D12.gjson"; // CMS locations 
     var blueFlag = "images/icon_cmsBlue.png";
     var yellowFlag = "images/icon_cmsYellow.png";
@@ -222,7 +262,9 @@
     var vdsIconYellow = "images/circle-yellow.png"
     var vdsIconRed = "images/circle-red.png"
+    var harActive = "images/icon_harActive.png";
     var cms_showing = false;
     var vds_showing = true;
     var cctv_showing = false;
+    var har_showing = false;
     var cctv_infowindow; // We create just a single instance of info window.
 
@@ -231,4 +273,5 @@
     function initLayerButtons()
     {
+        initHARbutton();
         initCCTVbutton();
         initCMSbutton();
@@ -256,4 +299,5 @@
         loadCMSlayer();
         loadCCTVlayer();
+        loadHARlayer();
 
         initLayerButtons(); // setup the show/hide layer buttons
@@ -262,5 +306,9 @@
         var myTimer = setInterval(updateVDSlayer, 10000);
         // start an interval timer to refresh the cms icons every 10 seconds
-        var cmsTimer = setInterval(loadAllMessages, 10000);
+        var cmsTimer = setInterval(loadAllcmsMessages, 10000);
+
+        // start an interval timer to refresh the har icons every 10 seconds
+        var harTimer = setInterval(loadAllharMessages, 10000);
+
         // Listen for zoom changes and move the vds dots so as to keep a nice
         // visual distance between them appropriate to the zoom factor
@@ -284,4 +332,5 @@
     <script  src="js/cmsLayer.js"></script>
     <script  src="js/cctvLayer.js"></script>
+    <script  src="js/harLayer.js"></script>
     <script  src="js/controls.js"></script>
     <script  src="js/night_mode.js"></script>
Index: /trunk/webapps/har_messages.json
===================================================================
--- /trunk/webapps/har_messages.json	(revision 327)
+++ /trunk/webapps/har_messages.json	(revision 327)
@@ -0,0 +1,1 @@
+{"data":[{"har":{"index":"HAR1","message":{"displayTime":"","phase1":{"Line1":"a long time ago in a galaxy far, far away"}}}},{"har":{"index":"HAR2","message":{"displayTime":"","phase1":{"Line1":"slow traffic ahead"}}}},{"har":{"index":"HAR3","message":{"displayTime":"","phase1":{"Line1":"drive safely"}}}}]}
