Index: trunk/webapps/cptms/js/cmsLayer.js
===================================================================
--- trunk/webapps/cptms/js/cmsLayer.js	(revision 426)
+++ trunk/webapps/cptms/js/cmsLayer.js	(revision 440)
@@ -90,18 +90,21 @@
         // apply the padding
         var padding = kBlanks.substring(0, padLen);
-        // Fix defect #122.   Remove semicolons from input.
-        message = message.replace(/;/gi, ""); 
         return padding + message;
     }
-
+    // Remove harmful characters from the message
+    // Fix defect #122.   
+    function sanitize(text)
+    {
+        return text.replace(/[;:,"]/gi, ""); 
+    }
     function handleCMSsubmit()
     {
         // recover the user's response
-        var response1 = document.getElementById('msgcontent1').value.trim();
-        var response2 = document.getElementById('msgcontent2').value.trim();
-        var response3 = document.getElementById('msgcontent3').value.trim();
-        var response4 = document.getElementById('msgcontent4').value.trim();
-        var response5 = document.getElementById('msgcontent5').value.trim();
-        var response6 = document.getElementById('msgcontent6').value.trim();
+        var response1 = sanitize(document.getElementById('msgcontent1').value.trim());
+        var response2 = sanitize(document.getElementById('msgcontent2').value.trim());
+        var response3 = sanitize(document.getElementById('msgcontent3').value.trim());
+        var response4 = sanitize(document.getElementById('msgcontent4').value.trim());
+        var response5 = sanitize(document.getElementById('msgcontent5').value.trim());
+        var response6 = sanitize(document.getElementById('msgcontent6').value.trim());
         var newMsg = response1 + response2 + response3 + response4 + response5 + response6;
         if (newMsg.length == 0)
Index: trunk/webapps/cptms/js/harLayer.js
===================================================================
--- trunk/webapps/cptms/js/harLayer.js	(revision 426)
+++ trunk/webapps/cptms/js/harLayer.js	(revision 440)
@@ -77,5 +77,5 @@
         var response1 = document.getElementById('har-msgcontent1').value.trim();
 
-        var newMsg = response1.replace(/;/gi, "");  // remove semicolons from input
+        var newMsg = response1.replace(/[;:",]/gi, "");  // remove semicolons from input
 
         if (newMsg.length == 0)
@@ -85,7 +85,7 @@
         else
         {
-            document.getElementById('har-msgdisplay1').value = response1;
+            document.getElementById('har-msgdisplay1').value = newMsg;
 
-            saveHARMessage(response1);
+            saveHARMessage(newMsg);
         }
     }
Index: trunk/webapps/common/js/revision_number.dat
===================================================================
--- trunk/webapps/common/js/revision_number.dat	(revision 434)
+++ trunk/webapps/common/js/revision_number.dat	(revision 440)
@@ -1,3 +1,3 @@
 
-    var revisionNumber = "433";
+    var revisionNumber = "439";
     
Index: trunk/webapps/unifiedlog.html
===================================================================
--- trunk/webapps/unifiedlog.html	(revision 440)
+++ trunk/webapps/unifiedlog.html	(revision 440)
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Unified Logger v</title> 
+<style>
+* {
+  box-sizing: border-box;
+}
+body {
+   background-color: #000033;
+   color: goldenrod
+}
+/* styling for messages */
+#msgs{
+  padding: 15px 10% 15px 10%;
+  font-size: 20px;
+  font-family: monospace;
+  font-weight:lighter;
+  color: white;
+  padding-left: 2%;
+  padding-right: 2%;
+}
+</style>
+</head>
+<body>
+<div class="row">
+    <p id="msgs"></p>
+</div>
+    <script  src="common/js/fileutils.js"></script>
+    <script  src="common/js/revision_number.dat"></script>
+    <script  src="common/js/displayutils.js"></script> 
+   <script>
+// Load the unified log 
+function loadLog()
+{
+    var display = document.getElementById("msgs");
+    display.innerHTML = ""
+    // Asynchronous file read of unified log data
+    loadJSON("dynamicdata/unifiedlog.csv", function(response)
+    {
+        // Format the csv data into an HTML table
+        var allRows = response.split(/\r?\n|\r/);
+        var table = '<table>';
+        // Put the last log entry at the TOP of the table
+        for (var singleRow = allRows.length-1; singleRow > 0; singleRow--)
+        {
+            table += '<tr>';
+            var rowCells = allRows[singleRow].split(',');
+            for (var rowCell = 0; rowCell < rowCells.length; rowCell++)
+            {
+                table += '<td>';
+                table += rowCells[rowCell];
+                table += '</td>';
+            }
+            table += '</tr>';
+        }
+        table += '</table>';
+        // Add the table to the messages div
+        display.innerHTML += table;
+    }
+    );
+}
+// Start
+showRevision();
+loadLog();
+// start an interval timer to refresh the log every 10 seconds
+var displayTimer = setInterval(loadLog, 10000);
+   </script>
+  </body>
+</html>
Index: trunk/webapps/dynamicdata/highway_status.json
===================================================================
--- trunk/webapps/dynamicdata/highway_status.json	(revision 434)
+++ trunk/webapps/dynamicdata/highway_status.json	(revision 440)
@@ -4304,5 +4304,5 @@
        },
    "properties": 
-       {"street": "PAULARINO 2", "color": "lime", "perpx": "0.725068", "perpy": "-0.688678"}
+       {"street": "PAULARINO 2", "color": "yellow", "perpx": "0.725068", "perpy": "-0.688678"}
 },  
 {
@@ -4315,5 +4315,5 @@
        },
    "properties": 
-       {"street": "PAULARINO 2", "color": "lime", "perpx": "0.719864", "perpy": "-0.694115"}
+       {"street": "PAULARINO 2", "color": "yellow", "perpx": "0.719864", "perpy": "-0.694115"}
 },  
 {
@@ -4766,5 +4766,5 @@
        },
    "properties": 
-       {"street": "MACARTHU2", "color": "yellow", "perpx": "-0.710326", "perpy": "0.703873"}
+       {"street": "MACARTHU2", "color": "red", "perpx": "-0.710326", "perpy": "0.703873"}
 },  
 {
@@ -4777,5 +4777,5 @@
        },
    "properties": 
-       {"street": "DYER 1", "color": "yellow", "perpx": "0", "perpy": "0"}
+       {"street": "DYER 1", "color": "red", "perpx": "0", "perpy": "0"}
 },  
 {
@@ -4788,5 +4788,5 @@
        },
    "properties": 
-       {"street": "DYER 2", "color": "lime", "perpx": "-0.708914", "perpy": "0.705295"}
+       {"street": "DYER 2", "color": "red", "perpx": "-0.708914", "perpy": "0.705295"}
 },  
 {
@@ -4799,5 +4799,5 @@
        },
    "properties": 
-       {"street": "WARNER", "color": "lime", "perpx": "-0.711107", "perpy": "0.703084"}
+       {"street": "WARNER", "color": "red", "perpx": "-0.711107", "perpy": "0.703084"}
 },  
 {
@@ -4810,5 +4810,5 @@
        },
    "properties": 
-       {"street": "EDINGER 1", "color": "lime", "perpx": "0", "perpy": "0"}
+       {"street": "EDINGER 1", "color": "yellow", "perpx": "0", "perpy": "0"}
 },  
 {
@@ -12013,5 +12013,5 @@
        },
    "properties": 
-       {"street": "JAMBOREE1", "color": "lime", "perpx": "0.400805", "perpy": "0.916164"}
+       {"street": "JAMBOREE1", "color": "yellow", "perpx": "0.400805", "perpy": "0.916164"}
 },  
 {
@@ -12024,5 +12024,5 @@
        },
    "properties": 
-       {"street": "JAMBOREE2", "color": "lime", "perpx": "0.400805", "perpy": "0.916164"}
+       {"street": "JAMBOREE2", "color": "red", "perpx": "0.400805", "perpy": "0.916164"}
 },  
 {
@@ -12035,5 +12035,5 @@
        },
    "properties": 
-       {"street": "MACARTHUR 1", "color": "lime", "perpx": "0.408917", "perpy": "0.912572"}
+       {"street": "MACARTHUR 1", "color": "red", "perpx": "0.408917", "perpy": "0.912572"}
 },  
 {
@@ -12046,5 +12046,5 @@
        },
    "properties": 
-       {"street": "AIRPORT", "color": "lime", "perpx": "0.321527", "perpy": "0.9469"}
+       {"street": "AIRPORT", "color": "red", "perpx": "0.321527", "perpy": "0.9469"}
 },  
 {
@@ -12057,5 +12057,5 @@
        },
    "properties": 
-       {"street": "HOV AT 55N FLYOVER**", "color": "lime", "perpx": "0.271933", "perpy": "0.962316"}
+       {"street": "HOV AT 55N FLYOVER**", "color": "red", "perpx": "0.271933", "perpy": "0.962316"}
 },  
 {
@@ -12068,5 +12068,5 @@
        },
    "properties": 
-       {"street": "RED HILL", "color": "lime", "perpx": "0.126754", "perpy": "0.991934"}
+       {"street": "RED HILL", "color": "red", "perpx": "0.126754", "perpy": "0.991934"}
 },  
 {
Index: trunk/webapps/dynamicdata/unifiedlog.csv
===================================================================
--- trunk/webapps/dynamicdata/unifiedlog.csv	(revision 440)
+++ trunk/webapps/dynamicdata/unifiedlog.csv	(revision 440)
@@ -0,0 +1,6 @@
+0:03:00, CMS Activated.,S I-405 18.72 Edwards, 'AMAZINGLY FEW:DISCOS::::'
+0:03:00, CMS Activated.,N I-405 15.18 MAGNOLIA ST, 'SLOW FOR THE::CONE ZONE:::'
+0:03:00, CMS Activated.,S I-405 12.04 NEW HAMPSHIRE, 'SLOW TRAFFIC:AHEAD:USE CAUTION:::'
+0:03:00, CAD log, Incident #181, Henry: HELLO FROM EARTH
+0:03:50, CMS Deactivated., S I-405 18.72 Edwards
+0:04:30, CMS Activated.,S I-405 18.72 Edwards, 'EAT MORE CHIKIN:::::'
Index: trunk/webapps/dynamicdata/cms_messages.json
===================================================================
--- trunk/webapps/dynamicdata/cms_messages.json	(revision 431)
+++ trunk/webapps/dynamicdata/cms_messages.json	(revision 440)
@@ -12,5 +12,5 @@
 {"cms":{"index":"20","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},
 {"cms":{"index":"21","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},
-{"cms":{"index":"23","message":{"displayTime":"","phase1":{"Line1":"AMAZINGLY FEW","Line2":"DISCOS","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},
+{"cms":{"index":"23","message":{"displayTime":"","phase1":{"Line1":"EAT MORE CHIKIN","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},
 {"cms":{"index":"24","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},
 {"cms":{"index":"25","message":{"displayTime":"","phase1":{"Line1":"","Line2":"","Line3":""},"phase2":{"Line1":"","Line2":"","Line3":""}}}},
Index: trunk/webapps/dynamicdata/unifiedlog.html
===================================================================
--- trunk/webapps/dynamicdata/unifiedlog.html	(revision 433)
+++ 	(revision )
@@ -1,9 +1,0 @@
-<HTML><HEAD><meta http-equiv="refresh" content="5" /></HEAD><BODY><PRE>0:07:26 CMS Activated. S I-405 18.72 Edwards 'AMAZINGLY FEW,DISCOS,,,,'
-0:07:26 CMS Activated. N I-405 15.18 MAGNOLIA ST 'SLOW FOR THE,,CONE ZONE,,,'
-0:07:26 CMS Activated. S I-405 12.04 NEW HAMPSHIRE 'SLOW TRAFFIC,AHEAD,USE CAUTION,,,'
-0:07:26 CAD log entry, Incident #181, AAA: HELLO WORLD
-0:07:26 CAD log entry, Incident #181, AAA: SEND PIZZA
-0:07:26 CAD log entry, Incident #181, AAA: ABLE BAKER
-0:07:26 CAD log entry, Incident #181, AAA: EMANCIPATE
-0:07:26 CAD log entry, Incident #181, AAA: HEY EY
-0:07:26 CAD log entry, Incident #181, AAA: SUPER DUPER
