Index: /branches/trunk/camera_status.log
===================================================================
--- /branches/trunk/camera_status.log	(revision 82)
+++ /branches/trunk/camera_status.log	(revision 82)
@@ -0,0 +1,1290 @@
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
+<Camera_Status>
+   <Camera>
+      <Identifier>24</Identifier>
+      <Route>55</Route>
+      <Direction>SB</Direction>
+      <Postmile>6.11</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>97</Identifier>
+      <Route>5</Route>
+      <Direction>NB</Direction>
+      <Postmile>19.5</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>28</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>3.95</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>16</Identifier>
+      <Route>5</Route>
+      <Direction>SB</Direction>
+      <Postmile>31.76</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+   <Camera>
+      <Identifier>171</Identifier>
+      <Route>405</Route>
+      <Direction>SB</Direction>
+      <Postmile>1.97</Postmile>
+      <Ave_Speed_NE>10.0</Ave_Speed_NE>
+      <Ave_Speed_SW>10.0</Ave_Speed_SW>
+   </Camera>
+</Camera_Status>
+
Index: /branches/trunk/paramics_communicator.log
===================================================================
--- /branches/trunk/paramics_communicator.log	(revision 82)
+++ /branches/trunk/paramics_communicator.log	(revision 82)
@@ -0,0 +1,12 @@
+
+<!-- Time written to file: 00:00:00 -->
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<CAD_DATA>
+    <Basic>
+        <Comm_Interval>30</Comm_Interval>
+        <Network_ID>1</Network_ID>
+        <Simulation>FALSE</Simulation>
+        <Incident>FALSE</Incident>
+    </Basic>
+</CAD_DATA>
+
Index: /branches/trunk/test/tmcsim/simulationmanager/IncidentHistoryPanelDriver.java
===================================================================
--- /branches/trunk/test/tmcsim/simulationmanager/IncidentHistoryPanelDriver.java	(revision 82)
+++ /branches/trunk/test/tmcsim/simulationmanager/IncidentHistoryPanelDriver.java	(revision 82)
@@ -0,0 +1,47 @@
+package tmcsim.simulationmanager;
+
+import java.awt.BorderLayout;
+import java.util.Vector;
+import javax.swing.JFrame;
+import tmcsim.cadmodels.*;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class IncidentHistoryPanelDriver
+{
+
+    public static void main(String[] args)
+    {
+        // Create an IncidentEvent
+        Vector dummy = new Vector();
+        IncidentInquiryHeader hdr = new IncidentInquiryHeader();
+        // The incident type is a 4-digit string (Use MMYY for month and year of your birth)
+        hdr.type = "1179";
+        // The incident location is the name of your home town
+        hdr.fullLocation = "San Luis Obispo";
+        IncidentInquiryModel_obj mo = new IncidentInquiryModel_obj();
+        mo.setHeader(hdr);
+        // The incident details is a parade on the main street (provide street name for your home town)
+        IncidentInquiryDetails det = new IncidentInquiryDetails("1", "Parade on Higuera", false);
+        mo.addDetail(det);
+        IncidentEvent event = new IncidentEvent(10, mo, "", 4, dummy, dummy);
+        // Create an IncidentHistoryPanel
+        IncidentHistoryPanel ihPanel = new IncidentHistoryPanel();
+        // Add the event to the panel
+        ihPanel.updateIncidentHistory(event);
+
+        // Create the frame.
+        JFrame frame = new JFrame("Incident Panel Demo");
+        // Specify closing behavior
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        // Add component to the frame.
+        frame.getContentPane().add(ihPanel, BorderLayout.CENTER);
+        // Size the frame.
+        frame.pack();
+        // Show it.
+        frame.setVisible(true);
+    }
+}
Index: /branches/trunk/test/tmcsim/simulationmanager/SimulationManagerSmokeTest.java
===================================================================
--- /branches/trunk/test/tmcsim/simulationmanager/SimulationManagerSmokeTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/simulationmanager/SimulationManagerSmokeTest.java	(revision 82)
@@ -0,0 +1,144 @@
+package tmcsim.simulationmanager;
+
+import java.awt.Component;
+import java.io.File;
+import javax.swing.JButton;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.Assert.fail;
+import org.uispec4j.Panel;
+import org.uispec4j.TextBox;
+import org.uispec4j.Trigger;
+import org.uispec4j.UISpecTestCase;
+import org.uispec4j.Window;
+import org.uispec4j.interception.WindowInterceptor;
+import tmcsim.cadsimulator.CADSimulator;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+
+/**
+ * Smoke Test of system. Start the CAD server, Start the Sim Mgr, see if the Sim
+ * Mgr view shows "No Script".
+ *
+ * @author jdalbey
+ */
+public class SimulationManagerSmokeTest extends UISpecTestCase
+{
+
+    SimulationManager simMgrApp;
+    CADSimulator engine;
+
+    public SimulationManagerSmokeTest(String testName)
+    {
+        super(testName);
+    }
+
+    /**
+     * Call constructors for both classes
+     */
+    public void testBothGUIs() throws ScriptException, SimulationException
+    {
+        System.out.println("Smoke Test Sim Mgr & CADSimulator");
+
+        Window cadwindow = null;
+        System.setProperty("CAD_SIM_PROPERTIES", "config/cad_simulator_smoketest_config.properties");
+        if (System.getProperty("CAD_SIM_PROPERTIES") != null)
+        {
+            cadwindow = WindowInterceptor.run(new Trigger()
+            {
+                public void run()
+                {
+                    try
+                    {
+                        engine = new CADSimulator(System.getProperty("CAD_SIM_PROPERTIES"));
+                    } catch (Exception e)
+                    {
+                        e.printStackTrace();
+                        fail("Couldn't launch CADSimulator");
+                    }
+                }
+            });
+        }
+        else
+        {
+            fail("CAD_SIM_PROPERTIES system property not defined.");
+        }
+
+        // Check CAD Simulator appears with no script and nothing connected
+        assertTrue("Window title incorrect", cadwindow.getTitle().startsWith("CAD Simulator"));
+        Panel mainPanel = cadwindow.getPanel("contentPane");
+        TextBox txtStatus = mainPanel.getTextBox("simulationStatus");
+        assertEquals("No Script", txtStatus.getText());
+        TextBox terms = mainPanel.getTextBox("termConnectedTF");
+        assertEquals("0", terms.getText().trim());
+        assertEquals("No", mainPanel.getTextBox("managerConnectedTF").getText().trim());
+
+        Window simMgrWindow = null;
+        System.setProperty("SIM_MGR_PROPERTIES", "config/sim_manager_smoketest_config.properties");
+        if (System.getProperty("SIM_MGR_PROPERTIES") != null)
+        {
+            simMgrWindow = WindowInterceptor.run(new Trigger()
+            {
+                public void run()
+                {
+                    try
+                    {
+                        simMgrApp = new SimulationManager(System.getProperty("SIM_MGR_PROPERTIES"));
+                    } catch (Exception ex)
+                    {
+                        fail("Couldn't launch Simulation Manager");
+                    }
+                }
+            });
+        }
+        else
+        {
+            fail("SIM_MGR_PROPERTIES system property not defined.");
+        }
+
+        // Check that the Sim Mgr GUI appears without a script loaded yet
+        SimulationManagerView view = simMgrApp.theSimManagerView;
+        assertFalse(view.isSimulationStarted());
+        Window win = new Window(view);
+        Panel contentPanel = win.getPanel("contentPane");
+        TextBox txtSimStatus = contentPanel.getTextBox("simulationStatusText");
+        assertEquals("No Script", txtSimStatus.getText());
+
+        assertEquals("Yes", mainPanel.getTextBox("managerConnectedTF").getText().trim());
+
+        // Load a script file
+        String autoloadScriptname = "scripts/practice_script_2016.xml";
+        SimulationManagerModel simMgrModel = simMgrApp.theSimManagerModel;
+        simMgrModel.loadScript(new File(autoloadScriptname));
+        // The status should now say Ready
+        assertEquals("Ready", txtSimStatus.getText());
+
+        // Click "Start"
+        win.getButton("Start").click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+            ex.printStackTrace();
+        }
+        assertEquals("Running", txtSimStatus.getText());
+
+        //List all available buttons
+        Component[] buttons = win.getSwingComponents(JButton.class);
+        for (Component comp : buttons)
+        {
+            System.out.println(comp);
+        }
+        win.getButton("Load Script");
+        win.getButton("Pause");
+        win.getButton("Disconnect from Paramics");
+        win.getButton("Reset");
+        win.getButton("Load Network");
+        // Quit
+        engine = null;
+        win.getMenuBar().getMenu("File").getSubMenu("Exit").click();
+        //simMgrApp = null;
+    }
+}
Index: /branches/trunk/test/tmcsim/simulationmanager/IncidentHistoryPanelTest.java
===================================================================
--- /branches/trunk/test/tmcsim/simulationmanager/IncidentHistoryPanelTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/simulationmanager/IncidentHistoryPanelTest.java	(revision 82)
@@ -0,0 +1,64 @@
+package tmcsim.simulationmanager;
+
+import java.util.Vector;
+import static junit.framework.Assert.assertEquals;
+import junit.framework.TestCase;
+import org.uispec4j.*;
+import tmcsim.cadmodels.*;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class IncidentHistoryPanelTest extends TestCase
+{
+
+    public IncidentHistoryPanelTest(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+    /**
+     * Test of updateIncidentHistory method, of class IncidentHistoryPanel.
+     */
+    public void testUpdateIncidentHistory()
+    {
+        System.out.println("updateIncidentHistory");
+        IncidentHistoryPanel ihPanel = new IncidentHistoryPanel();
+        Panel inciPanel = new Panel(ihPanel);
+        TextBox txtType = inciPanel.getTextBox("incTypeTF");
+        TextBox txtLoc = inciPanel.getTextBox("incLocTF");
+        // verify fields initially empty
+        assertEquals("", txtType.getText());
+        assertEquals("", txtLoc.getText());
+
+        // Build an Incident to put in the log
+        Vector dummy = new Vector();
+        IncidentInquiryHeader hdr = new IncidentInquiryHeader();
+        hdr.type = "1179";
+        hdr.fullLocation = "Computer Science Bldg";
+        IncidentInquiryModel_obj mo = new IncidentInquiryModel_obj();
+        mo.setHeader(hdr);
+        IncidentInquiryDetails det = new IncidentInquiryDetails("1", "Happy Programmer", false);
+        mo.addDetail(det);
+        IncidentEvent event = new IncidentEvent(10, mo, "", 4, dummy, dummy);
+        ihPanel.updateIncidentHistory(event);
+
+        // After adding an event, verify fixed fields
+        assertEquals("1179", txtType.getText());
+        assertEquals("Computer Science Bldg", txtLoc.getText());
+        // Verify first row of log history table
+        Table evtLog = inciPanel.getTable("LogHistory");
+//        System.out.println(evtLog.toString());
+        assertEquals(1, evtLog.getJTable().getRowCount());
+        assertEquals("Script", evtLog.getContentAt(0, 0));
+        assertEquals("Happy Programmer", evtLog.getContentAt(0, 2));
+    }
+}
Index: /branches/trunk/test/tmcsim/simulationmanager/model/AppliedDiversionTableItemTest.java
===================================================================
--- /branches/trunk/test/tmcsim/simulationmanager/model/AppliedDiversionTableItemTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/simulationmanager/model/AppliedDiversionTableItemTest.java	(revision 82)
@@ -0,0 +1,26 @@
+package tmcsim.simulationmanager.model;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class AppliedDiversionTableItemTest extends TestCase
+{
+
+    public AppliedDiversionTableItemTest(String testName)
+    {
+        super(testName);
+    }
+
+    public void testCompareTo()
+    {
+        System.out.println("compareTo");
+        AppliedDiversionTableItem arg = new AppliedDiversionTableItem("1", "o", "n", 1, 1L);
+        AppliedDiversionTableItem instance = new AppliedDiversionTableItem("1", "o", "n", 1, 1L);
+        int expResult = 0;
+        int result = instance.compareTo(arg);
+        assertEquals(expResult, result);
+    }
+}
Index: /branches/trunk/test/tmcsim/paramicscommunicator/ParamicsFileReaderTest.java
===================================================================
--- /branches/trunk/test/tmcsim/paramicscommunicator/ParamicsFileReaderTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/paramicscommunicator/ParamicsFileReaderTest.java	(revision 82)
@@ -0,0 +1,113 @@
+package tmcsim.paramicscommunicator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Observable;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import static junit.framework.Assert.assertTrue;
+import junit.framework.TestCase;
+import org.w3c.dom.Document;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class ParamicsFileReaderTest extends TestCase
+{
+
+    public ParamicsFileReaderTest(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+    @Override
+    public void tearDown() throws java.io.IOException
+    {
+        File removeMe = new File("inputfile.txt");
+        removeMe.delete();
+    }
+
+    private static void writedata(String filename, String data)
+    {
+        PrintWriter writer = null;
+        try
+        {
+            writer = new PrintWriter(new FileWriter(filename));
+            writer.println(data);
+            writer.close();
+        } catch (Exception ex)
+        {
+            ex.printStackTrace();
+        }
+    }
+    /* Convert a DOM to a string, thank you internet.  */
+
+    private static String toString(Document newDoc) throws Exception
+    {
+        DOMSource domSource = new DOMSource(newDoc);
+        Transformer transformer = TransformerFactory.newInstance().newTransformer();
+        StringWriter sw = new StringWriter();
+        StreamResult sr = new StreamResult(sw);
+        transformer.transform(domSource, sr);
+        return sw.toString();
+    }
+    String kFileContents = "Hello Jupiter";
+
+    public void testConstructor() throws Exception
+    {
+        writedata("inputfile.txt", kFileContents);
+        ParamicsFileReader pfr = new ParamicsFileReader("", "1", 2, "inputfile.txt");
+        ReaderObserver watcher = new ReaderObserver();
+        pfr.addObserver(watcher);
+        try
+        {
+            Thread.sleep(2000);
+        } catch (Exception e)
+        {
+            fail();
+        }
+        assertTrue(watcher.count > 0);
+        String actual = "";
+        actual = toString(watcher.result);
+        assertTrue("Reader produced wrong output", actual.contains(kFileContents));
+    }
+
+    class ReaderObserver implements java.util.Observer
+    {
+
+        int count = 0;
+        Document result;
+
+        @Override
+        public void update(Observable obs, Object obj)
+        {
+            count += 1;
+            if (obj instanceof FileIOUpdate)
+            {
+                FileIOUpdate msg = (FileIOUpdate) obj;
+                assertEquals("1", msg.ioID);
+                // Windows and Unix have different EOL characters, so we have
+                // to approximate the answer here.
+                boolean result = kFileContents.length() - msg.ioBytes < 2;
+                assertTrue(result);
+            } else if (obj instanceof Document)
+            {
+                result = (Document) obj;
+            } else
+            {
+                fail("unrecognized update object " + obj.getClass());
+            }
+        }
+    }
+}
Index: /branches/trunk/test/tmcsim/paramicslog/ParamicsLogRMITestSkeleton.java
===================================================================
--- /branches/trunk/test/tmcsim/paramicslog/ParamicsLogRMITestSkeleton.java	(revision 82)
+++ /branches/trunk/test/tmcsim/paramicslog/ParamicsLogRMITestSkeleton.java	(revision 82)
@@ -0,0 +1,94 @@
+package tmcsim.paramicslog;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.rmi.RemoteException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.fail;
+import junit.framework.TestCase;
+import tmcsim.cadsimulator.CADSimulator;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class ParamicsLogRMITestSkeleton extends TestCase
+{
+
+    public ParamicsLogRMITestSkeleton(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+    String propsfile = "config/paramics_communicator_logging.properties";
+
+    /**
+     * Test of getInstance method, of class ParamicsLog.
+     */
+    public void testGetInstance() throws ScriptException, SimulationException, RemoteException, FileNotFoundException, IOException
+    {
+        System.out.println("getInstance");
+        try
+        {
+            CADSimulator engine = new CADSimulator("config/testConfig/cad_simulator_console_config.properties");
+        } catch (Exception e)
+        {
+            fail("Couldn't launch CADSimulator");
+        }
+        try
+        {
+            Thread.sleep(2000);
+        } catch (InterruptedException ex)
+        {
+        }
+        // This seems to fail because the ParamicsLog static initializer gets
+        // run before the CADSimulator is created, so no RMI connection can be made.
+        ParamicsLog plog = ParamicsLog.getInstance();
+        Properties paramicsLogProp = new Properties();
+        paramicsLogProp.load(new FileInputStream(propsfile));
+        String logFilename = paramicsLogProp.getProperty("LogFile");
+        File logFile = new File(logFilename);
+        assertTrue("log file doesn't exist", logFile.exists());
+
+        plog.writeToLog("Hello friendly log.");
+        String expected = "\n<!-- Time written to file: ? -->\nHello friendly log.\n";
+        String actual = plog.getLog();
+        assertEquals("log written incorrectly", expected, actual);
+    }
+
+    public void testFormatEasyTime()
+    {
+        ParamicsLog plog = ParamicsLog.getInstance();
+        String expected = "00:01:02";
+        String actual = plog.formatTime(62l);
+        assertEquals("time format wrong", expected, actual);
+
+        expected = "1:00:01";
+        actual = plog.formatTime(3601l);
+        assertEquals("time format wrong", expected, actual);
+    }
+
+    public void testFormatDate() throws ParseException
+    {
+        ParamicsLog plog = ParamicsLog.getInstance();
+        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
+        String expected = "01:01:01";
+        Date one = formatter.parse(expected);
+        long millis = one.getTime();
+        String actual = plog.formatTime(millis);
+        assertEquals("time format wrong", expected, actual);
+    }
+}
Index: /branches/trunk/test/tmcsim/paramicslog/ParamicsLogFileHandlerTest.java
===================================================================
--- /branches/trunk/test/tmcsim/paramicslog/ParamicsLogFileHandlerTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/paramicslog/ParamicsLogFileHandlerTest.java	(revision 82)
@@ -0,0 +1,67 @@
+package tmcsim.paramicslog;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.rmi.RemoteException;
+import java.util.Properties;
+import java.util.logging.Logger;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.Assert.fail;
+import junit.framework.TestCase;
+import tmcsim.cadsimulator.CADSimulator;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class ParamicsLogFileHandlerTest extends TestCase
+{
+
+    public ParamicsLogFileHandlerTest(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+    String propsfile = "config/paramics_communicator_logging.properties";
+
+    /**
+     * Test of getInstance method, of class ParamicsLog.
+     */
+    public void testGetInstance() throws ScriptException, SimulationException, RemoteException, FileNotFoundException, IOException
+    {
+        System.out.println("getInstance");
+        try
+        {
+            new CADSimulator("config/testConfig/cad_simulator_console_config.properties");
+        } catch (Exception e)
+        {
+            fail("Couldn't launch CADSimulator");
+        }
+        //ParamicsLog plog = ParamicsLog.getInstance();
+        Properties paramicsLogProp = new Properties();
+        paramicsLogProp.load(new FileInputStream(propsfile));
+        String logFilename = paramicsLogProp.getProperty("LogFile");
+        // This test requires a CADSimulator running.
+        Logger logger = Logger.getLogger("tmcsim.parmicsLog");
+        ParamicsLogFileHandler fh = ParamicsLogFileHandler.getInstance();
+        logger.addHandler(fh);
+        // write a message to the log.
+        logger.info("Hello friendly log.");
+        // Read from the log file and see if the desired msg is there.
+        File logFile = new File(logFilename);
+        assertTrue("log file doesn't exist", logFile.exists());
+        String expected = "\n<!-- Time written to file: 00:00:00 -->\nHello friendly log.\n";
+        String actual = fh.getLog();
+        assertEquals("log written incorrectly", expected, actual);
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/BOStest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/BOStest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/BOStest.java	(revision 82)
@@ -0,0 +1,60 @@
+package tmcsim.cadsimulator;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.rmi.RemoteException;
+import static junit.framework.Assert.assertEquals;
+import org.uispec4j.*;
+import tmcsim.common.SimulationException;
+
+/**
+ * Test of Byte Output Stream and redirection
+ *
+ * @author jdalbey
+ */
+public class BOStest extends UISpecTestCase
+{
+
+    public BOStest(String testName)
+    {
+        super(testName);
+    }
+    /**
+     * Test of main method, of class CADSimulator.
+     */
+    ByteArrayOutputStream bos;
+
+    public void setUp() throws SimulationException, RemoteException
+    {
+        // Declare a stream to the output
+        bos = new ByteArrayOutputStream();
+        PrintStream ps = new PrintStream(bos);
+        // Redirect the standard output
+        System.setOut(ps);
+    }
+
+    @Override
+    public void tearDown() throws java.io.IOException
+    {
+    }
+
+    public void testConstructor()
+    {
+        System.out.println("Mary had a little lamb.");
+        // Convert the output stream into a string we can test.
+        String result = bos.toString();
+        assertEquals(expected1, result);
+
+    }
+
+    public void testLoad() throws RemoteException
+    {
+        System.out.print(expected2);
+        // Convert the output stream into a string we can test.
+        String result = bos.toString();
+        assertEquals(expected2, result);
+
+    }
+    String expected1 = "Mary had a little lamb.\n";
+    String expected2 = "Fleece white as snow.\n";
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/VisibleSystemDemoDriver.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/VisibleSystemDemoDriver.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/VisibleSystemDemoDriver.java	(revision 82)
@@ -0,0 +1,202 @@
+package tmcsim.cadsimulator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.rmi.RemoteException;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.fail;
+import org.uispec4j.*;
+import org.uispec4j.interception.WindowInterceptor;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.paramicscommunicator.ParamicsCommunicator;
+import tmcsim.paramicscommunicator.gui.ParamicsCommunicatorGUI;
+import tmcsim.simulationmanager.SimulationManager;
+
+/**
+ * Requires manual starting CADSimulator before running this test. System test
+ * with emulated Paramics Modeler NO ATMS server.
+ *
+ * @author jdalbey
+ */
+public class VisibleSystemDemoDriver extends UISpecTestCase
+{
+
+    SimulationManager simMgrApp;
+
+    public VisibleSystemDemoDriver(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+    /**
+     * Test of run method, of class ParamicsCommunicator.
+     */
+    public void testRun() throws ScriptException, SimulationException, RemoteException
+    {
+        System.out.println("Visible System Test starting.");
+        // NOTE: CADSimulator must be started prior to running this test,
+        // because it displays a GUI, and if we try to do it inside this test,
+        // UISpec will complain about an uncaught window appearing.
+
+        ParamicsCommunicator pc = null;
+        pc = new ParamicsCommunicator("config/testConfig/paramics_communicator_config.properties");
+        ParamicsCommunicatorGUI theGUI = new ParamicsCommunicatorGUI();
+        pc.setGUI(theGUI);
+        // Note: Don't set visible ANY windows during UISpec test
+
+        // expect pcomm to say "sleeping"
+
+        Window simMgrWindow = null;
+        simMgrWindow = WindowInterceptor.run(new Trigger()
+        {
+            public void run()
+            {
+                try
+                {
+                    simMgrApp = new SimulationManager("config/sim_manager_systest_config.properties");
+                } catch (Exception ex)
+                {
+                    fail("Couldn't launch Simulation Manager, perhaps CADSimulator isn't running.");
+                }
+            }
+        });
+
+        // Check that the Sim Mgr GUI appears without a script loaded yet
+        Panel contentPanel = simMgrWindow.getPanel("contentPane");
+        TextBox txtSimStatus = contentPanel.getTextBox("simulationStatusText");
+        assertEquals("No Script", txtSimStatus.getText());
+        TextBox txtParamStatus = contentPanel.getTextBox("paramicsStatusInfoLabel");
+        assertEquals("Unknown", txtParamStatus.getText());
+        Button loadNetworkBtn = simMgrWindow.getButton("Load Network");
+        assertFalse(loadNetworkBtn.isEnabled());
+        // Begin actions
+        Button paramicsBtn = simMgrWindow.getButton("Connect to Paramics");
+        paramicsBtn.click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Disconnect from Paramics", paramicsBtn.getLabel());
+
+        assertEquals("Connected", txtParamStatus.getText());
+        pc.startReading();
+
+        loadNetworkBtn.click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Sending Network ID", txtParamStatus.getText());
+        System.out.println("Sending Network ID");
+        assertFalse(loadNetworkBtn.isEnabled());
+        String warmingXML = "<Paramics>\n"
+                + "<Network_Status>WARMING</Network_Status>\n"
+                + "<Network_ID>1</Network_ID>\n"
+                + "</Paramics>";
+        writedata("paramics_status.xml", warmingXML);
+        try
+        {
+            Thread.sleep(2100);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Warming Up", txtParamStatus.getText());
+        System.out.println("Warming Up Passed");
+
+        try
+        {
+            Thread.sleep(2100);
+        } catch (Exception ex)
+        {
+        }
+        String loadedXML = "<Paramics>\n"
+                + "<Network_Status>LOADED</Network_Status>"
+                + "<Network_ID>1</Network_ID>"
+                + "</Paramics>";
+        writedata("paramics_status.xml", loadedXML);
+        try
+        {
+            Thread.sleep(2100);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Network 1 Loaded", txtParamStatus.getText());
+        System.out.println("Network Loaded Passed");
+
+        // Load a script file
+        String autoloadScriptname = "scripts/audio_systest.xml";
+        simMgrApp.loadScript(new File(autoloadScriptname));
+        try
+        {
+            Thread.sleep(500);
+        } catch (Exception ex)
+        {
+        }
+
+        // The status should now say Ready
+        assertEquals("Ready", txtSimStatus.getText());
+
+        // Click "Start"
+        simMgrWindow.getButton("Start").click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+            ex.printStackTrace();
+        }
+        assertEquals("Running", txtSimStatus.getText());
+        System.out.println("Running Passed");
+        try
+        {
+            Thread.sleep(9000);
+        } catch (InterruptedException ex)
+        {
+        }
+        simMgrWindow.getButton("Pause").click();
+        try
+        {
+            Thread.sleep(3000);
+        } catch (InterruptedException ex)
+        {
+        }
+        simMgrWindow.getButton("Start").click();
+        try
+        {
+            Thread.sleep(3000);
+        } catch (InterruptedException ex)
+        {
+        }
+        simMgrWindow.getButton("Pause").click();
+        simMgrWindow.getMenuBar().getMenu("File").getSubMenu("Exit").click();
+        System.out.println("Exiting.");
+    }
+
+    // Write the test data to a file
+    public static void writedata(String filename, String data)
+    {
+//        System.out.println("writedata called for " + filename);
+        PrintWriter writer = null;
+        try
+        {
+            writer = new PrintWriter(new FileWriter(filename));
+            writer.println(data);
+            writer.close();
+        } catch (Exception ex)
+        {
+            ex.printStackTrace();
+        }
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/SystemTest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/SystemTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/SystemTest.java	(revision 82)
@@ -0,0 +1,227 @@
+package tmcsim.cadsimulator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.rmi.RemoteException;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.Assert.fail;
+import org.uispec4j.*;
+import org.uispec4j.interception.WindowInterceptor;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.paramicscommunicator.ParamicsCommunicator;
+import tmcsim.paramicscommunicator.gui.ParamicsCommunicatorGUI;
+import tmcsim.simulationmanager.SimulationManager;
+
+/**
+ * System test (include CADSimulator) with emulated Paramics Modeler NO ATMS
+ * server captures GUI display using UISpec4J.
+ *
+ * @author jdalbey
+ */
+public class SystemTest extends UISpecTestCase
+{
+
+    SimulationManager simMgrApp;
+    CADSimulator engine;
+//    ParamicsCommunicator paramicscomm;
+
+    public SystemTest(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+    /**
+     * Test of run method, of class ParamicsCommunicator.
+     */
+    public void testRun() throws ScriptException, SimulationException, RemoteException
+    {
+        System.out.println("Invisible System Test");
+        Window cadwindow = null;
+        cadwindow = WindowInterceptor.run(new Trigger()
+        {
+            public void run()
+            {
+                try
+                {
+                    engine = new CADSimulator("config/testConfig/cad_simulator_config.properties");
+                } catch (Exception e)
+                {
+                    fail("Couldn't launch CADSimulator");
+                }
+            }
+        });
+
+        // Check CAD Simulator appears with no script and nothing connected
+        assertTrue("Title bar incorrect", cadwindow.getTitle().trim().startsWith("CAD Simulator"));
+        Panel mainPanel = cadwindow.getPanel("contentPane");
+        TextBox txtStatus = mainPanel.getTextBox("simulationStatus");
+        assertEquals("No Script", txtStatus.getText());
+        TextBox terms = mainPanel.getTextBox("termConnectedTF");
+        assertEquals("0", terms.getText().trim());
+        assertEquals("No", mainPanel.getTextBox("managerConnectedTF").getText().trim());
+        assertEquals("network id should be None", "None", mainPanel.getTextBox("networkLoadedTF").getText().trim());
+
+        ParamicsCommunicator pc = null;
+        pc = new ParamicsCommunicator("config/testConfig/paramics_communicator_config.properties");
+        ParamicsCommunicatorGUI theGUI = new ParamicsCommunicatorGUI();
+        pc.setGUI(theGUI);
+        // Note: Can't set visible ANY windows during UISpec test
+
+        // expect pcomm to say "sleeping"
+
+        Window simMgrWindow = null;
+        simMgrWindow = WindowInterceptor.run(new Trigger()
+        {
+            public void run()
+            {
+                try
+                {
+                    simMgrApp = new SimulationManager("config/sim_manager_systest_config.properties");
+                } catch (Exception ex)
+                {
+                    fail("Couldn't launch Simulation Manager");
+                }
+            }
+        });
+
+        // TODO: Check that the Sim Mgr GUI appears without a script loaded yet
+
+        Panel contentPanel = simMgrWindow.getPanel("contentPane");
+        TextBox txtSimStatus = contentPanel.getTextBox("simulationStatusText");
+        assertEquals("No Script", txtSimStatus.getText());
+        TextBox txtParamStatus = contentPanel.getTextBox("paramicsStatusInfoLabel");
+        assertEquals("Unknown", txtParamStatus.getText());
+        Button loadNetworkBtn = simMgrWindow.getButton("Load Network");
+        assertFalse(loadNetworkBtn.isEnabled());
+
+        Button paramicsBtn = simMgrWindow.getButton("Connect to Paramics");
+        paramicsBtn.click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Disconnect from Paramics", paramicsBtn.getLabel());
+
+        assertEquals("Connected", txtParamStatus.getText());
+        pc.startReading();
+
+        loadNetworkBtn.click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Sending Network ID", txtParamStatus.getText());
+        System.out.println("Sending Network ID");
+        assertFalse(loadNetworkBtn.isEnabled());
+        String warmingXML = "<Paramics>\n"
+                + "<Network_Status>WARMING</Network_Status>\n"
+                + "<Network_ID>1</Network_ID>\n"
+                + "</Paramics>";
+        writedata("paramics_status.xml", warmingXML);
+        try
+        {
+            Thread.sleep(2100);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Warming Up", txtParamStatus.getText());
+        System.out.println("Warming Up Passed");
+
+        try
+        {
+            Thread.sleep(2100);
+        } catch (Exception ex)
+        {
+        }
+        String loadedXML = "<Paramics>\n"
+                + "<Network_Status>LOADED</Network_Status>"
+                + "<Network_ID>1</Network_ID>"
+                + "</Paramics>";
+        writedata("paramics_status.xml", loadedXML);
+        try
+        {
+            Thread.sleep(2100);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Network 1 Loaded", txtParamStatus.getText());
+        assertEquals("network id should be 1", "1", mainPanel.getTextBox("networkLoadedTF").getText().trim());
+
+
+        // Load a script file
+        String autoloadScriptname = "scripts/system_test_script.xml";
+        simMgrApp.loadScript(new File(autoloadScriptname));
+        try
+        {
+            Thread.sleep(500);
+        } catch (Exception ex)
+        {
+        }
+
+        // The status should now say Ready
+        assertEquals("Ready", txtSimStatus.getText());
+
+        // Click "Start"
+        simMgrWindow.getButton("Start").click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+            ex.printStackTrace();
+        }
+        assertEquals("Running", txtSimStatus.getText());
+        System.out.println("Running Passed");
+        try
+        {
+            Thread.sleep(9000);
+        } catch (InterruptedException ex)
+        {
+        }
+        simMgrWindow.getButton("Pause").click();
+        try
+        {
+            Thread.sleep(3000);
+        } catch (InterruptedException ex)
+        {
+        }
+        simMgrWindow.getButton("Start").click();
+        try
+        {
+            Thread.sleep(3000);
+        } catch (InterruptedException ex)
+        {
+        }
+        simMgrWindow.getButton("Pause").click();
+        simMgrWindow.getMenuBar().getMenu("File").getSubMenu("Exit").click();
+        System.out.println("Exiting.");
+    }
+
+    // Write the test data to a file
+    public static void writedata(String filename, String data)
+    {
+        PrintWriter writer = null;
+        try
+        {
+            writer = new PrintWriter(new FileWriter(filename));
+            writer.println(data);
+            writer.close();
+        } catch (Exception ex)
+        {
+            ex.printStackTrace();
+        }
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/SoundPlayerTest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/SoundPlayerTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/SoundPlayerTest.java	(revision 82)
@@ -0,0 +1,91 @@
+package tmcsim.cadsimulator;
+
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import junit.framework.TestCase;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class SoundPlayerTest extends TestCase
+{
+
+    SoundPlayer player;
+
+    public SoundPlayerTest(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+    /**
+     * Test of run method, of class SoundPlayer.
+     */
+    public void testRun()
+    {
+        System.out.println("run");
+        Vector dummy = new Vector();
+        // the frog clip is actually 3 seconds long, but we specify clip duration of 2
+        // to demonstrate that the subsequent clip will start before the first one finishes.
+        // This shows that SoundPlayer assumes correct clip durations.
+        IncidentEvent evt1 = new IncidentEvent(0, null, "frog-croak.mp3", 2, dummy, dummy);
+        IncidentEvent evt2 = new IncidentEvent(0, null, "bikehorn.mp3", 1, dummy, dummy);
+        player = new SoundPlayer("test/resources/");
+        player.start();
+        player.enqueueClip(evt1);
+        player.enqueueClip(evt2);
+        try
+        {
+            Thread.sleep(5000);
+        } catch (InterruptedException ex)
+        {
+            Logger.getLogger(SoundPlayerTest.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        assertEquals(".wav didn't complete playing", IncidentEvent.EVENT_STATUS.COMPLETED, evt2.eventStatus);
+    }
+
+    public void testEnqueueClip()
+    {
+        System.out.println("enqueueClip");
+        Vector dummy = new Vector();
+        IncidentEvent evt1 = new IncidentEvent(0, null, "frog-croak.mp3", 4, dummy, dummy);
+        player = new SoundPlayer("test/resources/");
+        player.setAudioEnabled(false);
+        player.start();
+        player.enqueueClip(evt1);
+        // Note: we don't wait for the clip to complete.
+        // So if audio is disabled, the clip will get marked complete without being played.
+        assertEquals(".wav played when audio disabled", IncidentEvent.EVENT_STATUS.COMPLETED, evt1.eventStatus);
+    }
+
+    public void testDeQueueAll()
+    {
+        System.out.println("deQueueAll");
+        Vector dummy = new Vector();
+        IncidentEvent evt1 = new IncidentEvent(0, null, "bikehorn.mp3", 1, dummy, dummy);
+        IncidentEvent evt2 = new IncidentEvent(0, null, "bikehorn.mp3", 2, dummy, dummy);
+        player = new SoundPlayer("test/resources/");
+        player.start();
+        player.enqueueClip(evt1);
+        player.enqueueClip(evt2);
+        player.deQueueAll();
+        try
+        {
+            Thread.sleep(2000);
+        } catch (InterruptedException ex)
+        {
+            Logger.getLogger(SoundPlayerTest.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        assertFalse(".wav played after dequeue all", IncidentEvent.EVENT_STATUS.COMPLETED == evt2.eventStatus);
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorConsoleDriver.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorConsoleDriver.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorConsoleDriver.java	(revision 82)
@@ -0,0 +1,191 @@
+package tmcsim.cadsimulator;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import junit.framework.TestCase;
+import static org.mockito.Mockito.mock;
+import static tmcsim.cadsimulator.CADSimulatorFixture.writedata;
+import tmcsim.common.CADEnums;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CADClientInterface;
+import tmcsim.interfaces.SimulationManagerInterface;
+
+/**
+ * Driver for CADSimulator Console - output to stdout.
+ *
+ * @author jdalbey
+ */
+public class CADSimulatorConsoleDriver extends TestCase
+{
+
+    static CADSimulator app;
+    static final String configData =
+            "CADClientPort          = 4444 \n"
+            + "CoordinatorRMIPort     = 4445 \n"
+            + "CADRmiPort             = 4446 \n"
+            + "UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer\n"
+            + "ParamicsProperties     = pconfig.txt\n"
+            + "ATMSProperties         = empty.txt\n"
+            + "MediaProperties        = empty.txt\n";
+    static final String paramicsData = "ParamicsCommHost       = 192.168.251.45\n"
+            + "ParamicsCommPort       = 4450\n"
+            + "IncidentUpdateInterval = 30\n"
+            + "IncidentUpdateFile     = exchange.xml\n"
+            + "ParamicsStatusInterval = 15\n"
+            + "ParamicsStatusFile     = paramics_status.xml\n"
+            + "CameraStatusInterval   = 30\n"
+            + "CameraStatusFile       = camera_status.xml\n";
+    /*
+     * Creating instance of app must be done only once or you get registry
+     * bind problems, and code Written in Constructor is Executed
+     * before each Test Method
+     */
+
+    public static void main(String[] args) throws IOException, SimulationException, ScriptException
+    {
+        writedata("config.txt", configData);
+        writedata("pconfig.txt", paramicsData);
+        writedata("empty.txt", "");
+        CADSimulatorFixture.writeScriptfiles();
+        CADSimulatorFixture.startCADSim();
+        (new CADSimulatorConsoleDriver()).testAll();
+        System.exit(0);
+    }
+    // Write the test data to a file
+
+    private void testAll() throws java.io.IOException, SimulationException, ScriptException
+    {
+
+        CADClientInterface ci = mock(CADClientInterface.class); //new tmcsim.cadsimulator.CADSimulatorDriver.FakeClient();
+        app.theCoordinator.registerForCallback(ci);
+        // Convert the output stream into a string we can test.
+
+        app.theCoordinator.registerForCallback(ci);
+
+        SimulationManagerInterface si = mock(SimulationManagerInterface.class);
+
+        app.theCoordinator.registerForCallback(si);
+
+        Logger cadSimLogger = Logger.getLogger("tmcsim.cadsimulator");
+        cadSimLogger.logp(Level.INFO, "", "", "Sample Info Message.");
+
+        app.theCoordinator.setParamicsStatus(CADEnums.PARAMICS_STATUS.CONNECTED);
+        CADSimulatorFixture.pause(500);
+
+        // Show loaded, and ALSO update the current network id
+        app.theCoordinator.setParamicsStatus(CADEnums.PARAMICS_STATUS.LOADED);
+        CADSimulatorFixture.pause(500);
+
+        app.theCoordinator.setScriptStatus(CADEnums.SCRIPT_STATUS.SCRIPT_RUNNING);
+        CADSimulatorFixture.pause(500);
+
+        cadSimLogger.logp(Level.SEVERE, "Someclass", "Somemethod", "Something bad happened.");
+
+        // Load a script file
+        String autoloadScriptname = "scripts/one-incident.xml";
+        app.theCoordinator.loadScriptFile(new File(autoloadScriptname));
+        // The status should now say Ready
+
+
+//        ParamicsSimulationManager psm = mock(ParamicsSimulationManager.class);
+//        when(psm.isConnected()).thenReturn(Boolean.TRUE, Boolean.FALSE);
+//        app.theParamicsSimMgr = psm;
+//        app.theCoordinator.connectToParamics();
+//        app.theCoordinator.loadParamicsNetwork(1);
+//        CADSimulatorFixture.pause(500);
+//        app.theCoordinator.disconnectFromParamics();
+//        CADSimulatorFixture.pause(500);
+
+        app.theCoordinator.startSimulation();
+        CADSimulatorFixture.pause(1500);
+        app.theCoordinator.pauseSimulation();
+        app = null;
+        cleanup();
+    }
+
+    private void cleanup()
+    {
+        File removeMe = new File("config.txt");
+        removeMe.delete();
+        removeMe = new File("pconfig.txt");
+        removeMe.delete();
+        removeMe = new File("empty.txt");
+        removeMe.delete();
+    }
+    String expected1 =
+            "--- CAD Simulator ---\n"
+            + "Elapsed Simulation Time     : 0:00:00\n"
+            + "Status                      : No Script\n"
+            + "Connected CAD Terminals     : 0\n"
+            + "Simulation Manager Connected: No\n"
+            + "Connected to Paramics       : No\n"
+            + "Network Loaded              : \n"
+            + "-- Info Messages --\n\n"
+            + "-- Error Messages --\n\n";
+    String expected2 =
+            "--- CAD Simulator ---\n"
+            + "Elapsed Simulation Time     : 0:00:00\n"
+            + "Status                      : No Script\n"
+            + "Connected CAD Terminals     : 1\n"
+            + "Simulation Manager Connected: No\n"
+            + "Connected to Paramics       : No\n"
+            + "Network Loaded              : \n"
+            + "-- Info Messages --\n\n"
+            + "-- Error Messages --\n\n";
+    String expected3 =
+            "--- CAD Simulator ---\n"
+            + "Elapsed Simulation Time     : 0:00:00\n"
+            + "Status                      : No Script\n"
+            + "Connected CAD Terminals     : 2\n"
+            + "Simulation Manager Connected: No\n"
+            + "Connected to Paramics       : No\n"
+            + "Network Loaded              : \n"
+            + "-- Info Messages --\n\n"
+            + "-- Error Messages --\n\n";
+    String expected4 =
+            "--- CAD Simulator ---\n"
+            + "Elapsed Simulation Time     : 0:00:00\n"
+            + "Status                      : No Script\n"
+            + "Connected CAD Terminals     : 2\n"
+            + "Simulation Manager Connected: Yes\n"
+            + "Connected to Paramics       : No\n"
+            + "Network Loaded              : \n"
+            + "-- Info Messages --\n\n"
+            + "-- Error Messages --\n\n";
+    String expected5 =
+            "--- CAD Simulator ---\n"
+            + "Elapsed Simulation Time     : 0:00:00\n"
+            + "Status                      : No Script\n"
+            + "Connected CAD Terminals     : 2\n"
+            + "Simulation Manager Connected: Yes\n"
+            + "Connected to Paramics       : No\n"
+            + "Network Loaded              : \n"
+            + "-- Info Messages --\n"
+            + ". = Sample Info Message.\n"
+            + "-- Error Messages --\n\n";
+    String expected6 =
+            "--- CAD Simulator ---\n"
+            + "Elapsed Simulation Time     : 0:00:00\n"
+            + "Status                      : No Script\n"
+            + "Connected CAD Terminals     : 2\n"
+            + "Simulation Manager Connected: Yes\n"
+            + "Connected to Paramics       : Yes\n"
+            + "Network Loaded              : \n"
+            + "-- Info Messages --\n"
+            + ". = Sample Info Message.\n"
+            + "-- Error Messages --\n\n";
+    String expected7 =
+            "--- CAD Simulator ---\n"
+            + "Elapsed Simulation Time     : 0:00:00\n"
+            + "Status                      : No Script\n"
+            + "Connected CAD Terminals     : 2\n"
+            + "Simulation Manager Connected: Yes\n"
+            + "Connected to Paramics       : Yes\n"
+            + "Network Loaded              : 3\n"
+            + "-- Info Messages --\n"
+            + ". = Sample Info Message.\n"
+            + "-- Error Messages --\n\n";
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/SystemConsoleTest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/SystemConsoleTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/SystemConsoleTest.java	(revision 82)
@@ -0,0 +1,226 @@
+package tmcsim.cadsimulator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import org.uispec4j.*;
+import org.uispec4j.interception.WindowInterceptor;
+import tmcsim.cadsimulator.managers.ATMSManager;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.paramicscommunicator.ParamicsCommunicator;
+import tmcsim.paramicscommunicator.gui.ParamicsCommunicatorGUI;
+import tmcsim.simulationmanager.SimulationManager;
+
+/**
+ * Note, this is just like VisibleSystemTest except it starts it's own
+ * CADSimulator running on the console.
+ *
+ * @author jdalbey
+ */
+public class SystemConsoleTest extends UISpecTestCase
+{
+
+    SimulationManager simMgrApp;
+    CADSimulator engine;
+
+    public SystemConsoleTest(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+    /**
+     * Test of run method, of class ParamicsCommunicator.
+     */
+    public void testRun() throws ScriptException, SimulationException, RemoteException
+    {
+        System.out.println("System Console Test");
+
+        try
+        {
+            engine = new CADSimulator("config/testConfig/cad_simulator_console_config.properties");
+        } catch (Exception e)
+        {
+            fail("Couldn't launch CADSimulator");
+        }
+
+        ParamicsCommunicator pc = null;
+        pc = new ParamicsCommunicator("config/testConfig/paramics_communicator_config.properties");
+        ParamicsCommunicatorGUI theGUI = new ParamicsCommunicatorGUI();
+        pc.setGUI(theGUI);
+        // Note: Can't set visible ANY windows during UISpec test
+
+        // expect pcomm to say "sleeping"
+
+        Window simMgrWindow = null;
+        simMgrWindow = WindowInterceptor.run(new Trigger()
+        {
+            public void run()
+            {
+                try
+                {
+                    simMgrApp = new SimulationManager("config/sim_manager_systest_config.properties");
+                } catch (Exception ex)
+                {
+                    fail("Couldn't launch Simulation Manager");
+                }
+            }
+        });
+
+        // TODO: Check that the Sim Mgr GUI appears without a script loaded yet
+
+        Panel contentPanel = simMgrWindow.getPanel("contentPane");
+        TextBox txtSimStatus = contentPanel.getTextBox("simulationStatusText");
+        assertEquals("No Script", txtSimStatus.getText());
+        TextBox txtParamStatus = contentPanel.getTextBox("paramicsStatusInfoLabel");
+        assertEquals("Unknown", txtParamStatus.getText());
+        Button loadNetworkBtn = simMgrWindow.getButton("Load Network");
+        assertFalse(loadNetworkBtn.isEnabled());
+
+        Button paramicsBtn = simMgrWindow.getButton("Connect to Paramics");
+        paramicsBtn.click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Disconnect from Paramics", paramicsBtn.getLabel());
+
+        assertEquals("Connected", txtParamStatus.getText());
+        pc.startReading();
+
+        loadNetworkBtn.click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Sending Network ID", txtParamStatus.getText());
+        System.out.println("Sending Network ID");
+        assertFalse(loadNetworkBtn.isEnabled());
+        String warmingXML = "<Paramics>\n"
+                + "<Network_Status>WARMING</Network_Status>\n"
+                + "<Network_ID>1</Network_ID>\n"
+                + "</Paramics>";
+        writedata("paramics_status.xml", warmingXML);
+        try
+        {
+            Thread.sleep(2100);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Warming Up", txtParamStatus.getText());
+        System.out.println("Warming Up Passed");
+
+        try
+        {
+            Thread.sleep(2100);
+        } catch (Exception ex)
+        {
+        }
+        String loadedXML = "<Paramics>\n"
+                + "<Network_Status>LOADED</Network_Status>"
+                + "<Network_ID>1</Network_ID>"
+                + "</Paramics>";
+        writedata("paramics_status.xml", loadedXML);
+        try
+        {
+            Thread.sleep(2100);
+        } catch (Exception ex)
+        {
+        }
+        assertEquals("Network 1 Loaded", txtParamStatus.getText());
+        System.out.println("Network Loaded Passed");
+
+        // Load a script file
+        String autoloadScriptname = "scripts/audio_systest.xml";
+        simMgrApp.loadScript(new File(autoloadScriptname));
+        try
+        {
+            Thread.sleep(500);
+        } catch (Exception ex)
+        {
+        }
+
+        // The status should now say Ready
+        assertEquals("Ready", txtSimStatus.getText());
+
+        // Mock out the ATMS manager in CADSimulator
+        ATMSManager atm = mock(ATMSManager.class);
+        try
+        {
+            when(atm.getCurrentTime()).thenReturn(29000L);
+        } catch (Exception ex)
+        {
+            Logger.getLogger(SystemConsoleTest.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        engine.theATMSMgr = atm;
+
+        // Click "Start"
+        simMgrWindow.getButton("Start").click();
+        try
+        {
+            Thread.sleep(200);
+        } catch (Exception ex)
+        {
+            ex.printStackTrace();
+        }
+        assertEquals("Running", txtSimStatus.getText());
+        System.out.println("Running Passed");
+        try
+        {
+            Thread.sleep(9000);
+        } catch (InterruptedException ex)
+        {
+        }
+        simMgrWindow.getButton("Pause").click();
+        try
+        {
+            Thread.sleep(3000);
+        } catch (InterruptedException ex)
+        {
+        }
+        simMgrWindow.getButton("Start").click();
+        try
+        {
+            Thread.sleep(3000);
+        } catch (InterruptedException ex)
+        {
+        }
+        simMgrWindow.getButton("Pause").click();
+        simMgrWindow.getMenuBar().getMenu("File").getSubMenu("Exit").click();
+        System.out.println("Exiting.");
+
+
+    }
+
+    // Write the test data to a file
+    public static void writedata(String filename, String data)
+    {
+        PrintWriter writer = null;
+        try
+        {
+            writer = new PrintWriter(new FileWriter(filename));
+            writer.println(data);
+            writer.close();
+        } catch (Exception ex)
+        {
+            ex.printStackTrace();
+        }
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorConsoleTest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorConsoleTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorConsoleTest.java	(revision 82)
@@ -0,0 +1,601 @@
+package tmcsim.cadsimulator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import junit.framework.TestCase;
+import static org.mockito.Mockito.mock;
+import tmcsim.cadsimulator.viewer.CADConsoleViewer;
+import tmcsim.common.CADEnums;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CADClientInterface;
+import tmcsim.interfaces.SimulationManagerInterface;
+
+/**
+ * Test of CADSimulator Console
+ *
+ * @author jdalbey
+ */
+public class CADSimulatorConsoleTest extends TestCase
+{
+
+    private static CADSimulator app = null;
+    private CADConsoleViewer console;
+    private StringWriter sw;
+
+    public CADSimulatorConsoleTest(String testName)
+    {
+        super(testName);
+    }
+
+    public void setUp() throws Exception
+    {
+        super.setUp();
+        writeConfigData();
+        // Since CADSimulator has registry, we musn't instantiate it more than once
+        if (app == null)
+        {
+            try
+            {
+                app = new CADSimulator("config.txt");
+            } catch (Exception ex)
+            {
+                fail("Couldn't launch CADSimulator");
+            }
+        }
+        console = (CADConsoleViewer) app.theViewer;
+        sw = new StringWriter();
+        console.setWriter(sw);
+    }
+
+    @Override
+    public void tearDown() throws java.io.IOException
+    {
+        File removeMe = new File("config.txt");
+        removeMe.delete();
+        removeMe = new File("pconfig.txt");
+        removeMe.delete();
+        removeMe = new File("empty.txt");
+        removeMe.delete();
+    }
+
+    /**
+     * compare StringWriter contents against expected
+     */
+    private void verify(String msg, String expect)
+    {
+        String result = sw.toString().trim();
+        result = result.replaceAll("\n", ",");
+        String fullExpect = expect.trim();
+        fullExpect = fullExpect.replaceAll("\n", ",");
+//        System.out.println(fullExpect);
+//        System.out.println(result.substring(result.length() - fullExpect.length(), result.length()));
+//        String diff = StringUtils.difference(fullExpect, result);
+        boolean match = result.endsWith(fullExpect);
+        assertTrue(msg + ": " + result, match);
+    }
+
+    public static void pause(int millis)
+    {
+        try
+        {
+            Thread.sleep(millis);
+        } catch (InterruptedException ex)
+        {
+        }
+    }
+
+    /**
+     * The tests must be all run in one method, because the order matters. As
+     * separate methods, we couldn't control which is executed first.
+     *
+     * @throws java.io.IOException
+     * @throws SimulationException
+     * @throws ScriptException
+     */
+    public void testAll() throws java.io.IOException, SimulationException, ScriptException
+    {
+        CADConsoleViewer console = (CADConsoleViewer) app.theViewer;
+        String expected1 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --";
+        System.out.println("setVisible");
+        console.setVisible(true);
+        verify("Initial output incorrect: ", expected1);
+        String expected2 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 1\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+
+        System.out.println("connect one");
+        CADClientInterface ci = mock(CADClientInterface.class);
+        app.theCoordinator.registerForCallback(ci);
+        verify("connected 1 terminal output incorrect: ", expected2);
+        String expected3 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 2\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        System.out.println("connect two");
+        app.theCoordinator.registerForCallback(ci);
+        verify("connected 2 terminals output incorrect: ", expected3);
+        System.out.println("disconnect");
+        app.theCoordinator.unregisterForCallback(ci);
+        verify("disconnect terminal output incorrect: ", expected2);
+        app.theCoordinator.unregisterForCallback(ci);
+        String expected4 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: Yes\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        System.out.println("sim mgr connect");
+        SimulationManagerInterface si = mock(SimulationManagerInterface.class);
+        app.theCoordinator.registerForCallback(si);
+        verify("sim mgr connected output incorrect: ", expected4);
+        String expected5 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: Yes\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n"
+                + ". = Console Info Message.\n"
+                + "-- Error Messages --\n\n";
+        System.out.println("Info msg");
+        Logger cadSimLogger = Logger.getLogger("tmcsim.cadsimulator");
+        cadSimLogger.logp(Level.INFO, "", "", "Console Info Message.");
+        verify("Info message output incorrect: ", expected5);
+        String expected7 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: Yes\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n"
+                + ". = Console Info Message.\n"
+                + "-- Error Messages --\n"
+                + "Someclass.Somemethod = Something bad happened.\n";
+        System.out.println("Error msg");
+        cadSimLogger = Logger.getLogger("tmcsim.cadsimulator");
+        cadSimLogger.logp(Level.SEVERE, "Someclass", "Somemethod", "Something bad happened.");
+        verify("Error message output incorrect: ", expected7);
+        String expected6 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: Yes\n"
+                + "Connected to Paramics       : Yes\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n"
+                + ". = Console Info Message.\n"
+                + "-- Error Messages --\n"
+                + "Someclass.Somemethod = Something bad happened.\n";
+        System.out.println("Paramics connect");
+        app.theCoordinator.setParamicsStatus(CADEnums.PARAMICS_STATUS.CONNECTED);
+        pause(500);
+        pause(500);
+        verify("paramics connected should be yes", expected6);
+        String expected8 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : Ready\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: Yes\n"
+                + "Connected to Paramics       : Yes\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n"
+                + ". = Console Info Message.\n"
+                + "-- Error Messages --\n"
+                + "Someclass.Somemethod = Something bad happened.\n";
+        String expected9 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:01\n"
+                + "Status                      : Running\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: Yes\n"
+                + "Connected to Paramics       : Yes\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n"
+                + ". = Console Info Message.\n"
+                + "-- Error Messages --\n"
+                + "Someclass.Somemethod = Something bad happened.\n";
+        System.out.println("Sim status");
+        // Load a script file - to put status at Ready
+        String autoloadScriptname = "scripts/one-incident.xml";
+        app.theCoordinator.loadScriptFile(new File(autoloadScriptname));
+        pause(500);
+        verify("Status should be 'ready'", expected8);
+        // startSimulation to put status at Running
+        app.theCoordinator.startSimulation();
+        pause(500);
+        verify("Status should be 'running', time should be 0:01", expected9);
+    }
+//    public void testNetworkID()
+//    {
+//        String expected10 =
+//                "--- CAD Simulator ---\n"
+//                + "Elapsed Simulation Time     : 0:00:00\n"
+//                + "Status                      : No Script\n"
+//                + "Connected CAD Terminals     : 0\n"
+//                + "Simulation Manager Connected: No\n"
+//                + "Connected to Paramics       : No\n"
+//                + "Network Loaded              : 17\n"
+//                + "-- Info Messages --\n\n"
+//                + "-- Error Messages --\n\n";
+//        // this will tell the model it has a new network ID
+//        cadmodel.setParamicsNetworkLoaded("17");
+//        cadmodel.setParamicsStatus(CADEnums.PARAMICS_STATUS.LOADED);
+//        pause(500);
+//        verify("network id should be 17", expected10);
+//    }
+//    ByteArrayOutputStream bos;
+//    PrintStream ps;
+    static final String configData =
+            "CADClientPort          = 4444 \n"
+            + "CoordinatorRMIPort     = 4445 \n"
+            + "CADRmiPort             = 4446 \n"
+            + "UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer\n"
+            + "ParamicsProperties     = pconfig.txt\n"
+            + "ATMSProperties         = empty.txt\n"
+            + "MediaProperties        = empty.txt\n";
+    static final String paramicsData = "ParamicsCommHost = 127.0.0.1\n"
+            + "ParamicsCommPort       = 4450\n"
+            + "IncidentUpdateInterval = 30\n"
+            + "IncidentUpdateFile     = exchange.xml\n"
+            + "ParamicsStatusInterval = 15\n"
+            + "ParamicsStatusFile     = paramics_status.xml\n"
+            + "CameraStatusInterval   = 30\n"
+            + "CameraStatusFile       = camera_status.xml\n";
+    static final String cardfileURL = "http://pastebin.com/raw/Yr26nfp7";
+    static final String smallXMLURL = "http://pastebin.com/raw/Eqj2N5qD";
+    /*
+     * Creating instance of app must be done only once or you get registry
+     * bind problems, and code Written in Constructor is Executed
+     * before each Test Method
+     */
+
+    private void writeConfigData()
+    {
+        // Declare a stream to the output
+//        bos = new ByteArrayOutputStream();
+//        ps = new PrintStream(bos);
+        // Redirect the standard output
+//        System.setOut(ps);
+        writedata("config.txt", configData);
+        writedata("pconfig.txt", paramicsData);
+        writedata("empty.txt", "");
+        writeScriptfiles();
+    }
+
+    private void writeScriptfiles()
+    {
+        new File("scripts").mkdir();
+        writedata("scripts/Cardfile.xml", cardfileData);
+        writedata("scripts/one-incident.xml", oneincidentXML);
+    }
+
+    // Write the test data to a file
+    private void writedata(String filename, String data)
+    {
+        File cardFile = new File(filename);
+        // If a cardfile exists, leave it
+        if (!cardFile.exists())
+        {
+            PrintWriter writer = null;
+            try
+            {
+                writer = new PrintWriter(new FileWriter(filename));
+                writer.println(data);
+                writer.close();
+            } catch (Exception ex)
+            {
+                ex.printStackTrace();
+            }
+        }
+    }
+    private static final String cardfileData =
+            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+            + "<!--Please do not modify titles. Note that these titles are not"
+            + "sent into the actual screen. If titles are to be modified,"
+            + "they need to be changed in CardfileHandler.java  -->"
+            + ""
+            + ""
+            + ""
+            + "<CARDFILE> "
+            + "	<TAB title = \"Coastal Division Units\">"
+            + "		<CARDFILE_OBJ name = \"Name\" >"
+            + "			<ADDRESS>Address</ADDRESS>"
+            + "			<CITY>City</CITY>"
+            + "			<STATE>State</STATE>"
+            + "			<ZIP>Zip</ZIP>"
+            + "			<PHONE1>Phone1</PHONE1>"
+            + "			<PHONE2>Phone2</PHONE2>"
+            + "			<FAX>Fax</FAX>"
+            + "		</CARDFILE_OBJ>"
+            + "		"
+            + "		<CARDFILE_OBJ  name = \"Name2\" >"
+            + "			<ADDRESS>Address2</ADDRESS>"
+            + "			<CITY>City2</CITY>"
+            + "			<STATE>State2</STATE>"
+            + "			<ZIP>Zip2</ZIP>"
+            + "			<PHONE1>Phone12</PHONE1>"
+            + "			<PHONE2>Phone22</PHONE2>"
+            + "			<FAX>Fax2</FAX>"
+            + "		</CARDFILE_OBJ>"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Police/Sheriff/Coroner\">"
+            + "	"
+            + "		<CARDFILE_OBJ  name = \"Name\" >"
+            + "			<ADDRESS>Address</ADDRESS>"
+            + "			<CITY>City</CITY>"
+            + "			<STATE>State</STATE>"
+            + "			<ZIP>Zip</ZIP>"
+            + "			<PHONE1>Phone1</PHONE1>"
+            + "			<PHONE2>Phone2</PHONE2>"
+            + "			<FAX>Fax</FAX>"
+            + "		</CARDFILE_OBJ>"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Courts\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Public Transportation\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"GG Other\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"MY Misc\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"SL Misc\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"VT Misc\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"CHP Offices\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"State Agencies/Facilities\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Government Officials\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Federal Agencies\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Fire/EMS\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Jails\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Hospitals/Med Centers\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Tow Companies\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"CalTrans\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"County Roads\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Utilities\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Animal Control\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Airports\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Credit Cards\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"GG Crisis Shelters\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Ranges\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Hotlines\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Hwy Patrols OOS\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Parks/Recreation\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Shelters\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"SL County Services\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"SL Resources\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Truck/Tire Repair\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"MCC Employees\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"Gate Access Codes\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"VT Call Signs\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + "	"
+            + "	<TAB title = \"SLCC Employees\">"
+            + "		"
+            + "		"
+            + "		"
+            + "	</TAB>"
+            + ""
+            + "</CARDFILE>";
+    private static final String oneincidentXML =
+            "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"
+            + ""
+            + "<TMC_SCRIPT title=\"One Incident Simulation\">"
+            + ""
+            + "	<SCRIPT_EVENT>"
+            + "		<TIME_INDEX>00:00:00</TIME_INDEX>"
+            + "		<INCIDENT LogNum=\"100\">Media Log</INCIDENT>		"
+            + "		"
+            + "		<CAD_DATA>"
+            + "			<HEADER_INFO>"
+            + "				<Type>Media</Type>"
+            + "				<Beat>"
+            + "				</Beat>"
+            + "				<TruncLoc>"
+            + "				</TruncLoc>"
+            + "				<FullLoc>"
+            + "				</FullLoc>"
+            + "			</HEADER_INFO>			"
+            + "			"
+            + "			<CAD_INCIDENT_EVENT>	"
+            + "			</CAD_INCIDENT_EVENT>		"
+            + "			"
+            + "		</CAD_DATA>				"
+            + "		"
+            + "	</SCRIPT_EVENT>	"
+            + "</TMC_SCRIPT>";
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorGUITest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorGUITest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorGUITest.java	(revision 82)
@@ -0,0 +1,162 @@
+package tmcsim.cadsimulator;
+
+import java.io.File;
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.fail;
+import static org.mockito.Mockito.*;
+import org.uispec4j.*;
+import org.uispec4j.interception.WindowInterceptor;
+import tmcsim.cadsimulator.managers.ParamicsSimulationManager;
+import tmcsim.common.CADEnums;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CADClientInterface;
+import tmcsim.interfaces.SimulationManagerInterface;
+
+/**
+ * Test of CADSimulator GUI
+ *
+ * @author jdalbey
+ */
+public class CADSimulatorGUITest extends UISpecTestCase
+{
+
+    static final String configData =
+            "CADClientPort          = 4444 \n"
+            + "CoordinatorRMIPort     = 4445 \n"
+            + "CADRmiPort             = 4446 \n"
+            + "UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer\n"
+            + "ParamicsProperties     = pconfig.txt\n"
+            + "ATMSProperties         = empty.txt\n"
+            + "MediaProperties        = empty.txt\n";
+
+    public CADSimulatorGUITest(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    public void tearDown() throws java.io.IOException
+    {
+        File removeMe = new File("config.txt");
+        removeMe.delete();
+        removeMe = new File("pconfig.txt");
+        removeMe.delete();
+        removeMe = new File("empty.txt");
+        removeMe.delete();
+    }
+    /**
+     * Test of main method, of class CADSimulator.
+     */
+    CADSimulator app;
+
+    public void testConstructor() throws SimulationException, RemoteException, ScriptException
+    {
+        System.out.println("CADSimulator constructor");
+        CADSimulatorFixture.writeConfigData();
+        CADSimulatorFixture.writedata("config.txt", configData);
+        Window cadwindow = null;
+//        try
+//        {
+//            app = new CADSimulator("config.txt");
+//        } catch (Exception e)
+//        {
+//            fail("Couldn't launch CADSimulator" + e.getMessage());
+//        }
+
+        System.setProperty("CONFIG_DIR", "config/testConfig");
+        if (System.getProperty("CONFIG_DIR") != null)
+        {
+            cadwindow = WindowInterceptor.run(new Trigger()
+            {
+                public void run()
+                {
+                    try
+                    {
+                        app = new CADSimulator(System.getProperty("CONFIG_DIR") + System.getProperty("file.separator") + "cad_simulator_config.properties");
+
+                    } catch (Exception e)
+                    {
+                        fail("Couldn't launch CADSimulator" + e.getMessage());
+                    }
+                }
+            });
+        }
+        else
+        {
+            fail("CONFIG_DIR system property not defined.");
+        }
+
+        System.out.println("Tests for text fields.");
+        // Create a UISpec window from the CADSimulator's Viewer (gui)
+//        cadwindow = new Window((CADSimulatorViewer) app.theViewer);
+        assertTrue("Title bar incorrect", cadwindow.getTitle().startsWith("CAD Simulator revision:"));
+        Panel mainPanel = cadwindow.getPanel("contentPane");
+        TextBox txtStatus = mainPanel.getTextBox("simulationStatus");
+        assertEquals("simulation status should say No Script", "No Script", txtStatus.getText().trim());
+        TextBox terminals = mainPanel.getTextBox("termConnectedTF");
+        assertEquals("should be 0 terminals", "0", terminals.getText().trim());
+        assertEquals("mgr connected should be no", "No", mainPanel.getTextBox("managerConnectedTF").getText().trim());
+        assertEquals("paramics connected should be no", "No", mainPanel.getTextBox("paramicsConnectedTF").getText().trim());
+        assertEquals("initial time should be 0:00:00", "0:00:00", mainPanel.getTextBox("simulationClockLabel").getText().trim());
+
+        CADClientInterface ci = mock(CADClientInterface.class);
+        app.theCoordinator.registerForCallback(ci);
+        assertEquals("should be 1 terminal", "1", terminals.getText().trim());
+        app.theCoordinator.registerForCallback(ci);
+        assertEquals("should be 2 terminals", "2", terminals.getText().trim());
+
+        SimulationManagerInterface si = mock(SimulationManagerInterface.class);
+
+        app.theCoordinator.registerForCallback(si);
+        assertEquals("mgr connected should be yes", "Yes", mainPanel.getTextBox("managerConnectedTF").getText().trim());
+
+        Logger cadSimLogger = Logger.getLogger("tmcsim.cadsimulator");
+        cadSimLogger.logp(Level.INFO, "", "", "Sample Info Message.");
+
+        System.out.println("Tests for message panes.");
+        Panel infoPane = mainPanel.getPanel("infoMessagesPane");
+        TextBox infoText = infoPane.getTextBox("infoMessagesTA");
+        assertEquals("wrong info msg text", ". = Sample Info Message.", infoText.getText().trim());
+
+        cadSimLogger.logp(Level.SEVERE, "", "", "Sample Error Message.");
+
+        Panel errPane = mainPanel.getPanel("errorMessagesPane");
+        TextBox errText = errPane.getTextBox("errorMessagesTA");
+        assertEquals("wrong error msg text", ". = Sample Error Message.", errText.getText().trim());
+
+        System.out.println("Tests for status changes.");
+        app.theCoordinator.setParamicsStatus(CADEnums.PARAMICS_STATUS.CONNECTED);
+        CADSimulatorFixture.pause(500);
+        assertEquals("paramics connected should be yes", "Yes", mainPanel.getTextBox("paramicsConnectedTF").getText().trim());
+        assertEquals("network id should be None", "None", mainPanel.getTextBox("networkLoadedTF").getText().trim());
+
+//        app.theCoordinator.setScriptStatus(CADEnums.SCRIPT_STATUS.SCRIPT_RUNNING);
+//        assertEquals("Running", mainPanel.getTextBox("simulationStatus").getText().trim());
+
+        // Load a script file
+        String autoloadScriptname = "scripts/one-incident.xml";
+        app.theCoordinator.loadScriptFile(new File(autoloadScriptname));
+        // The status should now say Ready
+        assertEquals("sim status should be ready", "Ready", mainPanel.getTextBox("simulationStatus").getText().trim());
+
+        app.theCoordinator.startSimulation();
+        CADSimulatorFixture.pause(900);
+        assertEquals("sim status should be running", "Running", mainPanel.getTextBox("simulationStatus").getText().trim());
+        assertEquals("sim time should be 0:00:01", "0:00:01", mainPanel.getTextBox("simulationClockLabel").getText().trim());
+
+        ParamicsSimulationManager psm = mock(ParamicsSimulationManager.class);
+        when(psm.isConnected()).thenReturn(Boolean.TRUE);
+        when(psm.getParamicsNetworkLoaded()).thenReturn(1); // provide the network ID to return
+        app.theParamicsSimMgr = psm;
+        // this will tell the model it has a new network ID
+        app.theCoordinator.setParamicsStatus(CADEnums.PARAMICS_STATUS.LOADED);
+        CADSimulatorFixture.pause(500);
+        assertEquals("network id should be 1", "1", mainPanel.getTextBox("networkLoadedTF").getText().trim());
+        //mainPanel.getMenu().getItem("Exit").click();
+        boolean breakpoint = true;
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorFixture.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorFixture.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/CADSimulatorFixture.java	(revision 82)
@@ -0,0 +1,148 @@
+package tmcsim.cadsimulator;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Scanner;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import static tmcsim.cadsimulator.CADSimulatorFixture.bos;
+
+/**
+ * Note: This test requires an internet connection, for building data files from
+ * a master copy at pastebin.
+ *
+ * @author jdalbey
+ */
+public class CADSimulatorFixture
+{
+
+    static CADSimulator app;
+    static ByteArrayOutputStream bos;
+    static PrintStream ps;
+    static final String configData =
+            "CADClientPort          = 4444 \n"
+            + "CoordinatorRMIPort     = 4445 \n"
+            + "CADRmiPort             = 4446 \n"
+            + "UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer\n"
+            + "ParamicsProperties     = pconfig.txt\n"
+            + "ATMSProperties         = empty.txt\n"
+            + "MediaProperties        = empty.txt\n";
+    static final String paramicsData = "ParamicsCommHost       = 192.168.251.45\n"
+            + "ParamicsCommPort       = 4450\n"
+            + "IncidentUpdateInterval = 30\n"
+            + "IncidentUpdateFile     = exchange.xml\n"
+            + "ParamicsStatusInterval = 15\n"
+            + "ParamicsStatusFile     = paramics_status.xml\n"
+            + "CameraStatusInterval   = 30\n"
+            + "CameraStatusFile       = camera_status.xml\n";
+    static final String paramConfig    = "SocketPort=4450\n"
+            +"WorkingDirectory=.\nGUIvisible=false";
+    static final String cardfileURL = "http://pastebin.com/raw/Yr26nfp7";
+    static final String smallXMLURL = "http://pastebin.com/raw/Eqj2N5qD";
+    /*
+     * Creating instance of app must be done only once or you get registry
+     * bind problems, and code Written in Constructor is Executed
+     * before each Test Method
+     */
+
+    public static void writeConfigData()
+    {
+        // Declare a stream to the output
+        bos = new ByteArrayOutputStream();
+        ps = new PrintStream(bos);
+        // Redirect the standard output
+        System.setOut(ps);
+        writedata("config.txt", configData);
+        writedata("pconfig.txt", paramicsData);
+        writedata("empty.txt", "");
+        writeScriptfiles();
+    }
+
+    public static void writeScriptfiles()
+    {
+        writeFileFromURL("scripts/Cardfile.xml", cardfileURL);
+        writeFileFromURL("scripts/one-incident.xml", smallXMLURL);
+    }
+
+    private static void writeFileFromURL(String filename, String urlstring)
+    {
+        File cardFile = new File(filename);
+        // If a cardfile exists, leave it
+        if (!cardFile.exists())
+        {
+            // if cardfile doesn't exist, copy from our special pastebin
+            java.io.File dir = new java.io.File("scripts");
+            dir.mkdir();
+            URL url = null;
+            try
+            {
+                url = new URL(urlstring);
+            } catch (MalformedURLException ex)
+            {
+                Logger.getLogger(CADSimulatorFixture.class.getName()).log(Level.SEVERE, null, ex);
+            }
+            try
+            {
+                Scanner in = null;
+                in = new Scanner(url.openStream()).useDelimiter("\\A");
+                String out = in.next();
+                writedata(filename, out);
+            } catch (IOException ex)
+            {
+                Logger.getLogger(CADSimulatorFixture.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+    }
+
+    public static void startCADSim()
+    {
+        // This will set the desired property as long as you don't call the main() method.
+        System.setProperty("CAD_SIM_PROPERTIES", "config.txt");
+        if (System.getProperty("CAD_SIM_PROPERTIES") != null)
+        {
+            try
+            {
+                app = new CADSimulator(System.getProperty("CAD_SIM_PROPERTIES"));
+            } catch (Exception ex)
+            {
+                ex.printStackTrace();
+                junit.framework.TestCase.fail("Couldn't launch CADSimulator");
+            }
+        } else
+        {
+            junit.framework.TestCase.fail("CAD_SIM_PROPERTIES system property not defined.");
+        }
+    }
+    // Write the test data to a file
+
+    public static void writedata(String filename, String data)
+    {
+        PrintWriter writer = null;
+        try
+        {
+            writer = new PrintWriter(new FileWriter(filename));
+            writer.println(data);
+            writer.close();
+        } catch (Exception ex)
+        {
+            ex.printStackTrace();
+        }
+    }
+
+    public static void pause(int millis)
+    {
+        try
+        {
+            Thread.sleep(millis);
+        } catch (InterruptedException ex)
+        {
+            ex.printStackTrace();
+        }
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/GetCadDataUnitValueTest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/GetCadDataUnitValueTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/GetCadDataUnitValueTest.java	(revision 82)
@@ -0,0 +1,73 @@
+
+package tmcsim.cadsimulator;
+
+import java.io.File;
+import java.util.LinkedList;
+import java.util.Observer;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.Vector;
+import javax.swing.table.DefaultTableModel;
+import junit.framework.TestCase;
+import tmcsim.cadmodels.CADRoutedMessage;
+import tmcsim.cadmodels.CMSInfo;
+import tmcsim.cadmodels.IncidentInquiryModel_obj;
+import tmcsim.client.cadclientgui.data.CADData;
+import tmcsim.client.cadclientgui.data.CardfileList;
+import tmcsim.client.cadclientgui.data.ChangeLog;
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.client.cadclientgui.data.Unit;
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+import tmcsim.client.cadclientgui.enums.CADScriptTags;
+import tmcsim.client.cadclientgui.enums.IncidentEnums;
+import tmcsim.client.cadclientgui.enums.UnitStatusEnums;
+import tmcsim.common.CADEnums;
+import tmcsim.interfaces.CADClientInterface;
+import tmcsim.interfaces.SimulationManagerInterface;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class GetCadDataUnitValueTest extends TestCase
+{
+    
+    public GetCadDataUnitValueTest(String testName)
+    {
+        super(testName);
+    }
+    
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+    }
+
+
+
+    public void testSetCadDataUnitValue() throws Exception
+    {
+        System.out.println("setCadDataUnitValue");
+        String unitNum = "14-13";
+        CADScriptTags.UNIT_TAGS tag = CADScriptTags.UNIT_TAGS.OFFICER;
+        Object value = "Joe Friday";
+        Coordinator instance = new Coordinator(null);
+        CADData myData = new CADData();
+        Unit unit1 = new Unit("14-13");
+        unit1.setStatus("10-8");
+        unit1.setOfficer("Joe Friday");
+        Vector<Unit> units = new Vector<Unit>();
+        units.add(unit1);
+        
+        myData.setUnitsFromXML(units);
+        instance.setCadData(myData);
+        instance.setCadDataUnitValue(unitNum, tag, value);
+        String result = (String) instance.getCadDataUnitValue(unitNum, tag);
+        assertEquals(value, result);
+        result = (String) instance.getCadDataUnitValue("", tag);
+        assertTrue(result.length() == 0);
+        
+    }
+
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/viewer/CADSimulatorViewModelTest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/viewer/CADSimulatorViewModelTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/viewer/CADSimulatorViewModelTest.java	(revision 82)
@@ -0,0 +1,148 @@
+package tmcsim.cadsimulator.viewer;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import org.uispec4j.*;
+import tmcsim.cadsimulator.viewer.model.CADSimulatorModel;
+import tmcsim.common.CADEnums;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class CADSimulatorViewModelTest extends junit.framework.TestCase //extends UISpecTestCase
+{
+
+    CADSimulatorViewer viewer;
+    Window cadwindow;
+    CADSimulatorModel model;
+    Panel mainPanel;
+
+    public CADSimulatorViewModelTest(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        viewer = new CADSimulatorViewer();
+        cadwindow = new Window(viewer);
+        model = new CADSimulatorModel();
+        model.addObserver(viewer);
+        mainPanel = cadwindow.getPanel("contentPane");
+    }
+
+    public void testInitialView()
+    {
+        String actual;
+        assertTrue("Title bar incorrect", cadwindow.getTitle().trim().startsWith("CAD Simulator"));
+        TextBox txtStatus = mainPanel.getTextBox("simulationStatus");
+        actual = txtStatus.getText().trim();
+        assertEquals("simulation status should say No Script", "No Script", actual);
+        TextBox terminals = mainPanel.getTextBox("termConnectedTF");
+        actual = terminals.getText().trim();
+        assertEquals("should be 0 terminals", "0", actual);
+        actual = mainPanel.getTextBox("managerConnectedTF").getText().trim();
+        assertEquals("mgr connected should be no", "No", actual);
+        actual = mainPanel.getTextBox("paramicsConnectedTF").getText().trim();
+        assertEquals("paramics connected should be no", "No", actual);
+        actual = mainPanel.getTextBox("simulationClockLabel").getText().trim();
+        assertEquals("initial time should be 0:00:00", "0:00:00", actual);
+        actual = mainPanel.getTextBox("networkLoadedTF").getText().trim();
+        assertEquals("network id should be None", "None", actual);
+    }
+
+    public void testClients()
+    {
+        String actual;
+        model.connectClient();
+        TextBox terminals = mainPanel.getTextBox("termConnectedTF");
+        assertEquals(1, model.getNumClients());
+        assertEquals("should be 1 terminal", "1", terminals.getText().trim());
+        model.connectClient();
+        assertEquals("should be 2 terminals", "2", terminals.getText().trim());
+        model.disconnectClient();
+        assertEquals("should be 1 terminal after disconnect", "1", terminals.getText().trim());
+    }
+
+    public void testSimMgr()
+    {
+        String actual;
+        model.setSimManagerStatus(true);
+        actual = mainPanel.getTextBox("managerConnectedTF").getText().trim();
+        assertEquals("mgr connected should be yes", "Yes", actual);
+        assertTrue(model.isSimManagerConnected());
+    }
+
+    public void testMessagePanes()
+    {
+        String actual;
+        System.out.println("Tests for message panes.");
+        Logger cadSimLogger = Logger.getLogger("tmcsim.cadsimulator");
+        cadSimLogger.logp(Level.INFO, "", "", "Sample Info Message.");
+        Panel infoPane = mainPanel.getPanel("infoMessagesPane");
+        TextBox infoText = infoPane.getTextBox("infoMessagesTA");
+        actual = infoText.getText().trim();
+        assertEquals("wrong info msg text", ". = Sample Info Message.", actual);
+
+        cadSimLogger.logp(Level.SEVERE, "", "", "Sample Error Message.");
+
+        Panel errPane = mainPanel.getPanel("errorMessagesPane");
+        TextBox errText = errPane.getTextBox("errorMessagesTA");
+        actual = errText.getText().trim();
+        assertEquals("wrong error msg text", ". = Sample Error Message.", actual);
+    }
+
+    public void testStatusChg()
+    {
+        String actual;
+        System.out.println("Tests for status changes.");
+        model.setParamicsStatus(CADEnums.PARAMICS_STATUS.CONNECTED);
+        pause(500);
+        actual = mainPanel.getTextBox("paramicsConnectedTF").getText().trim();
+        assertEquals("paramics connected should be yes", "Yes", actual);
+        actual = mainPanel.getTextBox("networkLoadedTF").getText().trim();
+        assertEquals("network id should be None", "None", actual);
+
+        model.setScriptStatus(CADEnums.SCRIPT_STATUS.SCRIPT_STOPPED_NOT_STARTED);
+
+        // The status should now say Ready
+        actual = mainPanel.getTextBox("simulationStatus").getText().trim();
+        assertEquals("sim status should be ready", "Ready", actual);
+
+        model.setScriptStatus(CADEnums.SCRIPT_STATUS.SCRIPT_RUNNING);
+        model.setTime(61L);
+        actual = mainPanel.getTextBox("simulationStatus").getText().trim();
+        assertEquals("sim status should be running", "Running", actual);
+        actual = mainPanel.getTextBox("simulationClockLabel").getText().trim();
+        assertEquals("sim time should be 0:01:01", "0:01:01", actual);
+    }
+
+    public void testNetworkID()
+    {
+        String actual;
+        // this will tell the model it has a new network ID
+        model.setParamicsNetworkLoaded("1");
+        model.setParamicsStatus(CADEnums.PARAMICS_STATUS.LOADED);
+        pause(500);
+        actual = mainPanel.getTextBox("networkLoadedTF").getText().trim();
+        assertEquals("network id should be 1", "1", actual);
+
+        //  model.updateDVDStatus(new DVDStatusUpdate("1", false, new Throwable()));
+
+    }
+
+    public static void pause(int millis)
+    {
+        try
+        {
+            Thread.sleep(millis);
+        } catch (InterruptedException ex)
+        {
+        }
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/viewer/CADConsoleViewerTest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/viewer/CADConsoleViewerTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/viewer/CADConsoleViewerTest.java	(revision 82)
@@ -0,0 +1,253 @@
+package tmcsim.cadsimulator.viewer;
+
+import java.io.StringWriter;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import junit.framework.TestCase;
+import tmcsim.cadsimulator.viewer.model.CADSimulatorModel;
+import tmcsim.common.CADEnums;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class CADConsoleViewerTest extends TestCase
+{
+
+    CADConsoleViewer console;
+    CADSimulatorModel cadmodel;
+    StringWriter sw;
+
+    public CADConsoleViewerTest(String testName)
+    {
+        super(testName);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        console = new CADConsoleViewer();
+        cadmodel = new CADSimulatorModel();
+        cadmodel.addObserver(console);
+        sw = new StringWriter();
+        console.setWriter(sw);
+    }
+    /**
+     * compare StringWriter contents against expected
+     */
+    private void verify(String msg, String expect)
+    {
+        String result = sw.toString().trim();
+        result = result.replaceAll("\n", ",");
+        String fullExpect = expect.trim();
+        fullExpect = fullExpect.replaceAll("\n", ",");
+        assertTrue(msg + ": " + result, result.endsWith(fullExpect));
+    }
+
+    public static void pause(int millis)
+    {
+        try
+        {
+            Thread.sleep(millis);
+        } catch (InterruptedException ex)
+        {
+        }
+    }
+
+    /**
+     * Test of setVisible method, of class CADConsoleViewer.
+     */
+    public void testSetVisible()
+    {
+        String expected1 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --";
+        System.out.println("setVisible");
+        console.setVisible(true);
+        String out = sw.toString().trim();
+        assertEquals(expected1, out);
+    }
+
+    public void testConnect()
+    {
+        String expected2 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 1\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        cadmodel.connectClient();
+        verify("connected 1 terminal output incorrect: ", expected2);
+    }
+
+    public void testConnect2()
+    {
+        String expected3 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 2\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        cadmodel.connectClient();
+        cadmodel.connectClient();
+        verify("connected 2 terminals output incorrect: ", expected3);
+    }
+
+    public void testDisconnect()
+    {
+        String expected3 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 2\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        cadmodel.connectClient();
+        cadmodel.connectClient();
+        cadmodel.connectClient();
+        cadmodel.disconnectClient();
+        verify("disconnect terminal output incorrect: ", expected3);
+    }
+
+    public void testSimMgrConnect()
+    {
+        String expected4 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: Yes\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        cadmodel.setSimManagerStatus(true);
+        verify("sim mgr connected output incorrect: ", expected4);
+    }
+
+    public void testInfoPane()
+    {
+        String expected5 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n"
+                + ". = Console Info Message.\n"
+                + "-- Error Messages --\n\n";
+        Logger cadSimLogger = Logger.getLogger("tmcsim.cadsimulator");
+        cadSimLogger.logp(Level.INFO, "", "", "Console Info Message.");
+        verify("Info message output incorrect: ", expected5);
+    }
+
+    public void testErrorPane()
+    {
+        String expected7 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n"
+                + "Someclass.Somemethod = Something bad happened.\n";
+        Logger cadSimLogger = Logger.getLogger("tmcsim.cadsimulator");
+        cadSimLogger.logp(Level.SEVERE, "Someclass", "Somemethod", "Something bad happened.");
+        verify("Error message output incorrect: ", expected7);
+    }
+
+    public void testParamicsChg()
+    {
+        String expected6 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : Yes\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        cadmodel.setParamicsStatus(CADEnums.PARAMICS_STATUS.CONNECTED);
+        pause(500);
+        verify("paramics connected should be yes", expected6);
+    }
+
+    public void testSimStatus()
+    {
+        String expected8 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : Ready\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        cadmodel.setScriptStatus(CADEnums.SCRIPT_STATUS.SCRIPT_STOPPED_NOT_STARTED);
+        verify("sim status should be ready", expected8);
+        cadmodel.setScriptStatus(CADEnums.SCRIPT_STATUS.SCRIPT_RUNNING);
+        String result = sw.toString();
+        assertTrue("sim status should be running: " + result, result.contains("Running"));
+    }
+
+    public void testSimTime()
+    {
+        String expected9 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:01:01\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : None\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        cadmodel.setTime(61L);
+        verify("sim time should be 0:01:01", expected9);
+    }
+
+    public void testNetworkID()
+    {
+        String expected10 =
+                "--- CAD Simulator ---\n"
+                + "Elapsed Simulation Time     : 0:00:00\n"
+                + "Status                      : No Script\n"
+                + "Connected CAD Terminals     : 0\n"
+                + "Simulation Manager Connected: No\n"
+                + "Connected to Paramics       : No\n"
+                + "Network Loaded              : 17\n"
+                + "-- Info Messages --\n\n"
+                + "-- Error Messages --\n\n";
+        // this will tell the model it has a new network ID
+        cadmodel.setParamicsNetworkLoaded("17");
+        cadmodel.setParamicsStatus(CADEnums.PARAMICS_STATUS.LOADED);
+        pause(500);
+        verify("network id should be 17", expected10);
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/viewer/model/CADSimulatorModelTest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/viewer/model/CADSimulatorModelTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/viewer/model/CADSimulatorModelTest.java	(revision 82)
@@ -0,0 +1,151 @@
+package tmcsim.cadsimulator.viewer.model;
+
+import java.util.Observable;
+import java.util.Observer;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import junit.framework.TestCase;
+import tmcsim.cadsimulator.viewer.DVDInfoPanel;
+import java.util.Iterator;
+import tmcsim.cadsimulator.videocontrol.DVDStatusUpdate;
+import tmcsim.common.CADEnums;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class CADSimulatorModelTest extends TestCase implements Observer
+{
+
+    private CADSimulatorModel model;
+    private String currentTest;
+
+    public CADSimulatorModelTest(String testName)
+    {
+        super(testName);
+    }
+
+    public void setUp()
+    {
+        model = new CADSimulatorModel();
+        model.addObserver(this);
+    }
+
+    /**
+     * Test of connectClient method, of class CADSimulatorStatus.
+     */
+    public void testConnectClient()
+    {
+        currentTest = "connectClient";
+        model.connectClient();
+    }
+
+    /**
+     * Test of disconnectClient method, of class CADSimulatorStatus.
+     */
+    public void testDisconnectClient()
+    {
+        currentTest = "doNothing";
+        model.connectClient();
+        model.connectClient();
+        currentTest = "disconnectClient";
+        model.disconnectClient();
+    }
+
+    /**
+     * Test of setSimManagerStatus method, of class CADSimulatorStatus.
+     */
+    public void testSetSimManagerStatus()
+    {
+        currentTest = "setSimManagerStatus";
+        model.setSimManagerStatus(false);
+    }
+
+    /**
+     * Test of setTime method, of class CADSimulatorStatus.
+     */
+    public void testSetTime()
+    {
+        currentTest = "setTime";
+        long seconds = 0L;
+        model.setTime(seconds);
+    }
+
+    /**
+     * Test of setScriptStatus method, of class CADSimulatorStatus.
+     */
+    public void testSetScriptStatus()
+    {
+        currentTest = "setScriptStatus";
+        CADEnums.SCRIPT_STATUS newStatus = CADEnums.SCRIPT_STATUS.SCRIPT_RUNNING;
+        model.setScriptStatus(newStatus);
+    }
+
+    public void testSetParamicsStatus()
+    {
+        currentTest = "setParamicsStatus";
+        CADEnums.PARAMICS_STATUS newStatus = CADEnums.PARAMICS_STATUS.CONNECTED;
+        model.setParamicsStatus(newStatus);
+    }
+
+    public void testLoadNetwork()
+    {
+        currentTest = "loadNetwork";
+        model.setParamicsNetworkLoaded("ABC");
+    }
+    
+    public void testDVDupdate()
+    {
+        currentTest = "dvdUpdate";
+        model.updateDVDStatus(new DVDStatusUpdate("1", false, new Throwable()));
+    }
+
+    @Override
+    public void update(Observable obs, Object obj)
+    {
+        CADSimulatorStatus stat = null;
+        CADMediaStatus ms = null;
+        if (obs instanceof CADSimulatorStatus)
+        {
+            stat = (CADSimulatorStatus) obs;
+        }
+        if (obs instanceof CADMediaStatus)
+        {
+            ms = (CADMediaStatus) obs;
+        }
+        System.out.println(currentTest);
+        switch (currentTest)
+        {
+            case "connectClient":
+                assertEquals(1, stat.getNumClients());
+                break;
+            case "disconnectClient":
+                assertEquals(1, stat.getNumClients());
+                break;
+            case "setSimManagerStatus":
+                assertFalse(stat.isSimManagerConnected());
+                break;
+            case "setTime":
+                assertEquals("0:00:00", stat.getCurrentTime());
+                break;
+            case "setScriptStatus":
+                CADEnums.SCRIPT_STATUS expResult = CADEnums.SCRIPT_STATUS.SCRIPT_RUNNING;
+                CADEnums.SCRIPT_STATUS result = stat.getScriptStatus();
+                assertEquals(expResult, result);
+                break;
+            case "setParamicsStatus":
+                CADEnums.PARAMICS_STATUS expect = CADEnums.PARAMICS_STATUS.CONNECTED;
+                assertEquals(expect, stat.getParamicsStatus());
+                break;
+            case "loadNetwork":
+                String id = stat.getParmicsNetworkID();
+                assertEquals("ABC", id);
+                break;
+            case "dvdUpdate":
+                Iterator<DVDInfoPanel> iter = ms.getDVDlist();
+                assertTrue(iter.hasNext());
+            case "doNothing":
+                break;
+        }
+    }
+}
Index: /branches/trunk/test/tmcsim/cadsimulator/viewer/model/CADSimulatorStatusTest.java
===================================================================
--- /branches/trunk/test/tmcsim/cadsimulator/viewer/model/CADSimulatorStatusTest.java	(revision 82)
+++ /branches/trunk/test/tmcsim/cadsimulator/viewer/model/CADSimulatorStatusTest.java	(revision 82)
@@ -0,0 +1,108 @@
+package tmcsim.cadsimulator.viewer.model;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import static junit.framework.Assert.assertEquals;
+import junit.framework.TestCase;
+import tmcsim.common.CADEnums;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class CADSimulatorStatusTest extends TestCase
+{
+
+    CADSimulatorStatus stat;
+
+    public CADSimulatorStatusTest(String testName)
+    {
+        super(testName);
+    }
+
+    public void setUp()
+    {
+        stat = new CADSimulatorStatus();
+    }
+
+    /**
+     * Test of connectClient method, of class CADSimulatorStatus.
+     */
+    public void testConnectClient()
+    {
+        System.out.println("connectClient");
+        stat.connectClient();
+        assertEquals(1, stat.getNumClients());
+    }
+
+    /**
+     * Test of disconnectClient method, of class CADSimulatorStatus.
+     */
+    public void testDisconnectClient()
+    {
+        System.out.println("disconnectClient");
+        stat.connectClient();
+        stat.connectClient();
+        stat.disconnectClient();
+        assertEquals(1, stat.getNumClients());
+    }
+
+    /**
+     * Test of getNumClients method, of class CADSimulatorStatus.
+     */
+    public void testGetNumClients()
+    {
+        System.out.println("getNumClients");
+        int expResult = 0;
+        int result = stat.getNumClients();
+        assertEquals(expResult, result);
+    }
+
+    /**
+     * Test of setSimManagerStatus method, of class CADSimulatorStatus.
+     */
+    public void testSetSimManagerStatus()
+    {
+        System.out.println("setSimManagerStatus");
+        stat.setSimManagerStatus(false);
+        assertFalse(stat.isSimManagerConnected());
+    }
+
+    /**
+     * Test of setTime method, of class CADSimulatorStatus.
+     */
+    public void testSetTime()
+    {
+        System.out.println("setTime");
+        long seconds = 1L;
+        stat.setTime(seconds);
+        String result = stat.getCurrentTime();
+        assertEquals("0:00:01", result);
+    }
+
+    /**
+     * Test of setScriptStatus method, of class CADSimulatorStatus.
+     */
+    public void testSetScriptStatus()
+    {
+        System.out.println("setScriptStatus");
+        CADEnums.SCRIPT_STATUS newStatus = CADEnums.SCRIPT_STATUS.NO_SCRIPT;
+        stat.setScriptStatus(newStatus);
+        CADEnums.SCRIPT_STATUS expResult = CADEnums.SCRIPT_STATUS.NO_SCRIPT;
+        CADEnums.SCRIPT_STATUS result = stat.getScriptStatus();
+        assertEquals(expResult, result);
+        newStatus = CADEnums.SCRIPT_STATUS.ATMS_SYNCHRONIZATION;
+        stat.setScriptStatus(newStatus);
+        assertEquals(CADEnums.SCRIPT_STATUS.ATMS_SYNCHRONIZATION, stat.getScriptStatus());
+        newStatus = CADEnums.SCRIPT_STATUS.SCRIPT_PAUSED_STARTED;
+        stat.setScriptStatus(newStatus);
+        assertEquals(CADEnums.SCRIPT_STATUS.SCRIPT_PAUSED_STARTED, stat.getScriptStatus());
+    }
+
+    public void testInfoMsg()
+    {
+        Logger cadSimLogger = Logger.getLogger("tmcsim.cadsimulator");
+        cadSimLogger.logp(Level.INFO, "", "", "Sample Info Message.");
+        assertEquals(". = Sample Info Message.", stat.getInfoMessages());
+    }
+}
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/build.xml
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/build.xml	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/build.xml	(revision 82)
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="TMCSim" default="default" basedir=".">
+    <description>Builds, tests, and runs the project TMCSim.</description>
+    <import file="nbproject/build-impl.xml"/>
+    <property name="workdir" value="../../.."/>
+<!--        SYSTEM TEST SECTION      -->
+    <target description="CAD Simulator" name="cadsimulator">
+    <antcall target="run-single">
+       <param name="javac.includes" value="tmcsim/cadsimulator/CADSimulator.java"/>
+       <param name="run.class" value="tmcsim/cadsimulator/CADSimulator"/>
+    </antcall>
+    </target>
+    <target description="Visible System Test of CADSimulator"  name="VisibleSystemTest">
+    <antcall target="test-single">
+       <param name="javac.includes" value="tmcsim/cadsimulator/VisibleSystemTest.java"/>
+       <param name="test.includes" value="tmcsim/cadsimulator/VisibleSystemTest.java"/>
+    </antcall>
+    </target>
+    <target description="CAD Simulator - console" name="cadconsole">
+        <java jar="deploy/CADserver.jar"
+           fork="true">
+         <classpath>
+           <pathelement location="deploy/CADserver.jar"/>
+         </classpath>
+       </java>
+    </target>
+    <target description="CAD Simulator - GUI" name="cadgui">
+        <java jar="deploy/CADserver.jar"
+           fork="true"><jvmarg value="-version"/>
+         <classpath>
+           <pathelement location="deploy/CADserver.jar"/>
+         </classpath>
+       </java>
+    </target>
+    <target description="Run Paramics Communicator" name="pcomm">
+    <antcall target="run-single">
+       <param name="javac.includes" value="tmcsim/paramicscommunicator/PComm.java"/>
+       <param name="run.class" value="tmcsim/paramicscommunicator/PComm"/>
+    </antcall>
+    </target>
+    <target description="Run Simulation Manager" name="simmgr">
+    <antcall target="run-single">
+       <param name="javac.includes" value="tmcsim/simulationmanager/SimulationManager.java"/>
+       <param name="run.class" value="tmcsim/simulationmanager/SimulationManager"/>
+    </antcall>
+    </target>
+    <target description="Emulate Paramics Modeler" name="emulate">
+        <echo file="${workdir}/paramics_status.xml" append="false">
+            &lt;Paramics&gt; &lt;Network_Status&gt;WARMING&lt;/Network_Status&gt; &lt;Network_ID&gt;1&lt;/Network_ID&gt; &lt;/Paramics&gt;
+        </echo>
+        <sleep seconds="5"/>
+        <echo file="${workdir}/paramics_status.xml" append="false">
+            &lt;Paramics&gt; &lt;Network_Status&gt;LOADED&lt;/Network_Status&gt; &lt;Network_ID&gt;1&lt;/Network_ID&gt; &lt;/Paramics&gt;
+        </echo>
+    </target>
+
+<!--        STORE SUBVERSION BUILD STRING      -->
+<target name="-post-init" description="Sets the buildversion for the current build">
+    <exec outputproperty="svna.version" executable="svnversion">
+        <arg value="-c" />
+        <arg value="${workdir}" />
+        <redirector>
+            <outputfilterchain>
+                <tokenfilter>
+                    <replaceregex pattern="^[0-9]*:?" replace="" flags="g"/>
+                    <replaceregex pattern="M" replace="" flags="g"/>
+                </tokenfilter>
+            </outputfilterchain>
+        </redirector>
+    </exec>
+    <propertyfile file="${src.dir}/tmcsim/application.properties">
+        <entry key="Application.revision" value="${svna.version}" type="int" operation="="/>
+    </propertyfile>
+    <echo>Setting SVN version: ${svna.version}</echo>
+</target>
+<target name="-post-jar" description="Sets the buildversion for the current build">
+    <propertyfile file="${src.dir}/tmcsim/application.properties">
+        <entry key="Application.buildnumber" value="1" type="int" operation="+"/>
+    </propertyfile>
+</target>
+<!--
+                =================
+                LOC counter
+                =================
+-->
+<target description="Count Lines of Code in src directory." name="loc">
+        <java classname="textui.LOC"
+	      classpath="${workdir}/lib/JavaLOC.jar">
+               <arg line="-r -d ${workdir}/src"/>
+	</java>
+</target>
+<!--
+                =================
+                CHECKSTYLE SECTION
+                =================
+     -->
+<target description="Run checkstyle on src directory." name="checkstyle">
+<taskdef resource="checkstyletask.properties"
+         classpath="${workdir}/lib/customcheckstylechecks.jar;${workdir}/lib/checkstyle-all-4.4.jar"/>
+<checkstyle config="${workdir}/lib/jdstyle.xml" failOnViolation="true">
+            <!-- Specify includes and excludes -->
+            <fileset dir="${workdir}/src/tmcsim" includes="**/*.java"
+            />
+</checkstyle>
+</target>
+<!--
+                =================
+                ZIP for Web-CAT SECTION for CPE 305 assignments
+                =================
+Create a zip file of source to CADSimulator for submission to Web-CAT grader.
+-->
+<target name="webcat-zip" depends="jar">
+
+    <zip destfile="${workdir}/webcatsubmit.zip">
+        <fileset dir="${workdir}/src/">
+                 <include name="tmcsim/cadsimulator/viewer/**/*.java" />
+                 <include name="tmcsim/cadsimulator/viewer/model/**/*.java" />
+                 <include name="tmcsim/cadsimulator/viewer/actions/**/*.java" />
+                 <include name="tmcsim/cadsimulator/videocontrol/**/*.java" />
+                 <exclude name="tmcsim/paramics*/**"/>
+                 <exclude name="tmcsim/simulationmanager/**"/>
+                 <exclude name="tmcsim/cadsimulator/MP3Driver.java"/>
+        </fileset>
+        <!--
+        <fileset dir="${workdir}"  includes="scripts/Cardfile.xml"/>
+        -->
+        <fileset dir="${workdir}/test/">
+                 <include name="tmcsim/cadsimulator/viewer/CADSimulatorViewModelTest.java" />
+        </fileset>
+    </zip>
+</target>
+<!--
+                =================
+                PACKAGE JARS SECTION
+                =================
+-->
+<target description="Build separate jar files for each component of the TMC system."
+        name="package-jars" depends="jar">
+
+    <!--         *** Build a jar with everything ***            -->
+    <property name="deploy.jar.name" value="TMCSimAll"/>
+    <property name="deploy.dir" value="${workdir}/deploy"/>
+    <property name="deploy.jar" value="${deploy.dir}/${deploy.jar.name}.jar"/>
+
+    <echo message="Packaging ${application.title} into a single JAR at ${deploy.jar}"/>
+
+    <delete dir="${deploy.dir}"/>
+    <mkdir dir="${deploy.dir}"/>
+    <tstamp>
+        <format property="TODAY" pattern="yyyy.MM.dd HH:mm" />
+    </tstamp>
+    <jar destfile="${deploy.dir}/temp_final.jar" filesetmanifest="skip">
+        <zipgroupfileset dir="dist" includes="*.jar"/>
+        <!-- zipgroupfileset dir="dist/lib" includes="*.jar"/ -->
+        <zipgroupfileset dir="dist/lib" includes="xercesImpl.jar"/>
+
+        <manifest>
+            <attribute name="Main-Class" value="${main.class}"/>
+        </manifest>
+    </jar>
+
+    <zip destfile="${deploy.jar}">
+        <zipfileset src="${deploy.dir}/temp_final.jar"
+        excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
+    </zip>
+
+    <delete file="${deploy.dir}/temp_final.jar"/>
+
+    <!--                   *** Build CAD Server Only Jar ***         -->
+      <jar destfile="${deploy.dir}/CADserver.jar"
+       basedir="${build.dir}/classes"
+       includes="tmcsim/cadsimulator/**, tmcsim/common/**, tmcsim/interfaces/**,
+                 tmcsim/client/cadclientgui/**, tmcsim/cadmodels/**,
+                 tmcsim/application.properties"
+       excludes="**/Test.class">
+        <zipgroupfileset dir="dist/lib" includes="xercesImpl.jar"/>
+        <manifest>
+            <attribute name="Main-Class" value="tmcsim.cadsimulator.CADSimulator"/>
+        </manifest>
+      </jar>
+
+      <!--                   *** Build Sim Manager Only Jar ***         -->
+      <jar destfile="${deploy.dir}/SimManager.jar"
+       basedir="${build.dir}/classes"
+       includes="tmcsim/simulationmanager/**, tmcsim/common/**, tmcsim/cadmodels/**,
+            tmcsim/client/cadclientgui/**, tmcsim/interfaces/**"
+       excludes="**/Test.class">
+        <zipgroupfileset dir="dist/lib" includes="xercesImpl.jar"/>
+        <manifest>
+            <attribute name="Main-Class" value="tmcsim.simulationmanager.SimulationManager"/>
+        </manifest>
+      </jar>
+
+      <!--                   *** Build CAD Client Only Jar ***         -->
+      <jar destfile="${deploy.dir}/CADClient.jar"
+       basedir="${build.dir}/classes"
+       includes="tmcsim/client/**, tmcsim/common/**, tmcsim/interfaces/**,
+            tmcsim/cadmodels/**, tmcsim/simulationmanager/model/LogEntryCellRenderer.class">
+      <zipgroupfileset dir="dist/lib" includes="xercesImpl.jar"/>
+        <manifest>
+            <attribute name="Main-Class" value="tmcsim.client.CADClient"/>
+            <attribute name="Implementation-Version" value="${TODAY}"/>
+        </manifest>
+      </jar>
+      <!-- Remove the following line when we get CADClient to run
+      <delete file="${deploy.dir}/CADClient.jar"/>-->
+
+      <!--                   *** Build Clock Client Only Jar ***         -->
+      <jar destfile="${deploy.dir}/ClockClient.jar"
+       basedir="${build.dir}/classes"
+       includes="tmcsim/client/ClockClient*.class, tmcsim/client/ClockView.class,
+        tmcsim/interfaces/**, tmcsim/cadmodels/**, tmcsim/common/**, tmcsim/client/**">
+      <zipgroupfileset dir="dist/lib" includes="xercesImpl.jar"/>
+        <manifest>
+            <attribute name="Main-Class" value="tmcsim.client.ClockClient"/>
+            <attribute name="Implementation-Version" value="${TODAY}"/>
+        </manifest>
+      </jar>
+
+      <!--                   *** Build Paramics Communicator Only Jar ***         -->
+      <jar destfile="${deploy.dir}/ParamicsCommunicator.jar"
+       basedir="${build.dir}/classes"
+       includes="tmcsim/paramicscommunicator/**, tmcsim/common/**, tmcsim/interfaces/**,
+                 tmcsim/client/cadclientgui/**, tmcsim/cadmodels/**, tmcsim/paramicslog/**"
+       excludes="**/Test.class">
+        <zipgroupfileset dir="dist/lib" includes="xercesImpl.jar"/>
+        <manifest>
+            <attribute name="Main-Class" value="tmcsim.paramicscommunicator.ParamicsCommunicator"/>
+        </manifest>
+      </jar>
+</target>
+
+<target description="Build separate jar files for each component of the TMC system."
+        name="ZipForInstall" depends="package-jars">
+    <!-- Notes:    Create a zip file with jars and all external resources for distributing
+    to other machines.
+    Zip the Jar files.
+    Zip folders for config, images, audio, scripts.
+    Write .bat files and .bash files to launch each app.  Put these in root folder.
+    Zip it all up!
+    -->
+</target>
+
+    <!--
+
+    There exist several targets which are by default empty and which can be
+    used for execution of your tasks. These targets are usually executed
+    before and after some main targets. They are:
+
+      -pre-init:                 called before initialization of project properties
+      -post-init:                called after initialization of project properties
+      -pre-compile:              called before javac compilation
+      -post-compile:             called after javac compilation
+      -pre-compile-single:       called before javac compilation of single file
+      -post-compile-single:      called after javac compilation of single file
+      -pre-compile-test:         called before javac compilation of JUnit tests
+      -post-compile-test:        called after javac compilation of JUnit tests
+      -pre-compile-test-single:  called before javac compilation of single JUnit test
+      -post-compile-test-single: called after javac compilation of single JUunit test
+      -pre-jar:                  called before JAR building
+      -post-jar:                 called after JAR building
+      -post-clean:               called after cleaning build products
+
+    (Targets beginning with '-' are not intended to be called on their own.)
+
+    Example of inserting an obfuscator after compilation could look like this:
+
+        <target name="-post-compile">
+            <obfuscate>
+                <fileset dir="${build.classes.dir}"/>
+            </obfuscate>
+        </target>
+
+    For list of available properties check the imported
+    nbproject/build-impl.xml file.
+
+
+    Another way to customize the build is by overriding existing main targets.
+    The targets of interest are:
+
+      -init-macrodef-javac:     defines macro for javac compilation
+      -init-macrodef-junit:     defines macro for junit execution
+      -init-macrodef-debug:     defines macro for class debugging
+      -init-macrodef-java:      defines macro for class execution
+      -do-jar-with-manifest:    JAR building (if you are using a manifest)
+      -do-jar-without-manifest: JAR building (if you are not using a manifest)
+      run:                      execution of project
+      -javadoc-build:           Javadoc generation
+      test-report:              JUnit report generation
+
+    An example of overriding the target for project execution could look like this:
+
+        <target name="run" depends="TMCSim-impl.jar">
+            <exec dir="bin" executable="launcher.exe">
+                <arg file="${dist.jar}"/>
+            </exec>
+        </target>
+
+    Notice that the overridden target depends on the jar target and not only on
+    the compile target as the regular run target does. Again, for a list of available
+    properties which you can use, check the target you are overriding in the
+    nbproject/build-impl.xml file.
+
+    -->
+</project>
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/cadsimulator/package.html
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/cadsimulator/package.html	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/cadsimulator/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains the classes for the CAD Simulator
+  </body>
+</html>
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/common/package.html
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/common/package.html	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/common/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains classes for common objects within the CAD software.
+  </body>
+</html>
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/cadmodels/package.html
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/cadmodels/package.html	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/cadmodels/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains the model classes for the CAD Simulator.
+  </body>
+</html>
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/application.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/application.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/application.properties	(revision 82)
@@ -0,0 +1,5 @@
+#Fri, 06 Oct 2017 19:49:49 -0700
+
+Application.revision=0
+
+Application.buildnumber=50
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/client/package.html
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/client/package.html	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/client/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains the classes for the CAD Client.
+  </body>
+</html>
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/simulationmanager/package.html
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/simulationmanager/package.html	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/classes/tmcsim/simulationmanager/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains the classes for the Simulation Manager
+  </body>
+</html>
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/built-jar.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/built-jar.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/build/built-jar.properties	(revision 82)
@@ -0,0 +1,4 @@
+#Fri, 06 Oct 2017 19:49:49 -0700
+
+
+/Users/jtorres/tmcsimulator/branches/trunk/IDE_metadata/NetBeans/TMCSim=
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/dist/README.TXT
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/dist/README.TXT	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/dist/README.TXT	(revision 82)
@@ -0,0 +1,32 @@
+========================
+BUILD OUTPUT DESCRIPTION
+========================
+
+When you build an Java application project that has a main class, the IDE
+automatically copies all of the JAR
+files on the projects classpath to your projects dist/lib folder. The IDE
+also adds each of the JAR files to the Class-Path element in the application
+JAR files manifest file (MANIFEST.MF).
+
+To run the project from the command line, go to the dist folder and
+type the following:
+
+java -jar "TMCSim.jar" 
+
+To distribute this project, zip up the dist folder (including the lib folder)
+and distribute the ZIP file.
+
+Notes:
+
+* If two JAR files on the project classpath have the same name, only the first
+JAR file is copied to the lib folder.
+* Only JAR files are copied to the lib folder.
+If the classpath contains other types of files or folders, these files (folders)
+are not copied.
+* If a library on the projects classpath also has a Class-Path element
+specified in the manifest,the content of the Class-Path element has to be on
+the projects runtime path.
+* To set a main class in a standard Java project, right-click the project node
+in the Projects window and choose Properties. Then click Run and enter the
+class name in the Main Class field. Alternatively, you can manually type the
+class name in the manifest Main-Class element.
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/build-impl.xml
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/build-impl.xml	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/build-impl.xml	(revision 82)
@@ -0,0 +1,1413 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT  ***
+***         EDIT ../build.xml INSTEAD         ***
+
+For the purpose of easier reading the script
+is divided into following sections:
+
+  - initialization
+  - compilation
+  - jar
+  - execution
+  - debugging
+  - javadoc
+  - test compilation
+  - test execution
+  - test debugging
+  - applet
+  - cleanup
+
+        -->
+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="TMCSim-impl">
+    <fail message="Please build using Ant 1.8.0 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.8.0"/>
+            </not>
+        </condition>
+    </fail>
+    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
+    <!-- 
+                ======================
+                INITIALIZATION SECTION 
+                ======================
+            -->
+    <target name="-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init" name="-init-private">
+        <property file="nbproject/private/config.properties"/>
+        <property file="nbproject/private/configs/${config}.properties"/>
+        <property file="nbproject/private/private.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private" name="-init-user">
+        <property file="${user.properties.file}"/>
+        <!-- The two properties below are usually overridden -->
+        <!-- by the active platform. Just a fallback. -->
+        <property name="default.javac.source" value="1.4"/>
+        <property name="default.javac.target" value="1.4"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
+        <property file="nbproject/configs/${config}.properties"/>
+        <property file="nbproject/project.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
+        <property name="platform.java" value="${java.home}/bin/java"/>
+        <available file="${manifest.file}" property="manifest.available"/>
+        <condition property="splashscreen.available">
+            <and>
+                <not>
+                    <equals arg1="${application.splash}" arg2="" trim="true"/>
+                </not>
+                <available file="${application.splash}"/>
+            </and>
+        </condition>
+        <condition property="main.class.available">
+            <and>
+                <isset property="main.class"/>
+                <not>
+                    <equals arg1="${main.class}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="profile.available">
+            <and>
+                <isset property="javac.profile"/>
+                <length length="0" string="${javac.profile}" when="greater"/>
+                <matches pattern="1\.[89](\..*)?" string="${javac.source}"/>
+            </and>
+        </condition>
+        <condition property="do.archive">
+            <or>
+                <not>
+                    <istrue value="${jar.archive.disabled}"/>
+                </not>
+                <istrue value="${not.archive.disabled}"/>
+            </or>
+        </condition>
+        <condition property="do.mkdist">
+            <and>
+                <isset property="do.archive"/>
+                <isset property="libs.CopyLibs.classpath"/>
+                <not>
+                    <istrue value="${mkdist.disabled}"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="do.archive+manifest.available">
+            <and>
+                <isset property="manifest.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+main.class.available">
+            <and>
+                <isset property="main.class.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+splashscreen.available">
+            <and>
+                <isset property="splashscreen.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+profile.available">
+            <and>
+                <isset property="profile.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="have.tests">
+            <or>
+                <available file="${test.src.dir}"/>
+            </or>
+        </condition>
+        <condition property="have.sources">
+            <or>
+                <available file="${src.dir}"/>
+            </or>
+        </condition>
+        <condition property="netbeans.home+have.tests">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="have.tests"/>
+            </and>
+        </condition>
+        <condition property="no.javadoc.preview">
+            <and>
+                <isset property="javadoc.preview"/>
+                <isfalse value="${javadoc.preview}"/>
+            </and>
+        </condition>
+        <property name="run.jvmargs" value=""/>
+        <property name="run.jvmargs.ide" value=""/>
+        <property name="javac.compilerargs" value=""/>
+        <property name="work.dir" value="${basedir}"/>
+        <condition property="no.deps">
+            <and>
+                <istrue value="${no.dependencies}"/>
+            </and>
+        </condition>
+        <property name="javac.debug" value="true"/>
+        <property name="javadoc.preview" value="true"/>
+        <property name="application.args" value=""/>
+        <property name="source.encoding" value="${file.encoding}"/>
+        <property name="runtime.encoding" value="${source.encoding}"/>
+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+            <and>
+                <isset property="javadoc.encoding"/>
+                <not>
+                    <equals arg1="${javadoc.encoding}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>
+        <property name="includes" value="**"/>
+        <property name="excludes" value=""/>
+        <property name="do.depend" value="false"/>
+        <condition property="do.depend.true">
+            <istrue value="${do.depend}"/>
+        </condition>
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+            <and>
+                <isset property="endorsed.classpath"/>
+                <not>
+                    <equals arg1="${endorsed.classpath}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="" property="javac.profile.cmd.line.arg" value="-profile ${javac.profile}">
+            <isset property="profile.available"/>
+        </condition>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <property name="javac.fork" value="${jdkBug6558476}"/>
+        <property name="jar.index" value="false"/>
+        <property name="jar.index.metainf" value="${jar.index}"/>
+        <property name="copylibs.rebase" value="true"/>
+        <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
+        <condition property="junit.available">
+            <or>
+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>
+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
+            </or>
+        </condition>
+        <condition property="testng.available">
+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
+        </condition>
+        <condition property="junit+testng.available">
+            <and>
+                <istrue value="${junit.available}"/>
+                <istrue value="${testng.available}"/>
+            </and>
+        </condition>
+        <condition else="testng" property="testng.mode" value="mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+        <condition else="" property="testng.debug.mode" value="-mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+    </target>
+    <target name="-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
+        <fail unless="src.dir">Must set src.dir</fail>
+        <fail unless="test.src.dir">Must set test.src.dir</fail>
+        <fail unless="build.dir">Must set build.dir</fail>
+        <fail unless="dist.dir">Must set dist.dir</fail>
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+        <fail unless="dist.jar">Must set dist.jar</fail>
+    </target>
+    <target name="-init-macrodef-property">
+        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${@{value}}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <mkdir dir="@{apgeneratedsrcdir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.profile.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <compilerarg value="-processorpath"/>
+                    <compilerarg path="@{processorpath}:${empty.dir}"/>
+                    <compilerarg line="${ap.processors.internal}"/>
+                    <compilerarg line="${annotation.processing.processor.options}"/>
+                    <compilerarg value="-s"/>
+                    <compilerarg path="@{apgeneratedsrcdir}"/>
+                    <compilerarg line="${ap.proc.none.internal}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.profile.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <sequential>
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </depend>
+            </sequential>
+        </macrodef>
+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <sequential>
+                <fail unless="javac.includes">Must set javac.includes</fail>
+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
+                    <path>
+                        <filelist dir="@{destdir}" files="${javac.includes}"/>
+                    </path>
+                    <globmapper from="*.java" to="*.class"/>
+                </pathconvert>
+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
+                <delete>
+                    <files includesfile="${javac.includesfile.binary}"/>
+                </delete>
+                <delete>
+                    <fileset file="${javac.includesfile.binary}"/>
+                </delete>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-init">
+        <condition else="false" property="nb.junit.batch" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <not>
+                    <isset property="test.method"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="nb.junit.single" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <isset property="test.method"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-init-test-properties">
+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
+        <property name="test.binarytestincludes" value=""/>
+        <property name="test.binaryexcludes" value=""/>
+    </target>
+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
+    <target if="${testng.available}" name="-init-macrodef-testng">
+        <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
+                    <isset property="test.method"/>
+                </condition>
+                <union id="test.set">
+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
+                </union>
+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
+                <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="TMCSim" testname="TestNG tests" workingDir="${work.dir}">
+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
+                    <propertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </propertyset>
+                    <customize/>
+                </testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-test-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <echo>No tests executed.</echo>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
+        <macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <sequential>
+                <j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${run.jvmargs}"/>
+                        <jvmarg line="${run.jvmargs.ide}"/>
+                    </customize>
+                </j2seproject3:test-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:junit-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${testng.available}" name="-init-macrodef-testng-debug">
+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element name="customize2" optional="true"/>
+            <sequential>
+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
+                    <isset property="test.method"/>
+                </condition>
+                <condition else="-suitename TMCSim -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
+                    <matches pattern=".*\.xml" string="@{testClass}"/>
+                </condition>
+                <delete dir="${build.test.results.dir}" quiet="true"/>
+                <mkdir dir="${build.test.results.dir}"/>
+                <j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">
+                    <customize>
+                        <customize2/>
+                        <jvmarg value="-ea"/>
+                        <arg line="${testng.debug.mode}"/>
+                        <arg line="-d ${build.test.results.dir}"/>
+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>
+                        <arg line="${testng.cmd.args}"/>
+                    </customize>
+                </j2seproject3:debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element implicit="true" name="customize2" optional="true"/>
+            <sequential>
+                <j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2/>
+                </j2seproject3:testng-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${run.jvmargs}"/>
+                        <jvmarg line="${run.jvmargs.ide}"/>
+                    </customize>
+                </j2seproject3:test-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2>
+                        <syspropertyset>
+                            <propertyref prefix="test-sys-prop."/>
+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                        </syspropertyset>
+                    </customize2>
+                </j2seproject3:testng-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
+    <!--
+                pre NB7.2 profiling section; consider it deprecated
+            -->
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
+    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">
+        <macrodef name="resolve">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${env.@{value}}"/>
+            </sequential>
+        </macrodef>
+        <macrodef name="profile">
+            <attribute default="${main.class}" name="classname"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property environment="env"/>
+                <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
+                <java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="${profiler.info.jvmargs.agent}"/>
+                    <jvmarg line="${profiler.info.jvmargs}"/>
+                    <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+                    <arg line="${application.args}"/>
+                    <classpath>
+                        <path path="${run.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">
+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
+    </target>
+    <!--
+                end of pre NB7.2 profiling section
+            -->
+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${main.class}" name="name"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <attribute default="" name="stopclassname"/>
+            <sequential>
+                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </nbjpdastart>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${build.classes.dir}" name="dir"/>
+            <sequential>
+                <nbjpdareload>
+                    <fileset dir="@{dir}" includes="${fix.classes}">
+                        <include name="${fix.includes}*.class"/>
+                    </fileset>
+                </nbjpdareload>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-debug">
+        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-java">
+        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${run.classpath}" name="classpath"/>
+            <attribute default="jvm" name="jvm"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-copylibs">
+        <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${manifest.file}" name="manifest"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+                <pathconvert property="run.classpath.without.build.classes.dir">
+                    <path path="${run.classpath}"/>
+                    <map from="${build.classes.dir.resolved}" to=""/>
+                </pathconvert>
+                <pathconvert pathsep=" " property="jar.classpath">
+                    <path path="${run.classpath.without.build.classes.dir}"/>
+                    <chainedmapper>
+                        <flattenmapper/>
+                        <filtermapper>
+                            <replacestring from=" " to="%20"/>
+                        </filtermapper>
+                        <globmapper from="*" to="lib/*"/>
+                    </chainedmapper>
+                </pathconvert>
+                <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+                <copylibs compress="${jar.compress}" excludeFromCopy="${copylibs.excludes}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
+                    <fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
+                    <manifest>
+                        <attribute name="Class-Path" value="${jar.classpath}"/>
+                        <customize/>
+                    </manifest>
+                </copylibs>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-presetdef-jar">
+        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}">
+                <j2seproject1:fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
+            </jar>
+        </presetdef>
+    </target>
+    <target name="-init-ap-cmdline-properties">
+        <property name="annotation.processing.enabled" value="true"/>
+        <property name="annotation.processing.processors.list" value=""/>
+        <property name="annotation.processing.processor.options" value=""/>
+        <property name="annotation.processing.run.all.processors" value="true"/>
+        <property name="javac.processorpath" value="${javac.classpath}"/>
+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+        <condition property="ap.supported.internal" value="true">
+            <not>
+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+            <isfalse value="${annotation.processing.run.all.processors}"/>
+        </condition>
+        <condition else="" property="ap.proc.none.internal" value="-proc:none">
+            <isfalse value="${annotation.processing.enabled}"/>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+        <property name="ap.cmd.line.internal" value=""/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
+    <!--
+                ===================
+                COMPILATION SECTION
+                ===================
+            -->
+    <target name="-deps-jar-init" unless="built-jar.properties">
+        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>
+        <delete file="${built-jar.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
+        <echo level="warn" message="Cycle detected: TMCSim was already built"/>
+    </target>
+    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-jar.properties}" verbose="false"/>
+        <property file="${built-jar.properties}" prefix="already.built.jar."/>
+        <antcall target="-warn-already-built-jar"/>
+        <propertyfile file="${built-jar.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+    </target>
+    <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
+    <target depends="init" name="-check-automatic-build">
+        <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
+    </target>
+    <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
+        <antcall target="clean"/>
+    </target>
+    <target depends="init,deps-jar" name="-pre-pre-compile">
+        <mkdir dir="${build.classes.dir}"/>
+    </target>
+    <target name="-pre-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-depend">
+        <pathconvert property="build.generated.subdirs">
+            <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="*"/>
+            </dirset>
+        </pathconvert>
+        <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
+        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target if="has.persistence.xml" name="-copy-persistence-xml">
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy todir="${build.classes.dir}/META-INF">
+            <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>
+        </copy>
+    </target>
+    <target name="-post-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
+    <target name="-pre-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <j2seproject3:force-recompile/>
+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>
+    </target>
+    <target name="-post-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
+    <!--
+                ====================
+                JAR BUILDING SECTION
+                ====================
+            -->
+    <target depends="init" name="-pre-pre-jar">
+        <dirname file="${dist.jar}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+    </target>
+    <target name="-pre-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init" if="do.archive" name="-do-jar-create-manifest" unless="manifest.available">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <touch file="${tmp.manifest.file}" verbose="false"/>
+    </target>
+    <target depends="init" if="do.archive+manifest.available" name="-do-jar-copy-manifest">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>
+    </target>
+    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+main.class.available" name="-do-jar-set-mainclass">
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="Main-Class" value="${main.class}"/>
+        </manifest>
+    </target>
+    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+profile.available" name="-do-jar-set-profile">
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="Profile" value="${javac.profile}"/>
+        </manifest>
+    </target>
+    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-set-splashscreen">
+        <basename file="${application.splash}" property="splashscreen.basename"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
+        </manifest>
+    </target>
+    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.mkdist" name="-do-jar-copylibs">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+        <echo level="info">To run this application from the command line without Ant, try:</echo>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
+        <j2seproject1:jar manifest="${tmp.manifest.file}"/>
+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <pathconvert property="run.classpath.with.dist.jar">
+            <path path="${run.classpath}"/>
+            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
+        </pathconvert>
+        <condition else="" property="jar.usage.message" value="To run this application from the command line without Ant, try:${line.separator}${platform.java} -cp ${run.classpath.with.dist.jar} ${main.class}">
+            <isset property="main.class.available"/>
+        </condition>
+        <condition else="debug" property="jar.usage.level" value="info">
+            <isset property="main.class.available"/>
+        </condition>
+        <echo level="${jar.usage.level}" message="${jar.usage.message}"/>
+    </target>
+    <target depends="-do-jar-copylibs" if="do.archive" name="-do-jar-delete-manifest">
+        <delete>
+            <fileset file="${tmp.manifest.file}"/>
+        </delete>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-jar,-do-jar-delete-manifest" name="-do-jar-without-libraries"/>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-copylibs,-do-jar-delete-manifest" name="-do-jar-with-libraries"/>
+    <target name="-post-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-jar,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar" name="-do-jar"/>
+    <target depends="init,compile,-pre-jar,-do-jar,-post-jar" description="Build JAR." name="jar"/>
+    <!--
+                =================
+                EXECUTION SECTION
+                =================
+            -->
+    <target depends="init,compile" description="Run a main class." name="run">
+        <j2seproject1:java>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <target name="-do-not-recompile">
+        <property name="javac.includes.binary" value=""/>
+    </target>
+    <target depends="init,compile-single" name="run-single">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}"/>
+    </target>
+    <target depends="init,compile-test-single" name="run-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+    </target>
+    <!--
+                =================
+                DEBUGGING SECTION
+                =================
+            -->
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+        <j2seproject1:nbjpdastart name="${debug.class}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+    </target>
+    <target depends="init,compile" name="-debug-start-debuggee">
+        <j2seproject3:debug>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
+    </target>
+    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+    <target depends="init" name="-pre-debug-fix">
+        <fail unless="fix.includes">Must set fix.includes</fail>
+        <property name="javac.includes" value="${fix.includes}.java"/>
+    </target>
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+        <j2seproject1:nbjpdareload/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+    <!--
+                =================
+                PROFILING SECTION
+                =================
+            -->
+    <!--
+                pre NB7.2 profiler integration
+            -->
+    <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile/>
+    </target>
+    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">
+        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="${profile.class}"/>
+    </target>
+    <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </profile>
+    </target>
+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg line="${profiler.info.jvmargs}"/>
+            <test name="${profile.class}"/>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+            <syspropertyset>
+                <propertyref prefix="test-sys-prop."/>
+                <mapper from="test-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+            <formatter type="brief" usefile="false"/>
+            <formatter type="xml"/>
+        </junit>
+    </target>
+    <!--
+                end of pre NB72 profiling section
+            -->
+    <target if="netbeans.home" name="-profile-check">
+        <condition property="profiler.configured">
+            <or>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+            </or>
+        </condition>
+    </target>
+    <target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
+        <startprofiler/>
+        <antcall target="run"/>
+    </target>
+    <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcall target="run-single"/>
+    </target>
+    <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>
+    <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <startprofiler/>
+        <antcall target="test-single"/>
+    </target>
+    <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcal target="run-test-with-main"/>
+    </target>
+    <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <startprofiler/>
+        <antcall target="run-applet"/>
+    </target>
+    <!--
+                ===============
+                JAVADOC SECTION
+                ===============
+            -->
+    <target depends="init" if="have.sources" name="-javadoc-build">
+        <mkdir dir="${dist.javadoc.dir}"/>
+        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">
+            <and>
+                <isset property="endorsed.classpath.cmd.line.arg"/>
+                <not>
+                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <condition else="" property="bug5101868workaround" value="*.java">
+            <matches pattern="1\.[56](\..*)?" string="${java.version}"/>
+        </condition>
+        <javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+            <classpath>
+                <path path="${javac.classpath}"/>
+            </classpath>
+            <fileset dir="${src.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/*.java"/>
+                <exclude name="*.java"/>
+            </fileset>
+            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
+        </javadoc>
+        <copy todir="${dist.javadoc.dir}">
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/doc-files/**"/>
+            </fileset>
+        </copy>
+    </target>
+    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+    </target>
+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
+    <!--
+                =========================
+                TEST COMPILATION SECTION
+                =========================
+            -->
+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+        <mkdir dir="${build.test.classes.dir}"/>
+    </target>
+    <target name="-pre-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-test-depend">
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+    <target name="-pre-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+    <!--
+                =======================
+                TEST EXECUTION SECTION
+                =======================
+            -->
+    <target depends="init" if="have.tests" name="-pre-test-run">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
+        <j2seproject3:test includes="${includes}" testincludes="**/*Test.java"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init" if="have.tests" name="test-report"/>
+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+    <target depends="init" if="have.tests" name="-pre-test-run-single">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
+    <!--
+                =======================
+                TEST DEBUGGING SECTION
+                =======================
+            -->
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+    <!--
+                =========================
+                APPLET EXECUTION SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" name="run-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject1:java classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <!--
+                =========================
+                APPLET DEBUGGING  SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject3:debug classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
+    <!--
+                ===============
+                CLEANUP SECTION
+                ===============
+            -->
+    <target name="-deps-clean-init" unless="built-clean.properties">
+        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>
+        <delete file="${built-clean.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
+        <echo level="warn" message="Cycle detected: TMCSim was already built"/>
+    </target>
+    <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-clean.properties}" verbose="false"/>
+        <property file="${built-clean.properties}" prefix="already.built.clean."/>
+        <antcall target="-warn-already-built-clean"/>
+        <propertyfile file="${built-clean.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+    </target>
+    <target depends="init" name="-do-clean">
+        <delete dir="${build.dir}"/>
+        <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>
+    </target>
+    <target name="-post-clean">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
+    <target name="-check-call-dep">
+        <property file="${call.built.properties}" prefix="already.built."/>
+        <condition property="should.call.dep">
+            <and>
+                <not>
+                    <isset property="already.built.${call.subproject}"/>
+                </not>
+                <available file="${call.script}"/>
+            </and>
+        </condition>
+    </target>
+    <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">
+        <ant antfile="${call.script}" inheritall="false" target="${call.target}">
+            <propertyset>
+                <propertyref prefix="transfer."/>
+                <mapper from="transfer.*" to="*" type="glob"/>
+            </propertyset>
+        </ant>
+    </target>
+</project>
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/project.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/project.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/project.properties	(revision 82)
@@ -0,0 +1,88 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=TMCSim
+application.vendor=jdalbey
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+    ${run.classpath}
+debug.test.classpath=\
+    ${run.test.classpath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/TMCSim.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+file.reference.commons-lang-2.4.jar=../../../lib/commons-lang-2.4.jar
+file.reference.jaco-mp3-player-0.9.3.jar=../../../lib/jaco-mp3-player-0.9.3.jar
+file.reference.mockito-1.10.19.jar=../../../lib/mockito-1.10.19.jar
+file.reference.tmc-simulator-src=../../../src
+file.reference.tmc-simulator-test=../../../test
+file.reference.uispec4j-jdk17.jar=../../../lib/uispec4j-jdk17.jar
+file.reference.xercesImpl.jar=../../../lib/xercesImpl.jar
+includes=**
+jar.compress=false
+javac.classpath=\
+    ${file.reference.uispec4j-jdk17.jar}:\
+    ${file.reference.xercesImpl.jar}:\
+    ${file.reference.jaco-mp3-player-0.9.3.jar}:\
+    ${file.reference.mockito-1.10.19.jar}:\
+    ${file.reference.commons-lang-2.4.jar}:\
+    ${libs.junit_4.classpath}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=1.7
+javac.target=1.7
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}:\
+    ${libs.junit.classpath}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=true
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=true
+javadoc.windowtitle=
+main.class=tmcsim.cadsimulator.CADSimulator
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+platform.active=default_platform
+run.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project.
+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
+# To set system properties for unit tests define test-sys-prop.name=value:
+run.jvmargs=-DCONFIG_DIR=config/testConfig
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=${file.reference.tmc-simulator-src}
+test.src.dir=${file.reference.tmc-simulator-test}
+work.dir=../../..
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/project.xml
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/project.xml	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/project.xml	(revision 82)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.java.j2seproject</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
+            <name>TMCSim</name>
+            <source-roots>
+                <root id="src.dir"/>
+            </source-roots>
+            <test-roots>
+                <root id="test.src.dir"/>
+            </test-roots>
+        </data>
+    </configuration>
+</project>
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/genfiles.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/genfiles.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/genfiles.properties	(revision 82)
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=6c7221c6
+build.xml.script.CRC32=dd7f3b15
+build.xml.stylesheet.CRC32=28e38971@1.56.1.46
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=6c7221c6
+nbproject/build-impl.xml.script.CRC32=5cb245d6
+nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.2.48
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/CADClient.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/CADClient.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/CADClient.properties	(revision 82)
@@ -0,0 +1,1 @@
+main.class=tmcsim.client.CADClient
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/Paramics_Sim.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/Paramics_Sim.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/Paramics_Sim.properties	(revision 82)
@@ -0,0 +1,3 @@
+$label=Paramics Sim
+main.class=paramsim.paramicssimulator.ParamicsSimulator
+run.jvmargs=-DPARAMICS_SIM_PROPERTIES=config/paramics_simulator_config.properties
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/ParamicsComm.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/ParamicsComm.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/ParamicsComm.properties	(revision 82)
@@ -0,0 +1,2 @@
+main.class=tmcsim.paramicscommunicator.ParamicsCommunicator
+run.jvmargs=-DPARAMICS_LOG_PROPERTIES=config/paramics_communicator_logging.properties
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/Sim_Mgr.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/Sim_Mgr.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/Sim_Mgr.properties	(revision 82)
@@ -0,0 +1,3 @@
+$label=Sim Mgr
+main.class=tmcsim.simulationmanager.SimulationManager
+run.jvmargs=-DSIM_MGR_PROPERTIES=config/sim_manager_config.properties
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/ATMSDriver.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/ATMSDriver.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/ATMSDriver.properties	(revision 82)
@@ -0,0 +1,2 @@
+main.class=atmsdriver.ATMSDriver
+run.jvmargs=-DATMSDRIVER_PROPERTIES=config/atms_driver_config.properties
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/Console.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/Console.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/configs/Console.properties	(revision 82)
@@ -0,0 +1,1 @@
+run.jvmargs=-DCAD_SIM_PROPERTIES=config/cad_simulator_consoletest_config.properties
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/private/private.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/private/private.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/private/private.properties	(revision 82)
@@ -0,0 +1,7 @@
+compile.on.save=false
+do.depend=false
+do.jar=true
+javac.debug=true
+javadoc.preview=true
+user.properties.file=/Users/jtorres/Library/Application Support/NetBeans/8.0.2/build.properties
+work.dir=../../..
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/private/private.xml
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/private/private.xml	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/private/private.xml	(revision 82)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
+    <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
+    <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
+        <group/>
+    </open-files>
+</project-private>
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/private/config.properties
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/private/config.properties	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/nbproject/private/config.properties	(revision 82)
@@ -0,0 +1,1 @@
+config=ATMSDriver
Index: /branches/trunk/IDE_metadata/NetBeans/TMCSim/manifest.mf
===================================================================
--- /branches/trunk/IDE_metadata/NetBeans/TMCSim/manifest.mf	(revision 82)
+++ /branches/trunk/IDE_metadata/NetBeans/TMCSim/manifest.mf	(revision 82)
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
Index: /branches/trunk/IDE_metadata/Eclipse/build.xml
===================================================================
--- /branches/trunk/IDE_metadata/Eclipse/build.xml	(revision 82)
+++ /branches/trunk/IDE_metadata/Eclipse/build.xml	(revision 82)
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="TMCSim" default="package-jars" basedir=".">
+    <description>Builds, tests, and runs the project TMCSim.</description>
+    <property name="workdir" value="../.."/>
+<!--        STORE SUBVERSION BUILD STRING      -->
+<!-- Store the Subversion version string every time you do clean/build. -->
+<target name="-pre-compile">
+  <exec executable="svnversion" osfamily="unix"
+    output="${workdir}/config/svn-version.txt"/>
+    <echo file="${workdir}/config/svn-version.txt" append="true">
+        # Do not edit. This file is autogenerated by the Ant build script #
+    </echo>
+</target>
+<!--
+                =================
+                LOC counter 
+                =================
+-->
+<target description="Count Lines of Code in src directory." name="loc">
+        <java classname="textui.LOC"
+        classpath="${workdir}/lib/JavaLOC.jar">
+               <arg line="-r -d ${workdir}/src"/>
+  </java>    
+</target>    
+<!--
+                =================
+                CHECKSTYLE SECTION
+                =================
+     -->
+<target description="Run checkstyle on src directory." name="checkstyle">
+<taskdef resource="checkstyletask.properties"
+         classpath="${workdir}/lib/customcheckstylechecks.jar;${workdir}/lib/checkstyle-all-4.4.jar"/>
+<checkstyle config="${workdir}/lib/jdstyle.xml" failOnViolation="true">
+            <!-- Specify includes and excludes -->
+            <fileset dir="${workdir}/src/tmcsim" includes="**/*.java"
+            />
+</checkstyle>
+</target>     
+   
+<!--
+                =================
+                PACKAGE JARS SECTION
+                =================
+-->
+<target description="Build separate jar files for each component of the TMC system." 
+        name="package-jars">
+
+    <!--         *** Build a jar with everything ***            -->
+    <property name="deploy.jar.name" value="TMCSimAll"/>
+    <property name="deploy.dir" value="deploy"/>
+    <property name="deploy.jar" value="${deploy.dir}/${deploy.jar.name}.jar"/>
+    <property name="build.dir" value="../../"/>
+
+
+
+    <delete dir="${deploy.dir}"/>
+    <mkdir dir="${deploy.dir}"/>
+
+    
+    <!--                   *** Build CAD Server Only Jar ***         -->
+      <jar destfile="${deploy.dir}/CADserver.jar"
+       basedir="${build.dir}/bin"
+       includes="tmcsim/cadsimulator/**, tmcsim/common/**, tmcsim/interfaces/**,
+                 tmcsim/client/cadclientgui/**, tmcsim/cadmodels/**"
+       excludes="**/Test.class">
+        <zipgroupfileset dir="${workdir}/lib" includes="xercesImpl.jar"/>
+        <manifest>
+            <attribute name="Main-Class" value="tmcsim.cadsimulator.CADSimulator"/>
+        </manifest>
+      </jar>
+
+      <!--                   *** Build Sim Manager Only Jar ***         -->
+      <jar destfile="${deploy.dir}/SimManager.jar"
+       basedir="${build.dir}/bin"
+       includes="tmcsim/simulationmanager/**, tmcsim/common/**, tmcsim/cadmodels/**,
+            tmcsim/client/cadclientgui/**, tmcsim/interfaces/**"
+       excludes="**/Test.class">
+        <zipgroupfileset dir="${workdir}/lib" includes="xercesImpl.jar"/>
+        <manifest>
+            <attribute name="Main-Class" value="tmcsim.simulationmanager.SimulationManager"/>
+        </manifest>
+      </jar>
+
+      <!--                   *** Build CAD Client Only Jar ***         -->
+      <jar destfile="${deploy.dir}/CADClient.jar"
+       basedir="${build.dir}/bin"
+       includes="tmcsim/client/**, tmcsim/common/**, tmcsim/interfaces/**, 
+            tmcsim/cadmodels/**">
+        <zipgroupfileset dir="${workdir}/lib" includes="xercesImpl.jar"/>
+        <manifest>
+            <attribute name="Main-Class" value="tmcsim.client.CADClient"/>
+        </manifest>
+      </jar>
+      <!-- Remove the following line when we get CADClient to run 
+      <delete file="${deploy.dir}/CADClient.jar"/>-->
+      
+      <!--                   *** Build Paramics Communicator Only Jar ***         -->
+      <jar destfile="${deploy.dir}/ParamicsCommunicator.jar"
+       basedir="${build.dir}/bin"
+       includes="tmcsim/paramicscommunicator/**, tmcsim/common/**,
+                 tmcsim/paramicslog/**"
+       excludes="**/Test.class">
+        <zipgroupfileset dir="${workdir}/lib" includes="xercesImpl.jar"/>
+        <manifest>
+            <attribute name="Main-Class" value="tmcsim.paramicscommunicator.ParamicsCommunicator"/>
+        </manifest>
+      </jar>
+</target>
+    
+</project>
Index: /branches/trunk/paramics_status.log
===================================================================
--- /branches/trunk/paramics_status.log	(revision 82)
+++ /branches/trunk/paramics_status.log	(revision 82)
@@ -0,0 +1,25 @@
+<Paramics>
+   <Network_Status>LOADING</Network_Status>
+   <Network_ID>1</Network_ID>
+</Paramics>
+
+<Paramics>
+   <Network_Status>WARMING</Network_Status>
+   <Network_ID>1</Network_ID>
+</Paramics>
+
+<Paramics>
+   <Network_Status>LOADED</Network_Status>
+   <Network_ID>1</Network_ID>
+</Paramics>
+
+<Paramics>
+   <Network_Status>WARMING</Network_Status>
+   <Network_ID>1</Network_ID>
+</Paramics>
+
+<Paramics>
+   <Network_Status>LOADED</Network_Status>
+   <Network_ID>1</Network_ID>
+</Paramics>
+
Index: /branches/trunk/config/camera_control.txt
===================================================================
--- /branches/trunk/config/camera_control.txt	(revision 82)
+++ /branches/trunk/config/camera_control.txt	(revision 82)
@@ -0,0 +1,42 @@
+ID	Route	Direction	Postmile	link_NE		link_SW		Location
+89	5	NB		17.05		83:137	 	110:93          South of Alicia		            
+94	5	NB		17.47		160:162 	133:132         Alicia Pkwy		
+95	5	NB		18.69		223:236 	275:277         El Toro			    
+97	5	NB		19.5		296:297 	289:288         Ave. Carlota		
+34	5	NB		19.95		342:343 	366:367         Bake Parkway		
+35	5	SB		21.37		474:476 	495:496         405 Enterprise		
+98	5	NB		22.28		486:540 	487:488         Alton Pkwy		
+100	5	NB		22.82		587:588 	605:604         Barranca Pkwy		
+219	5	NB		23.61		708:715 	750:751         N of 133		
+101	5	NB		24.01		724:725 	736:738         Sand Canyon		
+99	5	SB		24.99		774:775 	806:807         Jeffrey P & R		
+102	5	NB		25.11		786:777 	820:810         Jeffrey			
+103	5	NB		25.85		791:792 	825:826         Yale			
+195	5	NB		26.11		828:829 	844:825         N of Yale		
+104	5	NB		26.61		893:894 	873:874         Culver			
+105	5	NB		27.61		913:912 	899:900         Jamboree		
+106	5	NB		28.01		919:920 	921:922         Tustin Ranch		
+197	5	NB		28.85		982:983 	987:985         S of Redhill		
+107	5	NB		29.41		1010:1013 	1016:1011       S/O Newport		
+18	5	NB		30.26		1103:1104 	1089:1088       55	                
+17	5	NB		31.09		1112:1111 	1095:1096       4th	                
+16	5	SB		31.76		1150:1154 	1184:1185       Grand	                
+29	5	SB		32.51		1275:1276 	1268:1269       17th	                
+24	55	SB		6.11		1678:1679 	1663:1664       405	                        
+23	55	NB		7.11		1582:1581 	1579:1611       MacArthur	                
+22	55	NB		8.51		1550:1549 	1547:1548       Warner	                        
+21	55	NB		9.41		1536:1535 	1530:1531       Edinger	                        
+20	55	NB		10.11		1379:1380 	1355:1356       McFadden	                
+19	55	NB		10.98		1390:1445 	1418:1422       4th	                        
+193	405	NB		0.72		2103:2104 	2138:527        Irvine Ctr Drive	    
+194	405	SB		0.72		2103:2104	2138:527        Irvine Ctr Drive	    
+171	405	SB		1.97		2263:2285 	2238:2237       Laguna Canyon                   
+196	405	NB		1.97		2263:2285 	2238:2237       Laguna Canyon                   
+172	405	NB		2.65		2331:2330 	2318:2317       Sand Canyon                     
+173	405	SB		2.65		2331:2330 	2318:2317       Sand Canyon                     
+77	405	NB		3.92		2436:2435 	2427:2428       Jeffrey/SB                      
+28	405	NB		3.95		2436:2435 	2427:2428       Jeffrey                         
+27	405	SB		5.62		2342:2343 	2371:2372       Culver                          
+26	405	SB		6.92		2191:2192 	2098:2186       Jamboree                        
+25	405	SB		7.81		2074:2071 	2052:2059       MacArthur                       
+141	405	NB		9.52		1725:1726 	1900:1918       Bristol
Index: /branches/trunk/config/cad_simulator_config.properties
===================================================================
--- /branches/trunk/config/cad_simulator_config.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+AudioFileLocation      = audio/
+#UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer
+UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer
+ParamicsProperties     = config/cad_simulator_paramics_config.properties
+ATMSProperties         = config/cad_simulator_atms_config.properties
+MediaProperties        = config/cad_simulator_media_config.properties
Index: /branches/trunk/config/cadUsers.xml
===================================================================
--- /branches/trunk/config/cadUsers.xml	(revision 82)
+++ /branches/trunk/config/cadUsers.xml	(revision 82)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<CAD_USERS>
+	<USER>
+		<ID>A12345</ID>
+		<PERMISSION_LEVEL>CHP</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A11111</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A22222</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A33333</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A44444</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A55555</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+</CAD_USERS>
Index: /branches/trunk/config/unixConfig/cad_simulator_smoketest_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/cad_simulator_smoketest_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/cad_simulator_smoketest_config.properties	(revision 82)
@@ -0,0 +1,8 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/unixConfig/cmsdiversions.xml
+AudioFileLocation      = audio/
+ParamicsProperties     = config/unixConfig/cad_simulator_paramics_config.properties
+ATMSProperties         = config/unixConfig/cad_simulator_atms_config.properties
+MediaProperties        = config/unixConfig/cad_simulator_media_config.properties
Index: /branches/trunk/config/unixConfig/cad_simulator_media_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/cad_simulator_media_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/cad_simulator_media_config.properties	(revision 82)
@@ -0,0 +1,2 @@
+#DVDPlayerXML           = config/dvdplayers.xml
+StillImagesXML         = config/unixConfig/stillimages.xml
Index: /branches/trunk/config/unixConfig/cad_client_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/cad_client_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/cad_client_config.properties	(revision 82)
@@ -0,0 +1,11 @@
+#
+#Wed Apr 05 13:48:05 PDT 2006
+CADPosition            = 2
+CADSimulatorHost       = 127.0.0.1
+CADUserID              = A1245
+CADSimulatorSocketPort = 4444
+CADRmiPort             = 4446
+#KeyboardType           = CAD
+#DisplayType            = FRAME
+DisplayType            = FULL_SCREEN
+KeyboardType           = STD
Index: /branches/trunk/config/unixConfig/cad_simulator_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/cad_simulator_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/cad_simulator_config.properties	(revision 82)
@@ -0,0 +1,8 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/unixConfig/cmsdiversions.xml
+AudioFileLocation      = audio/
+ParamicsProperties     = config/unixConfig/cad_simulator_paramics_config.properties
+ATMSProperties         = config/unixConfig/cad_simulator_atms_config.properties
+MediaProperties        = config/unixConfig/cad_simulator_media_config.properties
Index: /branches/trunk/config/unixConfig/svn-version.txt
===================================================================
--- /branches/trunk/config/unixConfig/svn-version.txt	(revision 82)
+++ /branches/trunk/config/unixConfig/svn-version.txt	(revision 82)
@@ -0,0 +1,4 @@
+18M
+
+        # Do not edit. This file is autogenerated by the Ant build script #
+    
Index: /branches/trunk/config/unixConfig/cadUsers.xml
===================================================================
--- /branches/trunk/config/unixConfig/cadUsers.xml	(revision 82)
+++ /branches/trunk/config/unixConfig/cadUsers.xml	(revision 82)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<CAD_USERS>
+	<USER>
+		<ID>A12345</ID>
+		<PERMISSION_LEVEL>CHP</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A11111</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A22222</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A33333</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A44444</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A55555</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+</CAD_USERS>
Index: /branches/trunk/config/unixConfig/stillimages.xml
===================================================================
--- /branches/trunk/config/unixConfig/stillimages.xml	(revision 82)
+++ /branches/trunk/config/unixConfig/stillimages.xml	(revision 82)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<STILL_IMAGES>
+	<CCTV id="24" atms_id="1200079" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM24_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM24_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM24_FREEFLOW"/>
+		<INCIDENT log_num="187" filename="CAM24_INCIDENT_187"/>
+	</CCTV>
+	<CCTV id="97" atms_id="1213015" dir="N">
+		<RANGE min_speed="0" max_speed="20" filename="CAM97_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM97_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM97_FREEFLOW"/>
+		<INCIDENT log_num="188" filename="CAM97_INCIDENT_188"/>
+	</CCTV>
+	<CCTV id="28" atms_id="1200083" dir="N">
+		<RANGE min_speed="0" max_speed="20" filename="CAM28_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM28_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM28_FREEFLOW"/>
+		<INCIDENT log_num="189" filename="CAM28_INCIDENT_189"/>
+	</CCTV>
+	<CCTV id="16" atms_id="1200061" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM16_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM16_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM16_FREEFLOW"/>
+		<INCIDENT log_num="190" filename="CAM16_INCIDENT_190"/>
+	</CCTV>
+	<CCTV id="166" atms_id="1213007" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM166_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM166_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM166_FREEFLOW"/>
+		<INCIDENT log_num="191" filename="CAM166_INCIDENT_191"/>
+	</CCTV>
+</STILL_IMAGES>
Index: /branches/trunk/config/unixConfig/dvdplayers.xml
===================================================================
--- /branches/trunk/config/unixConfig/dvdplayers.xml	(revision 82)
+++ /branches/trunk/config/unixConfig/dvdplayers.xml	(revision 82)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<DVD_PLAYERS>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3001">
+     	<CCTV id="24" dir="S"/>
+        <INCIDENT log_num="187" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3002">
+     	<CCTV id="97" dir="N"/>
+        <INCIDENT log_num="188" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3003">
+     	<CCTV id="28" dir="S"/>
+        <INCIDENT log_num="189" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3004">
+     	<CCTV id="16" dir="S"/>
+        <INCIDENT log_num="190" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3005">
+     	<CCTV id="171" dir="S"/>
+        <INCIDENT log_num="191" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+</DVD_PLAYERS>
Index: /branches/trunk/config/unixConfig/paramics_simulator_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/paramics_simulator_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/paramics_simulator_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+WorkingDirectory    = C:/paramics/
+IncidentUpdateFile  = exchange.xml
+ParamicsStatusFile  = paramics_status.xml
+CameraStatusFile    = camera_status.xml
Index: /branches/trunk/config/unixConfig/paramics_communicator_logging.properties
===================================================================
--- /branches/trunk/config/unixConfig/paramics_communicator_logging.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/paramics_communicator_logging.properties	(revision 82)
@@ -0,0 +1,19 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/paramics_communicator.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+LogFile = paramics_communication_log.xml
+CADSimulatorHost = 127.0.0.1
+CADSimulatorRMIPort = 4450
Index: /branches/trunk/config/unixConfig/sim_manager_logging.properties
===================================================================
--- /branches/trunk/config/unixConfig/sim_manager_logging.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/sim_manager_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/sim_manager.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/unixConfig/cad_simulator_paramics_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/cad_simulator_paramics_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/cad_simulator_paramics_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+#ParamicsCommHost       = 192.168.251.45
+# For development testing
+ParamicsCommHost       = 127.0.0.1
+ParamicsCommPort       = 4450
+IncidentUpdateInterval = 30
+IncidentUpdateFile     = exchange.xml
+ParamicsStatusInterval = 15
+ParamicsStatusFile     = paramics_status.xml
+CameraStatusInterval   = 30
+CameraStatusFile       = camera_status.xml
Index: /branches/trunk/config/unixConfig/cad_client_logging.properties
===================================================================
--- /branches/trunk/config/unixConfig/cad_client_logging.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/cad_client_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/cad_client.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/unixConfig/cad_simulator_logging.properties
===================================================================
--- /branches/trunk/config/unixConfig/cad_simulator_logging.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/cad_simulator_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/cad_simulator.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/unixConfig/cmsdiversions.xml
===================================================================
--- /branches/trunk/config/unixConfig/cmsdiversions.xml	(revision 82)
+++ /branches/trunk/config/unixConfig/cmsdiversions.xml	(revision 82)
@@ -0,0 +1,499 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<DIVERSION_LIST>
+
+	<CMS>
+		<ID>95 - NB 5 @ El Toro</ID>
+		<POSTMILE>19.0</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>04 - NB 5 JSO Alton</ID>
+		<POSTMILE>22.0</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N133_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>N5_N5_N133</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>75 - SB 5 @ Jeffery</ID>
+		<POSTMILE>24.99</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S5_S5_S133</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S5_S5_N133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_N133_S5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>65 - SB 55 @ Santa Clara</ID>
+		<POSTMILE>12.3</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>92 - SB 5 @ 17th</ID>
+		<POSTMILE>32.4</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>72 - SB 55 @ Warner</ID>
+		<POSTMILE>8.6</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_N405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_N405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>94 - NB 55 @ Dyer</ID>
+		<POSTMILE>8.51</POSTMILE>
+		<INIT_ROUTE>NB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N55_S5_N55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N55_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>N55_N55_S5</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N55_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>			
+		<ID>01 - SB 405 @ Harbor</ID>
+		<POSTMILE>11.92</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N55_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 73</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S73_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 73</NEW_PATH>
+			<DIV_PATH>S405_S405_S73</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_N55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	
+	<CMS>
+		<ID>89 - SB 405 @ Von Karmen</ID>
+		<POSTMILE>7.4</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>    
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>   
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_S133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_N133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>76 - SB 405 @ Jeffery</ID>
+		<POSTMILE>4.0</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_N133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_S133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>87 - NB 405 @ Harvard</ID>
+		<POSTMILE>7.3</POSTMILE>
+		<INIT_ROUTE>NB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_S55_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_N55_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_N55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+
+	<CMS>
+		<ID>93 - NB 5 S/O Redhill</ID>
+		<POSTMILE>28.6</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_S55</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_S55_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>88 - NB 405 @ Irvine Center Drive</ID>
+		<POSTMILE>0.85</POSTMILE>
+		<INIT_ROUTE>NB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>N405_N405_S133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_S133_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_N55</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_N55_N405</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	
+	<CMS>
+		<ID>86 - SB 405 @ New Hampshire</ID>
+		<POSTMILE>11.92</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 73</NEW_PATH>
+			<DIV_PATH>S405_S405_S73</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>97 - SB 55 @ Katella</ID>
+		<POSTMILE>14.73</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>25</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_N5</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>25</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>90 - SB 5 @ Broadway</ID>
+		<POSTMILE>38.68</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>44 - SB 5 @ Anaheim</ID>
+		<POSTMILE>35.6</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>31 - NB 5 @ Aeropuerto</ID>
+		<POSTMILE>7.84</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>74 - NB 5 @ Vista Hermosa</ID>
+		<POSTMILE>7.84</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+</DIVERSION_LIST>
Index: /branches/trunk/config/unixConfig/cad_simulator_atms_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/cad_simulator_atms_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/cad_simulator_atms_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+ATMSHost = 192.168.251.27
+Username = atms_mgr
+Password = atms_d12uci1
+ImageDir = /opt/d12uci/user_config/cctv
Index: /branches/trunk/config/unixConfig/paramics_communicator_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/paramics_communicator_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/paramics_communicator_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+#
+#Fri Apr 29 01:57:02 PDT 2016
+WorkingDirectory=./
+SocketPort=4450
Index: /branches/trunk/config/unixConfig/sim_manager_smoketest_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/sim_manager_smoketest_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/sim_manager_smoketest_config.properties	(revision 82)
@@ -0,0 +1,5 @@
+CADSimulatorHost       = 127.0.0.1
+CADSimulatorRMIPort    = 4445
+#ScriptDir              = c:\\program files
+ScriptDir              = scripts
+FakeParamicsConnection = true
Index: /branches/trunk/config/unixConfig/sim_manager_config.properties
===================================================================
--- /branches/trunk/config/unixConfig/sim_manager_config.properties	(revision 82)
+++ /branches/trunk/config/unixConfig/sim_manager_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+CADSimulatorHost       = 127.0.0.1
+CADSimulatorRMIPort    = 4445
+ScriptDir              = scripts
+FakeParamicsConnection = false
Index: /branches/trunk/config/cad_simulator_guitest_config.properties
===================================================================
--- /branches/trunk/config/cad_simulator_guitest_config.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_guitest_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+AudioFileLocation      = audio/
+UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer
+#UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer
+ParamicsProperties     = config/cad_simulator_paramics_config.properties
+ATMSProperties         = config/cad_simulator_atms_config.properties
+MediaProperties        = config/cad_simulator_media_config.properties
Index: /branches/trunk/config/stillimages.xml
===================================================================
--- /branches/trunk/config/stillimages.xml	(revision 82)
+++ /branches/trunk/config/stillimages.xml	(revision 82)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<STILL_IMAGES>
+	<CCTV id="24" atms_id="1200079" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM24_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM24_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM24_FREEFLOW"/>
+		<INCIDENT log_num="187" filename="CAM24_INCIDENT_187"/>
+	</CCTV>
+	<CCTV id="97" atms_id="1213015" dir="N">
+		<RANGE min_speed="0" max_speed="20" filename="CAM97_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM97_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM97_FREEFLOW"/>
+		<INCIDENT log_num="188" filename="CAM97_INCIDENT_188"/>
+	</CCTV>
+	<CCTV id="28" atms_id="1200083" dir="N">
+		<RANGE min_speed="0" max_speed="20" filename="CAM28_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM28_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM28_FREEFLOW"/>
+		<INCIDENT log_num="189" filename="CAM28_INCIDENT_189"/>
+	</CCTV>
+	<CCTV id="16" atms_id="1200061" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM16_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM16_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM16_FREEFLOW"/>
+		<INCIDENT log_num="190" filename="CAM16_INCIDENT_190"/>
+	</CCTV>
+	<CCTV id="166" atms_id="1213007" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM166_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM166_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM166_FREEFLOW"/>
+		<INCIDENT log_num="191" filename="CAM166_INCIDENT_191"/>
+	</CCTV>
+</STILL_IMAGES>
Index: /branches/trunk/config/dvdplayers.xml
===================================================================
--- /branches/trunk/config/dvdplayers.xml	(revision 82)
+++ /branches/trunk/config/dvdplayers.xml	(revision 82)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<DVD_PLAYERS>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3001">
+     	<CCTV id="24" dir="S"/>
+        <INCIDENT log_num="187" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3002">
+     	<CCTV id="97" dir="N"/>
+        <INCIDENT log_num="188" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3003">
+     	<CCTV id="28" dir="S"/>
+        <INCIDENT log_num="189" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3004">
+     	<CCTV id="16" dir="S"/>
+        <INCIDENT log_num="190" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3005">
+     	<CCTV id="171" dir="S"/>
+        <INCIDENT log_num="191" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+</DVD_PLAYERS>
Index: /branches/trunk/config/paramics_simulator_config.properties
===================================================================
--- /branches/trunk/config/paramics_simulator_config.properties	(revision 82)
+++ /branches/trunk/config/paramics_simulator_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+#WorkingDirectory    = C:/paramics/
+WorkingDirectory    = ./
+IncidentUpdateFile  = exchange.xml
+ParamicsStatusFile  = paramics_status.xml
+CameraStatusFile    = camera_status.xml
+ParamicsStatusLog   = paramics_status.log
+CameraStatusLog     = camera_status.log
+IncidentLog         = exchange.log
+CameraControlConfig = config/camera_control.txt
+DVDPlayersConfig    = config/dvdplayers.xml
Index: /branches/trunk/config/windowsConfig/dvdplayers.xml
===================================================================
--- /branches/trunk/config/windowsConfig/dvdplayers.xml	(revision 82)
+++ /branches/trunk/config/windowsConfig/dvdplayers.xml	(revision 82)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<DVD_PLAYERS>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3001">
+     	<CCTV id="24" dir="S"/>
+        <INCIDENT log_num="187" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3002">
+     	<CCTV id="97" dir="N"/>
+        <INCIDENT log_num="188" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3003">
+     	<CCTV id="28" dir="S"/>
+        <INCIDENT log_num="189" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3004">
+     	<CCTV id="16" dir="S"/>
+        <INCIDENT log_num="190" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3005">
+     	<CCTV id="171" dir="S"/>
+        <INCIDENT log_num="191" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+</DVD_PLAYERS>
Index: /branches/trunk/config/windowsConfig/stillimages.xml
===================================================================
--- /branches/trunk/config/windowsConfig/stillimages.xml	(revision 82)
+++ /branches/trunk/config/windowsConfig/stillimages.xml	(revision 82)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<STILL_IMAGES>
+	<CCTV id="24" atms_id="1200079" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM24_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM24_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM24_FREEFLOW"/>
+		<INCIDENT log_num="187" filename="CAM24_INCIDENT_187"/>
+	</CCTV>
+	<CCTV id="97" atms_id="1213015" dir="N">
+		<RANGE min_speed="0" max_speed="20" filename="CAM97_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM97_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM97_FREEFLOW"/>
+		<INCIDENT log_num="188" filename="CAM97_INCIDENT_188"/>
+	</CCTV>
+	<CCTV id="28" atms_id="1200083" dir="N">
+		<RANGE min_speed="0" max_speed="20" filename="CAM28_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM28_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM28_FREEFLOW"/>
+		<INCIDENT log_num="189" filename="CAM28_INCIDENT_189"/>
+	</CCTV>
+	<CCTV id="16" atms_id="1200061" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM16_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM16_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM16_FREEFLOW"/>
+		<INCIDENT log_num="190" filename="CAM16_INCIDENT_190"/>
+	</CCTV>
+	<CCTV id="166" atms_id="1213007" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM166_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM166_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM166_FREEFLOW"/>
+		<INCIDENT log_num="191" filename="CAM166_INCIDENT_191"/>
+	</CCTV>
+</STILL_IMAGES>
Index: /branches/trunk/config/windowsConfig/paramics_simulator_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/paramics_simulator_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/paramics_simulator_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+WorkingDirectory    = C:/paramics/
+IncidentUpdateFile  = exchange.xml
+ParamicsStatusFile  = paramics_status.xml
+CameraStatusFile    = camera_status.xml
Index: /branches/trunk/config/windowsConfig/paramics_communicator_logging.properties
===================================================================
--- /branches/trunk/config/windowsConfig/paramics_communicator_logging.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/paramics_communicator_logging.properties	(revision 82)
@@ -0,0 +1,19 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/paramics_communicator.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+LogFile = paramics_communication_log.xml
+CADSimulatorHost = 127.0.0.1
+CADSimulatorRMIPort = 4450
Index: /branches/trunk/config/windowsConfig/sim_manager_logging.properties
===================================================================
--- /branches/trunk/config/windowsConfig/sim_manager_logging.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/sim_manager_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/sim_manager.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/windowsConfig/cad_simulator_paramics_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/cad_simulator_paramics_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/cad_simulator_paramics_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+#ParamicsCommHost       = 192.168.251.45
+# For development testing
+ParamicsCommHost       = 127.0.0.1
+ParamicsCommPort       = 4450
+IncidentUpdateInterval = 30
+IncidentUpdateFile     = exchange.xml
+ParamicsStatusInterval = 15
+ParamicsStatusFile     = paramics_status.xml
+CameraStatusInterval   = 30
+CameraStatusFile       = camera_status.xml
Index: /branches/trunk/config/windowsConfig/cad_client_logging.properties
===================================================================
--- /branches/trunk/config/windowsConfig/cad_client_logging.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/cad_client_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/cad_client.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/windowsConfig/cad_simulator_logging.properties
===================================================================
--- /branches/trunk/config/windowsConfig/cad_simulator_logging.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/cad_simulator_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/cad_simulator.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/windowsConfig/cmsdiversions.xml
===================================================================
--- /branches/trunk/config/windowsConfig/cmsdiversions.xml	(revision 82)
+++ /branches/trunk/config/windowsConfig/cmsdiversions.xml	(revision 82)
@@ -0,0 +1,499 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<DIVERSION_LIST>
+
+	<CMS>
+		<ID>95 - NB 5 @ El Toro</ID>
+		<POSTMILE>19.0</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>04 - NB 5 JSO Alton</ID>
+		<POSTMILE>22.0</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N133_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>N5_N5_N133</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>75 - SB 5 @ Jeffery</ID>
+		<POSTMILE>24.99</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S5_S5_S133</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S5_S5_N133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_N133_S5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>65 - SB 55 @ Santa Clara</ID>
+		<POSTMILE>12.3</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>92 - SB 5 @ 17th</ID>
+		<POSTMILE>32.4</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>72 - SB 55 @ Warner</ID>
+		<POSTMILE>8.6</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_N405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_N405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>94 - NB 55 @ Dyer</ID>
+		<POSTMILE>8.51</POSTMILE>
+		<INIT_ROUTE>NB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N55_S5_N55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N55_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>N55_N55_S5</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N55_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>			
+		<ID>01 - SB 405 @ Harbor</ID>
+		<POSTMILE>11.92</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N55_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 73</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S73_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 73</NEW_PATH>
+			<DIV_PATH>S405_S405_S73</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_N55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	
+	<CMS>
+		<ID>89 - SB 405 @ Von Karmen</ID>
+		<POSTMILE>7.4</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>    
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>   
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_S133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_N133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>76 - SB 405 @ Jeffery</ID>
+		<POSTMILE>4.0</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_N133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_S133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>87 - NB 405 @ Harvard</ID>
+		<POSTMILE>7.3</POSTMILE>
+		<INIT_ROUTE>NB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_S55_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_N55_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_N55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+
+	<CMS>
+		<ID>93 - NB 5 S/O Redhill</ID>
+		<POSTMILE>28.6</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_S55</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_S55_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>88 - NB 405 @ Irvine Center Drive</ID>
+		<POSTMILE>0.85</POSTMILE>
+		<INIT_ROUTE>NB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>N405_N405_S133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_S133_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_N55</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_N55_N405</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	
+	<CMS>
+		<ID>86 - SB 405 @ New Hampshire</ID>
+		<POSTMILE>11.92</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 73</NEW_PATH>
+			<DIV_PATH>S405_S405_S73</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>97 - SB 55 @ Katella</ID>
+		<POSTMILE>14.73</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>25</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_N5</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>25</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>90 - SB 5 @ Broadway</ID>
+		<POSTMILE>38.68</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>44 - SB 5 @ Anaheim</ID>
+		<POSTMILE>35.6</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>31 - NB 5 @ Aeropuerto</ID>
+		<POSTMILE>7.84</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>74 - NB 5 @ Vista Hermosa</ID>
+		<POSTMILE>7.84</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+</DIVERSION_LIST>
Index: /branches/trunk/config/windowsConfig/cad_simulator_atms_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/cad_simulator_atms_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/cad_simulator_atms_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+ATMSHost = 192.168.251.27
+Username = atms_mgr
+Password = atms_d12uci1
+ImageDir = /opt/d12uci/user_config/cctv
Index: /branches/trunk/config/windowsConfig/paramics_communicator_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/paramics_communicator_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/paramics_communicator_config.properties	(revision 82)
@@ -0,0 +1,5 @@
+#
+#Wed Jun 14 15:40:00 PDT 2006
+#WorkingDirectory=c\:\\
+WorkingDirectory=/
+SocketPort=4450
Index: /branches/trunk/config/windowsConfig/sim_manager_smoketest_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/sim_manager_smoketest_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/sim_manager_smoketest_config.properties	(revision 82)
@@ -0,0 +1,5 @@
+CADSimulatorHost       = 127.0.0.1
+CADSimulatorRMIPort    = 4445
+#ScriptDir              = c:\\program files
+ScriptDir              = scripts
+FakeParamicsConnection = true
Index: /branches/trunk/config/windowsConfig/sim_manager_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/sim_manager_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/sim_manager_config.properties	(revision 82)
@@ -0,0 +1,5 @@
+CADSimulatorHost       = 127.0.0.1
+CADSimulatorRMIPort    = 4445
+#ScriptDir              = c:\\program files
+ScriptDir              = scripts
+FakeParamicsConnection = false
Index: /branches/trunk/config/windowsConfig/cad_simulator_smoketest_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/cad_simulator_smoketest_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/cad_simulator_smoketest_config.properties	(revision 82)
@@ -0,0 +1,8 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+AudioFileLocation      = audio/
+ParamicsProperties     = config/cad_simulator_paramics_config.properties
+ATMSProperties         = config/cad_simulator_atms_config.properties
+MediaProperties        = config/cad_simulator_media_config.properties
Index: /branches/trunk/config/windowsConfig/cad_client_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/cad_client_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/cad_client_config.properties	(revision 82)
@@ -0,0 +1,11 @@
+#
+#Wed Apr 05 13:48:05 PDT 2006
+CADPosition            = 2
+CADSimulatorHost       = 127.0.0.1
+CADUserID              = A1245
+CADSimulatorSocketPort = 4444
+CADRmiPort             = 4446
+#KeyboardType           = CAD
+#DisplayType            = FRAME
+DisplayType            = FULL_SCREEN
+KeyboardType           = STD
Index: /branches/trunk/config/windowsConfig/cad_simulator_media_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/cad_simulator_media_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/cad_simulator_media_config.properties	(revision 82)
@@ -0,0 +1,2 @@
+#DVDPlayerXML           = config/dvdplayers.xml
+StillImagesXML         = config/stillimages.xml
Index: /branches/trunk/config/windowsConfig/cad_simulator_config.properties
===================================================================
--- /branches/trunk/config/windowsConfig/cad_simulator_config.properties	(revision 82)
+++ /branches/trunk/config/windowsConfig/cad_simulator_config.properties	(revision 82)
@@ -0,0 +1,8 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+AudioFileLocation      = audio/
+ParamicsProperties     = config/cad_simulator_paramics_config.properties
+ATMSProperties         = config/cad_simulator_atms_config.properties
+MediaProperties        = config/cad_simulator_media_config.properties
Index: /branches/trunk/config/windowsConfig/svn-version.txt
===================================================================
--- /branches/trunk/config/windowsConfig/svn-version.txt	(revision 82)
+++ /branches/trunk/config/windowsConfig/svn-version.txt	(revision 82)
@@ -0,0 +1,4 @@
+18M
+
+        # Do not edit. This file is autogenerated by the Ant build script #
+    
Index: /branches/trunk/config/windowsConfig/cadUsers.xml
===================================================================
--- /branches/trunk/config/windowsConfig/cadUsers.xml	(revision 82)
+++ /branches/trunk/config/windowsConfig/cadUsers.xml	(revision 82)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<CAD_USERS>
+	<USER>
+		<ID>A12345</ID>
+		<PERMISSION_LEVEL>CHP</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A11111</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A22222</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A33333</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A44444</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A55555</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+</CAD_USERS>
Index: /branches/trunk/config/paramics_communicator_logging.properties
===================================================================
--- /branches/trunk/config/paramics_communicator_logging.properties	(revision 82)
+++ /branches/trunk/config/paramics_communicator_logging.properties	(revision 82)
@@ -0,0 +1,31 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/paramics_communicator.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+LogFile = paramics_communication_log.xml
+
+# Set properties for 2016 --jd
+LogFile=paramics_communicator.log
+# Ethernet cable in operator room
+#CADSimulatorHost=192.168.251.119
+# PC1 in operator room (Service Tag BHLLD42)
+CADSimulatorHost=192.168.251.116
+# Virtual Host: TMCSIM Manager
+#CADSimulatorHost=192.168.251.88
+# For local testing
+CADSimulatorHost = 127.0.0.1
+
+CADSimulatorRMIPort=4445
+#CADSimulatorRMIPort = 4450
Index: /branches/trunk/config/sim_manager_logging.properties
===================================================================
--- /branches/trunk/config/sim_manager_logging.properties	(revision 82)
+++ /branches/trunk/config/sim_manager_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/sim_manager.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/vds_data/lds.txt
===================================================================
--- /branches/trunk/config/vds_data/lds.txt	(revision 82)
+++ /branches/trunk/config/vds_data/lds.txt	(revision 82)
@@ -0,0 +1,163 @@
+lds_id	line 	drop sch lineinfo	system_key	sch_seq glo_seq		count	freeway	Dir	ca_pm	lds_name		
+1205270	5	19	1	1	1123005673	26492	1357648		20	5	S	33	MAIN 1                  
+1208933	6	15	2	2	1123005691	26491	1357639		19	73	S	26.3	S OF 55                 
+1203081	6	17	2	2	1123005691	26491	1357639		19	55	N	4.58	BRISTOL                 
+1203083	6	18	2	2	1123005691	26491	1357639		19	55	S	4.7	BAKER 1                 
+1210174	6	19	2	2	1123005691	26491	1357639		19	55	S	5.06	BAKER 2                 
+1210163	6	20	2	2	1123005691	26491	1357639		19	55	N	5.51	PAULARINO 1             
+1204875	22	1	4	4	1123005726	26490	1357624		19	5	N	24.5	N OF SAND CNYN          
+1204847	22	2	4	4	1123005726	26490	1357624		19	5	N	24.05	SAND CANYON 2           
+1204832	22	3	4	4	1123005726	26490	1357624		19	5	S	23.69	SAND CANYON 1           
+1204973	22	4	4	4	1123005726	26490	1357624		19	5	N	26.56	CULVER 1                
+1205003	22	5	4	4	1123005726	26490	1357624		19	5	N	26.81	CULVER 2                
+1204958	22	6	4	4	1123005726	26490	1357624		19	5	S	26.35	CULVER 1                
+1204988	22	7	4	4	1123005726	26490	1357624		19	5	S	26.66	CULVER 2                
+1204928	22	8	4	4	1123005726	26490	1357624		19	5	N	25.15	JEFFREY 2               
+1205077	22	9	4	4	1123005726	26490	1357624		19	5	N	28.1	TUSTIN RANCH            
+1205229	22	10	4	4	1123005726	26490	1357624		19	5	S	32	GRAND 2                 
+1205176	22	11	4	4	1123005726	26490	1357624		19	5	S	30.9	1ST                     
+1205188	22	12	4	4	1123005726	26490	1357624		19	5	N	31.23	4TH                     
+1205219	22	13	4	4	1123005726	26490	1357624		19	5	N	31.9	GRAND 2                 
+1205238	22	16	4	4	1123005726	26490	1357624		19	5	S	32.25	17TH 1                  
+1205208	22	17	4	4	1123005726	26490	1357624		19	5	S	31.6	GRAND 1                 
+1204912	22	18	4	4	1123005726	26490	1357624		19	5	N	25.08	JEFFREY 1               
+1204892	22	19	4	4	1123005726	26490	1357624		19	5	S	24.84	JEFFREY 1               
+1205094	22	20	4	4	1123005726	26490	1357624		19	5	S	28.35	TUSTIN RANCH            
+1205156	23	1	23	21	1123005995	26479	1357626		18	5	N	30	B ST.                   
+1205164	23	2	23	21	1123005995	26479	1357626		18	5	N	30.2	S OF 55                 
+1205167	23	3	23	21	1123005995	26479	1357626		18	5	N	30.4	N OF 55                 
+1205172	23	4	23	21	1123005995	26479	1357626		18	5	S	30.6	WILLIAMS                
+1205197	23	5	23	21	1123005995	26479	1357626		18	5	N	31.4	CONCORD                 
+1205254	23	6	23	21	1123005995	26479	1357626		18	5	N	32.5	17TH 2                  
+1205268	23	7	23	21	1123005995	26479	1357626		18	5	N	32.6	17TH 3                  
+1209845	23	11	23	21	1123005995	26479	1357626		18	55	N	10.2	N OF 5 OFF              
+1203261	23	14	23	21	1123005995	26479	1357626		18	55	S	10.4	S OF 5                  
+1203270	23	15	23	21	1123005995	26479	1357626		18	55	S	10.5	N OF 5                  
+1209052	26	13	25	25	1123006044	26482	1357604		3	405	S	5.05	SPRUCE                  
+1201409	27	1	26	26	1123006050	26481	1357603		3	405	S	8.9	N OF 55                 
+1201405	27	2	26	26	1123006050	26481	1357603		3	405	N	8.27	AIRPORT                 
+1208924	29	2	28	28	1123006080	26480	1357609		13	73	N	23.2	N OF BONITA             
+1208925	29	3	28	28	1123006080	26480	1357609		13	73	S	23.5	BISON 1                 
+1208926	29	4	28	28	1123006080	26480	1357609		13	73	S	23.7	MACARTHUR 1             
+1210382	29	5	28	28	1123006080	26480	1357609		13	73	N	23.9	BISON 2                 
+1208927	29	6	28	28	1123006080	26480	1357609		13	73	N	24.1	MACARTHUR 2             
+1201475	31	1	5	5	1123005744	26489	1357649		18	405	N	9.65	BRISTOL 2               
+1201444	31	2	5	5	1123005744	26489	1357649		18	405	N	9.46	BRISTOL 1               
+1201459	31	3	5	5	1123005744	26489	1357649		18	405	S	9.54	BRISTOL 2               
+1204756	31	5	5	5	1123005744	26489	1357649		18	5	S	22.75	BARRANCA                
+1201547	31	6	5	5	1123005744	26489	1357649		18	405	S	11.5	HARBOR 2                
+1201531	31	7	5	5	1123005744	26489	1357649		18	405	N	11.4	HARBOR 1                
+1201564	31	8	5	5	1123005744	26489	1357649		18	405	N	11.6	HARBOR 2                
+1201516	31	9	5	5	1123005744	26489	1357649		18	405	S	11.2	HARBOR 1                
+1201502	31	11	5	5	1123005744	26489	1357649		18	405	N	10.9	FAIRVIEW                
+1204802	31	16	5	5	1123005744	26489	1357649		18	5	N	23.2	N OF 133                
+1204793	31	17	5	5	1123005744	26489	1357649		18	5	S	23.1	N OF 133                
+1204813	31	18	5	5	1123005744	26489	1357649		18	5	S	23.5	S OF SAND CNYN          
+1204776	31	20	5	5	1123005744	26489	1357649		18	5	S	23.05	S OF 133                
+1209055	34	3	31	31	1123006127	26475	1357632		20	405	S	10.48	N OF 73                 
+1209226	34	4	31	31	1123006127	26475	1357632		20	405	S	12.16	HAMPSHIRE               
+1201489	34	5	31	31	1123006127	26475	1357632		20	405	S	10.28	FAIRVIEW                
+1208936	34	19	31	31	1123006127	26475	1357632		20	73	S	27.72	FAIRVIEW                
+1211667	36	7	32	32	1123006146	26478	1357615		17	133	N	12.77	N OF PORTOLA            
+1211685	36	8	32	32	1123006146	26478	1357615		17	133	N	12.42	S OF PORTOLA            
+1211694	36	9	32	32	1123006146	26478	1357615		17	133	N	12.05	IRVINE BLVD 3           
+1211719	36	10	32	32	1123006146	26478	1357615		17	133	N	11.35	N OF PM 11              
+1211710	36	11	32	32	1123006146	26478	1357615		17	133	S	11.7	IRVINE BLVD 1           
+1211726	36	12	32	32	1123006146	26478	1357615		17	133	N	11.08	AT PM 11                
+1211733	36	13	32	32	1123006146	26478	1357615		17	133	N	10.73	S OF PM 11              
+1211742	36	14	32	32	1123006146	26478	1357615		17	133	N	10.5	N OF MARINE             
+1211754	36	15	32	32	1123006146	26478	1357615		17	133	N	10.05	MARINE WAY              
+1211762	36	16	32	32	1123006146	26478	1357615		17	133	N	9.77	N OF 5                  
+1211774	36	17	32	32	1123006146	26478	1357615		17	133	N	9.37	S OF 5                  
+1204539	45	1	11	11	1123005841	26484	1357646		19	5	N	16.51	LA PAZ 1                
+1204553	45	2	11	11	1123005841	26484	1357646		19	5	N	16.69	LA PAZ 2                
+1204566	45	3	11	11	1123005841	26484	1357646		19	5	N	17.43	ALICIA 1                
+1204578	45	4	11	11	1123005841	26484	1357646		19	5	N	17.63	ALICIA 2                
+1204537	45	5	11	11	1123005841	26484	1357646		19	5	S	16.3	LA PAZ 1                
+1204608	45	6	11	11	1123005841	26484	1357646		19	5	N	18.61	EL TORO 1               
+1204622	45	7	11	11	1123005841	26484	1357646		19	5	N	18.82	EL TORO 2               
+1204637	45	8	11	11	1123005841	26484	1357646		19	5	N	19.33	RED ROBIN               
+1204551	45	9	11	11	1123005841	26484	1357646		19	5	S	16.5	LA PAZ 2                
+1204666	45	10	11	11	1123005841	26484	1357646		19	5	N	20	LAKE FOR2               
+1204721	45	11	11	11	1123005841	26484	1357646		19	5	N	22.1	ALTON 2                 
+1204742	45	12	11	11	1123005841	26484	1357646		19	5	N	22.2	ALTON 3                 
+1204564	45	13	11	11	1123005841	26484	1357646		19	5	S	17.26	ALICIA 1                
+1204706	45	15	11	11	1123005841	26484	1357646		19	5	S	21.92	ALTON 1                 
+1204576	45	17	11	11	1123005841	26484	1357646		19	5	S	17.49	ALICIA 2                
+1204606	45	19	11	11	1123005841	26484	1357646		19	5	S	18.5	EL TORO 1               
+1204620	45	20	11	11	1123005841	26484	1357646		19	5	S	18.7	EL TORO 2               
+1201202	46	1	36	36	1123006209	26472	1357644		20	405	N	4.03	JEFFREY 2               
+1201176	46	2	36	36	1123006209	26472	1357644		20	405	N	3.86	JEFFREY 1               
+1201245	46	3	36	36	1123006209	26472	1357644		20	405	N	5.55	CULVER 1                
+1201321	46	4	36	36	1123006209	26472	1357644		20	405	N	6.85	JAMBOREE1               
+1201388	46	5	36	36	1123006209	26472	1357644		20	405	N	7.73	MACARTHUR 1             
+1201190	46	6	36	36	1123006209	26472	1357644		20	405	S	4.03	JEFFREY 2               
+1201164	46	7	36	36	1123006209	26472	1357644		20	405	S	3.84	JEFFREY 1               
+1201275	46	8	36	36	1123006209	26472	1357644		20	405	N	5.74	CULVER 2                
+1201261	46	9	36	36	1123006209	26472	1357644		20	405	S	5.69	CULVER 2                
+1201231	46	10	36	36	1123006209	26472	1357644		20	405	S	5.5	CULVER 1                
+1201356	46	11	36	36	1123006209	26472	1357644		20	405	N	7.07	JAMBOREE2               
+1201339	46	12	36	36	1123006209	26472	1357644		20	405	S	7.01	JAMBOREE2               
+1201306	46	13	36	36	1123006209	26472	1357644		20	405	S	6.8	JAMBOREE1               
+1201371	46	14	36	36	1123006209	26472	1357644		20	405	S	7.69	MACARTHUR1              
+1201289	46	15	36	36	1123006209	26472	1357644		20	405	S	6.1	HARVARD                 
+1201216	46	16	36	36	1123006209	26472	1357644		20	405	S	5.01	YALE                    
+1201043	46	17	36	36	1123006209	26472	1357644		20	133	S	9	BARRANCA2               
+1201411	46	18	36	36	1123006209	26472	1357644		20	405	S	8.4	RED HILL                
+1201057	46	19	36	36	1123006209	26472	1357644		20	133	N	9	BARRANCA1               
+1201069	46	20	36	36	1123006209	26472	1357644		20	133	N	9.1	BARRANCA2               
+1205111	50	1	13	13	1123005873	24148	1357650		19	5	S	29.02	RED HILL                
+1205128	50	2	13	13	1123005873	24148	1357650		19	5	N	29.24	RED HILL                
+1205146	50	3	13	13	1123005873	24148	1357650		19	5	N	29.79	NEWPORT                 
+1203244	50	4	13	13	1123005873	24148	1357650		19	55	N	10	MCFADDEN                
+1203211	50	5	13	13	1123005873	24148	1357650		19	55	N	9.41	EDINGER 2               
+1203196	50	6	13	13	1123005873	24148	1357650		19	55	S	9.19	EDINGER 1               
+1203165	50	7	13	13	1123005873	24148	1357650		19	55	N	7.85	DYER 1                  
+1203176	50	8	13	13	1123005873	24148	1357650		19	55	N	8.12	DYER 2                  
+1203153	50	9	13	13	1123005873	24148	1357650		19	55	S	7.62	DYER 1                  
+1203115	50	10	13	13	1123005873	24148	1357650		19	55	N	6.94	MACARTHU1               
+1203140	50	11	13	13	1123005873	24148	1357650		19	55	N	7.16	MACARTHU2               
+1203129	50	12	13	13	1123005873	24148	1357650		19	55	S	7.03	MACARTHU2               
+1203103	50	13	13	13	1123005873	24148	1357650		19	55	S	6.88	MACARTHU1               
+1203226	50	14	13	13	1123005873	24148	1357650		19	55	S	10	MCFADDEN                
+1203062	50	16	13	13	1123005873	24148	1357650		19	55	N	3.96	FAIR 2                  
+1203044	50	17	13	13	1123005873	24148	1357650		19	55	S	3.6	FAIR 1                  
+1203026	50	18	13	13	1123005873	24148	1357650		19	55	N	3.11	VICTORIA2               
+1203085	50	20	13	13	1123005873	24148	1357650		19	55	N	5.8	PAULARINO 2             
+1203293	56	1	14	14	1123005892	26482	1357643		20	55	N	11.1	FOURTH 2                
+1203274	56	2	14	14	1123005892	26482	1357643		20	55	S	10.84	FOURTH 1                
+1203321	56	3	14	14	1123005892	26482	1357643		20	55	N	11.74	17TH 1                  
+1203335	56	4	14	14	1123005892	26482	1357643		20	55	N	12	17TH 2                  
+1203307	56	5	14	14	1123005892	26482	1357643		20	55	S	11.62	17TH 1                  
+1212485	56	15	14	14	1123005892	26482	1357643		20	73	N	27.4	BEAR 2                  
+1208935	56	16	14	14	1123005892	26482	1357643		20	73	S	27.2	BEAR 1                  
+1208931	56	17	14	14	1123005892	26482	1357643		20	73	S	25.25	ORCHID                  
+1208932	56	18	14	14	1123005892	26482	1357643		20	73	N	25.7	CAMPUS                  
+1208934	56	19	14	14	1123005892	26482	1357643		20	73	N	26.7	N OF 55                 
+1201119	73	1	18	18	1123005950	26481	1357636		16	405	N	1.11	IRVINE C2               
+1201130	73	2	18	18	1123005950	26481	1357636		16	405	S	1.57	S OF 133                
+1201133	73	3	18	18	1123005950	26481	1357636		16	405	S	1.93	N OF 133                
+1201092	73	4	18	18	1123005950	26481	1357636		16	405	N	0.93	IRVINE C1               
+1201150	73	5	18	18	1123005950	26481	1357636		16	405	N	2.99	SAND CANYON             
+1201105	73	6	18	18	1123005950	26481	1357636		16	405	S	0.96	IRVINE C2               
+1209051	73	7	18	18	1123005950	26481	1357636		16	405	N	3.31	N OF SAND CANYON        
+1209054	73	11	18	18	1123005950	26481	1357636		16	405	S	1.73	AT 133                  
+1201136	73	12	18	18	1123005950	26481	1357636		16	405	S	2.88	SAND CANYON             
+1201080	73	13	18	18	1123005950	26481	1357636		16	405	S	0.77	IRVINE C1               
+1204941	73	15	18	18	1123005950	26481	1357636		16	5	S	25.8	YALE                    
+1205068	73	16	18	18	1123005950	26481	1357636		16	5	N	27.7	JAMBOREE 2              
+1205019	73	17	18	18	1123005950	26481	1357636		16	5	S	27.43	JAMBOREE 1              
+1205034	73	18	18	18	1123005950	26481	1357636		16	5	N	27.55	JAMBOREE 1              
+1205051	73	19	18	18	1123005950	26481	1357636		16	5	S	27.7	JAMBOREE 2              
+1209050	73	20	18	18	1123005950	26481	1357636		16	405	N	2.35	LAGUNA CANYON RD        
+1204649	74	1	19	19	1123005967	26480	1357638		18	5	S	19.8	LAKE FOREST 1           
+1204664	74	4	19	19	1123005967	26480	1357638		18	5	S	19.9	LAKE FOREST 2           
+1204696	74	5	19	19	1123005967	26480	1357638		18	5	N	20.59	BAKE 1                  
+1204698	74	6	19	19	1123005967	26480	1357638		18	5	N	20.94	BAKE 2                  
+1204694	74	7	19	19	1123005967	26480	1357638		18	5	S	20.59	BAKE 1                  
+1204700	74	8	19	19	1123005967	26480	1357638		18	5	S	20.95	BAKE 2                  
+1204681	74	15	19	19	1123005967	26480	1357638		18	5	N	20.23	OLDFIELD                
+1204702	74	17	19	19	1123005967	26480	1357638		18	5	S	21.25	At 405                  
+1201117	74	18	19	19	1123005967	26480	1357638		18	405	S	0.6	N OF 5			
+                                                                                                                
+                                                                                                                
Index: /branches/trunk/config/vds_data/loop.txt
===================================================================
--- /branches/trunk/config/vds_data/loop.txt	(revision 82)
+++ /branches/trunk/config/vds_data/loop.txt	(revision 82)
@@ -0,0 +1,1792 @@
+FWY	Dir     POSTMI	LDS_ID	VDS_ID	LOOP_ID LOC    LANE LOOP_LOC      	PARAMICS_NAME  PARAMICS_LANE         
+5	S	16.3	1204537	1204538	1211007	ML	1	ML_1       	5s16.3ml     	4
+5	S	16.3	1204537	1204538	1211008	ML	2	ML_2       	5s16.3ml     	3
+5	S	16.3	1204537	1204538	1211009	ML	3	ML_3       	5s16.3ml     	2
+5	S	16.3	1204537	1204538	1211010	ML	4	ML_4       	5s16.3ml     	1
+5	S	16.3	1204537	1211848	1211011	DM	1	DEMAND     	5s16.3ora    	0
+5	S	16.3	1204537	1211848	1211012	PA	2	PASSAGE    	5s16.3ora    	0
+5	S	16.3	1204537	1211848	1211013	QU	3	QUEUE      	5s16.3ora    	0
+5	S	16.3	1204537	1211848	1211014	OR	4	RAMP_ON    	5s16.3ora    	0
+5	S	16.3	1204537	1211848	1211015	RH	5	RAMP_HOV   	5s16.3ora    	0
+5	S	16.3	1204537	1211182	1211016	HV	1	SD_1       	5s16.3hv     	1
+5	S	16.5	1204551	1204552	1210995	ML	1	ML_1       	5s16.5ml     	4
+5	S	16.5	1204551	1204552	1210996	ML	2	ML_2       	5s16.5ml     	3
+5	S	16.5	1204551	1204552	1210997	ML	3	ML_3       	5s16.5ml     	2
+5	S	16.5	1204551	1204552	1210998	ML	4	ML_4       	5s16.5ml     	1
+5	S	16.5	1204551	1211177	1210999	HV	1	SD_1       	5s16.5hv     	1
+5	S	16.5	1204551	1211178	1211000	DM	1	DEMAND     	5s16.5ora    	0
+5	S	16.5	1204551	1211178	1211001	PA	2	PASSAGE    	5s16.5ora    	0
+5	S	16.5	1204551	1211178	1211002	QU	3	QUEUE      	5s16.5ora    	0
+5	S	16.5	1204551	1211178	1211003	OR	4	RAMP_ON    	5s16.5ora    	0
+5	S	16.5	1204551	1211180	1211004	FR	1	RAMP_OFF   	5s16.5fr     	1
+5	S	16.5	1204551	1211180	1211005	FR	2	SD_2       	?            	0
+5	S	16.5	1204551	1211180	1211006	FR	3	SD_3       	?            	0
+5	S	16.5	1204551	1211178	1211179	RH	5	RAMP_HOV   	5s16.5ora    	0
+5	N	16.51	1204539	1204540	1204541	QU	2	QUEUE      	5n16.52ora   	0
+5	N	16.51	1204539	1204540	1204542	DM	3	DEMAND     	5n16.52ora   	0
+5	N	16.51	1204539	1204540	1204543	PA	4	PASSAGE    	5n16.52ora   	0
+5	N	16.51	1204539	1204544	1204545	FR	1	RAMP_OFF   	5n16.37fr    	1
+5	N	16.51	1204539	1204546	1204547	ML	1	ML_1       	5n16.5ml     	4
+5	N	16.51	1204539	1204546	1204548	ML	2	ML_2       	5n16.5ml     	3
+5	N	16.51	1204539	1204546	1204549	ML	3	ML_3       	5n16.5ml     	2
+5	N	16.51	1204539	1204546	1204550	ML	4	ML_4       	5n16.5ml     	1
+5	N	16.51	1204539	1210085	1210084	HV	1	SD_1       	5n16.5hv     	1
+5	N	16.51	1204539	1204540	1210372	OR	1	RAMP_ON    	5n16.52ora   	0
+5	N	16.51	1204539	1204540	1211111	RH	5	RAMP_HOV   	5n16.52ora   	0
+5	N	16.69	1204553	1204554	1204555	OR	1	RAMP_ON    	5n16.6ora    	0
+5	N	16.69	1204553	1204554	1204556	QU	2	QUEUE      	5n16.6ora    	0
+5	N	16.69	1204553	1204554	1204557	DM	3	DEMAND     	5n16.6ora    	0
+5	N	16.69	1204553	1204554	1204558	PA	4	PASSAGE    	5n16.6ora    	0
+5	N	16.69	1204553	1204559	1204560	ML	1	ML_1       	5n16.6ml     	4
+5	N	16.69	1204553	1204559	1204561	ML	2	ML_2       	5n16.6ml     	3
+5	N	16.69	1204553	1204559	1204562	ML	3	ML_3       	5n16.6ml     	2
+5	N	16.69	1204553	1204559	1204563	ML	4	ML_4       	5n16.6ml     	1
+5	N	16.69	1204553	1210087	1210086	HV	1	SD_1       	5n16.6hv     	1
+5	S	17.26	1204564	1204565	1210354	ML	1	ML_1       	5s17.29ml    	5
+5	S	17.26	1204564	1204565	1210355	ML	2	ML_2       	5s17.29ml    	4
+5	S	17.26	1204564	1204565	1210356	ML	3	ML_3       	5s17.29ml    	3
+5	S	17.26	1204564	1204565	1210357	ML	4	ML_4       	5s17.29ml    	2
+5	S	17.26	1204564	1204565	1210358	ML	5	ML_5       	5s17.29ml    	1
+5	S	17.26	1204564	1210367	1210359	DM	1	DEMAND     	5s17.26ora   	0
+5	S	17.26	1204564	1210367	1210360	PA	2	PASSAGE    	5s17.26ora   	0
+5	S	17.26	1204564	1210367	1210361	QU	3	QUEUE      	5s17.26ora   	0
+5	S	17.26	1204564	1210367	1210362	OR	4	RAMP_ON    	5s17.26ora   	0
+5	S	17.26	1204564	1210367	1210363	RH	5	RAMP_HOV   	5s17.26ora   	0
+5	S	17.26	1204564	1210368	1210366	HV	1	SD_1       	5s17.29hv    	1
+5	N	17.43	1204566	1204567	1204568	QU	2	QUEUE      	5n17.44ora   	0
+5	N	17.43	1204566	1204567	1204569	DM	3	DEMAND     	5n17.44ora   	0
+5	N	17.43	1204566	1204567	1204570	PA	4	PASSAGE    	5n17.44ora   	0
+5	N	17.43	1204566	1204571	1204572	ML	1	ML_1       	5n17.43ml    	4
+5	N	17.43	1204566	1204571	1204573	ML	2	ML_2       	5n17.43ml    	3
+5	N	17.43	1204566	1204571	1204574	ML	3	ML_3       	5n17.43ml    	2
+5	N	17.43	1204566	1204571	1204575	ML	4	ML_4       	5n17.43ml    	1
+5	N	17.43	1204566	1210089	1210088	HV	1	SD_1       	5n17.43ml    	6
+5	N	17.43	1204566	1210089	1210123	HV	2	SD_3       	?            	0
+5	N	17.43	1204566	1204567	1210371	OR	1	RAMP_ON    	5n17.44ora   	0
+5	S	17.49	1204576	1204577	1210341	ML	1	ML_1       	5s17.47ml    	5
+5	S	17.49	1204576	1204577	1210342	ML	2	ML_2       	5s17.47ml    	4
+5	S	17.49	1204576	1204577	1210343	ML	3	ML_3       	5s17.47ml    	3
+5	S	17.49	1204576	1204577	1210344	ML	4	ML_4       	5s17.47ml    	2
+5	S	17.49	1204576	1211804	1210345	DM	1	DEMAND     	5s17.49ora   	0
+5	S	17.49	1204576	1211804	1210346	PA	2	PASSAGE    	5s17.49ora   	0
+5	S	17.49	1204576	1211804	1210347	QU	3	QUEUE      	5s17.49ora   	0
+5	S	17.49	1204576	1211804	1210348	OR	4	RAMP_ON    	5s17.49ora   	0
+5	S	17.49	1204576	1211804	1210349	RH	5	RAMP_HOV   	5s17.49ora   	0
+5	S	17.49	1204576	1211805	1210350	FR	1	RAMP_OFF   	5s17.5fr     	2
+5	S	17.49	1204576	1211183	1210351	HV	1	SD_1       	5s17.47ml    	1
+5	S	17.49	1204576	1211805	1210352	FR	2	SD_2       	5s17.5fr     	1
+5	N	17.63	1204578	1204579	1204580	QU	1	QUEUE      	5n17.64ora   	0
+5	N	17.63	1204578	1204579	1204581	DM	2	DEMAND     	5n17.64ora   	0
+5	N	17.63	1204578	1204579	1204582	PA	3	PASSAGE    	5n17.64ora   	0
+5	N	17.63	1204578	1204583	1204584	FR	1	RAMP_OFF   	5n17.3fr     	1
+5	N	17.63	1204578	1204591	1204585	HV	2	SD_3       	?            	0
+5	N	17.63	1204578	1204586	1204587	ML	1	ML_1       	5n17.63ml    	5
+5	N	17.63	1204578	1204586	1204588	ML	2	ML_2       	5n17.63ml    	4
+5	N	17.63	1204578	1204586	1204589	ML	3	ML_3       	5n17.63ml    	3
+5	N	17.63	1204578	1204586	1204590	ML	4	ML_4       	5n17.63ml    	2
+5	N	17.63	1204578	1204591	1204592	HV	1	SD_1       	5n17.63hv    	1
+5	N	17.63	1204578	1204583	1210092	FR	3	SD_5       	?            	0
+5	N	17.63	1204578	1204583	1210093	FR	2	SD_4       	?            	0
+5	N	17.63	1204578	1204579	1210094	OR	4	RAMP_ON    	5n17.64ora   	0
+5	N	17.63	1204578	1204586	1210370	ML	5	ML_5       	5n17.63ml    	1
+5	S	18.5	1204606	1204607	1210327	ML	1	ML_1       	5s18.5ml     	5
+5	S	18.5	1204606	1204607	1210328	ML	2	ML_2       	5s18.5ml     	4
+5	S	18.5	1204606	1204607	1210329	ML	3	ML_3       	5s18.5ml     	3
+5	S	18.5	1204606	1204607	1210330	ML	4	ML_4       	5s18.5ml     	2
+5	S	18.5	1204606	1204607	1210331	ML	5	ML_5       	5s18.5ml     	1
+5	S	18.5	1204606	1210339	1210332	DM	1	DEMAND     	5s18.5ora    	0
+5	S	18.5	1204606	1210339	1210333	PA	2	PASSAGE    	5s18.5ora    	0
+5	S	18.5	1204606	1210339	1210334	QU	3	QUEUE      	5s18.5ora    	0
+5	S	18.5	1204606	1210339	1210335	OR	4	RAMP_ON    	5s18.5ora    	0
+5	S	18.5	1204606	1210339	1210336	RH	5	RAMP_HOV   	5s18.5ora    	0
+5	S	18.5	1204606	1210340	1210337	HV	1	SD_1       	5s18.5hv     	2
+5	S	18.5	1204606	1210340	1210338	HV	2	SD_2       	5s18.5hv     	1
+5	N	18.61	1204608	1204609	1204610	OR	1	RAMP_ON    	5n18.62ora   	0
+5	N	18.61	1204608	1204609	1204611	QU	2	QUEUE      	5n18.62ora   	0
+5	N	18.61	1204608	1204609	1204612	DM	3	DEMAND     	5n18.62ora   	0
+5	N	18.61	1204608	1204609	1204613	PA	4	PASSAGE    	5n18.62ora   	0
+5	N	18.61	1204608	1204609	1204614	RH	5	RAMP_HOV   	5n18.62ora   	0
+5	N	18.61	1204608	1204615	1204616	ML	1	ML_1       	5n18.61ml    	4
+5	N	18.61	1204608	1204615	1204617	ML	2	ML_2       	5n18.61ml    	3
+5	N	18.61	1204608	1204615	1204618	ML	3	ML_3       	5n18.61ml    	2
+5	N	18.61	1204608	1204615	1204619	ML	4	ML_4       	5n18.61ml    	1
+5	N	18.61	1204608	1210103	1210101	HV	1	SD_1       	5n18.61hv    	1
+5	S	18.7	1204620	1204621	1210307	ML	1	ML_1       	5s18.7ml     	5
+5	S	18.7	1204620	1204621	1210308	ML	2	ML_2       	5s18.7ml     	4
+5	S	18.7	1204620	1204621	1210309	ML	3	ML_3       	5s18.7ml     	3
+5	S	18.7	1204620	1204621	1210310	ML	4	ML_4       	5s18.7ml     	2
+5	S	18.7	1204620	1204621	1210311	ML	5	ML_5       	5s18.7ml     	1
+5	S	18.7	1204620	1210320	1210312	DM	1	DEMAND     	5s18.7ora    	0
+5	S	18.7	1204620	1210320	1210313	PA	2	PASSAGE    	5s18.7ora    	0
+5	S	18.7	1204620	1210320	1210314	QU	3	QUEUE      	5s18.7ora    	0
+5	S	18.7	1204620	1210320	1210315	OR	4	RAMP_ON    	5s18.7ora    	0
+5	S	18.7	1204620	1210321	1210316	FR	1	RAMP_OFF   	5s18.7fr     	2
+5	S	18.7	1204620	1210321	1210317	FR	2	SD_3       	5s18.7fr     	1
+5	S	18.7	1204620	1210322	1210318	HV	1	SD_1       	5s18.7hv     	2
+5	S	18.7	1204620	1210322	1210319	HV	2	SD_2       	5s18.7hv     	1
+5	N	18.82	1204622	1204623	1204624	OR	1	RAMP_ON    	5n18.82ora   	0
+5	N	18.82	1204622	1204623	1204625	QU	2	QUEUE      	5n18.82ora   	0
+5	N	18.82	1204622	1204623	1204626	DM	3	DEMAND     	5n18.82ora   	0
+5	N	18.82	1204622	1204623	1204627	PA	4	PASSAGE    	5n18.82ora   	0
+5	N	18.82	1204622	1204628	1204629	FR	1	RAMP_OFF   	5n18.5fr     	1
+5	N	18.82	1204622	1210106	1204630	HV	1	SD_1       	5n18.82hv    	1
+5	N	18.82	1204622	1204628	1210104	FR	2	SD_3       	?            	0
+5	N	18.82	1204622	1204628	1210105	FR	3	SD_5       	?            	0
+5	N	19.33	1204637	1204638	1204639	ML	1	ML_1       	5n19.33ml    	7
+5	N	19.33	1204637	1204638	1204640	ML	2	ML_2       	5n19.33ml    	6
+5	N	19.33	1204637	1204638	1204641	ML	3	ML_3       	5n19.33ml    	5
+5	N	19.33	1204637	1204638	1204642	ML	4	ML_4       	5n19.33ml    	4
+5	S	19.33	1204637	1204643	1204645	OS	1	OS_1       	5s19.33ml    	6
+5	S	19.33	1204637	1204643	1204646	OS	2	OS_2       	5s19.33ml    	5
+5	S	19.33	1204637	1204643	1204647	OS	3	OS_3       	5s19.33ml    	4
+5	S	19.33	1204637	1204643	1204648	OS	4	OS_4       	5s19.33ml    	3
+5	N	19.33	1204637	1204638	1210107	ML	5	ML_5       	5n19.33ml    	3
+5	N	19.33	1204637	1204638	1210108	ML	6	ML_6       	5n19.33ml    	2
+5	N	19.33	1204637	1204638	1210111	ML	7	SD_5       	5n19.33ml    	1
+5	S	19.33	1204637	1204643	1210113	OS	5	OS_5       	5s19.33ml    	2
+5	S	19.33	1204637	1204643	1210114	OS	6	OS_6       	5s19.33ml    	1
+5	N	19.33	1204637	1210115	1210116	HV	1	SD_1       	5n19.33hv    	1
+5	N	19.33	1204637	1210115	1210117	HV	2	SD_2       	5s19.33hv    	1
+5	S	19.33	1204637	1210121	1210118	OH	1	SD_3       	?            	0
+5	S	19.33	1204637	1210121	1210119	OH	2	SD_4       	?            	0
+5	S	19.8	1204649	1204650	1210292	ML	1	ML_1       	5s19.8ml     	6
+5	S	19.8	1204649	1204650	1210293	ML	2	ML_2       	5s19.8ml     	5
+5	S	19.8	1204649	1204650	1210294	ML	3	ML_3       	5s19.8ml     	4
+5	S	19.8	1204649	1204650	1210295	ML	4	ML_4       	5s19.8ml     	3
+5	S	19.8	1204649	1204650	1210296	ML	5	ML_5       	5s19.8ml     	2
+5	S	19.8	1204649	1204650	1210297	ML	6	ML_6       	5s19.8ml     	1
+5	S	19.8	1204649	1210304	1210298	DM	1	DEMAND     	5s19.8ora    	0
+5	S	19.8	1204649	1210304	1210299	PA	2	PASSAGE    	5s19.8ora    	0
+5	S	19.8	1204649	1210304	1210300	QU	3	QUEUE      	5s19.8ora    	0
+5	S	19.8	1204649	1210304	1210301	OR	4	RAMP_ON    	5s19.8ora    	0
+5	S	19.8	1204649	1210305	1210302	HV	1	SD_1       	5s19.8hv     	2
+5	S	19.8	1204649	1210305	1210303	HV	2	SD_2       	5s19.8hv     	1
+5	S	19.9	1204664	1204665	1210273	ML	1	ML_1       	5s19.9ml     	6
+5	S	19.9	1204664	1204665	1210274	ML	2	ML_2       	5s19.9ml     	5
+5	S	19.9	1204664	1204665	1210275	ML	3	ML_3       	5s19.9ml     	4
+5	S	19.9	1204664	1204665	1210276	ML	4	ML_4       	5s19.9ml     	3
+5	S	19.9	1204664	1204665	1210277	ML	5	ML_5       	5s19.9ml     	2
+5	S	19.9	1204664	1204665	1210278	ML	6	ML_6       	5s19.9ml     	1
+5	S	19.9	1204664	1210326	1210279	HV	1	SD_1       	5s19.9hv     	2
+5	S	19.9	1204664	1210326	1210280	HV	2	SD_2       	5s19.9hv     	1
+5	S	19.9	1204664	1210323	1210281	DM	1	DEMAND     	5s19.9ora    	0
+5	S	19.9	1204664	1210323	1210282	PA	2	PASSAGE    	5s19.9ora    	0
+5	S	19.9	1204664	1210323	1210283	QU	3	QUEUE      	5s19.9ora    	0
+5	S	19.9	1204664	1210323	1210284	OR	4	RAMP_ON    	5s19.9ora    	0
+5	S	19.9	1204664	1210323	1210285	RH	5	RAMP_HOV   	5s19.9ora    	0
+5	S	19.9	1204664	1210324	1210287	FR	1	RAMP_OFF   	5s19.9fr     	2
+5	S	19.9	1204664	1210324	1210288	FR	2	SD_3       	5s19.9fr     	1
+5	S	19.9	1204664	1210324	1210289	FR	3	SD_4       	5s19.9ff     	1
+5	S	19.9	1204664	1210325	1210290	OC	1	SD_5       	?            	0
+5	N	20	1204666	1204667	1204668	OR	1	RAMP_ON    	5n20ora      	0
+5	N	20	1204666	1204667	1204669	QU	5	QUEUE      	5n20ora      	0
+5	N	20	1204666	1204667	1204670	DM	3	DEMAND     	5n20ora      	0
+5	N	20	1204666	1204667	1204671	PA	4	PASSAGE    	5n20ora      	0
+5	N	20	1204666	1204672	1204673	ML	1	ML_1       	5n20ml       	5
+5	N	20	1204666	1204672	1204674	ML	2	ML_2       	5n20ml       	4
+5	N	20	1204666	1204672	1204675	ML	3	ML_3       	5n20ml       	3
+5	N	20	1204666	1204672	1204676	ML	4	ML_4       	5n20ml       	2
+5	N	20	1204666	1204672	1204677	ML	5	ML_5       	5n20ml       	1
+5	N	20	1204666	1204678	1204679	FR	1	RAMP_OFF   	5n20fr       	1
+5	N	20	1204666	1211117	1204680	HV	1	SD_1       	5n20hv       	2
+5	N	20	1204666	1211117	1211113	HV	2	SD_2       	5n20hv       	1
+5	N	20	1204666	1204667	1211114	OR	2	RAMP_HOV   	5n20ora      	0
+5	N	20	1204666	1211118	1211115	CD	1	COLL_DIST_1	5n20cd       	2
+5	N	20	1204666	1211118	1211116	CD	2	COLL_DIST_2	5n20cd       	1
+5	N	20.23	1204681	1204682	1204683	ML	1	ML_1       	5n20.23ml    	5
+5	N	20.23	1204681	1204682	1204684	ML	2	ML_2       	5n20.23ml    	4
+5	N	20.23	1204681	1204682	1204685	ML	3	ML_3       	5n20.23ml    	3
+5	N	20.23	1204681	1204682	1204686	ML	4	ML_4       	5n20.23ml    	2
+5	N	20.23	1204681	1204682	1204687	ML	5	ML_5       	5n20.23ml    	1
+5	S	20.23	1204681	1204688	1204689	OS	1	OS_1       	5s20.23ml    	5
+5	S	20.23	1204681	1204688	1204690	OS	2	OS_2       	5s20.23ml    	4
+5	S	20.23	1204681	1204688	1204692	OS	4	OS_4       	5s20.23ml    	3
+5	S	20.23	1204681	1204688	1204693	OS	5	OS_5       	5s20.23ml    	1
+5	N	20.23	1204681	1210271	1210262	CD	1	COLL_DIST_1	5n20.23cd    	4
+5	N	20.23	1204681	1210271	1210263	CD	2	COLL_DIST_2	5n20.23cd    	3
+5	N	20.23	1204681	1210271	1210264	CD	3	SD_5       	5n20.23cd    	2
+5	N	20.23	1204681	1210271	1210265	CD	4	SD_6       	5n20.23cd    	1
+5	N	20.23	1204681	1210270	1210266	HV	1	SD_1       	5n20.23hv    	2
+5	N	20.23	1204681	1210270	1210267	HV	2	SD_2       	5n20.23hv    	1
+5	S	20.23	1204681	1210272	1210268	OH	1	SD_3       	5s20.23hv    	1
+5	S	20.23	1204681	1210272	1210269	OH	2	SD_4       	5n20.23ml    	6
+5	S	20.24	1204681	1204688	1204691	OS	3	OS_3       	5s20.23ml    	2
+5	N	20.59	1204696	1204697	1208301	ML	1	ML_1       	5n20.59ml    	6
+5	N	20.59	1204696	1204697	1208302	ML	2	ML_2       	5n20.59ml    	5
+5	N	20.59	1204696	1204697	1208303	ML	3	ML_3       	5n20.59ml    	4
+5	N	20.59	1204696	1204697	1208304	ML	4	ML_4       	5n20.59ml    	3
+5	S	20.59	1204694	1204695	1208305	ML	1	ML_1       	5s20.59ml    	6
+5	S	20.59	1204694	1204695	1208306	ML	2	ML_2       	5s20.59ml    	5
+5	S	20.59	1204694	1204695	1208307	ML	3	ML_3       	5s20.59ml    	4
+5	S	20.59	1204694	1204695	1208308	ML	4	ML_4       	5s20.59ml    	3
+5	S	20.59	1204694	1204695	1208309	ML	5	ML_5       	5s20.59ml    	2
+5	S	20.59	1204694	1204695	1210243	ML	6	ML_6       	5s20.59ml    	1
+5	S	20.59	1204694	1210256	1210244	CD	1	COLL_DIST_1	5s20.59cd    	3
+5	S	20.59	1204694	1210256	1210245	CD	2	COLL_DIST_2	5s20.59cd    	2
+5	S	20.59	1204694	1210256	1210246	CD	3	SD_3       	5s20.59cd    	1
+5	S	20.59	1204694	1210254	1210247	DM	1	DEMAND     	5s20.59or    	0
+5	S	20.59	1204694	1210254	1210248	PA	2	PASSAGE    	5s20.59or    	0
+5	S	20.59	1204694	1210254	1210249	QU	3	QUEUE      	5s20.59or    	0
+5	S	20.59	1204694	1210254	1210251	OR	4	RAMP_ON    	5s20.59or    	0
+5	S	20.59	1204694	1210255	1210252	HV	1	SD_1       	5s20.59hv    	2
+5	S	20.59	1204694	1210255	1210253	HV	2	SD_2       	5s20.59hv    	1
+5	N	20.59	1204696	1204697	1211119	ML	5	ML_5       	5n20.59ml    	2
+5	N	20.59	1204696	1204697	1211120	ML	6	ML_6       	5n20.59ml    	1
+5	N	20.59	1204696	1211133	1211121	HV	1	SD_1       	5n20.59hv    	1
+5	N	20.59	1204696	1211133	1211122	HV	2	SD_2       	5n20.59hv_2  	1
+5	N	20.59	1204696	1211134	1211123	OR	1	RAMP_ON    	5n20.59or    	0
+5	N	20.59	1204696	1211134	1211124	PA	2	PASSAGE    	5n20.59or    	0
+5	N	20.59	1204696	1211134	1211125	DM	3	DEMAND     	5n20.59or    	0
+5	N	20.59	1204696	1211134	1211126	QU	4	QUEUE      	5n20.59or    	0
+5	N	20.59	1204696	1211136	1211128	CD	1	COLL_DIST_1	5n20.59cd    	2
+5	N	20.59	1204696	1211136	1211129	CD	2	COLL_DIST_2	5n20.59cd    	1
+5	N	20.59	1204696	1211135	1211131	FR	1	RAMP_OFF   	5n20.59fr    	1
+5	N	20.59	1204696	1211135	1211132	FR	3	SD_3       	5n20.59fr    	1
+5	N	20.94	1204698	1204699	1208310	ML	1	ML_1       	5n20.94ml    	3
+5	N	20.94	1204698	1204699	1208311	ML	2	ML_2       	5n20.94ml    	2
+5	N	20.94	1204698	1204699	1208312	ML	3	ML_3       	5n20.94ml    	1
+5	N	20.94	1204698	1211146	1208313	FF	1	SD_2       	5n20.94ml    	3
+5	N	20.94	1204698	1211147	1211137	DM	4	DEMAND     	5n20.94or    	0
+5	N	20.94	1204698	1211147	1211138	PA	3	PASSAGE    	5n20.94or    	0
+5	N	20.94	1204698	1211147	1211139	OR	1	RAMP_ON    	5n20.94or    	0
+5	N	20.94	1204698	1211147	1211140	OR	2	RAMP_HOV   	5n20.94or    	0
+5	N	20.94	1204698	1211147	1211141	QU	5	QUEUE      	5n20.94or    	0
+5	N	20.94	1204698	1211146	1211142	FF	2	SD_3       	5n20.94ml    	2
+5	N	20.94	1204698	1211146	1211143	FF	3	SD_4       	5n20.94ml    	1
+5	N	20.94	1204698	1211148	1211144	CD	1	COLL_DIST_1	5n20.94cd    	2
+5	N	20.94	1204698	1211148	1211145	CD	2	COLL_DIST_2	5n20.94cd    	1
+5	S	20.95	1204700	1204701	1208314	ML	1	ML_1       	5s20.95ml    	6
+5	S	20.95	1204700	1204701	1208315	ML	2	ML_2       	5s20.95ml    	5
+5	S	20.95	1204700	1204701	1208316	ML	3	ML_3       	5s20.95ml    	4
+5	S	20.95	1204700	1204701	1208317	ML	4	ML_4       	5s20.95ml    	3
+5	S	20.95	1204700	1204701	1210225	ML	5	ML_5       	5s20.95ml    	2
+5	S	20.95	1204700	1204701	1210226	ML	6	ML_6       	5s20.95ml    	1
+5	S	20.95	1204700	1210257	1210227	DM	1	DEMAND     	5s20.95or    	0
+5	S	20.95	1204700	1210257	1210228	PA	2	PASSAGE    	5s20.95or    	0
+5	S	20.95	1204700	1210257	1210229	QU	3	QUEUE      	5s20.95or    	0
+5	S	20.95	1204700	1210257	1210230	OR	4	RAMP_ON    	5s20.95or    	0
+5	S	20.95	1204700	1210259	1210231	FR	1	RAMP_OFF   	5s20.95fr_2  	1
+5	S	20.95	1204700	1210257	1210233	RH	5	RAMP_HOV   	5s20.95or    	0
+5	S	20.95	1204700	1210259	1210234	FR	2	SD_3       	5s20.95fr    	2
+5	S	20.95	1204700	1210259	1210235	FR	3	SD_4       	5s20.95fr    	1
+5	S	20.95	1204700	1210260	1210237	CD	1	SD_2       	5s20.95cd_2  	2
+5	S	20.95	1204700	1210260	1210238	CD	2	SD_1       	5s20.95cd_2  	1
+5	S	20.95	1204700	1210261	1210239	FC	1	SD_6       	5s20.95cd_1  	1
+5	S	20.95	1204700	1210258	1210240	CD	1	COLL_DIST_1	5s20.95ff    	3
+5	S	20.95	1204700	1210258	1210241	CD	2	COLL_DIST_2	5s20.95ff    	2
+5	S	20.95	1204700	1210258	1210242	CD	3	SD_5       	5s20.95ff    	1
+5	S	21.25	1204702	1211853	1211154	ML	1	ML_1       	?            	0
+5	S	21.25	1204702	1211853	1211155	ML	2	ML_2       	?            	0
+5	S	21.25	1204702	1211853	1211156	ML	3	ML_3       	?            	0
+5	N	21.25	1204702	1204703	1211157	OS	1	OS_1       	5n21.25os    	3
+5	N	21.25	1204702	1204703	1211158	OS	2	OS_2       	5n21.25os    	2
+5	N	21.25	1204702	1204703	1211159	OS	3	OS_3       	5n21.25os    	1
+5	N	21.25	1204702	1211856	1211160	OH	1	SD_2       	5n21.25oh    	1
+5	S	21.25	1204702	1211854	1211161	HV	1	SD_1       	?            	0
+5	S	21.25	1204702	1211855	1211162	FF	1	SD_3       	5s20.95cd    	3
+5	S	21.25	1204702	1211855	1211163	FF	2	SD_4       	5s20.95cd    	2
+5	S	21.25	1204702	1211855	1211164	FF	3	SD_5       	5s20.95cd    	1
+5	N	21.25	1204702	1211857	1211165	OC	1	COLL_DIST_1	5n21.25cd    	2
+5	N	21.25	1204702	1211857	1211166	OC	2	COLL_DIST_2	5n21.25cd    	1
+5	S	21.92	1204706	1204707	1204708	OR	1	RAMP_ON    	5s21.92ora   	0
+5	S	21.92	1204706	1204707	1204709	QU	2	QUEUE      	5s21.92ora   	0
+5	S	21.92	1204706	1204707	1204710	DM	3	DEMAND     	5s21.92ora   	0
+5	S	21.92	1204706	1204707	1204711	PA	4	PASSAGE    	5s21.92ora   	0
+5	S	21.92	1204706	1211151	1204713	FC	1	COLL_DIST_1	5s21.92cd    	2
+5	S	21.92	1204706	1204714	1204715	HV	1	SD_1       	5s21.92hv    	1
+5	S	21.92	1204706	1204716	1204717	ML	1	ML_1       	5s22.1ml     	3
+5	S	21.92	1204706	1204716	1204718	ML	2	ML_2       	5s22.1ml     	2
+5	S	21.92	1204706	1204716	1204719	ML	3	ML_3       	5s22.1ml     	1
+5	S	21.92	1204706	1211151	1204720	FC	2	SD_3       	5s21.92cd    	1
+5	N	22.1	1204721	1204722	1204723	OR	1	RAMP_ON    	5n22.1ora    	0
+5	N	22.1	1204721	1204722	1204724	QU	2	QUEUE      	5n22.1ora    	0
+5	N	22.1	1204721	1204722	1204725	DM	3	DEMAND     	5n22.1ora    	0
+5	N	22.1	1204721	1204722	1204726	PA	4	PASSAGE    	5n22.1ora    	0
+5	N	22.1	1204721	1204727	1204728	FR	1	RAMP_OFF   	5n22.1fr     	1
+5	N	22.1	1204721	1204729	1204730	HV	1	SD_1       	5n22.1hv     	1
+5	N	22.1	1204721	1204731	1204732	ML	1	ML_1       	5n22.1ml     	4
+5	N	22.1	1204721	1204731	1204733	ML	2	ML_2       	5n22.1ml     	3
+5	N	22.1	1204721	1204731	1204734	ML	3	ML_3       	5n22.1ml     	2
+5	N	22.1	1204721	1204731	1204735	ML	4	ML_4       	5n22.1ml     	1
+5	N	22.1	1204721	1204731	1204736	ML	5	ML_5       	?            	0
+5	N	22.1	1204721	1208955	1208956	OH	1	SD_2       	?            	0
+5	S	22.1	1204721	1204712	1211149	FR	1	SD_4       	5s21.92fr    	2
+5	S	22.1	1204721	1204712	1211150	FR	2	SD_5       	5s21.92fr    	1
+5	S	22.14	1204721	1204737	1204738	OS	1	OS_1       	5s22.14ml    	4
+5	S	22.14	1204721	1204737	1204739	OS	2	OS_2       	5s22.14ml    	3
+5	S	22.14	1204721	1204737	1204740	OS	3	OS_3       	5s22.14ml    	2
+5	S	22.14	1204721	1204737	1204741	OS	4	OS_4       	5s22.14ml    	1
+5	N	22.2	1204742	1204743	1204744	OR	1	RAMP_ON    	5n22.2ora    	0
+5	N	22.2	1204742	1204743	1204745	QU	2	QUEUE      	5n22.2ora    	0
+5	N	22.2	1204742	1204743	1204746	DM	3	DEMAND     	5n22.2ora    	0
+5	N	22.2	1204742	1204743	1204747	PA	4	PASSAGE    	5n22.2ora    	0
+5	N	22.2	1204742	1204748	1204749	HV	1	SD_1       	5n22.2hv     	1
+5	N	22.2	1204742	1204750	1204751	ML	1	ML_1       	5n22.2ml     	4
+5	N	22.2	1204742	1204750	1204752	ML	2	ML_2       	5n22.2ml     	3
+5	N	22.2	1204742	1204750	1204753	ML	3	ML_3       	5n22.2ml     	2
+5	N	22.2	1204742	1204750	1204754	ML	4	ML_4       	5n22.2ml     	1
+5	N	22.2	1204742	1204750	1204755	ML	5	ML_5       	?            	0
+5	N	22.75	1204756	1204757	1204758	OH	1	SD_2       	5n22.75hv    	1
+5	S	22.75	1204756	1204759	1204760	HV	1	SD_1       	5s22.75hv    	1
+5	S	22.75	1204756	1204761	1204762	ML	1	ML_1       	5s22.75ml    	4
+5	S	22.75	1204756	1204761	1204763	ML	2	ML_2       	5s22.75ml    	3
+5	S	22.75	1204756	1204761	1204764	ML	3	ML_3       	5s22.75ml    	2
+5	S	22.75	1204756	1204761	1204765	ML	4	ML_4       	5s22.75ml    	1
+5	N	22.75	1204756	1204766	1204767	OS	1	OS_1       	5n22.75ml    	5
+5	N	22.75	1204756	1204766	1204768	OS	2	OS_2       	5n22.75ml    	4
+5	N	22.75	1204756	1204766	1204769	OS	3	OS_3       	5n22.75ml    	2
+5	N	22.75	1204756	1204766	1204770	OS	4	OS_4       	5n22.75ml    	2
+5	N	22.75	1204756	1204766	1204771	OS	5	OS_5       	5n22.75ml    	1
+5	N	22.75	1204756	1204772	1204773	HN	1	RAMP_ON    	5n22.75ff    	1
+5	S	22.75	1204756	1204774	1204775	HF	1	RAMP_OFF   	?            	0
+5	S	22.75	1204756	1212715	1212713	FF	1	SD_4       	5s22.75ff    	1
+5	S	22.75	1204756	1212715	1212714	FF	2	SD_5       	?            	0
+5	S	23.05	1204776	1204777	1204778	HV	1	SD_1       	5s23.05hv    	1
+5	S	23.05	1204776	1204779	1204780	OH	1	SD_2       	?            	0
+5	S	23.05	1204776	1204781	1204782	ML	1	ML_1       	5s23.05ml    	5
+5	S	23.05	1204776	1204781	1204783	ML	2	ML_2       	5s23.05ml    	4
+5	S	23.05	1204776	1204781	1204784	ML	3	ML_3       	5s23.05ml    	3
+5	S	23.05	1204776	1204781	1204785	ML	4	ML_4       	5s23.05ml    	2
+5	S	23.05	1204776	1204781	1204786	ML	5	ML_5       	5s23.05ml    	1
+5	N	23.05	1204776	1204787	1204788	OS	1	OS_1       	?            	0
+5	N	23.05	1204776	1204787	1204789	OS	2	OS_2       	?            	0
+5	N	23.05	1204776	1204787	1204790	OS	3	OS_3       	?            	0
+5	N	23.05	1204776	1204787	1204791	OS	4	OS_4       	?            	0
+5	N	23.05	1204776	1204787	1204792	OS	5	OS_5       	?            	0
+5	N	23.05	1204776	1212730	1212728	FO	1	SD_3       	?            	0
+5	N	23.05	1204776	1212730	1212729	FO	2	SD_4       	?            	0
+5	S	23.1	1204793	1204794	1204795	FR	1	RAMP_OFF   	?            	0
+5	S	23.1	1204793	1204796	1204797	HV	1	SD_1       	?            	0
+5	S	23.1	1204793	1204798	1204799	ML	1	ML_1       	?            	0
+5	S	23.1	1204793	1204798	1204800	ML	2	ML_2       	?            	0
+5	S	23.1	1204793	1204798	1204801	ML	3	ML_3       	?            	0
+5	N	23.2	1204802	1204803	1204804	FF	1	SD_2       	5n23.2ff     	2
+5	N	23.2	1204802	1204803	1204805	FF	2	SD_3       	5n23.2ff     	1
+5	N	23.2	1204802	1204806	1204807	HV	1	SD_1       	5n23.2hv     	1
+5	N	23.2	1204802	1204808	1204809	ML	1	ML_1       	5n23.2ml     	4
+5	N	23.2	1204802	1204808	1204810	ML	2	ML_2       	5n23.2ml     	3
+5	N	23.2	1204802	1204808	1204811	ML	3	ML_3       	5n23.2ml     	2
+5	N	23.2	1204802	1204808	1204812	ML	4	ML_4       	5n23.2ml     	1
+5	S	23.2	1204802	1212706	1212704	FF	1	SD_4       	5s23.05ff    	2
+5	S	23.2	1204802	1212706	1212705	FF	2	SD_5       	5s23.05ff    	1
+5	S	23.5	1204813	1204814	1204815	HV	1	SD_1       	5s23.5hv     	1
+5	S	23.5	1204813	1204816	1204817	ML	1	ML_1       	5s23.5ml     	6
+5	S	23.5	1204813	1204816	1204818	ML	2	ML_2       	5s23.5ml     	5
+5	S	23.5	1204813	1204816	1204819	ML	3	ML_3       	5s23.5ml     	4
+5	S	23.5	1204813	1204816	1204820	ML	4	ML_4       	5s23.5ml     	3
+5	S	23.5	1204813	1204816	1204821	ML	5	ML_5       	5s23.5ml     	2
+5	S	23.5	1204813	1204816	1204822	ML	6	ML_6       	5s23.5ml     	1
+5	N	23.5	1204813	1204823	1204824	OH	1	SD_2       	5n23.5hv     	1
+5	N	23.5	1204813	1204825	1204826	OS	1	OS_1       	5n23.5ml     	6
+5	N	23.5	1204813	1204825	1204827	OS	2	OS_2       	5n23.5ml     	5
+5	N	23.5	1204813	1204825	1204828	OS	3	OS_3       	5n23.5ml     	4
+5	N	23.5	1204813	1204825	1204829	OS	4	OS_4       	5n23.5ml     	3
+5	N	23.5	1204813	1204825	1204830	OS	5	OS_5       	5n23.5ml     	2
+5	N	23.5	1204813	1204825	1204831	OS	6	OS_6       	5n23.5ml     	1
+5	S	23.69	1204832	1204833	1204834	OR	1	RAMP_ON    	5s23.69ora   	0
+5	S	23.69	1204832	1204833	1204835	QU	2	QUEUE      	5s23.69ora   	0
+5	S	23.69	1204832	1204833	1204836	DM	3	DEMAND     	5s23.69ora   	0
+5	S	23.69	1204832	1204833	1204837	PA	4	PASSAGE    	5s23.69ora   	0
+5	S	23.69	1204832	1204833	1204838	RH	5	RAMP_HOV   	5s23.69ora   	0
+5	S	23.69	1204832	1204839	1204840	HV	1	SD_1       	5s23.69hv    	1
+5	S	23.69	1204832	1204841	1204842	ML	1	ML_1       	5s23.69ml    	5
+5	S	23.69	1204832	1204841	1204843	ML	2	ML_2       	5s23.69ml    	4
+5	S	23.69	1204832	1204841	1204844	ML	3	ML_3       	5s23.69ml    	3
+5	S	23.69	1204832	1204841	1204845	ML	4	ML_4       	5s23.69ml    	2
+5	S	23.69	1204832	1204841	1204846	ML	5	ML_5       	5s23.69ml    	1
+5	N	24.05	1204847	1204848	1204849	OR	1	RAMP_ON    	5n24.05ora   	0
+5	N	24.05	1204847	1204848	1204850	QU	2	QUEUE      	5n24.05ora   	0
+5	N	24.05	1204847	1204848	1204851	DM	3	DEMAND     	5n24.05ora   	0
+5	N	24.05	1204847	1204848	1204852	PA	4	PASSAGE    	5n24.05ora   	0
+5	N	24.05	1204847	1204848	1204853	RH	5	RAMP_HOV   	5n24.05ora   	0
+5	N	24.05	1204847	1204854	1204855	FR	1	RAMP_OFF   	5n24.05fr    	1
+5	N	24.05	1204847	1204854	1204856	FR	2	SD_2       	5n24.05fr    	2
+5	S	24.05	1204847	1204857	1204858	OF	1	SD_4       	5s24.05fr    	1
+5	N	24.05	1204847	1204859	1204860	HV	1	SD_1       	5n24.05hv    	1
+5	N	24.05	1204847	1204861	1204862	ML	1	ML_1       	5n24.05ml    	5
+5	N	24.05	1204847	1204861	1204863	ML	2	ML_2       	5n24.05ml    	4
+5	N	24.05	1204847	1204861	1204864	ML	3	ML_3       	5n24.05ml    	3
+5	N	24.05	1204847	1204861	1204865	ML	4	ML_4       	5n24.05ml    	2
+5	N	24.05	1204847	1204861	1204866	ML	5	ML_5       	5n24.05ml    	1
+5	S	24.05	1204847	1204867	1204868	OH	1	SD_3       	5s24.05ml    	6
+5	S	24.05	1204847	1204869	1204870	OS	1	OS_1       	5s24.05ml    	5
+5	S	24.05	1204847	1204869	1204871	OS	2	OS_2       	5s24.05ml    	4
+5	S	24.05	1204847	1204869	1204872	OS	3	OS_3       	5s24.05ml    	3
+5	S	24.05	1204847	1204869	1204873	OS	4	OS_4       	5s24.05ml    	2
+5	S	24.05	1204847	1204869	1204874	OS	5	OS_5       	5s24.05ml    	1
+5	N	24.5	1204875	1204876	1204877	HV	1	SD_1       	5n24.5hv     	1
+5	N	24.5	1204875	1204878	1204879	ML	1	ML_1       	5n24.5ml     	5
+5	N	24.5	1204875	1204878	1204880	ML	2	ML_2       	5n24.5ml     	4
+5	N	24.5	1204875	1204878	1204881	ML	3	ML_3       	5n24.5ml     	3
+5	N	24.5	1204875	1204878	1204882	ML	4	ML_4       	5n24.5ml     	2
+5	N	24.5	1204875	1204878	1204883	ML	5	ML_5       	5n24.5ml     	1
+5	S	24.5	1204875	1204884	1204885	OH	1	SD_2       	5s24.5hv     	1
+5	S	24.5	1204875	1204886	1204887	OS	1	OS_1       	5s24.5ml     	5
+5	S	24.5	1204875	1204886	1204888	OS	2	OS_2       	5s24.5ml     	4
+5	S	24.5	1204875	1204886	1204889	OS	3	OS_3       	5s24.5ml     	3
+5	S	24.5	1204875	1204886	1204890	OS	4	OS_4       	5s24.5ml     	2
+5	S	24.5	1204875	1204886	1204891	OS	5	OS_5       	5s24.5ml     	1
+5	S	24.84	1204892	1204893	1204894	OR	1	RAMP_ON    	5s24.84ora   	0
+5	S	24.84	1204892	1204893	1204895	QU	2	QUEUE      	5s24.84ora   	0
+5	S	24.84	1204892	1204893	1204896	DM	3	DEMAND     	5s24.84ora   	0
+5	S	24.84	1204892	1204893	1204897	PA	4	PASSAGE    	5s24.84ora   	0
+5	S	24.84	1204892	1204893	1204898	RH	5	RAMP_HOV   	5s24.84ora   	0
+5	S	24.84	1204892	1204899	1204900	FR	1	RAMP_OFF   	5s24.84fr    	1
+5	S	24.84	1204892	1204899	1204901	FR	2	SD_2       	?            	0
+5	S	24.84	1204892	1204902	1204903	HV	1	SD_1       	5s24.84hv    	1
+5	S	24.84	1204892	1204904	1204905	ML	1	ML_1       	5s24.84ml    	5
+5	S	24.84	1204892	1204904	1204906	ML	2	ML_2       	5s24.84ml    	4
+5	S	24.84	1204892	1204904	1204907	ML	3	ML_3       	5s24.84ml    	3
+5	S	24.84	1204892	1204904	1204908	ML	4	ML_4       	5s24.84ml    	2
+5	S	24.84	1204892	1204904	1204909	ML	5	ML_5       	5s24.84ml    	1
+5	S	24.84	1204892	1204910	1204911	OH	1	SD_3       	?            	0
+5	N	25.08	1204912	1204913	1204914	OR	1	RAMP_ON    	5n25.08ora   	0
+5	N	25.08	1204912	1204913	1204915	QU	2	QUEUE      	5n25.08ora   	0
+5	N	25.08	1204912	1204913	1204916	DM	3	DEMAND     	5n25.08ora   	0
+5	N	25.08	1204912	1204913	1204917	PA	4	PASSAGE    	5n25.08ora   	0
+5	N	25.08	1204912	1204913	1204918	RH	5	RAMP_HOV   	5n25.08ora   	0
+5	N	25.08	1204912	1204919	1204920	FR	1	RAMP_OFF   	5n25.08fr    	2
+5	N	25.08	1204912	1204919	1204921	FR	2	SD_2       	5n25.08fr    	1
+5	N	25.08	1204912	1204922	1204923	HV	1	SD_1       	5n25.08hv    	1
+5	N	25.08	1204912	1204924	1204925	ML	4	ML_4       	5n25.08ml    	2
+5	N	25.08	1204912	1204924	1204926	ML	5	ML_5       	5n25.08ml    	1
+5	N	25.08	1204912	1204924	1204927	ML	3	ML_3       	5n25.08ml    	3
+5	N	25.08	1204912	1204924	1212843	ML	1	ML_1       	5n25.08ml    	5
+5	N	25.08	1204912	1204924	1212844	ML	2	ML_2       	5n25.08ml    	4
+5	N	25.15	1204928	1204929	1204930	OR	1	RAMP_ON    	5n25.15ora   	0
+5	N	25.15	1204928	1204929	1204931	QU	2	QUEUE      	5n25.15ora   	0
+5	N	25.15	1204928	1204929	1204932	DM	3	DEMAND     	5n25.15ora   	0
+5	N	25.15	1204928	1204929	1204933	PA	4	PASSAGE    	5n25.15ora   	0
+5	N	25.15	1204928	1204929	1204934	RH	5	RAMP_HOV   	5n25.15ora   	0
+5	N	25.15	1204928	1204935	1204936	HV	1	SD_1       	5n25.15hv    	1
+5	N	25.15	1204928	1204937	1204938	ML	4	ML_4       	5n25.15ml    	2
+5	N	25.15	1204928	1204937	1204939	ML	5	ML_5       	5n25.15ml    	1
+5	N	25.15	1204928	1204937	1204940	ML	3	ML_3       	5n25.15ml    	3
+5	N	25.15	1204928	1204937	1212845	ML	1	ML_1       	5n25.15ml    	5
+5	N	25.15	1204928	1204937	1212846	ML	2	ML_2       	5n25.15ml    	4
+5	S	25.8	1204941	1204942	1204943	HV	1	SD_1       	5s25.8hv     	1
+5	S	25.8	1204941	1204944	1204945	ML	1	ML_1       	5s25.8ml     	5
+5	S	25.8	1204941	1204944	1204946	ML	2	ML_2       	5s25.8ml     	4
+5	S	25.8	1204941	1204944	1204947	ML	3	ML_3       	5s25.8ml     	3
+5	S	25.8	1204941	1204944	1204948	ML	4	ML_4       	5s25.8ml     	2
+5	S	25.8	1204941	1204944	1204949	ML	5	ML_5       	5s25.8ml     	1
+5	N	25.8	1204941	1204950	1204951	OS	1	OS_1       	5n25.8ml     	5
+5	N	25.8	1204941	1204950	1204952	OS	2	OS_2       	5n25.8ml     	4
+5	N	25.8	1204941	1204950	1204953	OS	3	OS_3       	5n25.8ml     	3
+5	N	25.8	1204941	1204950	1204954	OS	4	OS_4       	5n25.8ml     	2
+5	N	25.8	1204941	1204950	1204955	OS	5	OS_5       	5n25.8ml     	1
+5	N	25.8	1204941	1204956	1204957	OH	1	SD_2       	5n25.8hv     	1
+5	S	26.35	1204958	1204959	1204960	OR	1	RAMP_ON    	5s26.35ora   	0
+5	S	26.35	1204958	1204959	1204961	QU	2	QUEUE      	5s26.35ora   	0
+5	S	26.35	1204958	1204959	1204962	DM	3	DEMAND     	5s26.35ora   	0
+5	S	26.35	1204958	1204959	1204963	PA	4	PASSAGE    	5s26.35ora   	0
+5	S	26.35	1204958	1204959	1204964	RH	5	RAMP_HOV   	5s26.35ora   	0
+5	S	26.35	1204958	1204965	1204966	HV	1	SD_1       	5s26.35hv    	1
+5	S	26.35	1204958	1204967	1204968	ML	1	ML_1       	5s26.35ml    	5
+5	S	26.35	1204958	1204967	1204969	ML	2	ML_2       	5s26.35ml    	4
+5	S	26.35	1204958	1204967	1204970	ML	3	ML_3       	5s26.35ml    	3
+5	S	26.35	1204958	1204967	1204971	ML	4	ML_4       	5s26.35ml    	2
+5	S	26.35	1204958	1204967	1204972	ML	5	ML_5       	5s26.35ml    	1
+5	N	26.56	1204973	1204974	1204975	OR	1	RAMP_ON    	5n26.56ora   	0
+5	N	26.56	1204973	1204974	1204976	QU	2	QUEUE      	5n26.56ora   	0
+5	N	26.56	1204973	1204974	1204977	DM	3	DEMAND     	5n26.56ora   	0
+5	N	26.56	1204973	1204974	1204978	PA	4	PASSAGE    	5n26.56ora   	0
+5	N	26.56	1204973	1204980	1204981	HV	1	SD_1       	5n26.56hv    	1
+5	N	26.56	1204973	1204982	1204983	ML	1	ML_1       	5n26.56ml    	5
+5	N	26.56	1204973	1204982	1204984	ML	2	ML_2       	5n26.56ml    	4
+5	N	26.56	1204973	1204982	1204985	ML	3	ML_3       	5n26.56ml    	3
+5	N	26.56	1204973	1204982	1204986	ML	4	ML_4       	5n26.56ml    	2
+5	N	26.56	1204973	1204982	1204987	ML	5	ML_5       	5n26.56ml    	1
+5	S	26.66	1204988	1204989	1204990	QU	1	QUEUE      	5s26.66ora   	0
+5	S	26.66	1204988	1204989	1204991	DM	2	DEMAND     	5s26.66ora   	0
+5	S	26.66	1204988	1204989	1204992	PA	3	PASSAGE    	5s26.66ora   	0
+5	S	26.66	1204988	1204993	1204994	FR	1	RAMP_OFF   	5s26.66fr    	1
+5	S	26.66	1204988	1204995	1204996	HV	1	SD_1       	5s26.66hv    	1
+5	S	26.66	1204988	1204997	1204998	ML	1	ML_1       	5s26.66ml    	5
+5	S	26.66	1204988	1204997	1204999	ML	2	ML_2       	5s26.66ml    	4
+5	S	26.66	1204988	1204997	1205000	ML	3	ML_3       	5s26.66ml    	3
+5	S	26.66	1204988	1204997	1205001	ML	4	ML_4       	5s26.66ml    	2
+5	S	26.66	1204988	1204997	1205002	ML	5	ML_5       	5s26.66ml    	1
+5	N	26.81	1205003	1205004	1205005	QU	1	QUEUE      	5n26.81ora   	0
+5	N	26.81	1205003	1205004	1205006	DM	2	DEMAND     	5n26.81ora   	0
+5	N	26.81	1205003	1205004	1205007	PA	3	PASSAGE    	5n26.81ora   	0
+5	N	26.81	1205003	1205008	1205009	OF	1	SD_3       	5n26.56fr    	1
+5	N	26.81	1205003	1205010	1205011	HV	1	SD_1       	5n26.81hv    	1
+5	N	26.81	1205003	1205012	1205013	ML	1	ML_1       	5n26.81ml    	6
+5	N	26.81	1205003	1205012	1205014	ML	2	ML_2       	5n26.81ml    	5
+5	N	26.81	1205003	1205012	1205015	ML	3	ML_3       	5n26.81ml    	4
+5	N	26.81	1205003	1205012	1205016	ML	4	ML_4       	5n26.81ml    	3
+5	N	26.81	1205003	1205012	1205017	ML	5	ML_5       	5n26.81ml    	2
+5	N	26.81	1205003	1205012	1205018	ML	6	ML_6       	5n26.81ml    	1
+5	S	27.43	1205019	1205020	1205021	OR	1	RAMP_ON    	5s27.43ora   	0
+5	S	27.43	1205019	1205020	1205022	QU	2	QUEUE      	5s27.43ora   	0
+5	S	27.43	1205019	1205020	1205023	DM	3	DEMAND     	5s27.43ora   	0
+5	S	27.43	1205019	1205020	1205024	PA	4	PASSAGE    	5s27.43ora   	0
+5	S	27.43	1205019	1205020	1205025	RH	5	RAMP_HOV   	5s27.43ora   	0
+5	S	27.43	1205019	1205026	1205027	HV	1	SD_1       	5s27.43hv    	1
+5	S	27.43	1205019	1205028	1205029	ML	1	ML_1       	5s27.43ml    	6
+5	S	27.43	1205019	1205028	1205030	ML	2	ML_2       	5s27.43ml    	5
+5	S	27.43	1205019	1205028	1205031	ML	3	ML_3       	5s27.43ml    	4
+5	S	27.43	1205019	1205028	1205032	ML	4	ML_4       	5s27.43ml    	3
+5	S	27.43	1205019	1205028	1205033	ML	5	ML_5       	5s27.43ml    	2
+5	S	27.43	1205019	1205028	1212847	ML	6	ML_6       	5s27.43ml    	1
+5	N	27.55	1205034	1205035	1205036	OR	1	RAMP_ON    	5n27.55ora   	0
+5	N	27.55	1205034	1205035	1205037	QU	2	QUEUE      	5n27.55ora   	0
+5	N	27.55	1205034	1205035	1205038	DM	3	DEMAND     	5n27.55ora   	0
+5	N	27.55	1205034	1205035	1205039	PA	4	PASSAGE    	5n27.55ora   	0
+5	N	27.55	1205034	1205035	1205040	RH	5	RAMP_HOV   	5n27.55ora   	0
+5	N	27.55	1205034	1205041	1205042	FR	1	RAMP_OFF   	5n27.55fr    	1
+5	N	27.55	1205034	1205045	1205048	ML	3	ML_3       	5n27.55ml    	3
+5	N	27.55	1205034	1205045	1205049	ML	4	ML_4       	5n27.55ml    	2
+5	N	27.55	1205034	1205045	1205050	ML	5	ML_5       	5n27.55ml    	1
+5	S	27.7	1205051	1205052	1205053	OR	1	RAMP_ON    	5s27.7ora    	0
+5	S	27.7	1205051	1205052	1205054	QU	2	QUEUE      	5s27.7ora    	0
+5	S	27.7	1205051	1205052	1205055	DM	3	DEMAND     	5s27.7ora    	0
+5	S	27.7	1205051	1205052	1205056	PA	4	PASSAGE    	5s27.7ora    	0
+5	S	27.7	1205051	1205052	1205057	RH	5	RAMP_HOV   	5s27.7ora    	0
+5	S	27.7	1205051	1205058	1205059	FR	1	RAMP_OFF   	5s27.7fr     	1
+5	S	27.7	1205051	1205062	1205066	ML	4	ML_4       	5s27.7ml     	2
+5	S	27.7	1205051	1205062	1205067	ML	5	ML_5       	5s27.7ml     	1
+5	N	27.7	1205068	1205071	1205075	ML	4	ML_4       	5n27.56ml    	3
+5	N	27.7	1205068	1205071	1205076	ML	5	ML_5       	5n27.56ml    	2
+5	N	27.7	1205068	1210814	1210807	DM	1	DEMAND     	5n27.56ora   	0
+5	N	27.7	1205068	1210814	1210808	PA	2	PASSAGE    	5n27.56ora   	0
+5	N	27.7	1205068	1210814	1210809	QU	3	QUEUE      	5n27.56ora   	0
+5	N	27.7	1205068	1205071	1210810	ML	6	ML_6       	5n27.56ml    	1
+5	N	27.7	1205068	1210814	1210811	OR	4	RAMP_ON    	5n27.56ora   	0
+5	N	27.7	1205068	1210814	1210813	RH	5	RAMP_HOV   	5n27.56ora   	0
+5	N	28.1	1205077	1205078	1205079	OR	1	RAMP_ON    	5n28.1ora    	0
+5	N	28.1	1205077	1205078	1205080	QU	2	QUEUE      	5n28.1ora    	0
+5	N	28.1	1205077	1205078	1205081	DM	3	DEMAND     	5n28.1ora    	0
+5	N	28.1	1205077	1205078	1205082	PA	4	PASSAGE    	5n28.1ora    	0
+5	N	28.1	1205077	1205078	1205083	RH	5	RAMP_HOV   	5n28.1ora    	0
+5	N	28.1	1205077	1205084	1205085	FR	1	RAMP_OFF   	5n28.1fr     	1
+5	N	28.1	1205077	1205086	1205087	HV	1	SD_1       	5n28.1hv     	1
+5	N	28.1	1205077	1205088	1205089	ML	1	ML_1       	5n28.1ml     	5
+5	N	28.1	1205077	1205088	1205090	ML	2	ML_2       	5n28.1ml     	4
+5	N	28.1	1205077	1205088	1205091	ML	3	ML_3       	5n28.1ml     	3
+5	N	28.1	1205077	1205088	1205092	ML	4	ML_4       	5n28.1ml     	2
+5	N	28.1	1205077	1205088	1205093	ML	5	ML_5       	5n28.1ml     	1
+5	S	28.35	1205094	1205095	1205096	OR	1	RAMP_ON    	5s28.35ora   	0
+5	S	28.35	1205094	1205095	1205097	QU	2	QUEUE      	5s28.35ora   	0
+5	S	28.35	1205094	1205095	1205098	DM	3	DEMAND     	5s28.35ora   	0
+5	S	28.35	1205094	1205095	1205099	PA	4	PASSAGE    	5s28.35ora   	0
+5	S	28.35	1205094	1205095	1205100	RH	5	RAMP_HOV   	5s28.35ora   	0
+5	S	28.35	1205094	1205101	1205102	FR	1	RAMP_OFF   	5s28.35fr    	1
+5	S	28.35	1205094	1205103	1205104	HV	1	SD_1       	5s28.35hv    	1
+5	S	28.35	1205094	1205105	1205106	ML	1	ML_1       	5s28.35ml    	5
+5	S	28.35	1205094	1205105	1205107	ML	2	ML_2       	5s28.35ml    	4
+5	S	28.35	1205094	1205105	1205108	ML	3	ML_3       	5s28.35ml    	3
+5	S	28.35	1205094	1205105	1205109	ML	4	ML_4       	5s28.35ml    	2
+5	S	28.35	1205094	1205105	1205110	ML	5	ML_5       	5s28.35ml    	1
+5	S	29.02	1205111	1205112	1205113	OR	1	RAMP_ON    	5s29.02ora   	0
+5	S	29.02	1205111	1205112	1205114	QU	2	QUEUE      	5s29.02ora   	0
+5	S	29.02	1205111	1205112	1205115	DM	3	DEMAND     	5s29.02ora   	0
+5	S	29.02	1205111	1205112	1205116	PA	4	PASSAGE    	5s29.02ora   	0
+5	S	29.02	1205111	1205112	1205117	RH	5	RAMP_HOV   	5s29.02ora   	0
+5	N	29.02	1205111	1208538	1205119	OF	1	SD_2       	5n28.58fr    	1
+5	S	29.02	1205111	1205120	1205121	HV	1	SD_1       	?            	0
+5	S	29.02	1205111	1205122	1205123	ML	1	ML_1       	5s29.79ml    	6
+5	S	29.02	1205111	1205122	1205124	ML	2	ML_2       	5s29.79ml    	5
+5	S	29.02	1205111	1205122	1205125	ML	3	ML_3       	5s29.79ml    	4
+5	S	29.02	1205111	1205122	1205126	ML	4	ML_4       	5s29.79ml    	3
+5	S	29.02	1205111	1205122	1205127	ML	5	ML_5       	5s29.79ml    	2
+5	N	29.24	1205128	1205129	1205130	OR	1	RAMP_ON    	5n29.24ora   	0
+5	N	29.24	1205128	1205129	1205131	QU	2	QUEUE      	5n29.24ora   	0
+5	N	29.24	1205128	1205129	1205132	DM	3	DEMAND     	5n29.24ora   	0
+5	N	29.24	1205128	1205129	1205133	PA	4	PASSAGE    	5n29.24ora   	0
+5	N	29.24	1205128	1205129	1205134	RH	5	RAMP_HOV   	5n29.24ora   	0
+5	N	29.24	1205128	1205135	1205136	ML	1	ML_1       	5n29.24ml    	5
+5	N	29.24	1205128	1205135	1205137	ML	2	ML_2       	5n29.24ml    	4
+5	N	29.24	1205128	1205135	1205138	ML	3	ML_3       	5n29.24ml    	3
+5	N	29.24	1205128	1205135	1208493	ML	5	ML_5       	5n29.24ml    	1
+5	N	29.24	1205128	1205135	1208495	ML	4	ML_4       	5n29.24ml    	2
+5	N	29.24	1205128	1208537	1208534	HV	1	SD_1       	5n29.24hv    	1
+5	N	29.24	1205128	1208540	1208539	OF	1	SD_3       	?            	0
+5	N	29.79	1205146	1205147	1205148	OR	1	RAMP_ON    	5n29.79orb   	0
+5	N	29.79	1205146	1205147	1205149	QU	2	QUEUE      	5n29.79orb   	0
+5	N	29.79	1205146	1205147	1205150	DM	3	DEMAND     	5n29.79orb   	0
+5	N	29.79	1205146	1205147	1205151	PA	4	PASSAGE    	5n29.79orb   	0
+5	N	29.79	1205146	1205152	1205153	ML	1	ML_1       	5n29.79ml    	5
+5	N	29.79	1205146	1205152	1205154	ML	2	ML_2       	5n29.79ml    	4
+5	N	29.79	1205146	1205152	1205155	ML	3	ML_3       	5n29.79ml    	3
+5	N	29.79	1205146	1205152	1208356	ML	4	ML_4       	5n29.79ml    	2
+5	N	29.79	1205146	1205152	1208357	ML	5	ML_5       	5n29.79ml    	1
+5	N	29.79	1205146	1208365	1208361	HV	1	SD_1       	5n29.79hv    	1
+5	N	29.79	1205146	1205139	1208501	OS	1	OS_1       	5s29.79ml    	6
+5	N	29.79	1205146	1205139	1208502	OS	2	OS_2       	5s29.79ml    	5
+5	N	29.79	1205146	1205139	1208503	OS	3	OS_3       	5s29.79ml    	4
+5	N	29.79	1205146	1205139	1208504	OS	4	OS_4       	5s29.79ml    	3
+5	N	29.79	1205146	1205139	1208505	OS	5	OS_5       	5s29.79ml    	2
+5	N	29.79	1205146	1205139	1208506	OS	6	OS_6       	5s29.79ml    	1
+5	N	29.79	1205146	1208962	1208507	OH	1	SD_2       	5s29.79hv    	1
+5	N	29.79	1205146	1208963	1208957	FO	1	COLL_DIST_1	?            	0
+5	N	29.79	1205146	1208963	1208958	FO	2	COLL_DIST_2	?            	0
+5	N	29.79	1205146	1208964	1208959	OF	1	SD_3       	?            	0
+5	N	29.79	1205146	1208964	1208960	OF	2	SD_4       	?            	0
+5	N	29.79	1205146	1212052	1208961	OF	1	SD_5       	?            	0
+5	N	30	1205156	1205157	1205158	ML	1	ML_1       	5n30ml       	5
+5	N	30	1205156	1205157	1205159	ML	2	ML_2       	5n30ml       	4
+5	N	30	1205156	1205157	1205160	ML	3	ML_3       	5n30ml       	3
+5	N	30	1205156	1205157	1205161	ML	4	ML_4       	5n30ml       	2
+5	N	30	1205156	1205157	1205162	ML	5	ML_5       	5n30ml       	1
+5	S	30	1205156	1205157	1205163	ML	6	ML_6       	5s29.79ml    	1
+5	N	30	1205156	1208975	1208966	HV	1	SD_1       	5n30ml       	6
+5	S	30	1205156	1208976	1208969	OS	1	OS_1       	5s30.2ml     	5
+5	S	30	1205156	1208976	1208970	OS	2	OS_2       	5s30.2ml     	4
+5	S	30	1205156	1208976	1208971	OS	3	OS_3       	5s30.2ml     	3
+5	S	30	1205156	1208976	1208972	OS	4	OS_4       	5s30.2ml     	2
+5	S	30	1205156	1208977	1208974	OH	1	SD_2       	5s30.2ml     	1
+5	N	30.2	1205164	1205165	1208978	ML	1	ML_1       	5n30.2ml     	5
+5	N	30.2	1205164	1205165	1208979	ML	2	ML_2       	5n30.2ml     	4
+5	N	30.2	1205164	1205165	1208980	ML	3	ML_3       	5n30.2ml     	3
+5	N	30.2	1205164	1205165	1208981	ML	4	ML_4       	5n30.2ml     	2
+5	N	30.2	1205164	1205165	1208982	ML	5	ML_5       	5n30.2ml     	1
+5	N	30.2	1205164	1205166	1208983	OS	1	OS_1       	5s30.2ml        5
+5	N	30.2	1205164	1205166	1208984	OS	2	OS_2       	5s30.2ml        4
+5	N	30.2	1205164	1205166	1208985	OS	3	OS_3       	5s30.2ml        3
+5	N	30.2	1205164	1205166	1208986	OS	4	OS_4       	5s30.2ml        2
+5	N	30.2	1205164	1208989	1208987	HV	1	SD_1       	5n30.2hv     	1
+5	N	30.2	1205164	1208993	1208988	OH	1	SD_2       	5s30.2ml        1
+5	N	30.2	1205164	1208990	1208991	FF	1	SD_3       	5n30.2ff     	1
+5	N	30.4	1205167	1205168	1208994	ML	1	ML_1       	5n30.4ml     	5
+5	N	30.4	1205167	1205168	1208995	ML	2	ML_2       	5n30.4ml     	4
+5	N	30.4	1205167	1205168	1208996	ML	3	ML_3       	5n30.4ml     	3
+5	N	30.4	1205167	1205168	1208997	ML	4	ML_4       	5n30.4ml     	2
+5	N	30.4	1205167	1205169	1208998	OS	1	OS_1       	5s30.4ml     	5
+5	N	30.4	1205167	1205169	1208999	OS	2	OS_2       	5s30.4ml     	4
+5	N	30.4	1205167	1205169	1209001	OS	3	OS_3       	5s30.4ml     	3
+5	N	30.4	1205167	1205169	1209003	OS	4	OS_4       	5s30.4ml     	2
+5	N	30.4	1205167	1205169	1209004	OS	5	OS_5       	5s30.4ml       	1
+5	N	30.4	1205167	1209011	1209005	HV	1	SD_1       	5n30.4ml     	1
+5	S	30.4	1205167	1209014	1209007	OH	1	SD_2       	5s30.4hv     	1
+5	N	30.4	1205167	1209012	1209008	FF	1	SD_3       	5n30.4ffa    	1
+5	N	30.4	1205167	1209012	1209009	FF	2	SD_4       	5n30.4ffb    	1
+5	N	30.4	1205167	1209013	1209010	FF	1	SD_5       	5n30.4ffb    	2
+5	S	30.6	1205172	1205173	1211174	HV	1	SD_4       	5s30.6hv     	1
+5	N	30.6	1205172	1205171	1211175	OH	1	SD_5       	5n30.6hv     	1
+5	S	30.9	1205176	1205177	1205178	OR	1	RAMP_ON    	5s30.9orb    	0
+5	S	30.9	1205176	1205177	1205179	QU	2	QUEUE      	5s30.9orb    	0
+5	S	30.9	1205176	1205177	1205180	DM	3	DEMAND     	5s30.9orb    	0
+5	N	30.9	1205176	1205177	1205181	PA	4	PASSAGE    	5s30.9orb    	0
+5	S	30.9	1205176	1205182	1205183	ML	1	ML_1       	5s30.9ml     	5
+5	S	30.9	1205176	1205182	1205184	ML	2	ML_2       	5s30.9ml     	4
+5	S	30.9	1205176	1205182	1205185	ML	3	ML_3       	5s30.9ml     	3
+5	S	30.9	1205176	1205182	1205186	ML	4	ML_4       	5s30.9ml     	2
+5	S	30.9	1205176	1205182	1205187	ML	5	ML_5       	5s30.9ml     	1
+5	N	30.9	1205176	1205175	1208318	OS	1	OS_1       	5n30.9ml     	5
+5	N	30.9	1205176	1205175	1208319	OS	2	OS_2       	5n30.9ml     	4
+5	N	30.9	1205176	1205175	1208320	OS	3	OS_3       	5n30.9ml     	3
+5	N	30.9	1205176	1205175	1208498	OS	4	OS_4       	5n30.9ml     	2
+5	N	30.9	1205176	1205175	1208500	OS	5	OS_5       	5n30.9ml     	1
+5	S	30.9	1205176	1209694	1209504	HV	1	SD_1       	5s30.9hv     	1
+5	N	30.9	1205176	1209693	1209505	OH	1	SD_6       	5n30.9hv     	1
+5	N	30.9	1205176	1209697	1209695	OF	2	SD_3       	?            	0
+5	N	30.9	1205176	1209697	1209696	OF	1	RAMP_OFF   	5n30.8fr     	1
+5	S	30.9	1205176	1209840	1211152	HB	1	SD_5       	?            	0
+5	N	30.9	1205176	1209841	1211153	FO	1	SD_4       	?            	0
+5	N	31.1	1205188	1205193	1205194	ML	1	ML_1       	5n31.23ml    	5
+5	N	31.1	1205188	1205193	1205195	ML	2	ML_2       	5n31.23ml    	4
+5	N	31.1	1205188	1205193	1205196	ML	3	ML_3       	5n31.23ml    	3
+5	S	31.23	1205188	1205189	1205190	OS	1	OS_1       	5s31.23ml    	5
+5	S	31.23	1205188	1205189	1205191	OS	2	OS_2       	5s31.23ml    	4
+5	S	31.23	1205188	1205189	1205192	OS	3	OS_3       	5s31.23ml    	3
+5	N	31.23	1205188	1205193	1209711	ML	4	ML_4       	5n31.23ml    	2
+5	N	31.23	1205188	1205193	1209712	ML	5	ML_5       	5n31.23ml    	1
+5	N	31.23	1205188	1205189	1209713	OS	4	OS_4       	5s31.23ml    	2
+5	N	31.23	1205188	1205189	1209714	OS	5	OS_5       	5s31.23ml    	1
+5	N	31.23	1205188	1209726	1209715	DM	1	DEMAND     	5n31.23ora   	0
+5	N	31.23	1205188	1209726	1209716	PA	2	PASSAGE    	5n31.23ora   	0
+5	N	31.23	1205188	1209726	1209717	QU	3	QUEUE      	5n31.23ora   	0
+5	N	31.23	1205188	1209726	1209718	OR	4	RAMP_ON    	5n31.23ora   	0
+5	S	31.23	1205188	1209728	1209719	OH	1	SD_1       	5s31.23hv    	2
+5	S	31.23	1205188	1209728	1209720	OH	2	SD_2       	5s31.23hv    	1
+5	N	31.23	1205188	1209727	1209721	HV	1	SD_3       	5n31.23hv    	1
+5	S	31.23	1205188	1209731	1209723	OF	1	SD_4       	5s31.23fr    	2
+5	S	31.23	1205188	1209731	1209724	OF	2	SD_5       	5s31.23fr    	1
+5	N	31.23	1205188	1212741	1212737	HB	1	COLL_DIST_1	?            	0
+5	S	31.23	1205188	1212742	1212738	HB	1	SD_6       	?            	0
+5	S	31.4	1205197	1205198	1205199	OH	1	SD_3       	5n31.4hv     	2
+5	S	31.4	1205197	1205200	1205201	OS	1	OS_1       	5s31.4ml     	6
+5	S	31.4	1205197	1205200	1205202	OS	2	OS_2       	5s31.4ml     	5
+5	S	31.4	1205197	1205200	1205203	OS	3	OS_3       	5s31.4ml     	4
+5	N	31.4	1205197	1205204	1205205	ML	1	ML_1       	5n31.4ml     	6
+5	N	31.4	1205197	1205204	1205206	ML	2	ML_2       	5n31.4ml     	5
+5	N	31.4	1205197	1205204	1205207	ML	3	ML_3       	5n31.4ml     	4
+5	N	31.4	1205197	1205204	1209732	ML	4	ML_4       	5n31.4ml     	3
+5	N	31.4	1205197	1205204	1209733	ML	5	ML_5       	5n31.4ml     	2
+5	N	31.4	1205197	1205204	1209734	ML	6	ML_6       	5n31.4ml     	1
+5	S	31.4	1205197	1205200	1209735	OS	4	OS_4       	5s31.4ml     	3
+5	S	31.4	1205197	1205200	1209736	OS	5	OS_5       	5s31.4ml     	2
+5	S	31.4	1205197	1205200	1209737	OS	6	OS_6       	5s31.4ml     	1
+5	S	31.4	1205197	1205198	1209742	OH	2	SD_4       	5n31.4hv     	1
+5	N	31.4	1205197	1209746	1209743	HV	1	SD_1       	5n31.4hv     	2
+5	N	31.4	1205197	1209746	1209744	HV	2	SD_2       	5n31.4hv     	1
+5	S	31.6	1205208	1205211	1205212	ML	1	ML_1       	5s31.6ml        6
+5	S	31.6	1205208	1205211	1205213	ML	2	ML_2       	5s31.6ml        5
+5	S	31.6	1205208	1205211	1205214	ML	3	ML_3       	5s31.6ml        4
+5	N	31.6	1205208	1205215	1205216	OS	1	OS_1       	5n31.6ml     	5
+5	N	31.6	1205208	1205215	1205217	OS	2	OS_2       	5n31.6ml     	4
+5	N	31.6	1205208	1205215	1205218	OS	3	OS_3       	5n31.6ml      	3
+5	S	31.6	1205208	1205211	1209748	ML	4	ML_4       	5s31.6ml        3
+5	S	31.6	1205208	1205211	1209749	ML	5	ML_5       	5s31.6ml        2
+5	S	31.6	1205208	1205211	1209750	ML	6	ML_6       	5s31.6ml        1
+5	N	31.6	1205208	1205215	1209751	OS	4	OS_4       	5n31.6ml     	2
+5	N	31.6	1205208	1205215	1209752	OS	5	OS_5       	5n31.6ml     	1
+5	S	31.6	1205208	1212046	1209754	HV	1	SD_1       	5s31.6hv     	1
+5	N	31.6	1205208	1212047	1209755	OH	1	SD_2       	5n31.6hv     	0
+5	S	31.6	1205208	1212780	1212778	OR	1	SD_3       	?            	0
+5	S	31.6	1205208	1212781	1212779	FR	1	SD_4       	?            	0
+5	N	31.9	1205219	1205220	1205221	OR	1	RAMP_ON    	5n31.9ora    	0
+5	N	31.9	1205219	1205220	1205222	QU	2	QUEUE      	5n31.9ora    	0
+5	N	31.9	1205219	1205220	1205223	DM	3	DEMAND     	5n31.9ora    	0
+5	N	31.9	1205219	1205220	1205224	PA	4	PASSAGE    	5n31.9ora    	0
+5	N	31.9	1205219	1205225	1205226	ML	1	ML_1       	5n31.9ml     	5
+5	N	31.9	1205219	1205225	1205227	ML	2	ML_2       	5n31.9ml     	4
+5	N	31.9	1205219	1205225	1205228	ML	3	ML_3       	5n31.9ml     	3
+5	N	31.9	1205219	1205225	1209759	ML	4	ML_4       	5n31.9ml     	2
+5	N	31.9	1205219	1205225	1209760	ML	5	ML_5       	5n31.9ml     	1
+5	N	31.9	1205219	1209763	1209761	FR	1	RAMP_OFF   	5n31.9fr     	1
+5	N	31.9	1205219	1209764	1209762	HV	1	SD_1       	5n31.9hv     	1
+5	S	32	1205229	1205230	1205231	ML	1	ML_1       	5s32ml       	5
+5	S	32	1205229	1205230	1205232	ML	2	ML_2       	5s32ml       	4
+5	S	32	1205229	1205230	1205233	ML	3	ML_3       	5s32ml       	3
+5	S	32	1205229	1205230	1209765	ML	4	ML_4       	5s32ml       	2
+5	S	32	1205229	1205230	1209766	ML	5	ML_5       	5s32ml       	1
+5	S	32	1205229	1209777	1209767	DM	1	DEMAND     	5s32ora      	0
+5	S	32	1205229	1209777	1209768	PA	2	PASSAGE    	5s32ora      	0
+5	S	32	1205229	1209777	1209769	QU	3	QUEUE      	5s32ora      	0
+5	S	32	1205229	1209777	1209770	OR	4	RAMP_ON    	5s32ora      	0
+5	S	32	1205229	1209778	1209771	FR	1	RAMP_OFF   	5s32fr       	1
+5	S	32	1205229	1209779	1209772	HV	1	SD_1       	5s32hv          1
+5	S	32	1205229	1209779	1209773	HV	2	SD_2       	?            	0
+5	S	32.25	1205238	1205239	1205240	OR	1	RAMP_ON    	5s32.25ora   	0
+5	S	32.25	1205238	1205239	1205241	QU	2	QUEUE      	5s32.25ora   	0
+5	S	32.25	1205238	1205239	1205242	DM	3	DEMAND     	5s32.25ora   	0
+5	S	32.25	1205238	1205239	1205243	PA	4	PASSAGE    	5s32.25ora   	0
+5	S	32.25	1205238	1205244	1205245	FR	1	RAMP_OFF   	5s32.58fr    	1
+5	S	32.25	1205238	1205246	1205247	ML	1	ML_1       	5s32.25ml    	5
+5	S	32.25	1205238	1205246	1205248	ML	2	ML_2       	5s32.25ml    	4
+5	S	32.25	1205238	1205246	1205249	ML	3	ML_3       	5s32.25ml    	3
+5	S	32.25	1205238	1205246	1209819	ML	4	ML_4       	5s32.25ml    	2
+5	S	32.25	1205238	1205246	1209820	ML	5	ML_5       	5s32.25ml    	1
+5	N	32.25	1205238	1205250	1209821	OS	4	OS_4       	5n32.3ml        2
+5	N	32.25	1205238	1205250	1209822	OS	5	OS_5       	5n32.3ml     	1
+5	S	32.25	1205238	1209826	1209823	HV	1	SD_1       	5s32.25hv    	1
+5	N	32.25	1205238	1209827	1209824	OH	1	SD_2       	5n32.3hv       	1
+5	N	32.3	1205238	1205250	1205251	OS	1	OS_1       	5n32.3ml     	5
+5	N	32.3	1205238	1205250	1205252	OS	2	OS_2       	5n32.3ml      	4
+5	N	32.3	1205238	1205250	1205253	OS	3	OS_3       	5n32.3ml     	3
+5	N	32.5	1205254	1205255	1205256	OR	1	RAMP_ON    	5n32.5ora    	0
+5	N	32.5	1205254	1205255	1205257	QU	2	QUEUE      	5n32.5ora    	0
+5	N	32.5	1205254	1205255	1205258	DM	3	DEMAND     	5n32.5ora    	0
+5	N	32.5	1205254	1205255	1205259	PA	4	PASSAGE    	5n32.5ora    	0
+5	N	32.5	1205254	1205260	1205261	FR	1	RAMP_OFF   	5n32.5fr     	1
+5	N	32.5	1205254	1205262	1205263	ML	1	ML_1       	5n32.5ml     	5
+5	N	32.5	1205254	1205262	1205264	ML	2	ML_2       	5n32.5ml     	4
+5	N	32.5	1205254	1205262	1205265	ML	3	ML_3       	5n32.5ml     	3
+5	N	32.5	1205254	1205262	1209782	ML	4	ML_4       	5n32.5ml     	2
+5	N	32.5	1205254	1205262	1209783	ML	5	ML_5       	5n32.5ml     	1
+5	N	32.5	1205254	1209931	1209930	HV	1	SD_1       	5n32.5hv     	1
+5	S	32.58	1205254	1205266	1205267	OH	1	SD_2       	?            	0
+5	N	32.6	1205268	1205269	1208291	ML	2	ML_2       	5n32.6ml     	4
+5	N	32.6	1205268	1205269	1208297	ML	1	ML_1       	5n32.6ml     	5
+5	N	32.6	1205268	1205269	1209934	ML	3	ML_3       	5n32.6ml     	3
+5	N	32.6	1205268	1205269	1209935	ML	4	ML_4       	5n32.6ml     	2
+5	N	32.6	1205268	1205269	1209936	ML	5	ML_5       	5n32.6ml     	1
+5	N	32.6	1205268	1209943	1209938	DM	1	DEMAND     	5n32.6ora    	0
+5	N	32.6	1205268	1209943	1209939	PA	2	PASSAGE    	5n32.6ora    	0
+5	N	32.6	1205268	1209943	1209940	QU	3	QUEUE      	5n32.6ora    	0
+5	N	32.6	1205268	1209943	1209941	OR	4	RAMP_ON    	5n32.6ora    	0
+5	N	32.6	1205268	1209944	1209942	HV	1	SD_1       	5n32.6hv     	1
+5	S	33	1205270	1205271	1205272	OR	1	RAMP_ON    	5s33ora      	0
+5	S	33	1205270	1205271	1205273	QU	2	QUEUE      	5s33ora      	0
+5	S	33	1205270	1205271	1205274	DM	3	DEMAND     	5s33ora      	0
+5	S	33	1205270	1205271	1205275	PA	4	PASSAGE    	5s33ora      	0
+5	S	33	1205270	1205276	1205277	ML	1	ML_1       	5s33ml       	5
+5	S	33	1205270	1205276	1205278	ML	2	ML_2       	5s33ml       	4
+5	S	33	1205270	1205276	1205279	ML	3	ML_3       	5s33ml       	3
+5	S	33	1205270	1205276	1209945	ML	4	ML_4       	5s33ml       	2
+5	S	33	1205270	1205276	1209947	ML	5	ML_5       	5s33ml       	1
+5	S	33	1205270	1209950	1209948	HV	1	SD_1       	5s33hv       	1
+5	N	33	1205270	1209951	1209949	OH	1	SD_2       	?            	0
+55	N	3.11	1203026	1203027	1203028	OR	1	RAMP_ON    	55n3.07ora   	0
+55	N	3.11	1203026	1203027	1203029	QU	2	QUEUE      	55n3.07ora   	0
+55	N	3.11	1203026	1203027	1203030	DM	3	DEMAND     	55n3.07ora   	0
+55	N	3.11	1203026	1203027	1203031	PA	4	PASSAGE    	55n3.07ora   	0
+55	S	3.11	1203026	1203032	1203033	OF	1	SD_1       	55s3.07fr    	2
+55	S	3.11	1203026	1203032	1203034	OF	2	SD_2       	55s3.07fr    	1
+55	N	3.11	1203026	1203035	1203036	ML	1	ML_1       	55n3.07ml    	4
+55	N	3.11	1203026	1203035	1203037	ML	2	ML_2       	55n3.07ml    	3
+55	N	3.11	1203026	1203035	1203038	ML	3	ML_3       	55n3.07ml    	2
+55	N	3.11	1203026	1203035	1203039	ML	4	ML_4       	55n3.07ml    	1
+55	S	3.11	1203026	1203040	1203041	OS	1	OS_1       	55s3.07ml    	3
+55	S	3.11	1203026	1203040	1203042	OS	2	OS_2       	55s3.07ml    	2
+55	S	3.11	1203026	1203040	1203043	OS	3	OS_3       	55s3.07ml    	1
+55	S	3.6	1203044	1203045	1203046	OR	1	RAMP_ON    	55s3.59ora   	0
+55	S	3.6	1203044	1203045	1203047	QU	2	QUEUE      	55s3.59ora   	0
+55	S	3.6	1203044	1203045	1203048	DM	3	DEMAND     	55s3.59ora   	0
+55	S	3.6	1203044	1203045	1203049	PA	4	PASSAGE    	55s3.59ora   	0
+55	S	3.6	1203044	1203050	1203051	ML	1	ML_1       	55s3.59ml    	4
+55	S	3.6	1203044	1203050	1203052	ML	2	ML_2       	55s3.59ml    	3
+55	S	3.6	1203044	1203050	1203053	ML	3	ML_3       	55s3.59ml    	2
+55	S	3.6	1203044	1203050	1203054	ML	4	ML_4       	55s3.59ml    	1
+55	N	3.6	1203044	1203055	1203056	OF	1	SD_1       	55n3.59fr    	1
+55	N	3.6	1203044	1203057	1203058	OS	1	OS_1       	55n3.59ml    	4
+55	N	3.6	1203044	1203057	1203059	OS	2	OS_2       	55n3.59ml    	3
+55	N	3.6	1203044	1203057	1203060	OS	3	OS_3       	55n3.59ml    	2
+55	N	3.6	1203044	1203057	1203061	OS	4	OS_4       	55n3.59ml    	1
+55	N	3.96	1203062	1203063	1203064	OR	1	RAMP_ON    	55n3.97ora   	0
+55	N	3.96	1203062	1203063	1203065	QU	2	QUEUE      	55n3.97ora   	0
+55	N	3.96	1203062	1203063	1203066	DM	3	DEMAND     	55n3.97ora   	0
+55	N	3.96	1203062	1203063	1203067	PA	4	PASSAGE    	55n3.97ora   	0
+55	S	3.96	1203062	1203068	1203069	OF	1	SD_1       	55s3.97fr    	2
+55	S	3.96	1203062	1203068	1203070	OF	2	SD_2       	55s3.97fr    	1
+55	N	3.96	1203062	1203071	1203072	ML	1	ML_1       	55n3.97ml    	4
+55	N	3.96	1203062	1203071	1203073	ML	2	ML_2       	55n3.97ml    	3
+55	N	3.96	1203062	1203071	1203074	ML	3	ML_3       	55n3.97ml    	2
+55	N	3.96	1203062	1203071	1203075	ML	4	ML_4       	55n3.97ml    	1
+55	S	3.96	1203062	1203076	1203077	OS	1	OS_1       	55s3.97ml    	4
+55	S	3.96	1203062	1203076	1203078	OS	2	OS_2       	55s3.97ml    	3
+55	S	3.96	1203062	1203076	1203079	OS	3	OS_3       	55s3.97ml    	2
+55	S	3.96	1203062	1203076	1203080	OS	4	OS_4       	55s3.97ml    	1
+55	N	4.58	1203081	1203082	1210208	ML	1	ML_1       	55n4.58ml    	4
+55	N	4.58	1203081	1203082	1210209	ML	2	ML_2       	55n4.58ml    	3
+55	N	4.58	1203081	1203082	1210210	ML	3	ML_3       	55n4.58ml    	2
+55	N	4.58	1203081	1203082	1210211	ML	4	ML_4       	55n4.58ml    	1
+55	S	4.58	1203081	1210220	1210212	OS	1	OS_1       	55s4.58ml    	4
+55	S	4.58	1203081	1210220	1210213	OS	2	OS_2       	55s4.58ml    	3
+55	S	4.58	1203081	1210220	1210214	OS	3	OS_3       	55s4.58ml    	2
+55	S	4.58	1203081	1210220	1210215	OS	4	OS_4       	55s4.58ml    	1
+55	N	4.58	1203081	1210221	1210216	FF	1	SD_4       	55n4.58ff    	2
+55	N	4.58	1203081	1210221	1210217	FF	2	SD_5       	55n4.58ff    	1
+55	S	4.58	1203081	1210222	1210218	FO	1	SD_1       	55s4.58ff    	1
+55	S	4.58	1203081	1210222	1210219	FO	2	SD_2       	?            	0
+55	S	4.7	1203083	1203084	1210195	ML	1	ML_1       	55s4.7ml     	3
+55	S	4.7	1203083	1203084	1210196	ML	2	ML_2       	55s4.7ml     	2
+55	S	4.7	1203083	1203084	1210197	ML	3	ML_3       	55s4.7ml     	1
+55	N	4.7	1203083	1210205	1210198	OS	1	OS_1       	55n4.7ml     	3
+55	N	4.7	1203083	1210205	1210199	OS	2	OS_2       	55n4.7ml     	2
+55	N	4.7	1203083	1210205	1210200	OS	3	OS_3       	55n4.7ml     	1
+55	S	4.7	1203083	1210206	1210201	DM	1	DEMAND     	55s4.7or     	0
+55	S	4.7	1203083	1210206	1210202	PA	2	PASSAGE    	55s4.7or     	0
+55	S	4.7	1203083	1210206	1210203	QU	3	QUEUE      	55s4.7or     	0
+55	S	4.7	1203083	1210207	1210204	FR	1	SD_1       	?            	0
+55	S	5.06	1210174	1210189	1210175	ML	1	ML_1       	55s5.06ml    	3
+55	S	5.06	1210174	1210189	1210176	ML	2	ML_2       	55s5.06ml    	2
+55	S	5.06	1210174	1210189	1210177	ML	3	ML_3       	55s5.06ml    	1
+55	N	5.06	1210174	1210190	1210178	OS	1	OS_1       	55n5.06ml    	3
+55	N	5.06	1210174	1210190	1210179	OS	2	OS_2       	55n5.06ml    	2
+55	N	5.06	1210174	1210190	1210180	OS	3	OS_3       	55n5.06ml    	1
+55	S	5.06	1210174	1210191	1210181	FF	1	SD_1       	55s5.06ff    	2
+55	S	5.06	1210174	1210191	1210182	FF	2	SD_2       	55s5.06ff    	1
+55	N	5.06	1210174	1210194	1210185	FO	1	SD_3       	55n5.06ff    	2
+55	N	5.06	1210174	1210194	1210186	FO	2	SD_4       	55n5.06ff    	1
+55	S	5.06	1210174	1210192	1210187	FR	1	SD_6       	?            	0
+55	S	5.06	1210174	1210193	1210188	OR	1	SD_5       	55s5.06or    	0
+55	N	5.51	1210163	1210172	1210164	ML	1	ML_1       	55n5.51ml    	4
+55	N	5.51	1210163	1210172	1210165	ML	2	ML_2       	55n5.51ml    	3
+55	N	5.51	1210163	1210172	1210166	ML	3	ML_3       	55n5.51ml    	2
+55	N	5.51	1210163	1210172	1210167	ML	4	ML_4       	55n5.51ml    	1
+55	S	5.51	1210163	1210173	1210168	OS	1	OS_1       	55s5.5ml     	4
+55	S	5.51	1210163	1210173	1210169	OS	2	OS_2       	55s5.5ml     	3
+55	S	5.51	1210163	1210173	1210170	OS	3	OS_3       	55s5.5ml     	2
+55	S	5.51	1210163	1210173	1210171	OS	4	OS_4       	55s5.5ml     	1
+55	N	5.8	1203085	1203086	1203087	DM	1	DEMAND     	55n5.87ora   	0
+55	N	5.8	1203085	1203090	1203091	ML	1	ML_1       	55n5.87ml    	3
+55	N	5.8	1203085	1203090	1203092	ML	2	ML_2       	55n5.87ml    	2
+55	N	5.8	1203085	1203090	1203093	ML	3	ML_3       	55n5.87ml    	1
+55	S	5.8	1203085	1203095	1203096	OS	1	OS_1       	55s5.81ml    	3
+55	S	5.8	1203085	1203095	1203097	OS	2	OS_2       	55s5.81ml    	2
+55	S	5.8	1203085	1203095	1203098	OS	3	OS_3       	55s5.81ml    	1
+55	N	5.8	1203085	1203086	1210152	PA	2	PASSAGE    	55n5.87ora   	0
+55	N	5.8	1203085	1203086	1210153	QU	3	QUEUE      	55n5.87ora   	0
+55	S	5.8	1203085	1210161	1210154	OF	1	SD_1       	55s5.8fra    	1
+55	S	5.8	1203085	1203088	1210155	FO	1	SD_2       	55s5.8ff     	1
+55	N	5.8	1203085	1210160	1210156	FF	1	SD_4       	55n5.8ff     	1
+55	N	5.8	1203085	1210162	1210157	FF	1	SD_5       	?            	0
+55	S	5.8	1203085	1210159	1210158	OF	1	SD_3       	55s5.8frb    	1
+55	S	6.88	1203103	1203104	1203105	QU	1	QUEUE      	55s6.88ora   	0
+55	S	6.88	1203103	1203104	1203106	DM	2	DEMAND     	55s6.88ora   	0
+55	S	6.88	1203103	1203104	1203107	PA	3	PASSAGE    	55s6.88ora   	0
+55	S	6.88	1203103	1203108	1203109	HV	1	SD_1       	?            	0
+55	S	6.88	1203103	1203110	1203111	ML	1	ML_1       	55s6.88ml    	4
+55	S	6.88	1203103	1203110	1203112	ML	2	ML_2       	55s6.88ml    	3
+55	S	6.88	1203103	1203110	1203113	ML	3	ML_3       	55s6.88ml    	2
+55	S	6.88	1203103	1203110	1203114	ML	4	ML_4       	55s6.88ml    	1
+55	N	6.94	1203115	1203116	1203117	QU	2	QUEUE      	55n6.94ora   	0
+55	N	6.94	1203115	1203116	1203118	DM	3	DEMAND     	55n6.94ora   	0
+55	N	6.94	1203115	1203116	1203119	PA	1	PASSAGE    	55n6.94ora   	0
+55	N	6.94	1203115	1203120	1203121	FR	1	RAMP_OFF   	55n6.94fr    	1
+55	N	6.94	1203115	1203122	1203123	HV	1	SD_1       	?            	0
+55	N	6.94	1203115	1203124	1203125	ML	1	ML_1       	55n6.94ml    	4
+55	N	6.94	1203115	1203124	1203126	ML	2	ML_2       	55n6.94ml    	3
+55	N	6.94	1203115	1203124	1203127	ML	3	ML_3       	55n6.94ml    	2
+55	N	6.94	1203115	1203124	1203128	ML	4	ML_4       	55n6.94ml    	1
+55	S	7.03	1203129	1203130	1203131	QU	1	QUEUE      	55s7.03ora   	0
+55	S	7.03	1203129	1203130	1203132	DM	2	DEMAND     	55s7.03ora   	0
+55	S	7.03	1203129	1203130	1203133	PA	3	PASSAGE    	55s7.03ora   	0
+55	S	7.03	1203129	1203134	1203135	HV	1	SD_1       	55s7.03ml    	4
+55	S	7.03	1203129	1203136	1203137	ML	1	ML_1       	55s7.03ml    	3
+55	S	7.03	1203129	1203136	1203138	ML	2	ML_2       	55s7.03ml    	2
+55	S	7.03	1203129	1203136	1203139	ML	3	ML_3       	55s7.03ml    	1
+55	N	7.16	1203140	1203141	1203142	OR	1	RAMP_ON    	55n7.16ora   	0
+55	N	7.16	1203140	1203141	1203143	QU	2	QUEUE      	55n7.16ora   	0
+55	N	7.16	1203140	1203141	1203144	DM	3	DEMAND     	55n7.16ora   	0
+55	N	7.16	1203140	1203141	1203145	PA	4	PASSAGE    	55n7.16ora   	0
+55	N	7.16	1203140	1203146	1203147	HV	1	SD_1       	?            	0
+55	N	7.16	1203140	1203148	1203149	ML	1	ML_1       	55n7.16ml    	4
+55	N	7.16	1203140	1203148	1203150	ML	2	ML_2       	55n7.16ml    	3
+55	N	7.16	1203140	1203148	1203151	ML	3	ML_3       	55n7.16ml    	2
+55	N	7.16	1203140	1203148	1203152	ML	4	ML_4       	55n7.16ml    	1
+55	S	7.62	1203153	1203154	1203155	OR	1	RAMP_ON    	55s7.62ora   	0
+55	S	7.62	1203153	1203154	1203156	QU	2	QUEUE      	55s7.62ora   	0
+55	S	7.62	1203153	1203154	1203157	DM	3	DEMAND     	55s7.62ora   	0
+55	S	7.62	1203153	1203154	1203158	PA	4	PASSAGE    	55s7.62ora   	0
+55	S	7.62	1203153	1203159	1203160	HV	1	SD_1       	55s7.62ml    	5
+55	S	7.62	1203153	1203161	1203162	ML	1	ML_1       	55s7.62ml    	3
+55	S	7.62	1203153	1203161	1203163	ML	2	ML_2       	55s7.62ml    	2
+55	S	7.62	1203153	1203161	1203164	ML	3	ML_3       	55s7.62ml    	1
+55	S	7.62	1203153	1203161	1213047	ML	4	ML_4       	55s7.62ml    	4
+55	N	7.85	1203165	1203166	1203167	QU	1	QUEUE      	55n7.85ora   	0
+55	N	7.85	1203165	1203166	1203168	DM	2	DEMAND     	55n7.85ora   	0
+55	N	7.85	1203165	1203166	1203169	PA	3	PASSAGE    	55n7.85ora   	0
+55	N	7.85	1203165	1203170	1203171	HV	1	SD_1       	55n7.85ml    	1
+55	N	7.85	1203165	1203172	1203173	ML	1	ML_1       	55n7.85ml    	5
+55	N	7.85	1203165	1203172	1203174	ML	2	ML_2       	55n7.85ml    	4
+55	N	7.85	1203165	1203172	1203175	ML	3	ML_3       	55n7.85ml    	3
+55	N	7.85	1203165	1203172	1213048	ML	4	ML_4       	55n7.85ml    	2
+55	N	8.12	1203176	1203177	1203178	OR	1	RAMP_ON    	55n8.12ora   	0
+55	N	8.12	1203176	1203177	1203179	QU	2	QUEUE      	55n8.12ora   	0
+55	N	8.12	1203176	1203177	1203180	DM	3	DEMAND     	55n8.12ora   	0
+55	N	8.12	1203176	1203177	1203181	PA	4	PASSAGE    	55n8.12ora   	0
+55	N	8.12	1203176	1203182	1203183	HV	1	SD_1       	55n8.12ml    	4
+55	N	8.12	1203176	1203184	1203185	ML	1	ML_1       	55n8.12ml    	3
+55	N	8.12	1203176	1203184	1203186	ML	2	ML_2       	55n8.12ml    	2
+55	N	8.12	1203176	1203184	1203187	ML	3	ML_3       	55n8.12ml    	1
+55	S	8.12	1203176	1203188	1203189	OS	1	OS_1       	55s8.12ml    	4
+55	S	8.12	1203176	1203188	1203190	OS	2	OS_2       	55s8.12ml    	3
+55	S	8.12	1203176	1203188	1203191	OS	3	OS_3       	55s8.12ml    	2
+55	S	8.12	1203176	1203188	1203192	OS	4	OS_4       	55s8.12ml    	1
+55	S	8.12	1203176	1203193	1203194	OF	1	RAMP_OFF   	55s8.12fr    	1
+55	S	8.12	1203176	1208965	1203195	OH	1	SD_3       	55s8.12ml    	5
+55	S	9.19	1203196	1203197	1203198	OR	1	RAMP_ON    	55s9.19ora   	0
+55	S	9.19	1203196	1203197	1203199	QU	2	QUEUE      	55s9.19ora   	0
+55	S	9.19	1203196	1203197	1203200	DM	3	DEMAND     	55s9.19ora   	0
+55	S	9.19	1203196	1203197	1203201	PA	4	PASSAGE    	55s9.19ora   	0
+55	S	9.19	1203196	1203202	1203203	FR	1	RAMP_OFF   	55s9.19fr    	1
+55	S	9.19	1203196	1203204	1203205	HV	1	SD_1       	55s9.19ml    	5
+55	S	9.19	1203196	1203206	1203207	ML	1	ML_1       	55s9.19ml    	4
+55	S	9.19	1203196	1203206	1203208	ML	2	ML_2       	55s9.19ml    	3
+55	S	9.19	1203196	1203206	1203209	ML	3	ML_3       	55s9.19ml    	2
+55	S	9.19	1203196	1203206	1203210	ML	4	ML_4       	55s9.19ml    	1
+55	N	9.19	1203196	1211173	1211167	OS	1	OS_1       	55n9.19ml    	4
+55	N	9.19	1203196	1211173	1211168	OS	2	OS_2       	55n9.19ml       3
+55	N	9.19	1203196	1211173	1211169	OS	3	OS_3       	55n9.19ml       2
+55	N	9.19	1203196	1211173	1211170	OS	4	OS_4       	55n9.19ml       1
+55	N	9.19	1203196	1211172	1211171	OH	1	SD_2       	55n9.19hv       1
+55	N	9.41	1203211	1203212	1203213	OR	1	RAMP_ON    	55n9.41ora   	0
+55	N	9.41	1203211	1203212	1203214	QU	2	QUEUE      	55n9.41ora   	0
+55	N	9.41	1203211	1203212	1203215	DM	3	DEMAND     	55n9.41ora   	0
+55	N	9.41	1203211	1203212	1203216	PA	4	PASSAGE    	55n9.41ora   	0
+55	N	9.41	1203211	1203217	1203218	FR	1	RAMP_OFF   	55n9.41fr    	1
+55	N	9.41	1203211	1203219	1203220	HV	1	SD_1       	55n9.41hv    	1
+55	N	9.41	1203211	1203221	1203222	ML	1	ML_1       	55n9.41ml    	4
+55	N	9.41	1203211	1203221	1203223	ML	2	ML_2       	55n9.41ml    	3
+55	N	9.41	1203211	1203221	1203224	ML	3	ML_3       	55n9.41ml    	2
+55	N	9.41	1203211	1203221	1203225	ML	4	ML_4       	55n9.41ml    	1
+55	S	10	1203226	1203227	1203228	OR	1	RAMP_ON    	55s10ora     	0
+55	S	10	1203226	1203227	1203229	QU	2	QUEUE      	55s10ora     	0
+55	S	10	1203226	1203227	1203230	DM	3	DEMAND     	55s10ora     	0
+55	S	10	1203226	1203227	1203231	PA	4	PASSAGE    	55s10ora     	0
+55	S	10	1203226	1203232	1203233	FR	1	RAMP_OFF   	55s10fr      	2
+55	S	10	1203226	1203232	1203234	FR	2	SD_2       	55s10fr      	1
+55	S	10	1203226	1203235	1203236	CD	1	COLL_DIST_1	?            	0
+55	S	10	1203226	1203237	1203238	HV	1	SD_1       	55s9.84hv     	1
+55	S	10	1203226	1203239	1203240	ML	1	ML_1       	55s9.84ml       4
+55	S	10	1203226	1203239	1203241	ML	2	ML_2       	55s9.84ml    	3
+55	S	10	1203226	1203239	1203242	ML	3	ML_3       	55s9.84ml    	2
+55	S	10	1203226	1203239	1203243	ML	4	ML_4       	55s9.84ml    	1
+55	N	10	1203244	1203245	1203246	OR	1	RAMP_ON    	55n10ora     	0
+55	N	10	1203244	1203245	1203247	QU	2	QUEUE      	55n10ora     	0
+55	N	10	1203244	1203245	1203248	DM	3	DEMAND     	55n10ora     	0
+55	N	10	1203244	1203245	1203249	PA	4	PASSAGE    	55n10ora     	0
+55	N	10	1203244	1203250	1203251	FR	1	RAMP_OFF   	55n10fr      	1
+55	N	10	1203244	1203252	1203253	HV	1	SD_1       	55n10hv      	1
+55	N	10	1203244	1203254	1203255	ML	1	ML_1       	55n10ml      	4
+55	N	10	1203244	1203254	1203256	ML	2	ML_2       	55n10ml      	3
+55	N	10	1203244	1203254	1203257	ML	3	ML_3       	55n10ml      	2
+55	N	10	1203244	1203254	1203258	ML	4	ML_4       	55n10ml      	1
+55	S	10.4	1203261	1203262	1203263	FF	1	SD_5       	55s10.2ff    	1
+55	S	10.4	1203261	1203264	1203265	HV	1	SD_1       	55s10.4hv    	1
+55	S	10.4	1203261	1203266	1203267	ML	1	ML_1       	55s10.4ml    	3
+55	S	10.4	1203261	1203266	1203268	ML	2	ML_2       	55s10.4ml    	2
+55	S	10.4	1203261	1203266	1203269	ML	3	ML_3       	55s10.4ml    	1
+55	S	10.4	1209845	1209860	1209846	ML	1	ML_1       	?            	0
+55	S	10.4	1209845	1209860	1209847	ML	2	ML_2       	?            	0
+55	S	10.4	1209845	1209860	1209848	ML	3	ML_3       	?            	0
+55	S	10.4	1209845	1209860	1209849	ML	4	ML_4       	?            	0
+55	S	10.4	1209845	1209861	1209854	HV	1	SD_1       	?            	0
+55	S	10.4	1209845	1209862	1209856	FF	1	SD_3       	?            	0
+55	S	10.4	1209845	1209862	1209857	FF	2	SD_4       	?            	0
+55	S	10.4	1209845	1209865	1209858	FO	1	SD_6       	?            	0
+55	S	10.4	1203261	1203266	1209866	ML	4	ML_4       	?            	0
+55	N	10.4	1203261	1209873	1209867	OS	1	OS_1       	55n10.4ml    	3
+55	N	10.4	1203261	1209873	1209868	OS	2	OS_2       	55n10.4ml    	2
+55	N	10.4	1203261	1209873	1209869	OS	3	OS_3       	55n10.4ml    	1
+55	N	10.4	1203261	1209874	1209870	OH	1	SD_2       	55n10.4hv    	1
+55	S	10.4	1203261	1209875	1209871	FF	1	SD_3       	55s10.4ff    	2
+55	S	10.4	1203261	1209875	1209872	FF	2	SD_4       	55s10.4ff    	1
+55	N	10.4	1209845	1211969	1211968	HB	1	SD_5       	?            	0
+55	S	10.5	1203270	1203271	1209876	ML	1	ML_1       	55s10.5ml    	3
+55	S	10.5	1203270	1203271	1209877	ML	2	ML_2       	55s10.5ml    	2
+55	S	10.5	1203270	1203271	1209878	ML	3	ML_3       	55s10.5ml    	1
+55	N	10.5	1203270	1209888	1209880	OS	1	OS_1       	55n10.5ml    	3
+55	N	10.5	1203270	1209888	1209881	OS	2	OS_2       	55n10.5ml    	2
+55	N	10.5	1203270	1209888	1209882	OS	3	OS_3       	55n10.5ml    	1
+55	S	10.5	1203270	1209889	1209883	HV	1	SD_1       	55s10.5ml    	4
+55	N	10.5	1203270	1209890	1209884	OH	1	SD_2       	55n10.5hv    	1
+55	N	10.5	1203270	1209892	1209885	OF	1	SD_3       	55n10.5fra   	1
+55	N	10.5	1203270	1209891	1209886	FO	1	SD_5       	55n10.5ff    	2
+55	N	10.5	1203270	1209891	1209887	FO	2	SD_6       	55n10.5ff    	1
+55	N	10.5	1203270	1209893	1209894	OF	1	SD_4       	55n10.5frb   	1
+55	S	10.84	1203274	1203275	1203276	OR	1	RAMP_ON    	55s10.84ora  	0
+55	S	10.84	1203274	1203275	1203277	QU	2	QUEUE      	55s10.84ora  	0
+55	S	10.84	1203274	1203275	1203278	DM	3	DEMAND     	55s10.84ora  	0
+55	S	10.84	1203274	1203275	1203279	PA	4	PASSAGE    	55s10.84ora  	0
+55	S	10.84	1203274	1211964	1203281	OC	1	SD_5       	?            	0
+55	S	10.84	1203274	1203282	1203283	HV	1	SD_1       	55s10.84hv   	1
+55	S	10.84	1203274	1203284	1203285	ML	1	ML_1       	55s10.84ml   	3
+55	S	10.84	1203274	1203284	1203286	ML	2	ML_2       	55s10.84ml   	2
+55	S	10.84	1203274	1203284	1203287	ML	3	ML_3       	55s10.84ml   	1
+55	N	10.84	1203274	1203288	1203289	OS	1	OS_1       	55n10.84ml   	3
+55	N	10.84	1203274	1203288	1203290	OS	2	OS_2       	55n10.84ml   	2
+55	N	10.84	1203274	1203288	1203291	OS	3	OS_3       	55n10.84ml   	1
+55	S	10.84	1203274	1209049	1209048	OH	1	SD_2       	?            	0
+55	N	10.84	1203274	1211962	1211958	FO	1	COLL_DIST_1	55n10.84ff   	2
+55	N	10.84	1203274	1211962	1211959	FO	2	COLL_DIST_2	55n10.84ff   	1
+55	S	10.84	1203274	1211963	1211960	FF	1	SD_3       	55s10.84ffa  	1
+55	S	10.84	1203274	1211963	1211961	FF	1	SD_4       	55s10.84ffb  	1
+55	N	11.1	1203293	1203294	1203295	OR	1	RAMP_ON    	55n11.1ora   	0
+55	N	11.1	1203293	1203294	1203296	QU	2	QUEUE      	55n11.1ora   	0
+55	N	11.1	1203293	1203294	1203297	DM	3	DEMAND     	55n11.1ora   	0
+55	N	11.1	1203293	1203294	1203298	PA	4	PASSAGE    	55n11.1ora   	0
+55	N	11.1	1203293	1203299	1203300	FR	1	RAMP_OFF   	?            	0
+55	N	11.1	1203293	1203301	1203302	HV	1	SD_1       	55n11.1hv    	1
+55	N	11.1	1203293	1203303	1203304	ML	1	ML_1       	55n11.1ml    	4
+55	N	11.1	1203293	1203303	1203305	ML	2	ML_2       	55n11.1ml    	3
+55	N	11.1	1203293	1203303	1203306	ML	3	ML_3       	55n11.1ml    	2
+55	S	11.1	1203293	1203280	1211965	OF	1	SD_2       	55s10.84fr   	2
+55	S	11.1	1203293	1203280	1211966	OF	2	SD_3       	55s10.84fr   	1
+55	N	11.1	1203293	1203303	1212750	ML	4	ML_4       	55n11.1ml    	1
+55	N	11.1	1203293	1203299	1213009	FR	2	SD_4       	?            	0
+55	S	11.62	1203307	1203308	1203309	OR	1	RAMP_ON    	55s11.62ora  	0
+55	S	11.62	1203307	1203308	1203310	QU	2	QUEUE      	55s11.62ora  	0
+55	S	11.62	1203307	1203308	1203311	DM	3	DEMAND     	55s11.62ora  	0
+55	S	11.62	1203307	1203308	1203312	PA	4	PASSAGE    	55s11.62ora  	0
+55	S	11.62	1203307	1203313	1203314	FR	1	RAMP_OFF   	55s11.62fr   	1
+55	S	11.62	1203307	1203315	1203316	HV	1	SD_1       	55s11.62hv   	1
+55	S	11.62	1203307	1203317	1203318	ML	1	ML_1       	55s11.62ml   	4
+55	S	11.62	1203307	1203317	1203319	ML	2	ML_2       	55s11.62ml   	3
+55	S	11.62	1203307	1203317	1203320	ML	3	ML_3       	55s11.62ml   	2
+55	S	11.62	1203307	1203317	1213049	ML	4	ML_4       	55s11.62ml   	1
+55	N	11.74	1203321	1203322	1203323	OR	1	RAMP_ON    	55n11.74ora  	0
+55	N	11.74	1203321	1203322	1203324	QU	2	QUEUE      	55n11.74ora  	0
+55	N	11.74	1203321	1203322	1203325	DM	3	DEMAND     	55n11.74ora  	0
+55	N	11.74	1203321	1203322	1203326	PA	4	PASSAGE    	55n11.74ora  	0
+55	N	11.74	1203321	1203327	1203328	FR	1	RAMP_OFF   	55n11.74fr   	2
+55	N	11.74	1203321	1203329	1203330	HV	1	SD_1       	55n11.74hv   	1
+55	N	11.74	1203321	1203331	1203332	ML	1	ML_1       	55n11.74ml   	4
+55	N	11.74	1203321	1203331	1203333	ML	2	ML_2       	55n11.74ml   	3
+55	N	11.74	1203321	1203331	1203334	ML	3	ML_3       	55n11.74ml   	2
+55	N	11.74	1203321	1203331	1212757	ML	4	ML_4       	55n11.74ml   	1
+55	N	11.74	1203321	1203327	1212758	FR	2	SD_3       	55n11.74fr   	1
+55	N	12	1203335	1203336	1203337	QU	1	QUEUE      	55n12ora     	0
+55	N	12	1203335	1203336	1203338	DM	2	DEMAND     	55n12ora     	0
+55	N	12	1203335	1203336	1203339	PA	3	PASSAGE    	55n12ora     	0
+55	N	12	1203335	1203340	1203341	HV	1	SD_1       	55n12hv      	1
+55	N	12	1203335	1203342	1203343	ML	1	ML_1       	55n12ml      	4
+55	N	12	1203335	1203342	1203344	ML	2	ML_2       	55n12ml      	3
+55	N	12	1203335	1203342	1203345	ML	3	ML_3       	55n12ml      	2
+55	S	12	1203335	1203346	1203347	OF	1	SD_2       	55s12fr      	1
+55	N	12	1203335	1203342	1212999	ML	4	ML_4       	55n12ml      	1
+55	N	12	1203335	1203336	1213000	OR	4	RAMP_ON    	55n12ora     	0
+405	S	0.6	1201117	1201118	1211055	ML	1	ML_1       	405s0.6ml    	5  
+405	S	0.6	1201117	1201118	1211056	ML	2	ML_2       	405s0.6ml    	4  
+405	S	0.6	1201117	1201118	1211057	ML	3	ML_3       	405s0.6ml    	3  
+405	S	0.6	1201117	1201118	1211058	ML	4	ML_4       	405s0.6ml    	2  
+405	S	0.6	1201117	1201118	1211059	ML	5	ML_5       	405s0.6ml    	1  
+405	N	0.6	1201117	1211066	1211060	OS	1	OS_1       	405n0.6ml    	3  
+405	N	0.6	1201117	1211066	1211061	OS	2	OS_2       	405n0.6ml    	2  
+405	N	0.6	1201117	1211066	1211062	OS	3	OS_3       	405n0.6ml    	1  
+405	S	0.6	1201117	1211065	1211063	HV	1	SD_1       	405s0.6hv    	1  
+405	N	0.6	1201117	1211067	1211064	OH	1	SD_2       	405n0.6hv    	1  
+405	S	0.77	1201080	1201081	1201082	QU	1	QUEUE      	405s0.77ora  	0  
+405	S	0.77	1201080	1201081	1201083	DM	2	DEMAND     	405s0.77ora  	0  
+405	S	0.77	1201080	1201081	1201084	PA	3	PASSAGE    	405s0.77ora  	0  
+405	S	0.77	1201080	1201085	1201086	HV	1	SD_1       	405s0.77hv   	1  
+405	S	0.77	1201080	1201087	1201088	ML	1	ML_1       	405s0.77ml   	5  
+405	S	0.77	1201080	1201087	1201089	ML	2	ML_2       	405s0.77ml   	4  
+405	S	0.77	1201080	1201087	1201090	ML	3	ML_3       	405s0.77ml   	3  
+405	S	0.77	1201080	1201087	1201091	ML	4	ML_4       	405s0.77ml   	2  
+405	S	0.77	1201080	1201081	1211045	OR	4	RAMP_ON    	405s0.77ora  	0  
+405	S	0.77	1201080	1201087	1211046	ML	5	ML_5       	405s0.77ml   	1  
+405	N	0.93	1201092	1201093	1201094	OR	1	RAMP_ON    	405n0.9ora   	0  
+405	N	0.93	1201092	1201093	1201095	QU	2	QUEUE      	405n0.9ora   	0  
+405	N	0.93	1201092	1201093	1201096	DM	3	DEMAND     	405n0.9ora   	0  
+405	N	0.93	1201092	1201093	1201097	PA	4	PASSAGE    	405n0.9ora   	0  
+405	N	0.93	1201092	1201098	1201099	FR	1	RAMP_OFF   	405n0.9fr    	1  
+405	N	0.93	1201092	1201100	1201101	ML	1	ML_1       	405n0.9ml    	4  
+405	N	0.93	1201092	1201100	1201102	ML	2	ML_2       	405n0.9ml    	3  
+405	N	0.93	1201092	1201100	1201103	ML	3	ML_3       	405n0.9ml    	2  
+405	N	0.93	1201092	1201100	1201104	ML	4	ML_4       	405n0.9ml    	1  
+405	N	0.93	1201092	1208954	1208953	HV	1	SD_1       	405n0.9ml    	5  
+405	N	0.93	1201092	1201098	1210822	FR	2	SD_2       	405n0.9fr    	1  
+405	N	0.93	1201092	1210825	1210823	OC	1	COLL_DIST_1	405n0.9ff    	2  
+405	N	0.93	1201092	1210825	1210824	OC	2	COLL_DIST_2	405n0.9ff    	1  
+405	S	0.96	1201105	1201106	1201107	QU	1	QUEUE      	405s0.96ora  	0  
+405	S	0.96	1201105	1201106	1201108	DM	2	DEMAND     	405s0.96ora  	0  
+405	S	0.96	1201105	1201106	1201109	PA	3	PASSAGE    	405s0.96ora  	0  
+405	S	0.96	1201105	1201110	1201111	HV	1	SD_1       	405s0.96hv   	1  
+405	S	0.96	1201105	1201112	1201113	ML	1	ML_1       	405s0.96ml   	4  
+405	S	0.96	1201105	1201112	1201114	ML	2	ML_2       	405s0.96ml   	3  
+405	S	0.96	1201105	1201112	1201115	ML	3	ML_3       	405s0.96ml   	2  
+405	S	0.96	1201105	1201112	1201116	ML	4	ML_4       	405s0.96ml   	1  
+405	S	0.96	1201105	1211054	1211052	FR	1	RAMP_OFF   	405s0.96fr   	2  
+405	S	0.96	1201105	1211054	1211053	FR	2	SD_2       	405s0.96fr   	1  
+405	N	1.11	1201119	1201120	1201121	OR	1	RAMP_ON    	405n1.11ora  	0  
+405	N	1.11	1201119	1201120	1201122	QU	2	QUEUE      	405n1.11ora  	0  
+405	N	1.11	1201119	1201120	1201123	DM	3	DEMAND     	405n1.11ora  	0  
+405	N	1.11	1201119	1201120	1201124	PA	4	PASSAGE    	405n1.11ora  	0  
+405	N	1.11	1201119	1201125	1201126	ML	1	ML_1       	405n1.11ml   	4  
+405	N	1.11	1201119	1201125	1201127	ML	2	ML_2       	405n1.11ml   	3  
+405	N	1.11	1201119	1201125	1201128	ML	3	ML_3       	405n1.11ml   	2  
+405	N	1.11	1201119	1201125	1201129	ML	4	ML_4       	405n1.11ml   	1  
+405	N	1.11	1201119	1209043	1209042	HV	1	SD_1       	405n1.11ml   	5  
+405	S	1.57	1201130	1201131	1201132	HV	1	SD_1       	405s1.57hv   	1  
+405	S	1.57	1201130	1209091	1209079	ML	1	ML_1       	405s1.57ml   	4  
+405	S	1.57	1201130	1209091	1209080	ML	2	ML_2       	405s1.57ml   	3  
+405	S	1.57	1201130	1209091	1209081	ML	3	ML_3       	405s1.57ml   	2  
+405	S	1.57	1201130	1209091	1209082	ML	4	ML_4       	405s1.57ml   	1  
+405	S	1.57	1201130	1209092	1209083	OS	1	OS_1       	405n1.57ml   	5  
+405	S	1.57	1201130	1209092	1209084	OS	2	OS_2       	405n1.57ml   	4  
+405	S	1.57	1201130	1209092	1209085	OS	3	OS_3       	405n1.57ml   	3  
+405	S	1.57	1201130	1209092	1209086	OS	4	OS_4       	405n1.57ml   	2  
+405	S	1.57	1201130	1209092	1209087	OS	5	OS_5       	405n1.57ml   	1  
+405	S	1.57	1201130	1209090	1209089	OH	1	SD_2       	?            	0  
+405	S	1.57	1201130	1210932	1210930	FF	1	SD_4       	405s1.57ffa  	1  
+405	S	1.57	1201130	1210933	1210931	OC	1	COLL_DIST_ON	?            	0 
+405	S	1.57	1201130	1210935	1210934	FF	1	SD_5       	405s1.57ffb  	1  
+405	S	1.73	1209054	1209094	1209118	CD	2	COLL_DIST_2	405s1.73cd   	1  
+405	S	1.73	1209054	1209094	1209119	CD	1	COLL_DIST_1	?            	0  
+405	S	1.73	1209054	1209123	1209121	FF	1	SD_4       	405s1.73ff   	1  
+405	N	1.73	1209054	1209124	1209122	FO	1	SD_5       	405n1.73ff   	1  
+405	S	1.93	1201133	1201134	1201135	HV	1	SD_1       	405s1.93hv   	1  
+405	S	1.93	1201133	1209161	1209149	ML	1	ML_1       	405s1.93ml   	4  
+405	S	1.93	1201133	1209161	1209150	ML	2	ML_2       	405s1.93ml   	3  
+405	S	1.93	1201133	1209161	1209151	ML	3	ML_3       	405s1.93ml   	2  
+405	S	1.93	1201133	1209161	1209153	ML	4	ML_4       	405s1.93ml   	1  
+405	N	1.93	1201133	1209162	1209154	OS	1	OS_1       	405n1.93ml   	4  
+405	N	1.93	1201133	1209162	1209155	OS	2	OS_2       	405n1.93ml   	3  
+405	N	1.93	1201133	1209162	1209156	OS	3	OS_3       	405n1.93ml   	2  
+405	N	1.93	1201133	1209162	1209157	OS	4	OS_4       	405n1.93ml   	1  
+405	N	1.93	1201133	1209163	1209160	OH	1	SD_2       	405n1.93hv   	1  
+405	S	1.93	1201133	1209476	1209473	FC	1	COLL_DIST_OFF	405s1.93cd   	1
+405	N	1.93	1201133	1209477	1209474	FO	1	SD_4       	405n1.93ff   	2  
+405	N	1.93	1201133	1209477	1209475	FO	2	SD_5       	405n1.93ff   	1  
+405	S	1.93	1201133	1210929	1210928	FF	1	COLL_DIST_ON	405s1.93ff   	1 
+405	N	2.35	1209050	1209176	1209165	ML	1	ML_1       	405n2.35ml   	5  
+405	N	2.35	1209050	1209176	1209166	ML	2	ML_2       	405n2.35ml   	4  
+405	N	2.35	1209050	1209176	1209167	ML	3	ML_3       	405n2.35ml   	3  
+405	N	2.35	1209050	1209176	1209168	ML	4	ML_4       	405n2.35ml   	2  
+405	N	2.35	1209050	1209176	1209169	ML	5	ML_5       	405n2.35ml   	1  
+405	S	2.35	1209050	1209178	1209170	OS	1	OS_1       	405s2.35ml   	5  
+405	S	2.35	1209050	1209178	1209171	OS	2	OS_2       	405s2.35ml   	4  
+405	S	2.35	1209050	1209178	1209172	OS	3	OS_3       	405s2.35ml   	3  
+405	N	2.35	1209050	1209177	1209173	HV	1	SD_1       	405n2.35hv   	1  
+405	S	2.35	1209050	1209179	1209175	OH	1	SD_2       	405s2.35hv   	1  
+405	S	2.35	1209050	1209178	1211050	OS	4	OS_4       	405s2.35ml   	2  
+405	S	2.35	1209050	1209178	1211051	OS	5	OS_5       	405s2.35ml   	1  
+405	S	2.88	1201136	1201137	1201138	OR	1	RAMP_ON    	405s2.88ora  	0  
+405	S	2.88	1201136	1201137	1201139	QU	2	QUEUE      	405s2.88spill	1  
+405	S	2.88	1201136	1201137	1201140	DM	3	DEMAND     	405s2.88orb  	2  
+405	S	2.88	1201136	1201137	1201141	PA	4	PASSAGE    	405s2.88orb  	0  
+405	S	2.88	1201136	1201137	1201142	RH	5	RAMP_HOV   	405s2.88orb  	1  
+405	S	2.88	1201136	1201143	1201144	HV	1	SD_1       	405s2.88hv   	1  
+405	S	2.88	1201136	1201145	1201146	ML	1	ML_1       	405s2.88ml   	4  
+405	S	2.88	1201136	1201145	1201147	ML	2	ML_2       	405s2.88ml   	3  
+405	S	2.88	1201136	1201145	1201148	ML	3	ML_3       	405s2.88ml   	2  
+405	S	2.88	1201136	1201145	1201149	ML	4	ML_4       	405s2.88ml   	1  
+405	S	2.88	1201136	1211047	1211048	FR	1	RAMP_OFF   	405s2.88fr   	1  
+405	S	2.88	1201136	1211047	1211049	FR	2	SD_2       	?            	0  
+405	N	2.99	1201150	1201151	1201152	OR	1	RAMP_ON    	405n2.99ora  	0  
+405	N	2.99	1201150	1201151	1201153	QU	2	QUEUE      	405n2.99spill	0  
+405	N	2.99	1201150	1201151	1201154	DM	3	DEMAND     	405n2.99orb  	2  
+405	N	2.99	1201150	1201151	1201155	PA	4	PASSAGE    	405n2.99orb  	0  
+405	N	2.99	1201150	1201151	1201156	RH	5	RAMP_HOV   	405n2.99orb  	1  
+405	N	2.99	1201150	1201157	1201158	HV	1	SD_1       	405n2.99hv   	1  
+405	N	2.99	1201150	1201159	1201160	ML	1	ML_1       	405n2.99ml   	4  
+405	N	2.99	1201150	1201159	1201161	ML	2	ML_2       	405n2.99ml   	3  
+405	N	2.99	1201150	1201159	1201162	ML	3	ML_3       	405n2.99ml   	2  
+405	N	2.99	1201150	1201159	1201163	ML	4	ML_4       	405n2.99ml   	1  
+405	N	2.99	1201150	1210057	1210056	FR	1	RAMP_OFF   	405n2.99fr   	1  
+405	N	2.99	1201150	1201157	1211041	HV	2	SD_2       	405n2.99hv_2 	1  
+405	N	3.31	1209051	1209059	1209056	ML	1	ML_1       	405n3.31ml   	4  
+405	N	3.31	1209051	1209059	1209057	ML	2	ML_2       	405n3.31ml   	3  
+405	N	3.31	1209051	1209059	1209058	ML	3	ML_3       	405n3.31ml   	2  
+405	N	3.31	1209051	1209059	1209180	ML	4	ML_4       	405n3.31ml   	1  
+405	S	3.31	1209051	1209189	1209181	OS	1	OS_1       	405s3.31ml   	4  
+405	S	3.31	1209051	1209189	1209182	OS	2	OS_2       	405s3.31ml   	3  
+405	S	3.31	1209051	1209189	1209183	OS	3	OS_3       	405s3.31ml   	2  
+405	S	3.31	1209051	1209189	1209184	OS	4	OS_4       	405s3.31ml   	1  
+405	N	3.31	1209051	1209187	1209185	HV	1	SD_1       	405n3.31hv   	1  
+405	S	3.31	1209051	1209190	1209186	OH	1	SD_2       	405s3.31hv   	1  
+405	S	3.84	1201164	1201165	1201166	OR	1	RAMP_ON    	405s3.84ora  	0  
+405	S	3.84	1201164	1201165	1201167	QU	2	QUEUE      	405s3.84ora  	0  
+405	S	3.84	1201164	1201165	1201168	DM	3	DEMAND     	405s3.84ora  	0  
+405	S	3.84	1201164	1201165	1201169	PA	4	PASSAGE    	405s3.84ora  	0  
+405	S	3.84	1201164	1201165	1201170	RH	5	RAMP_HOV   	405s3.84ora  	0  
+405	S	3.84	1201164	1201171	1201172	ML	1	ML_1       	405s3.84ml   	4  
+405	S	3.84	1201164	1201171	1201173	ML	2	ML_2       	405s3.84ml   	3  
+405	S	3.84	1201164	1201171	1201174	ML	3	ML_3       	405s3.84ml   	2  
+405	S	3.84	1201164	1201171	1201175	ML	4	ML_4       	405s3.84ml   	1  
+405	S	3.84	1201164	1209046	1209044	HV	1	SD_1       	405s3.84hv   	1  
+405	N	3.86	1201176	1201177	1201178	QU	1	QUEUE      	405n3.86ora  	0  
+405	N	3.86	1201176	1201177	1201179	DM	2	DEMAND     	405n3.86ora  	0  
+405	N	3.86	1201176	1201177	1201180	PA	3	PASSAGE    	405n3.86ora  	0  
+405	N	3.86	1201176	1201181	1201182	FR	1	RAMP_OFF   	405n3.86fr   	1  
+405	N	3.86	1201176	1201183	1201184	HV	1	SD_1       	405n3.86hv   	1  
+405	N	3.86	1201176	1201185	1201186	ML	1	ML_1       	405n3.86ml   	4  
+405	N	3.86	1201176	1201185	1201187	ML	2	ML_2       	405n3.86ml   	3  
+405	N	3.86	1201176	1201185	1201188	ML	3	ML_3       	405n3.86ml   	2  
+405	N	3.86	1201176	1201185	1201189	ML	4	ML_4       	405n3.86ml   	1  
+405	N	3.86	1201176	1201181	1209896	FR	2	SD_2       	?            	0  
+405	S	4.03	1201190	1201191	1201192	QU	1	QUEUE      	405s4.03ora  	0  
+405	S	4.03	1201190	1201191	1201193	DM	2	DEMAND     	405s4.03ora  	0  
+405	S	4.03	1201190	1201191	1201194	PA	3	PASSAGE    	405s4.03ora  	0  
+405	S	4.03	1201190	1201195	1201196	FR	1	RAMP_OFF   	405s4.03fr   	1  
+405	S	4.03	1201190	1201197	1201198	ML	1	ML_1       	405s4.03ml   	4  
+405	S	4.03	1201190	1201197	1201199	ML	2	ML_2       	405s4.03ml   	3  
+405	S	4.03	1201190	1201197	1201200	ML	3	ML_3       	405s4.03ml   	2  
+405	S	4.03	1201190	1201197	1201201	ML	4	ML_4       	405s4.03ml   	1  
+405	N	4.03	1201202	1201203	1201204	OR	1	RAMP_ON    	405n4.03ora  	0  
+405	N	4.03	1201202	1201203	1201205	QU	2	QUEUE      	405n4.03ora  	0  
+405	N	4.03	1201202	1201203	1201206	DM	3	DEMAND     	405n4.03ora  	0  
+405	N	4.03	1201202	1201203	1201207	PA	4	PASSAGE    	405n4.03ora  	0  
+405	N	4.03	1201202	1201203	1201208	RH	5	RAMP_HOV   	?            	0  
+405	N	4.03	1201202	1201209	1201210	HV	1	SD_1       	405n4.03hv   	1  
+405	N	4.03	1201202	1201211	1201212	ML	1	ML_1       	405n4.03ml   	4  
+405	N	4.03	1201202	1201211	1201213	ML	2	ML_2       	405n4.03ml   	3  
+405	N	4.03	1201202	1201211	1201214	ML	3	ML_3       	405n4.03ml   	2  
+405	N	4.03	1201202	1201211	1201215	ML	4	ML_4       	405n4.03ml   	1  
+405	S	4.03	1201190	1209047	1209045	HV	1	SD_1       	405s4.03hv   	1  
+405	S	5.01	1201216	1201217	1201218	ML	1	ML_1       	405s5.01ml   	4  
+405	S	5.01	1201216	1201217	1201219	ML	2	ML_2       	405s5.01ml   	3  
+405	S	5.01	1201216	1201217	1201220	ML	3	ML_3       	405s5.01ml   	2  
+405	S	5.01	1201216	1201217	1201221	ML	4	ML_4       	405s5.01ml   	1  
+405	N	5.01	1201216	1201222	1201223	OS	1	OS_1       	405n5.01ml   	4  
+405	N	5.01	1201216	1201222	1201224	OS	2	OS_2       	405n5.01ml   	3  
+405	N	5.01	1201216	1201222	1201225	OS	3	OS_3       	405n5.01ml   	2  
+405	N	5.01	1201216	1201222	1201226	OS	4	OS_4       	405n5.01ml   	1  
+405	S	5.01	1201216	1201227	1201228	HV	1	SD_1       	405s5.01hv   	1  
+405	N	5.01	1201216	1201229	1201230	OH	1	SD_2       	405n5.01hv   	1  
+405	S	5.05	1209052	1209070	1209062	ML	1	ML_1       	405s5.05ml   	4  
+405	S	5.05	1209052	1209070	1209063	ML	2	ML_2       	405s5.05ml   	3  
+405	S	5.05	1209052	1209070	1209064	ML	3	ML_3       	405s5.05ml   	2  
+405	S	5.05	1209052	1209070	1209065	ML	4	ML_4       	405s5.05ml   	1  
+405	S	5.05	1209052	1209068	1209066	HV	1	SD_1       	405s5.05hv   	1  
+405	S	5.05	1209052	1209076	1209067	OS	1	OS_1       	405n5.05ml   	4  
+405	S	5.05	1209052	1209076	1209069	OS	2	OS_2       	405n5.05ml   	3  
+405	S	5.05	1209052	1209075	1209072	OH	1	SD_2       	405n5.05hv   	1  
+405	S	5.05	1209052	1209076	1209073	OS	3	OS_3       	405n5.05ml 	2  
+405	S	5.05	1209052	1209076	1209074	OS	4	OS_4       	405n5.05ml   	1  
+405	S	5.5	1201231	1201232	1201233	OR	1	RAMP_ON    	405s5.5ora   	0  
+405	S	5.5	1201231	1201232	1201234	QU	2	QUEUE      	405s5.5ora   	0  
+405	S	5.5	1201231	1201232	1201235	DM	3	DEMAND     	405s5.5ora   	0  
+405	S	5.5	1201231	1201232	1201236	PA	4	PASSAGE    	405s5.5ora   	0  
+405	S	5.5	1201231	1201232	1201237	RH	5	RAMP_HOV   	405s5.5ora   	0  
+405	S	5.5	1201231	1201238	1201239	HV	1	SD_1       	405s5.5hv    	1  
+405	S	5.5	1201231	1201240	1201241	ML	1	ML_1       	405s5.5ml    	4  
+405	S	5.5	1201231	1201240	1201242	ML	2	ML_2       	405s5.5ml    	3  
+405	S	5.5	1201231	1201240	1201243	ML	3	ML_3       	405s5.5ml    	2  
+405	S	5.5	1201231	1201240	1201244	ML	4	ML_4       	405s5.5ml    	1  
+405	N	5.55	1201245	1201246	1201247	QU	1	QUEUE      	405n5.55ora  	0  
+405	N	5.55	1201245	1201246	1201248	DM	2	DEMAND     	405n5.55ora  	0  
+405	N	5.55	1201245	1201246	1201249	PA	3	PASSAGE    	405n5.55ora  	0  
+405	N	5.55	1201245	1201246	1201250	RH	4	RAMP_HOV   	?            	0  
+405	N	5.55	1201245	1201251	1201252	FR	1	RAMP_OFF   	405n5.55fr   	1  
+405	N	5.55	1201245	1201251	1201253	FR	2	SD_2       	?            	0  
+405	N	5.55	1201245	1201254	1201255	ML	1	ML_1       	405n5.55ml   	4  
+405	N	5.55	1201245	1201254	1201256	ML	2	ML_2       	405n5.55ml   	3  
+405	N	5.55	1201245	1201254	1201257	ML	3	ML_3       	405n5.55ml   	2  
+405	N	5.55	1201245	1201254	1201258	ML	4	ML_4       	405n5.55ml   	1  
+405	N	5.55	1201245	1201259	1201260	HV	1	SD_1       	405n5.55hv   	1  
+405	N	5.55	1201245	1201246	1210826	OR	5	RAMP_ON    	405n5.55ora  	0  
+405	N	5.55	1201245	1201251	1212696	FR	3	SD_3       	?            	0  
+405	S	5.69	1201261	1201262	1201263	QU	1	QUEUE      	405s5.69ora  	0  
+405	S	5.69	1201261	1201262	1201264	DM	2	DEMAND     	405s5.69ora  	0  
+405	S	5.69	1201261	1201262	1201265	PA	3	PASSAGE    	405s5.69ora  	0  
+405	S	5.69	1201261	1201266	1201267	FR	1	RAMP_OFF   	405s4.69fr   	2  
+405	S	5.69	1201261	1201268	1201269	HV	1	SD_1       	405s5.69hv   	1  
+405	S	5.69	1201261	1201270	1201271	ML	1	ML_1       	405s5.69ml   	4  
+405	S	5.69	1201261	1201270	1201272	ML	2	ML_2       	405s5.69ml   	3  
+405	S	5.69	1201261	1201270	1201273	ML	3	ML_3       	405s5.69ml   	2  
+405	S	5.69	1201261	1201270	1201274	ML	4	ML_4       	405s5.69ml   	1  
+405	S	5.69	1201261	1201266	1210827	FR	2	SD_2       	405s4.69fr   	1  
+405	N	5.74	1201275	1201276	1201277	OR	1	RAMP_ON    	405n5.74ora  	0  
+405	N	5.74	1201275	1201276	1201278	QU	2	QUEUE      	405n5.74ora  	0  
+405	N	5.74	1201275	1201276	1201279	DM	3	DEMAND     	405n5.74ora  	0  
+405	N	5.74	1201275	1201276	1201280	PA	4	PASSAGE    	405n5.74ora  	0  
+405	N	5.74	1201275	1201281	1201282	HV	1	SD_1       	405n5.74hv   	1  
+405	N	5.74	1201275	1201283	1201284	ML	1	ML_1       	405n5.74ml   	5  
+405	N	5.74	1201275	1201283	1201285	ML	2	ML_2       	405n5.74ml   	4  
+405	N	5.74	1201275	1201283	1201286	ML	3	ML_3       	405n5.74ml   	3  
+405	N	5.74	1201275	1201283	1201287	ML	4	ML_4       	405n5.74ml   	2  
+405	N	5.74	1201275	1201283	1201288	ML	5	ML_5       	405n5.74ml   	1  
+405	S	6.1	1201289	1201290	1201291	HV	1	SD_1       	405s6.21hv   	1  
+405	S	6.1	1201289	1201292	1201293	ML	1	ML_1       	405s6.21ml   	5  
+405	S	6.1	1201289	1201292	1201294	ML	2	ML_2       	405s6.21ml   	4  
+405	S	6.1	1201289	1201292	1201295	ML	3	ML_3       	405s6.21ml   	3  
+405	S	6.1	1201289	1201292	1201296	ML	4	ML_4       	405s6.21ml   	2  
+405	S	6.1	1201289	1201292	1201297	ML	5	ML_5       	405s6.21ml   	1  
+405	N	6.21	1201289	1201298	1201299	OS	1	OS_1       	405n6.21ml   	5  
+405	N	6.21	1201289	1201298	1201300	OS	2	OS_2       	405n6.21ml   	4  
+405	N	6.21	1201289	1201298	1201301	OS	3	OS_3       	405n6.21ml   	3  
+405	N	6.21	1201289	1201298	1201302	OS	4	OS_4       	405n6.21ml   	2  
+405	N	6.21	1201289	1201298	1201303	OS	5	OS_5       	405n6.21ml   	1  
+405	N	6.21	1201289	1201304	1201305	OH	1	SD_2       	405n6.21ml   	6  
+405	S	6.8	1201306	1201307	1201308	OR	1	RAMP_ON    	405s6.8ora   	0  
+405	S	6.8	1201306	1201307	1201309	QU	2	QUEUE      	405s6.8ora   	0  
+405	S	6.8	1201306	1201307	1201310	DM	3	DEMAND     	405s6.8ora   	0  
+405	S	6.8	1201306	1201307	1201311	PA	4	PASSAGE    	405s6.8ora   	0  
+405	S	6.8	1201306	1201307	1201312	RH	5	RAMP_HOV   	405s6.8ora   	0  
+405	S	6.8	1201306	1201313	1201314	HV	1	SD_1       	405s6.8hv    	1  
+405	S	6.8	1201306	1201315	1201316	ML	1	ML_1       	405s6.8ml    	5  
+405	S	6.8	1201306	1201315	1201317	ML	2	ML_2       	405s6.8ml    	4  
+405	S	6.8	1201306	1201315	1201318	ML	3	ML_3       	405s6.8ml    	3  
+405	S	6.8	1201306	1201315	1201319	ML	4	ML_4       	405s6.8ml    	2  
+405	S	6.8	1201306	1201315	1201320	ML	5	ML_5       	405s6.8ml    	1  
+405	N	6.85	1201321	1201322	1201323	OR	1	RAMP_ON    	405n6.85ora  	0  
+405	N	6.85	1201321	1201322	1201324	QU	2	QUEUE      	405n6.85ora  	0  
+405	N	6.85	1201321	1201322	1201325	DM	3	DEMAND     	405n6.85ora  	0  
+405	N	6.85	1201321	1201322	1201326	PA	4	PASSAGE    	405n6.85ora  	0  
+405	N	6.85	1201321	1201327	1201328	FR	1	RAMP_OFF   	405n6.85fr   	2  
+405	N	6.85	1201321	1201327	1201329	FR	2	SD_2       	?            	0  
+405	N	6.85	1201321	1201327	1201330	FR	3	SD_3       	?            	0  
+405	N	6.85	1201321	1201331	1201332	HV	1	SD_1       	405n6.85hv   	1  
+405	N	6.85	1201321	1201333	1201334	ML	1	ML_1       	405n6.85ml   	5  
+405	N	6.85	1201321	1201333	1201335	ML	2	ML_2       	405n6.85ml   	4  
+405	N	6.85	1201321	1201333	1201336	ML	3	ML_3       	405n6.85ml   	3  
+405	N	6.85	1201321	1201333	1201337	ML	4	ML_4       	405n6.85ml   	2  
+405	N	6.85	1201321	1201333	1201338	ML	5	ML_5       	405n6.85ml   	1  
+405	S	7.01	1201339	1201340	1201341	OR	1	RAMP_ON    	405s7.01ora  	0  
+405	S	7.01	1201339	1201340	1201342	QU	2	QUEUE      	405s7.01ora  	0  
+405	S	7.01	1201339	1201340	1201343	DM	3	DEMAND     	405s7.01ora  	0  
+405	S	7.01	1201339	1201340	1201344	PA	4	PASSAGE    	405s7.01ora  	0  
+405	S	7.01	1201339	1201345	1201346	FR	1	RAMP_OFF   	405s7.01fr   	2  
+405	S	7.01	1201339	1201345	1201347	FR	2	SD_2       	405s7.01fr   	1  
+405	S	7.01	1201339	1201348	1201349	HV	1	SD_1       	405s7.01hv   	1  
+405	S	7.01	1201339	1201350	1201351	ML	1	ML_1       	405s7.01ml   	5  
+405	S	7.01	1201339	1201350	1201352	ML	2	ML_2       	405s7.01ml   	4  
+405	S	7.01	1201339	1201350	1201353	ML	3	ML_3       	405s7.01ml   	3  
+405	S	7.01	1201339	1201350	1201354	ML	4	ML_4       	405s7.01ml   	2  
+405	S	7.01	1201339	1201350	1201355	ML	5	ML_5       	405s7.01ml   	1  
+405	N	7.07	1201356	1201357	1201358	OR	1	RAMP_ON    	405n7.07ora  	0  
+405	N	7.07	1201356	1201357	1201359	QU	2	QUEUE      	405n7.07ora  	0  
+405	N	7.07	1201356	1201357	1201360	DM	3	DEMAND     	405n7.07ora  	0  
+405	N	7.07	1201356	1201357	1201361	PA	4	PASSAGE    	405n7.07ora  	0  
+405	N	7.07	1201356	1201357	1201362	RH	5	RAMP_HOV   	?            	0  
+405	N	7.07	1201356	1201363	1201364	HV	1	SD_1       	405n7.07hv   	1  
+405	N	7.07	1201356	1201365	1201366	ML	1	ML_1       	405n7.07ml   	5  
+405	N	7.07	1201356	1201365	1201367	ML	2	ML_2       	405n7.07ml   	4  
+405	N	7.07	1201356	1201365	1201368	ML	3	ML_3       	405n7.07ml   	3  
+405	N	7.07	1201356	1201365	1201369	ML	4	ML_4       	405n7.07ml   	2  
+405	N	7.07	1201356	1201365	1201370	ML	5	ML_5       	405n7.07ml   	1  
+405	S	7.69	1201371	1201372	1201373	OR	1	RAMP_ON    	405s7.69ora  	0  
+405	S	7.69	1201371	1201372	1201374	QU	2	QUEUE      	405s7.69ora  	0  
+405	S	7.69	1201371	1201372	1201375	DM	3	DEMAND     	405s7.69ora  	0  
+405	S	7.69	1201371	1201372	1201376	PA	4	PASSAGE    	405s7.69ora  	0  
+405	S	7.69	1201371	1201377	1201378	FR	1	RAMP_OFF   	405s7.69fr   	2  
+405	S	7.69	1201371	1201377	1201379	FR	2	SD_2       	405s7.69fr   	1  
+405	S	7.69	1201371	1201380	1201381	HV	1	SD_1       	405s7.69hv   	1  
+405	S	7.69	1201371	1201382	1201383	ML	1	ML_1       	405s7.69ml   	5  
+405	S	7.69	1201371	1201382	1201384	ML	2	ML_2       	405s7.69ml   	4  
+405	S	7.69	1201371	1201382	1201385	ML	3	ML_3       	405s7.69ml   	3  
+405	S	7.69	1201371	1201382	1201386	ML	4	ML_4       	405s7.69ml   	2  
+405	S	7.69	1201371	1201382	1201387	ML	5	ML_5       	405s7.69ml   	1  
+405	S	7.69	1201371	1201372	1211110	RH	5	RAMP_HOV   	405s7.69ora  	0  
+405	N	7.73	1201388	1201389	1201390	OR	1	RAMP_ON    	405n7.73ora  	0  
+405	N	7.73	1201388	1201389	1201391	QU	2	QUEUE      	405n7.73ora  	0  
+405	N	7.73	1201388	1201389	1201392	DM	3	DEMAND     	405n7.73ora  	0  
+405	N	7.73	1201388	1201389	1201393	PA	4	PASSAGE    	405n7.73ora  	0  
+405	N	7.73	1201388	1201394	1201395	FR	1	RAMP_OFF   	405n7.73fr   	1  
+405	N	7.73	1201388	1201394	1201396	FR	2	SD_2       	?            	0  
+405	N	7.73	1201388	1201397	1201398	HV	1	SD_1       	405n7.73hv   	1  
+405	N	7.73	1201388	1201399	1201400	ML	1	ML_1       	405n7.73ml   	5  
+405	N	7.73	1201388	1201399	1201401	ML	2	ML_2       	405n7.73ml   	4  
+405	N	7.73	1201388	1201399	1201402	ML	3	ML_3       	405n7.73ml   	3  
+405	N	7.73	1201388	1201399	1201403	ML	4	ML_4       	405n7.73ml   	2  
+405	N	7.73	1201388	1201399	1201404	ML	5	ML_5       	405n7.73ml   	1  
+405	N	7.73	1201388	1201394	1211043	FR	3	SD_4       	?            	0  
+405	N	7.73	1201388	1201394	1211044	FR	4	SD_5       	?            	0  
+405	N	8.27	1201405	1201406	1209192	ML	1	ML_1       	405n8.27ml   	6  
+405	N	8.27	1201405	1201406	1209193	ML	2	ML_2       	405n8.27ml   	5  
+405	N	8.27	1201405	1201406	1209194	ML	3	ML_3       	405n8.27ml   	4  
+405	N	8.27	1201405	1201406	1209195	ML	4	ML_4       	405n8.27ml   	3  
+405	N	8.27	1201405	1201407	1209196	HV	1	SD_1       	405n8.27hv   	1  
+405	S	8.27	1201405	1209204	1209197	OS	1	OS_1       	405s8.27ml   	6  
+405	S	8.27	1201405	1209204	1209198	OS	2	OS_2       	405s8.27ml   	5  
+405	S	8.27	1201405	1209204	1209199	OS	3	OS_3       	405s8.27ml   	4  
+405	S	8.27	1201405	1209204	1209200	OS	4	OS_4       	405s8.27ml   	3  
+405	S	8.27	1201405	1209204	1209201	OS	5	OS_5       	405s8.27ml   	2  
+405	S	8.27	1201405	1209204	1209202	OS	6	OS_6       	405s8.27ml   	1  
+405	S	8.27	1201405	1209205	1209203	OH	1	SD_2       	405s8.27hv   	1  
+405	N	8.27	1201405	1201406	1209471	ML	5	ML_5       	405n8.27ml   	2  
+405	N	8.27	1201405	1201406	1209472	ML	6	ML_6       	405n8.27ml   	1  
+405	S	8.4	1201411	1201412	1201413	CD	1	COLL_DIST_1	405s8.4cd    	2  
+405	S	8.4	1201411	1201412	1201414	CD	2	COLL_DIST_2	405s8.4cd    	1  
+405	S	8.4	1201411	1201415	1201416	OC	1	COLL_DIST_ON	?            	0 
+405	S	8.4	1201411	1201417	1201418	HV	1	SD_1       	405s8.4hv    	1  
+405	S	8.4	1201411	1201419	1201420	ML	1	ML_1       	405s8.4ml    	5  
+405	S	8.4	1201411	1201419	1201421	ML	2	ML_2       	405s8.4ml    	4  
+405	S	8.4	1201411	1201419	1201422	ML	3	ML_3       	405s8.4ml    	3  
+405	S	8.4	1201411	1201419	1201423	ML	4	ML_4       	405s8.4ml    	2  
+405	S	8.4	1201411	1201419	1201424	ML	5	ML_5       	405s8.4ffa   	1  
+405	S	8.4	1201411	1201425	1201426	FF	1	SD_2       	405s8.4ffb   	1  
+405	S	8.4	1201411	1201425	1201427	FF	2	SD_3       	?            	0  
+405	S	8.4	1201411	1201425	1201428	FF	3	SD_4       	?            	0  
+405	S	8.4	1201411	1201425	1201429	FF	4	SD_5       	?            	0  
+405	N	8.4	1201411	1201430	1201431	OS	1	OS_1       	405n8.4ml    	4  
+405	N	8.4	1201411	1201430	1201432	OS	2	OS_2       	405n8.4ml    	3  
+405	N	8.4	1201411	1201430	1201433	OS	3	OS_3       	405n8.4ml    	2  
+405	N	8.4	1201411	1201430	1201434	OS	4	OS_4       	405n8.4ml    	1  
+405	N	8.4	1201411	1201435	1201436	OH	1	SD_6       	405n8.4hv    	1  
+405	S	8.9	1201409	1201410	1209125	ML	1	ML_1       	405s8.9ml    	4  
+405	S	8.9	1201409	1201410	1209126	ML	2	ML_2       	405s8.9ml    	3  
+405	S	8.9	1201409	1201410	1209127	ML	3	ML_3       	405s8.9ml    	2  
+405	S	8.9	1201409	1201410	1209128	ML	4	ML_4       	405s8.9ml    	1  
+405	S	8.9	1201409	1209143	1209131	HV	1	SD_1       	405s8.9hv    	1  
+405	N	8.9	1201409	1209144	1209132	OS	1	OS_1       	405n8.9ml    	4  
+405	N	8.9	1201409	1209144	1209133	OS	2	OS_2       	405n8.9ml    	3  
+405	N	8.9	1201409	1209144	1209134	OS	3	OS_3       	405n8.9ml    	2  
+405	N	8.9	1201409	1209144	1209135	OS	4	OS_4       	405n8.9ml    	1  
+405	N	8.9	1201409	1209145	1209136	OH	1	SD_2       	405n8.9hv    	1  
+405	S	8.9	1201409	1209482	1209478	FF	1	SD_4       	405s8.9ff    	1  
+405	S	8.9	1201409	1209482	1209479	FF	2	SD_5       	?            	0  
+405	N	8.9	1201409	1209483	1209480	FO	1	SD_6       	?            	0  
+405	N	8.9	1201409	1209483	1209481	FO	2	SD_3       	?            	0  
+405	N	9.46	1201444	1201445	1201446	QU	1	QUEUE      	405n9.46ora  	0  
+405	N	9.46	1201444	1201445	1201447	DM	2	DEMAND     	405n9.46ora  	0  
+405	N	9.46	1201444	1201445	1201448	PA	3	PASSAGE    	405n9.46ora  	0  
+405	N	9.46	1201444	1201449	1201450	FR	1	RAMP_OFF   	405n9.46fr   	1  
+405	N	9.46	1201444	1201451	1201452	HV	1	SD_1       	405n9.46ml   	6  
+405	N	9.46	1201444	1201453	1201454	ML	1	ML_1       	405n9.46ml   	5  
+405	N	9.46	1201444	1201453	1201455	ML	2	ML_2       	405n9.46ml   	4  
+405	N	9.46	1201444	1201453	1201456	ML	3	ML_3       	405n9.46ml   	3  
+405	N	9.46	1201444	1201453	1201457	ML	4	ML_4       	405n9.46ml   	2  
+405	N	9.46	1201444	1201453	1201458	ML	5	ML_5       	405n9.46ml   	1  
+405	S	9.54	1201459	1201460	1201461	OR	1	RAMP_ON    	405s9.54ora  	0  
+405	S	9.54	1201459	1201460	1201462	QU	2	QUEUE      	405s9.54ora  	0  
+405	S	9.54	1201459	1201460	1201463	DM	3	DEMAND     	405s9.54ora  	0  
+405	S	9.54	1201459	1201460	1201464	PA	4	PASSAGE    	405s9.54ora  	0  
+405	S	9.54	1201459	1201465	1201466	FR	1	RAMP_OFF   	405s9.54fr   	2  
+405	S	9.54	1201459	1201467	1201468	HV	1	SD_1       	405s9.54hv   	1  
+405	S	9.54	1201459	1201469	1201470	ML	1	ML_1       	405s9.54ml   	4  
+405	S	9.54	1201459	1201469	1201471	ML	2	ML_2       	405s9.54ml   	3  
+405	S	9.54	1201459	1201469	1201472	ML	3	ML_3       	405s9.54ml   	2  
+405	S	9.54	1201459	1201469	1201473	ML	4	ML_4       	405s9.54ml   	1  
+405	S	9.54	1201459	1201469	1201474	ML	5	ML_5       	?            	0  
+405	N	9.65	1201475	1201476	1201477	OR	1	RAMP_ON    	405n9.65ora  	0  
+405	N	9.65	1201475	1201476	1201478	QU	2	QUEUE      	405n9.65ora  	0  
+405	N	9.65	1201475	1201476	1201479	DM	3	DEMAND     	405n9.65ora  	0  
+405	N	9.65	1201475	1201476	1201480	PA	4	PASSAGE    	405n9.65ora  	0  
+405	N	9.65	1201475	1201481	1201482	ML	1	ML_1       	405n9.65ml   	5  
+405	N	9.65	1201475	1201481	1201483	ML	2	ML_2       	405n9.65ml   	4  
+405	N	9.65	1201475	1201481	1201484	ML	3	ML_3       	405n9.65ml   	3  
+405	N	9.65	1201475	1201481	1201485	ML	4	ML_4       	405n9.65ml   	2  
+405	N	9.65	1201475	1201481	1201486	ML	5	ML_5       	405n9.65ml   	1  
+405	N	9.65	1201475	1201487	1201488	HV	1	SD_1       	405n9.65hv   	1  
+405	S	10.28	1201489	1201490	1201492	DM	1	DEMAND     	405s10.3or   	0  
+405	S	10.28	1201489	1201490	1201493	PA	2	PASSAGE    	405s10.3or   	0  
+405	S	10.28	1201489	1201494	1201495	HV	1	SD_1       	405s10.3hv   	1  
+405	S	10.28	1201489	1201497	1201498	ML	1	ML_1       	405s10.3ml   	4  
+405	S	10.28	1201489	1201497	1201499	ML	2	ML_2       	405s10.3ml   	3  
+405	S	10.28	1201489	1201497	1201500	ML	3	ML_3       	405s10.3ml   	2  
+405	S	10.28	1201489	1201497	1201501	ML	4	ML_4       	405s10.3ml   	1  
+405	S	10.48	1209055	1209217	1209206	ML	1	ML_1       	405s10.48ml  	4  
+405	S	10.48	1209055	1209217	1209207	ML	2	ML_2       	405s10.48ml  	3  
+405	S	10.48	1209055	1209217	1209208	ML	3	ML_3       	405s10.48ml  	2  
+405	S	10.48	1209055	1209217	1209209	ML	4	ML_4       	405s10.48ml  	1  
+405	S	10.48	1209055	1209218	1209210	HV	1	SD_1       	405s10.48hv  	1  
+405	N	10.48	1209055	1209219	1209211	OS	1	OS_1       	405n10.48ml  	4  
+405	N	10.48	1209055	1209219	1209212	OS	2	OS_2       	405n10.48ml  	3  
+405	N	10.48	1209055	1209219	1209213	OS	3	OS_3       	405n10.48ml  	2  
+405	N	10.48	1209055	1209219	1209214	OS	4	OS_4       	405n10.48ml  	1  
+405	N	10.48	1209055	1209220	1209215	OH	1	SD_2       	405n10.48hv  	1  
+405	S	10.48	1209055	1209468	1209457	FF	1	SD_3       	405s10.48ff  	2  
+405	S	10.48	1209055	1209468	1209458	FF	2	SD_4       	405s10.48ff  	1  
+405	N	10.48	1209055	1209485	1209459	FO	1	SD_5       	405n10.48ff  	3  
+405	N	10.48	1209055	1209485	1209460	FO	3	RAMP_HOV   	405n10.48ff  	1  
+405	N	10.48	1209055	1209485	1209461	FO	2	SD_6       	405n10.48ff  	2  
+405	S	10.48	1209055	1209469	1209462	OF	2	COLL_DIST_1	?            	0  
+405	S	10.48	1209055	1209469	1209466	OF	1	RAMP_OFF   	?            	0  
+405	N	10.48	1209055	1209484	1209467	OF	1	RAMP_ON    	?            	0  
+405	N	10.9	1201502	1201503	1201504	OR	1	RAMP_ON    	405n10.9ora  	0  
+405	N	10.9	1201502	1201503	1201505	QU	2	QUEUE      	405n10.9ora  	0  
+405	N	10.9	1201502	1201503	1201506	DM	3	DEMAND     	405n10.9ora  	0  
+405	N	10.9	1201502	1201503	1201507	PA	4	PASSAGE    	405n10.9ora  	0  
+405	N	10.9	1201502	1201508	1201509	HV	1	SD_1       	405n10.9ml   	6  
+405	N	10.9	1201502	1201510	1201511	ML	1	ML_1       	405n10.9ml   	5  
+405	N	10.9	1201502	1201510	1201512	ML	2	ML_2       	405n10.9ml   	4  
+405	N	10.9	1201502	1201510	1201513	ML	3	ML_3       	405n10.9ml   	3  
+405	N	10.9	1201502	1201510	1201514	ML	4	ML_4       	405n10.9ml   	2  
+405	N	10.9	1201502	1201510	1201515	ML	5	ML_5       	405n10.9ml   	1  
+405	S	11.2	1201516	1201517	1201518	OR	4	RAMP_ON    	405s11.2ora  	0  
+405	S	11.2	1201516	1201517	1201519	QU	3	QUEUE      	405s11.2ora  	0  
+405	S	11.2	1201516	1201517	1201520	DM	1	DEMAND     	405s11.2ora  	0  
+405	S	11.2	1201516	1201517	1201521	PA	2	PASSAGE    	405s11.2ora  	0  
+405	S	11.2	1201516	1201523	1201524	HV	1	SD_1       	405s11.2ml   	6  
+405	S	11.2	1201516	1201525	1201526	ML	1	ML_1       	405s11.2ml   	5  
+405	S	11.2	1201516	1201525	1201527	ML	2	ML_2       	405s11.2ml   	4  
+405	S	11.2	1201516	1201525	1201528	ML	3	ML_3       	405s11.2ml   	3  
+405	S	11.2	1201516	1201525	1201529	ML	4	ML_4       	405s11.2ml   	2  
+405	S	11.2	1201516	1201525	1201530	ML	5	ML_5       	405s11.2ml   	1  
+405	S	11.2	1201516	1201517	1211193	RH	5	RAMP_HOV   	405s11.2ora  	0  
+405	N	11.4	1201531	1201532	1201533	QU	3	QUEUE      	405n11.4spill	0  
+405	N	11.4	1201531	1201532	1201534	DM	1	DEMAND     	405n11.4orb  	0  
+405	N	11.4	1201531	1201532	1201535	PA	2	PASSAGE    	405n11.4orb  	0  
+405	N	11.4	1201531	1201536	1201537	FR	1	RAMP_OFF   	?            	0  
+405	N	11.4	1201531	1201539	1201540	HV	1	SD_1       	405n11.4hv   	1  
+405	N	11.4	1201531	1201541	1201542	ML	1	ML_1       	405n11.4ml   	4  
+405	N	11.4	1201531	1201541	1201543	ML	2	ML_2       	405n11.4ml   	3  
+405	N	11.4	1201531	1201541	1201544	ML	3	ML_3       	405n11.4ml   	2  
+405	N	11.4	1201531	1201541	1201545	ML	4	ML_4       	405n11.4ml   	1  
+405	N	11.4	1201531	1201536	1210120	FR	2	SD_4       	?            	0  
+405	S	11.5	1201547	1201548	1201549	OR	4	RAMP_ON    	405s11.5ora  	0  
+405	S	11.5	1201547	1201548	1201550	QU	3	QUEUE      	405s11.5ora  	0  
+405	S	11.5	1201547	1201548	1201551	DM	1	DEMAND     	405s11.5ora  	0  
+405	S	11.5	1201547	1201548	1201552	PA	2	PASSAGE    	405s11.5ora  	0  
+405	S	11.5	1201547	1201554	1201555	FR	1	RAMP_OFF   	405s11.5fr   	1  
+405	S	11.5	1201547	1201556	1201557	HV	1	SD_1       	405s11.5hv   	1  
+405	S	11.5	1201547	1201558	1201559	ML	1	ML_1       	405s11.5ml   	5  
+405	S	11.5	1201547	1201558	1201560	ML	2	ML_2       	405s11.5ml   	4  
+405	S	11.5	1201547	1201558	1201561	ML	3	ML_3       	405s11.5ml   	3  
+405	S	11.5	1201547	1201558	1201562	ML	4	ML_4       	405s11.5ml   	2  
+405	S	11.5	1201547	1201558	1201563	ML	5	ML_5       	405s11.5ml   	1  
+405	S	11.5	1201547	1201554	1210125	FR	2	SD_4       	?            	0  
+405	S	11.5	1201547	1201554	1210126	FR	3	SD_5       	?            	0  
+405	S	11.5	1201547	1201548	1211181	RH	5	RAMP_HOV   	405s11.5ora  	0  
+405	N	11.6	1201564	1201565	1201566	OR	4	RAMP_ON    	?            	0  
+405	N	11.6	1201564	1201565	1201567	QU	3	QUEUE      	?            	0  
+405	N	11.6	1201564	1201565	1201568	DM	1	DEMAND     	?            	0  
+405	N	11.6	1201564	1201565	1201569	PA	2	PASSAGE    	?            	0  
+405	N	11.6	1201564	1201571	1201572	HV	1	SD_1       	405n11.6hv   	1  
+405	N	11.6	1201564	1201573	1201574	ML	1	ML_1       	405n11.6ml   	4  
+405	N	11.6	1201564	1201573	1201575	ML	2	ML_2       	405n11.6ml   	3  
+405	N	11.6	1201564	1201573	1201576	ML	3	ML_3       	405n11.6ml   	2  
+405	N	11.6	1201564	1201573	1201577	ML	4	ML_4       	405n11.6ml   	1  
+405	S	12.16	1209226	1209241	1209227	ML	1	ML_1       	405s12.16ml  	6  
+405	S	12.16	1209226	1209241	1209228	ML	2	ML_2       	405s12.16ml  	5  
+405	S	12.16	1209226	1209241	1209229	ML	3	ML_3       	405s12.16ml  	4  
+405	S	12.16	1209226	1209241	1209230	ML	4	ML_4       	405s12.16ml  	3  
+405	S	12.16	1209226	1209241	1209231	ML	5	ML_5       	405s12.16ml  	2  
+405	S	12.16	1209226	1209241	1209232	ML	6	ML_6       	405s12.16ml  	1  
+405	S	12.16	1209226	1209242	1209233	HV	1	SD_1       	405s12.16ml  	7  
+405	N	12.16	1209226	1209243	1209234	OS	1	OS_1       	405n12.16ml  	5  
+405	N	12.16	1209226	1209243	1209236	OS	2	OS_2       	405n12.16ml  	4  
+405	N	12.16	1209226	1209243	1209237	OS	3	OS_3       	405n12.16ml  	3  
+405	N	12.16	1209226	1209243	1209238	OS	4	OS_4       	405n12.16ml  	3  
+405	N	12.16	1209226	1209243	1209239	OS	5	OS_5       	405n12.16ml  	1  
+405	N	12.16	1209226	1209244	1209240	OH	1	SD_2       	405n12.16hv  	1
+73	N	23.2	1208924	1210524	1210510	ML	1	ML_1       	?	     	0
+73	N	23.2	1208924	1210524	1210511	ML	2	ML_2       	?            	0
+73	N	23.2	1208924	1210524	1210512	ML	3	ML_3       	?            	0
+73	N	23.2	1208924	1210524	1210514	ML	4	ML_4       	?            	0
+73	S	23.2	1208924	1210525	1210515	OS	1	OS_1       	?            	0
+73	S	23.2	1208924	1210525	1210516	OS	2	OS_2       	?            	0
+73	S	23.2	1208924	1210525	1210519	OS	3	OS_3       	?            	0
+73	S	23.2	1208924	1210525	1210520	OS	4	OS_4       	?            	0
+73	S	23.5	1208925	1210504	1210495	ML	1	ML_1       	?            	0
+73	S	23.5	1208925	1210504	1210496	ML	2	ML_2       	?            	0
+73	S	23.5	1208925	1210504	1210497	ML	3	ML_3       	?            	0
+73	S	23.5	1208925	1210504	1210498	ML	4	ML_4       	?            	0
+73	N	23.5	1208925	1210505	1210499	OS	1	OS_1       	?            	0
+73	N	23.5	1208925	1210505	1210501	OS	2	OS_2       	?            	0
+73	N	23.5	1208925	1210505	1210502	OS	3	OS_3       	?            	0
+73	N	23.5	1208925	1210505	1210503	OS	4	OS_4       	?            	0
+73	S	23.5	1208925	1210768	1210767	OR	1	RAMP_ON    	?            	0
+73	S	23.7	1208926	1210494	1210490	ML	1	ML_1       	?            	0
+73	S	23.7	1208926	1210494	1210492	ML	2	ML_2       	?            	0
+73	S	23.7	1208926	1210494	1210493	ML	3	ML_3       	?            	0
+73	S	23.7	1208926	1210770	1210769	OR	1	RAMP_ON    	?            	0
+73	N	23.9	1210382	1210487	1210480	ML	1	ML_1       	?            	0
+73	N	23.9	1210382	1210487	1210481	ML	2	ML_2       	?            	0
+73	N	23.9	1210382	1210487	1210482	ML	3	ML_3       	?            	0
+73	S	23.9	1210382	1210489	1210483	OS	1	OS_1       	?            	0
+73	S	23.9	1210382	1210489	1210484	OS	2	OS_2       	?            	0
+73	S	23.9	1210382	1210489	1210485	OS	3	OS_3       	?            	0
+73	N	23.9	1210382	1210772	1210771	OR	1	RAMP_ON    	?            	0
+73	N	24.1	1208927	1210474	1210467	ML	1	ML_1       	?            	0
+73	N	24.1	1208927	1210474	1210468	ML	2	ML_2       	?            	0
+73	N	24.1	1208927	1210474	1210469	ML	3	ML_3       	?            	0
+73	S	24.1	1208927	1210475	1210470	OS	1	OS_1       	?            	0
+73	S	24.1	1208927	1210475	1210471	OS	2	OS_2       	?            	0
+73	S	24.1	1208927	1210475	1210472	OS	3	OS_3       	?            	0
+73	N	24.1	1208927	1210774	1210773	OR	1	RAMP_ON    	?            	0
+73	S	24.1	1208927	1210799	1210797	OF	1	RAMP_OFF   	?            	0
+73	S	25.25	1208931	1212454	1212446	ML	1	ML_1       	?            	0
+73	S	25.25	1208931	1212454	1212447	ML	2	ML_2       	?            	0
+73	S	25.25	1208931	1212454	1212448	ML	3	ML_3       	?            	0
+73	N	25.25	1208931	1212455	1212449	OS	1	OS_1       	?            	0
+73	N	25.25	1208931	1212455	1212450	OS	2	OS_2       	?            	0
+73	N	25.25	1208931	1212455	1212451	OS	3	OS_3       	?            	0
+73	N	25.25	1208931	1212455	1212452	OS	4	OS_4       	?            	0
+73	S	25.25	1208931	1212504	1212501	FR	1	SD_4       	?            	0
+73	S	25.25	1208931	1212504	1212502	FR	2	SD_5       	?            	0
+73	N	25.25	1208931	1212505	1212503	FR	1	RAMP_OFF   	?            	0
+73	N	25.7	1208932	1212463	1212456	ML	1	ML_1       	?            	0
+73	N	25.7	1208932	1212463	1212457	ML	2	ML_2       	?            	0
+73	N	25.7	1208932	1212463	1212458	ML	3	ML_3       	?            	0
+73	S	25.7	1208932	1212464	1212460	OS	2	OS_1       	?            	0
+73	S	25.7	1208932	1212464	1212461	OS	3	OS_2       	?            	0
+73	S	25.7	1208932	1212464	1212462	OS	4	OS_3       	?            	0
+73	S	25.7	1208932	1212506	1212507	FR	1	SD_4       	?            	0
+73	S	25.7	1208932	1212506	1212508	FR	2	SD_5       	?            	0
+73	N	25.7	1208932	1212514	1212509	DM	1	DEMAND     	?            	0
+73	N	25.7	1208932	1212514	1212510	PA	2	PASSAGE    	?            	0
+73	N	25.7	1208932	1212514	1212511	QU	3	QUEUE      	?            	0
+73	N	25.7	1208932	1212514	1212512	OR	4	RAMP_ON    	?            	0
+73	S	26.3	1208933	1212472	1212466	ML	2	ML_1       	?            	0
+73	S	26.3	1208933	1212472	1212467	ML	3	ML_2       	?            	0
+73	S	26.3	1208933	1212518	1212468	FF	1	ML_3       	?            	0
+73	N	26.3	1208933	1212473	1212469	OS	1	OS_1       	?            	0
+73	N	26.3	1208933	1212473	1212470	OS	2	OS_2       	?            	0
+73	N	26.3	1208933	1212473	1212471	OS	3	OS_3       	?            	0
+73	S	26.3	1208933	1212519	1212516	FF	1	SD_4       	?            	0
+73	S	26.3	1208933	1212519	1212517	FF	2	SD_5       	?            	0
+73	N	26.7	1208934	1212479	1212474	ML	1	ML_1       	?            	0
+73	N	26.7	1208934	1212479	1212475	ML	2	ML_2       	?            	0
+73	S	26.7	1208934	1212480	1212477	OS	2	OS_1       	?            	0
+73	S	26.7	1208934	1212480	1212478	OS	3	OS_2       	?            	0
+73	N	26.7	1208934	1212544	1212540	FF	1	SD_1       	?            	0
+73	N	26.7	1208934	1212544	1212541	FF	2	SD_2       	?            	0
+73	S	26.7	1208934	1212545	1212542	FF	1	SD_4       	?            	0
+73	S	26.7	1208934	1212545	1212543	FF	2	SD_5       	?            	0
+73	S	27.2	1208935	1212484	1212481	ML	1	ML_1       	?            	0
+73	S	27.2	1208935	1212484	1212482	ML	2	ML_2       	?            	0
+73	S	27.2	1208935	1212484	1212483	ML	3	ML_3       	?            	0
+73	S	27.2	1208935	1212525	1212520	DM	1	DEMAND     	?            	0
+73	S	27.2	1208935	1212525	1212521	PA	2	PASSAGE    	?            	0
+73	S	27.2	1208935	1212525	1212522	QU	3	QUEUE      	?            	0
+73	S	27.2	1208935	1212525	1212523	OR	4	RAMP_ON    	?            	0
+73	N	27.2	1208935	1212526	1212524	FR	1	RAMP_OFF   	?            	0
+73	N	27.4	1212485	1212489	1212486	ML	1	ML_1       	?            	0
+73	N	27.4	1212485	1212489	1212487	ML	2	ML_2       	?            	0
+73	N	27.4	1212485	1212489	1212488	ML	3	ML_3       	?            	0
+73	N	27.4	1212485	1212532	1212527	DM	1	DEMAND     	?            	0
+73	N	27.4	1212485	1212532	1212528	PA	2	PASSAGE    	?            	0
+73	N	27.4	1212485	1212532	1212529	QU	3	QUEUE      	?            	0
+73	N	27.4	1212485	1212532	1212530	OR	4	RAMP_ON    	?            	0
+73	S	27.4	1212485	1212533	1212531	FR	1	RAMP_OFF   	?            	0
+73	S	27.72	1208936	1212495	1212490	ML	1	ML_1       	?            	0
+73	S	27.72	1208936	1212495	1212491	ML	2	ML_2       	?            	0
+73	N	27.72	1208936	1212496	1212492	OS	1	OS_1       	?            	0
+73	N	27.72	1208936	1212496	1212493	OS	2	OS_2       	?            	0
+73	N	27.72	1208936	1212496	1212494	OS	3	OS_3       	?            	0
+73	S	27.72	1208936	1212537	1212534	DM	1	DEMAND     	?            	0
+73	S	27.72	1208936	1212537	1212535	PA	2	PASSAGE    	?            	0
+73	S	27.72	1208936	1212537	1212536	QU	3	QUEUE      	?            	0
+73	S	27.728	1201489	1209500	1209499	OR	1	SD_3       	?            	0
+133	S	9	1201043	1201044	1201045	OR	1	RAMP_ON    	? 	     	0
+133	S	9	1201043	1201044	1201046	QU	2	QUEUE      	?            	0
+133	S	9	1201043	1201044	1201047	DM	3	DEMAND     	?            	0
+133	S	9	1201043	1201044	1201048	PA	4	PASSAGE    	?            	0
+133	S	9	1201043	1201044	1201049	RH	5	RAMP_HOV   	?            	0
+133	S	9	1201043	1201054	1201051	ML	3	ML_3       	?            	0
+133	S	9	1201043	1201052	1201053	FR	1	RAMP_OFF   	?            	0
+133	S	9	1201043	1201054	1201055	ML	1	ML_1       	?            	0
+133	S	9	1201043	1201054	1201056	ML	2	ML_2       	?            	0
+133	N	9	1201057	1201058	1201059	OR	1	RAMP_ON    	?            	0
+133	N	9	1201057	1201058	1201060	QU	2	QUEUE      	?            	0
+133	N	9	1201057	1201058	1201061	DM	3	DEMAND     	?            	0
+133	N	9	1201057	1201058	1201062	PA	4	PASSAGE    	?            	0
+133	N	9	1201057	1201058	1201063	RH	5	RAMP_HOV   	?            	0
+133	N	9	1201057	1201064	1201065	FR	1	RAMP_OFF   	?            	0
+133	N	9	1201057	1201066	1201067	ML	1	ML_1       	?            	0
+133	N	9	1201057	1201066	1201068	ML	2	ML_2       	?            	0
+133	N	9.1	1201069	1201070	1201071	OR	1	RAMP_ON    	?            	0
+133	N	9.1	1201069	1201070	1201072	QU	2	QUEUE      	?            	0
+133	N	9.1	1201069	1201070	1201073	DM	3	DEMAND     	?            	0
+133	N	9.1	1201069	1201070	1201074	PA	4	PASSAGE    	?            	0
+133	N	9.1	1201069	1201070	1201075	RH	5	RAMP_HOV   	?            	0
+133	N	9.1	1201069	1201076	1201077	ML	1	ML_1       	?            	0
+133	N	9.1	1201069	1201076	1201078	ML	2	ML_2       	?            	0
+133	N	9.1	1201069	1201076	1201079	ML	3	ML_3       	?            	0
+133	N	9.37	1211774	1211784	1211775	ML	1	ML_1       	?            	0
+133	N	9.37	1211774	1211784	1211776	ML	2	ML_2       	?            	0
+133	N	9.37	1211774	1211785	1211777	FF	1	SD_1       	?            	0
+133	N	9.37	1211774	1211785	1211778	FF	2	SD_2       	?            	0
+133	N	9.37	1211774	1211786	1211779	OC	1	COLL_DIST_ON	?           	0
+133	S	9.37	1211774	1211787	1211780	OS	1	OS_1       	?            	0
+133	S	9.37	1211774	1211787	1211781	OS	2	OS_2       	?            	0
+133	S	9.37	1211774	1211788	1211782	FO	1	SD_3       	?            	0
+133	S	9.37	1211774	1211788	1211783	FO	2	SD_4       	?            	0
+133	N	9.77	1211762	1211770	1211763	ML	1	ML_1       	?            	0
+133	N	9.77	1211762	1211770	1211764	ML	2	ML_2       	?            	0
+133	N	9.77	1211762	1211771	1211765	FF	1	SD_1       	?            	0
+133	S	9.77	1211762	1211772	1211766	OS	1	OS_1       	?            	0
+133	S	9.77	1211762	1211772	1211767	OS	2	OS_2       	?            	0
+133	S	9.77	1211762	1211773	1211768	FO	1	SD_2       	?            	0
+133	S	9.77	1211762	1211773	1211769	FO	2	SD_3       	?            	0
+133	N	10.05	1211754	1211760	1211755	ML	1	ML_1       	?            	0
+133	N	10.05	1211754	1211760	1211756	ML	2	ML_2       	?            	0
+133	S	10.05	1211754	1211761	1211757	OS	1	OS_1       	?            	0
+133	S	10.05	1211754	1211761	1211758	OS	2	OS_2       	?            	0
+133	S	10.05	1211754	1211761	1211759	OS	3	OS_3       	?            	0
+133	N	10.5	1211742	1211750	1211743	ML	1	ML_1       	?            	0
+133	N	10.5	1211742	1211750	1211744	ML	2	ML_2       	?            	0
+133	N	10.5	1211742	1211751	1211745	FF	1	SD_1       	?            	0
+133	S	10.5	1211742	1211752	1211746	OS	1	OS_1       	?            	0
+133	S	10.5	1211742	1211752	1211747	OS	2	OS_2       	?            	0
+133	S	10.5	1211742	1211753	1211748	FO	1	SD_2       	?            	0
+133	S	10.5	1211742	1211753	1211749	FO	2	SD_3       	?            	0
+133	N	10.73	1211733	1211740	1211734	ML	1	ML_1       	?            	0
+133	N	10.73	1211733	1211740	1211735	ML	2	ML_2       	?            	0
+133	N	10.73	1211733	1211740	1211736	ML	3	ML_3       	?            	0
+133	S	10.73	1211733	1211741	1211737	OS	1	OS_1       	?            	0
+133	S	10.73	1211733	1211741	1211738	OS	2	OS_2       	?            	0
+133	S	10.73	1211733	1211741	1211739	OS	3	OS_3       	?            	0
+133	N	11.08	1211726	1211731	1211727	ML	1	ML_1       	?            	0
+133	N	11.08	1211726	1211731	1211728	ML	2	ML_2       	?            	0
+133	S	11.08	1211726	1211732	1211729	OS	1	OS_1       	?            	0
+133	S	11.08	1211726	1211732	1211730	OS	2	OS_2       	?            	0
+133	N	11.35	1211719	1211724	1211720	ML	1	ML_1       	?            	0
+133	N	11.35	1211719	1211724	1211721	ML	2	ML_2       	?            	0
+133	S	11.35	1211719	1211725	1211722	OS	1	OS_1       	?            	0
+133	S	11.35	1211719	1211725	1211723	OS	2	OS_2       	?            	0
+133	S	11.7	1211710	1211716	1211711	ML	1	ML_1       	?            	0
+133	S	11.7	1211710	1211716	1211712	ML	2	ML_2       	?            	0
+133	N	11.7	1211710	1211717	1211713	OS	1	OS_1       	?            	0
+133	N	11.7	1211710	1211717	1211714	OS	2	OS_2       	?            	0
+133	N	11.7	1211710	1211718	1211715	OF	1	RAMP_OFF   	?            	0
+133	N	12.05	1211694	1211706	1211695	ML	1	ML_1       	?            	0
+133	N	12.05	1211694	1211706	1211696	ML	2	ML_2       	?            	0
+133	N	12.05	1211694	1211706	1211697	ML	3	ML_3       	?            	0
+133	N	12.05	1211694	1211707	1211698	DM	1	DEMAND     	?            	0
+133	N	12.05	1211694	1211707	1211699	PA	2	PASSAGE    	?            	0
+133	N	12.05	1211694	1211707	1211700	QU	3	QUEUE      	?            	0
+133	N	12.05	1211694	1211707	1211701	OR	4	RAMP_ON    	?            	0
+133	S	12.05	1211694	1211708	1211702	OS	1	OS_1       	?            	0
+133	S	12.05	1211694	1211708	1211703	OS	2	OS_2       	?            	0
+133	S	12.05	1211694	1211709	1211704	OF	1	RAMP_OFF   	?            	0
+133	S	12.05	1211694	1211709	1211705	OF	2	SD_1       	?            	0
+133	N	12.42	1211685	1211692	1211686	ML	1	ML_1       	?            	0
+133	N	12.42	1211685	1211692	1211687	ML	2	ML_2       	?            	0
+133	N	12.42	1211685	1211692	1211688	ML	3	ML_3       	?            	0
+133	S	12.42	1211685	1211693	1211689	OS	1	OS_1       	?            	0
+133	S	12.42	1211685	1211693	1211690	OS	2	OS_2       	?            	0
+133	S	12.42	1211685	1211693	1211691	OS	3	OS_3       	?            	0
+133	N	12.77	1211667	1211682	1211668	ML	1	ML_1       	?            	0
+133	N	12.77	1211667	1211682	1211669	ML	2	ML_2       	?            	0
+133	N	12.77	1211667	1211683	1211674	FF	1	SD_4       	?            	0
+133	N	12.77	1211667	1211683	1211675	FF	2	SD_5       	?            	0
Index: /branches/trunk/config/cad_simulator_paramics_config.properties
===================================================================
--- /branches/trunk/config/cad_simulator_paramics_config.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_paramics_config.properties	(revision 82)
@@ -0,0 +1,11 @@
+# This is IP address of Paramics PC in the ATL lab
+#ParamicsCommHost       = 192.168.251.45
+# For development testing
+ParamicsCommHost       = 127.0.0.1
+ParamicsCommPort       = 4450
+IncidentUpdateInterval = 30
+IncidentUpdateFile     = exchange.xml
+ParamicsStatusInterval = 15
+ParamicsStatusFile     = paramics_status.xml
+CameraStatusInterval   = 30
+CameraStatusFile       = camera_status.xml
Index: /branches/trunk/config/cad_client_logging.properties
===================================================================
--- /branches/trunk/config/cad_client_logging.properties	(revision 82)
+++ /branches/trunk/config/cad_client_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/cad_client.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/cad_simulator_logging.properties
===================================================================
--- /branches/trunk/config/cad_simulator_logging.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_logging.properties	(revision 82)
@@ -0,0 +1,20 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/cad_simulator.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+LogFile = paramics_communication_log.xml
+CADSimulatorHost = 127.0.0.1
+CADSimulatorRMIPort = 4450
+
Index: /branches/trunk/config/cmsdiversions.xml
===================================================================
--- /branches/trunk/config/cmsdiversions.xml	(revision 82)
+++ /branches/trunk/config/cmsdiversions.xml	(revision 82)
@@ -0,0 +1,499 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<DIVERSION_LIST>
+
+	<CMS>
+		<ID>95 - NB 5 @ El Toro</ID>
+		<POSTMILE>19.0</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>04 - NB 5 JSO Alton</ID>
+		<POSTMILE>22.0</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N133_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>N5_N5_N133</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>75 - SB 5 @ Jeffery</ID>
+		<POSTMILE>24.99</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S5_S5_S133</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S5_S5_N133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_N133_S5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>65 - SB 55 @ Santa Clara</ID>
+		<POSTMILE>12.3</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>92 - SB 5 @ 17th</ID>
+		<POSTMILE>32.4</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>72 - SB 55 @ Warner</ID>
+		<POSTMILE>8.6</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_N405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_N405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>94 - NB 55 @ Dyer</ID>
+		<POSTMILE>8.51</POSTMILE>
+		<INIT_ROUTE>NB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N55_S5_N55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N55_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>N55_N55_S5</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N55_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>			
+		<ID>01 - SB 405 @ Harbor</ID>
+		<POSTMILE>11.92</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N55_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 73</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S73_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 73</NEW_PATH>
+			<DIV_PATH>S405_S405_S73</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_N55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	
+	<CMS>
+		<ID>89 - SB 405 @ Von Karmen</ID>
+		<POSTMILE>7.4</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>    
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>   
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_S133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_N133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>76 - SB 405 @ Jeffery</ID>
+		<POSTMILE>4.0</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_N133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_S133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>87 - NB 405 @ Harvard</ID>
+		<POSTMILE>7.3</POSTMILE>
+		<INIT_ROUTE>NB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_S55_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_N55_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_N55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+
+	<CMS>
+		<ID>93 - NB 5 S/O Redhill</ID>
+		<POSTMILE>28.6</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_S55</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_S55_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>88 - NB 405 @ Irvine Center Drive</ID>
+		<POSTMILE>0.85</POSTMILE>
+		<INIT_ROUTE>NB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>N405_N405_S133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_S133_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_N55</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_N55_N405</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	
+	<CMS>
+		<ID>86 - SB 405 @ New Hampshire</ID>
+		<POSTMILE>11.92</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 73</NEW_PATH>
+			<DIV_PATH>S405_S405_S73</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>97 - SB 55 @ Katella</ID>
+		<POSTMILE>14.73</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>25</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_N5</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>25</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>90 - SB 5 @ Broadway</ID>
+		<POSTMILE>38.68</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>44 - SB 5 @ Anaheim</ID>
+		<POSTMILE>35.6</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>31 - NB 5 @ Aeropuerto</ID>
+		<POSTMILE>7.84</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>74 - NB 5 @ Vista Hermosa</ID>
+		<POSTMILE>7.84</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+</DIVERSION_LIST>
Index: /branches/trunk/config/cad_simulator_console_config.properties
===================================================================
--- /branches/trunk/config/cad_simulator_console_config.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_console_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+AudioFileLocation      = audio/
+#UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer
+UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer
+ParamicsProperties     = config/cad_simulator_paramics_config.properties
+ATMSProperties         = config/cad_simulator_atms_config.properties
+MediaProperties        = config/cad_simulator_media_config.properties
Index: /branches/trunk/config/cad_simulator_consoletest_config.properties
===================================================================
--- /branches/trunk/config/cad_simulator_consoletest_config.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_consoletest_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+AudioFileLocation      = audio/
+#UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer
+UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer
+ParamicsProperties     = config/cad_simulator_paramics_config.properties
+ATMSProperties         = config/cad_simulator_atms_config.properties
+MediaProperties        = config/cad_simulator_media_config.properties
Index: /branches/trunk/config/cad_simulator_atms_config.properties
===================================================================
--- /branches/trunk/config/cad_simulator_atms_config.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_atms_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+ATMSHost = 192.168.251.27
+Username = atms_mgr
+Password = atms_d12uci1
+ImageDir = /opt/d12uci/user_config/cctv
Index: /branches/trunk/config/cad_simulator_systemconsoletest_config.properties
===================================================================
--- /branches/trunk/config/cad_simulator_systemconsoletest_config.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_systemconsoletest_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+AudioFileLocation      = audio/
+#UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer
+UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer
+ParamicsProperties     = config/cad_simulator_paramics_config.properties
+ATMSProperties         = config/cad_simulator_atms_config.properties
+MediaProperties        = config/cad_simulator_media_config.properties
Index: /branches/trunk/config/atms_driver_config.properties
===================================================================
--- /branches/trunk/config/atms_driver_config.properties	(revision 82)
+++ /branches/trunk/config/atms_driver_config.properties	(revision 82)
@@ -0,0 +1,6 @@
+LDSFileName = config/vds_data/lds.txt
+LoopFileName = config/vds_data/loop.txt
+NetworkFileName = networkFile.txt
+ExchangeFileName = exchange.xml
+FEPWriterHost = localhost
+FEPWriterPort = 8080
Index: /branches/trunk/config/paramics_communicator_config.properties
===================================================================
--- /branches/trunk/config/paramics_communicator_config.properties	(revision 82)
+++ /branches/trunk/config/paramics_communicator_config.properties	(revision 82)
@@ -0,0 +1,5 @@
+#
+#Wed Jun 14 15:40:00 PDT 2006
+#WorkingDirectory=c\:\\
+WorkingDirectory=./
+SocketPort=4450
Index: /branches/trunk/config/sim_manager_smoketest_config.properties
===================================================================
--- /branches/trunk/config/sim_manager_smoketest_config.properties	(revision 82)
+++ /branches/trunk/config/sim_manager_smoketest_config.properties	(revision 82)
@@ -0,0 +1,5 @@
+CADSimulatorHost       = 127.0.0.1
+CADSimulatorRMIPort    = 4445
+#ScriptDir              = c:\\program files
+ScriptDir              = scripts
+FakeParamicsConnection = true
Index: /branches/trunk/config/sim_manager_systest_config.properties
===================================================================
--- /branches/trunk/config/sim_manager_systest_config.properties	(revision 82)
+++ /branches/trunk/config/sim_manager_systest_config.properties	(revision 82)
@@ -0,0 +1,5 @@
+CADSimulatorHost       = 127.0.0.1
+CADSimulatorRMIPort    = 4445
+#ScriptDir              = c:\\program files
+ScriptDir              = scripts
+FakeParamicsConnection = false
Index: /branches/trunk/config/sim_manager_config.properties
===================================================================
--- /branches/trunk/config/sim_manager_config.properties	(revision 82)
+++ /branches/trunk/config/sim_manager_config.properties	(revision 82)
@@ -0,0 +1,5 @@
+CADSimulatorHost       = 127.0.0.1
+CADSimulatorRMIPort    = 4445
+#ScriptDir              = c:\\program files
+ScriptDir              = scripts
+FakeParamicsConnection = false
Index: /branches/trunk/config/cad_simulator_smoketest_config.properties
===================================================================
--- /branches/trunk/config/cad_simulator_smoketest_config.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_smoketest_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+AudioFileLocation      = audio/
+UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer
+#UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer
+ParamicsProperties     = config/cad_simulator_paramics_config.properties
+ATMSProperties         = config/cad_simulator_atms_config.properties
+MediaProperties        = config/cad_simulator_media_config.properties
Index: /branches/trunk/config/cad_simulator_media_config.properties
===================================================================
--- /branches/trunk/config/cad_simulator_media_config.properties	(revision 82)
+++ /branches/trunk/config/cad_simulator_media_config.properties	(revision 82)
@@ -0,0 +1,2 @@
+#DVDPlayerXML           = config/dvdplayers.xml
+StillImagesXML         = config/stillimages.xml
Index: /branches/trunk/config/cad_client_config.properties
===================================================================
--- /branches/trunk/config/cad_client_config.properties	(revision 82)
+++ /branches/trunk/config/cad_client_config.properties	(revision 82)
@@ -0,0 +1,11 @@
+#
+#Wed Apr 05 13:48:05 PDT 2006
+CADPosition            = 2
+CADSimulatorHost       = 127.0.0.1
+CADUserID              = A1245
+CADSimulatorSocketPort = 4444
+CADRmiPort             = 4446
+#KeyboardType           = CAD
+#DisplayType            = FRAME
+DisplayType            = FULL_SCREEN
+KeyboardType           = STD
Index: /branches/trunk/config/testConfig/paramics_simulator_config.properties
===================================================================
--- /branches/trunk/config/testConfig/paramics_simulator_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/paramics_simulator_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+WorkingDirectory    = C:/paramics/
+IncidentUpdateFile  = exchange.xml
+ParamicsStatusFile  = paramics_status.xml
+CameraStatusFile    = camera_status.xml
Index: /branches/trunk/config/testConfig/paramics_communicator_logging.properties
===================================================================
--- /branches/trunk/config/testConfig/paramics_communicator_logging.properties	(revision 82)
+++ /branches/trunk/config/testConfig/paramics_communicator_logging.properties	(revision 82)
@@ -0,0 +1,19 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/paramics_communicator.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+LogFile = paramics_communication_log.xml
+CADSimulatorHost = 127.0.0.1
+CADSimulatorRMIPort = 4450
Index: /branches/trunk/config/testConfig/sim_manager_logging.properties
===================================================================
--- /branches/trunk/config/testConfig/sim_manager_logging.properties	(revision 82)
+++ /branches/trunk/config/testConfig/sim_manager_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/sim_manager.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/testConfig/cad_simulator_paramics_config.properties
===================================================================
--- /branches/trunk/config/testConfig/cad_simulator_paramics_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/cad_simulator_paramics_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+#ParamicsCommHost       = 192.168.251.45
+# For development testing
+ParamicsCommHost       = 127.0.0.1
+ParamicsCommPort       = 4450
+IncidentUpdateInterval = 30
+IncidentUpdateFile     = exchange.xml
+ParamicsStatusInterval = 2
+ParamicsStatusFile     = paramics_status.xml
+CameraStatusInterval   = 30
+CameraStatusFile       = camera_status.xml
Index: /branches/trunk/config/testConfig/cad_client_logging.properties
===================================================================
--- /branches/trunk/config/testConfig/cad_client_logging.properties	(revision 82)
+++ /branches/trunk/config/testConfig/cad_client_logging.properties	(revision 82)
@@ -0,0 +1,15 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/cad_client.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Index: /branches/trunk/config/testConfig/cad_simulator_logging.properties
===================================================================
--- /branches/trunk/config/testConfig/cad_simulator_logging.properties	(revision 82)
+++ /branches/trunk/config/testConfig/cad_simulator_logging.properties	(revision 82)
@@ -0,0 +1,16 @@
+handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+    
+# Set the default logging level for the root logger
+tmcsim.level = ALL
+    
+# Set the default logging level for new FileHandler instances
+java.util.logging.FileHandler.level = ALL
+java.util.logging.FileHandler.pattern = logs/cad_simulator.log
+java.util.logging.FileHandler.limit = 500000
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+
+    
+# Set the default formatter for new ConsoleHandler instances
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
Index: /branches/trunk/config/testConfig/cmsdiversions.xml
===================================================================
--- /branches/trunk/config/testConfig/cmsdiversions.xml	(revision 82)
+++ /branches/trunk/config/testConfig/cmsdiversions.xml	(revision 82)
@@ -0,0 +1,499 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<DIVERSION_LIST>
+
+	<CMS>
+		<ID>95 - NB 5 @ El Toro</ID>
+		<POSTMILE>19.0</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>04 - NB 5 JSO Alton</ID>
+		<POSTMILE>22.0</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N133_N5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>	
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>N5_N5_N133</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>75 - SB 5 @ Jeffery</ID>
+		<POSTMILE>24.99</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S5_S5_S133</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S5_S5_N133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_N133_S5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>65 - SB 55 @ Santa Clara</ID>
+		<POSTMILE>12.3</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>92 - SB 5 @ 17th</ID>
+		<POSTMILE>32.4</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>72 - SB 55 @ Warner</ID>
+		<POSTMILE>8.6</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_N405_S55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>S55_S55_N405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>94 - NB 55 @ Dyer</ID>
+		<POSTMILE>8.51</POSTMILE>
+		<INIT_ROUTE>NB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N55_S5_N55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N55_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>N55_N55_S5</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N55_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>			
+		<ID>01 - SB 405 @ Harbor</ID>
+		<POSTMILE>11.92</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N55_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 73</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S73_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 73</NEW_PATH>
+			<DIV_PATH>S405_S405_S73</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_N55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	
+	<CMS>
+		<ID>89 - SB 405 @ Von Karmen</ID>
+		<POSTMILE>7.4</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>    
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>   
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_S133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_N133</DIV_PATH>
+			<MAX_DIVERSION>10</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>76 - SB 405 @ Jeffery</ID>
+		<POSTMILE>4.0</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>NB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_N133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>S405_S405_S133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_N133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S133_S405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>87 - NB 405 @ Harvard</ID>
+		<POSTMILE>7.3</POSTMILE>
+		<INIT_ROUTE>NB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_S55_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_N55_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_N55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+
+	<CMS>
+		<ID>93 - NB 5 S/O Redhill</ID>
+		<POSTMILE>28.6</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_N55</DIV_PATH>
+			<MAX_DIVERSION>30</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>N5_N5_S55</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N55_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>	
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_S55_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+
+	<CMS>
+		<ID>88 - NB 405 @ Irvine Center Drive</ID>
+		<POSTMILE>0.85</POSTMILE>
+		<INIT_ROUTE>NB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>SB 133</NEW_PATH>
+			<DIV_PATH>N405_N405_S133</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 133</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_S133_N405</DIV_PATH>
+			<MAX_DIVERSION>50</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 55</NEW_PATH>
+			<DIV_PATH>N405_N405_N55</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 55</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N405_N55_N405</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	
+	<CMS>
+		<ID>86 - SB 405 @ New Hampshire</ID>
+		<POSTMILE>11.92</POSTMILE>
+		<INIT_ROUTE>SB 405</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S405_S405_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 405</NEW_PATH>
+			<DIV_PATH>S405_S55_S405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 405</ORIG_PATH>
+			<NEW_PATH>SB 73</NEW_PATH>
+			<DIV_PATH>S405_S405_S73</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>97 - SB 55 @ Katella</ID>
+		<POSTMILE>14.73</POSTMILE>
+		<INIT_ROUTE>SB 55</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>25</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>S55_S55_N5</DIV_PATH>
+			<MAX_DIVERSION>5</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S55_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>25</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>90 - SB 5 @ Broadway</ID>
+		<POSTMILE>38.68</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>44 - SB 5 @ Anaheim</ID>
+		<POSTMILE>35.6</POSTMILE>
+		<INIT_ROUTE>SB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>SB 5</ORIG_PATH>
+			<NEW_PATH>SB 55</NEW_PATH>
+			<DIV_PATH>S5_S5_S55</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>SB 55</ORIG_PATH>
+			<NEW_PATH>SB 5</NEW_PATH>
+			<DIV_PATH>S5_S55_S5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>31 - NB 5 @ Aeropuerto</ID>
+		<POSTMILE>7.84</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>40</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+	<CMS>
+		<ID>74 - NB 5 @ Vista Hermosa</ID>
+		<POSTMILE>7.84</POSTMILE>
+		<INIT_ROUTE>NB 5</INIT_ROUTE>
+		<DIVERSION>
+			<ORIG_PATH>NB 5</ORIG_PATH>
+			<NEW_PATH>NB 405</NEW_PATH>
+			<DIV_PATH>N5_N5_N405</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+		<DIVERSION>
+			<ORIG_PATH>NB 405</ORIG_PATH>
+			<NEW_PATH>NB 5</NEW_PATH>
+			<DIV_PATH>N5_N405_N5</DIV_PATH>
+			<MAX_DIVERSION>20</MAX_DIVERSION>
+		</DIVERSION>
+	</CMS>
+	
+</DIVERSION_LIST>
Index: /branches/trunk/config/testConfig/cad_simulator_console_config.properties
===================================================================
--- /branches/trunk/config/testConfig/cad_simulator_console_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/cad_simulator_console_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+#UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer
+UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer
+AudioFileLocation      = audio/
+ParamicsProperties     = config/testConfig/cad_simulator_paramics_config.properties
+ATMSProperties         = config/testConfig/cad_simulator_atms_config.properties
+MediaProperties        = config/testConfig/cad_simulator_media_config.properties
Index: /branches/trunk/config/testConfig/cad_simulator_atms_config.properties
===================================================================
--- /branches/trunk/config/testConfig/cad_simulator_atms_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/cad_simulator_atms_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+ATMSHost = 192.168.251.27
+Username = atms_mgr
+Password = atms_d12uci1
+ImageDir = /opt/d12uci/user_config/cctv
Index: /branches/trunk/config/testConfig/paramics_communicator_config.properties
===================================================================
--- /branches/trunk/config/testConfig/paramics_communicator_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/paramics_communicator_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+#
+#Wed Jun 14 15:40:00 PDT 2006
+WorkingDirectory=./
+SocketPort=4450
Index: /branches/trunk/config/testConfig/sim_manager_smoketest_config.properties
===================================================================
--- /branches/trunk/config/testConfig/sim_manager_smoketest_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/sim_manager_smoketest_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+CADSimulatorHost       = 127.0.0.1
+CADSimulatorRMIPort    = 4445
+ScriptDir              = scripts
+FakeParamicsConnection = true
Index: /branches/trunk/config/testConfig/console/cad_simulator_config.properties
===================================================================
--- /branches/trunk/config/testConfig/console/cad_simulator_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/console/cad_simulator_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/cmsdiversions.xml
+#UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer
+UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer
+AudioFileLocation      = audio/
+ParamicsProperties     = config/testConfig/cad_simulator_paramics_config.properties
+ATMSProperties         = config/testConfig/cad_simulator_atms_config.properties
+MediaProperties        = config/testConfig/cad_simulator_media_config.properties
Index: /branches/trunk/config/testConfig/sim_manager_config.properties
===================================================================
--- /branches/trunk/config/testConfig/sim_manager_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/sim_manager_config.properties	(revision 82)
@@ -0,0 +1,4 @@
+CADSimulatorHost       = 127.0.0.1
+CADSimulatorRMIPort    = 4445
+ScriptDir              = scripts
+FakeParamicsConnection = true
Index: /branches/trunk/config/testConfig/cad_simulator_smoketest_config.properties
===================================================================
--- /branches/trunk/config/testConfig/cad_simulator_smoketest_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/cad_simulator_smoketest_config.properties	(revision 82)
@@ -0,0 +1,8 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/testConfig/cmsdiversions.xml
+AudioFileLocation      = audio/
+ParamicsProperties     = config/testConfig/cad_simulator_paramics_config.properties
+ATMSProperties         = config/testConfig/cad_simulator_atms_config.properties
+MediaProperties        = config/testConfig/cad_simulator_media_config.properties
Index: /branches/trunk/config/testConfig/cad_client_config.properties
===================================================================
--- /branches/trunk/config/testConfig/cad_client_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/cad_client_config.properties	(revision 82)
@@ -0,0 +1,11 @@
+#
+#Wed Apr 05 13:48:05 PDT 2006
+CADPosition            = 2
+CADSimulatorHost       = 127.0.0.1
+CADUserID              = A1245
+CADSimulatorSocketPort = 4444
+CADRmiPort             = 4446
+#KeyboardType           = CAD
+#DisplayType            = FRAME
+DisplayType            = FULL_SCREEN
+KeyboardType           = STD
Index: /branches/trunk/config/testConfig/cad_simulator_media_config.properties
===================================================================
--- /branches/trunk/config/testConfig/cad_simulator_media_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/cad_simulator_media_config.properties	(revision 82)
@@ -0,0 +1,2 @@
+#DVDPlayerXML           = config/dvdplayers.xml
+StillImagesXML         = config/testConfig/stillimages.xml
Index: /branches/trunk/config/testConfig/cad_simulator_config.properties
===================================================================
--- /branches/trunk/config/testConfig/cad_simulator_config.properties	(revision 82)
+++ /branches/trunk/config/testConfig/cad_simulator_config.properties	(revision 82)
@@ -0,0 +1,10 @@
+CADClientPort          = 4444 
+CoordinatorRMIPort     = 4445 
+CADRmiPort             = 4446
+CMSDiversionXML        = config/testConfig/cmsdiversions.xml
+UserInterface          = tmcsim.cadsimulator.viewer.CADSimulatorViewer
+#UserInterface          = tmcsim.cadsimulator.viewer.CADConsoleViewer
+AudioFileLocation      = audio/
+ParamicsProperties     = config/testConfig/cad_simulator_paramics_config.properties
+ATMSProperties         = config/testConfig/cad_simulator_atms_config.properties
+MediaProperties        = config/testConfig/cad_simulator_media_config.properties
Index: /branches/trunk/config/testConfig/svn-version.txt
===================================================================
--- /branches/trunk/config/testConfig/svn-version.txt	(revision 82)
+++ /branches/trunk/config/testConfig/svn-version.txt	(revision 82)
@@ -0,0 +1,4 @@
+18M
+
+        # Do not edit. This file is autogenerated by the Ant build script #
+    
Index: /branches/trunk/config/testConfig/cadUsers.xml
===================================================================
--- /branches/trunk/config/testConfig/cadUsers.xml	(revision 82)
+++ /branches/trunk/config/testConfig/cadUsers.xml	(revision 82)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<CAD_USERS>
+	<USER>
+		<ID>A12345</ID>
+		<PERMISSION_LEVEL>CHP</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A11111</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A22222</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A33333</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A44444</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+	<USER>
+		<ID>A55555</ID>
+		<PERMISSION_LEVEL>TMC</PERMISSION_LEVEL>
+	</USER>
+</CAD_USERS>
Index: /branches/trunk/config/testConfig/stillimages.xml
===================================================================
--- /branches/trunk/config/testConfig/stillimages.xml	(revision 82)
+++ /branches/trunk/config/testConfig/stillimages.xml	(revision 82)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<STILL_IMAGES>
+	<CCTV id="24" atms_id="1200079" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM24_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM24_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM24_FREEFLOW"/>
+		<INCIDENT log_num="187" filename="CAM24_INCIDENT_187"/>
+	</CCTV>
+	<CCTV id="97" atms_id="1213015" dir="N">
+		<RANGE min_speed="0" max_speed="20" filename="CAM97_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM97_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM97_FREEFLOW"/>
+		<INCIDENT log_num="188" filename="CAM97_INCIDENT_188"/>
+	</CCTV>
+	<CCTV id="28" atms_id="1200083" dir="N">
+		<RANGE min_speed="0" max_speed="20" filename="CAM28_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM28_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM28_FREEFLOW"/>
+		<INCIDENT log_num="189" filename="CAM28_INCIDENT_189"/>
+	</CCTV>
+	<CCTV id="16" atms_id="1200061" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM16_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM16_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM16_FREEFLOW"/>
+		<INCIDENT log_num="190" filename="CAM16_INCIDENT_190"/>
+	</CCTV>
+	<CCTV id="166" atms_id="1213007" dir="S">
+		<RANGE min_speed="0" max_speed="20" filename="CAM166_STOPPED"/>
+		<RANGE min_speed="20" max_speed="35" filename="CAM166_SLOW"/>
+		<RANGE min_speed="35" max_speed="1000" filename="CAM166_FREEFLOW"/>
+		<INCIDENT log_num="191" filename="CAM166_INCIDENT_191"/>
+	</CCTV>
+</STILL_IMAGES>
Index: /branches/trunk/config/testConfig/dvdplayers.xml
===================================================================
--- /branches/trunk/config/testConfig/dvdplayers.xml	(revision 82)
+++ /branches/trunk/config/testConfig/dvdplayers.xml	(revision 82)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?> 
+<DVD_PLAYERS>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3001">
+     	<CCTV id="24" dir="S"/>
+        <INCIDENT log_num="187" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3002">
+     	<CCTV id="97" dir="N"/>
+        <INCIDENT log_num="188" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3003">
+     	<CCTV id="28" dir="S"/>
+        <INCIDENT log_num="189" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3004">
+     	<CCTV id="16" dir="S"/>
+        <INCIDENT log_num="190" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+     <DVD_PLAYER type="PioneerV5000" host="192.168.251.9" port="3005">
+     	<CCTV id="171" dir="S"/>
+        <INCIDENT log_num="191" title="4"/>
+        <RANGE min_speed="0" max_speed="20" title="3"/>
+        <RANGE min_speed="20" max_speed="35" title="2"/>
+        <RANGE min_speed="35" max_speed="1000" title="1"/>
+     </DVD_PLAYER>
+</DVD_PLAYERS>
Index: /branches/trunk/lib/jdstyle.xml
===================================================================
--- /branches/trunk/lib/jdstyle.xml	(revision 82)
+++ /branches/trunk/lib/jdstyle.xml	(revision 82)
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
+<!--
+
+  Checkstyle configuration for CSc 301 at Cal Poly.
+
+  A relaxed version of these standards:
+      http://www.csc.calpoly.edu/%7Ejdalbey/SWE/code_std.html
+
+  To completely disable a check, just comment it out or delete it from the file.
+
+  Finally, it is worth reading the documentation:
+      http://checkstyle.sourceforge.net/
+
+  DOCUMENT HISTORY
+  1/5/2016 Relaxed even more.
+  5/3/2010 Relaxed some standards for CSc 301
+  9/24/09 Branched from CSc 309 and simplified for CSc 103.
+  4/9/06 Added Severity = Warning to several checks.
+  4/14/06 Removed check: EqualsHashCode
+          Don't require Javadoc on PRIVATE methods.
+          Changed LineLength to 89: The length of a line in Eclipse at 800x600 resolution.
+  4/19/06 Changed VisibilityModifier to protectedAllowed.
+          Allow types to have underscore characters in the name.
+  5/3/06  Made method length check a warning and instead
+          made JavaNCSS count an error.
+  5/22/06 Added custom check for one letter variable names.
+          Added custom check for logic structure comments.
+
+-->
+<module name="Checker">
+
+    <module name="TreeWalker">
+        <!-- Custom checks written for Dalbey's coding standard -->
+        <!-- Single character variable names not allowed.       -->
+        <module name="VariableNameLength"/>
+        <!-- Logic structures must be preceded by a comment.    -->
+        <module name="LogicComment"/>
+        <property name="tabWidth" value="4"/>
+
+        <!-- Checks for Naming Conventions.                  -->
+        <!-- See http://checkstyle.sf.net/config_naming.html -->
+        <module name="LocalFinalVariableName"/>
+        <module name="LocalVariableName"/>
+
+        <module name="MemberName"/>
+        <module name="MethodName"/>
+        <module name="PackageName"/>
+        <module name="ParameterName"/>
+        <module name="StaticVariableName"/>
+        <module name="TypeName">
+            <property name="format" value="^[A-Z][_a-zA-Z0-9]*$"/>
+        </module>
+
+        <!-- Checks for Size Violations.                    -->
+        <!-- See http://checkstyle.sf.net/config_sizes.html -->
+        <module name="LineLength">
+            <property name="max" value="89"/>
+        </module>
+        <module name="MethodLength">
+            <property name="max" value="60"/>
+            <property name="countEmpty" value="false"/>
+            <property name="severity" value="warning"/>
+        </module>
+        <module name="ParameterNumber"/>
+
+
+        <!-- Checks for whitespace                               -->
+        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
+        <module name="Indentation">
+            <property name="basicOffset" value="4"/>
+            <property name="braceAdjustment" value="0"/>
+            <property name="caseIndent" value="4"/>
+        </module>
+
+        <module name="EmptyBlock">
+		    <property name="option" value="stmt"/>
+		    <property name="tokens" value="LITERAL_CATCH"/>
+		</module>
+        <module name="TabCharacter"/>
+        <!-- left brace must be on a new line -->
+        <module name="LeftCurly">
+            <property name="option" value="nl"/>
+        </module>
+        <module name="NeedBraces"/>
+        <module name="RightCurly">
+            <property name="option" value="alone"/>
+        </module>
+
+
+        <!-- Checks for common coding problems               -->
+        <!-- See http://checkstyle.sf.net/config_coding.html -->
+        <module name="AvoidInlineConditionals"/>
+        <module name="EmptyStatement"/>
+        <module name="HiddenField">
+            <property name="ignoreConstructorParameter" value="true"/>
+            <property name="ignoreSetter" value="true"/>
+        </module>
+
+	
+        <module name="IllegalInstantiation"/>
+        <module name="InnerAssignment">
+            <property name="severity" value="warning"/>
+        </module>
+        <module name="SimplifyBooleanExpression"/>
+        <module name="SimplifyBooleanReturn"/>
+
+        <!-- Checks for class design                         -->
+        <!-- See http://checkstyle.sf.net/config_design.html -->
+        <module name="FinalClass"/>
+        <module name="InterfaceIsType"/>
+
+
+        <!-- Metrics checks.                   -->
+        <module name="ClassFanOutComplexity"/>
+
+        <module name="CyclomaticComplexity">
+            <property name="max" value="15"/>
+            <property name="severity" value="warning"/>
+        </module>
+
+        <!-- Miscellaneous other checks.                   -->
+        <!-- See http://checkstyle.sf.net/config_misc.html -->
+        <module name="ArrayTypeStyle"/>
+
+        <module name="StringLiteralEquality"/>
+        <module name="InnerAssignment"/>
+        <module name="FallThrough"/>
+        <module name="TodoComment"/>
+        <module name="UpperEll"/>
+        <!-- checkstyle 5.5 needed for these checks 
+        <module name="GenericWhitespace"/>   
+        -->
+    
+ </module> <!-- end TreeWalker -->
+    
+
+    <!-- checkstyle 5.5 needed for these checks
+    <module name="FileTabCharacter"/>
+    -->
+
+</module>
+
+
Index: /branches/trunk/networkFile.txt
===================================================================
--- /branches/trunk/networkFile.txt	(revision 82)
+++ /branches/trunk/networkFile.txt	(revision 82)
@@ -0,0 +1,16587 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<Network>
+  <Line>
+    <Line_Num>5</Line_Num>
+    <Count>20</Count>
+    <Schedule>1</Schedule>
+    <Line_Info>1</Line_Info>
+    <System_Key>1123005673</System_Key>
+    <Global_Seq>1357648</Global_Seq>
+    <Schedule_Seq>26492</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1205270</LDS_ID>
+        <Line_Num>5</Line_Num>
+        <Drop>19</Drop>
+        <Location>MAIN 1</Location>
+        <Post_Mile>33.0</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205272</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205273</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205274</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205275</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205277</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205278</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205279</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209945</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209947</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209948</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209949</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>6</Line_Num>
+    <Count>19</Count>
+    <Schedule>2</Schedule>
+    <Line_Info>2</Line_Info>
+    <System_Key>1123005691</System_Key>
+    <Global_Seq>1357639</Global_Seq>
+    <Schedule_Seq>26491</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1208933</LDS_ID>
+        <Line_Num>6</Line_Num>
+        <Drop>15</Drop>
+        <Location>S OF 55</Location>
+        <Post_Mile>26.3</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1212466</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212467</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212468</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212469</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212470</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212471</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212516</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212517</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203081</LDS_ID>
+        <Line_Num>6</Line_Num>
+        <Drop>17</Drop>
+        <Location>BRISTOL</Location>
+        <Post_Mile>4.58</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210208</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210209</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210210</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210211</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210212</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210213</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210214</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210215</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210216</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210217</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210218</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210219</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203083</LDS_ID>
+        <Line_Num>6</Line_Num>
+        <Drop>18</Drop>
+        <Location>BAKER 1</Location>
+        <Post_Mile>4.7</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210195</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210196</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210197</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210198</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210199</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210200</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210201</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210202</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210203</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210204</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1210174</LDS_ID>
+        <Line_Num>6</Line_Num>
+        <Drop>19</Drop>
+        <Location>BAKER 2</Location>
+        <Post_Mile>5.06</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210175</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210176</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210177</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210178</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210179</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210180</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210181</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210182</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210185</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210186</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210187</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210188</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1210163</LDS_ID>
+        <Line_Num>6</Line_Num>
+        <Drop>20</Drop>
+        <Location>PAULARINO 1</Location>
+        <Post_Mile>5.51</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210164</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210165</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210166</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210167</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210168</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210169</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210170</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210171</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>22</Line_Num>
+    <Count>19</Count>
+    <Schedule>4</Schedule>
+    <Line_Info>4</Line_Info>
+    <System_Key>1123005726</System_Key>
+    <Global_Seq>1357624</Global_Seq>
+    <Schedule_Seq>26490</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1204875</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>1</Drop>
+        <Location>N OF SAND CNYN</Location>
+        <Post_Mile>24.5</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204877</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204879</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204880</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204881</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204882</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204883</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204885</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204887</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204888</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204889</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204890</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204891</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204847</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>2</Drop>
+        <Location>SAND CANYON 2</Location>
+        <Post_Mile>24.05</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204849</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204850</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204851</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204852</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204853</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204855</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204856</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204858</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204860</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204862</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204863</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204864</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204865</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204866</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204868</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204870</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204871</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204872</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204873</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204874</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204832</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>3</Drop>
+        <Location>SAND CANYON 1</Location>
+        <Post_Mile>23.69</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204834</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204835</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204836</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204837</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204838</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204840</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204842</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204843</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204844</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204845</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204846</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204973</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>4</Drop>
+        <Location>CULVER 1</Location>
+        <Post_Mile>26.56</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204975</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204976</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204977</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204978</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204981</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204983</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204984</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204985</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204986</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204987</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205003</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>5</Drop>
+        <Location>CULVER 2</Location>
+        <Post_Mile>26.81</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205005</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205006</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205007</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205009</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205011</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205013</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205014</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205015</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205016</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205017</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205018</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204958</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>6</Drop>
+        <Location>CULVER 1</Location>
+        <Post_Mile>26.35</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204960</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204961</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204962</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204963</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204964</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204966</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204968</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204969</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204970</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204971</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204972</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204988</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>7</Drop>
+        <Location>CULVER 2</Location>
+        <Post_Mile>26.66</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204990</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204991</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204992</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204994</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204996</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204998</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204999</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205000</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205001</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205002</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204928</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>8</Drop>
+        <Location>JEFFREY 2</Location>
+        <Post_Mile>25.15</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204930</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204931</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204932</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204933</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204934</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204936</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204938</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204939</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204940</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212845</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212846</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205077</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>9</Drop>
+        <Location>TUSTIN RANCH</Location>
+        <Post_Mile>28.1</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205079</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205080</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205081</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205082</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205083</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205085</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205087</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205089</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205090</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205091</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205092</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205093</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205229</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>10</Drop>
+        <Location>GRAND 2</Location>
+        <Post_Mile>32.0</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205231</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205232</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205233</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209765</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209766</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209767</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209768</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209769</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209770</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209771</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209772</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209773</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205176</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>11</Drop>
+        <Location>1ST</Location>
+        <Post_Mile>30.9</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205178</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205179</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205180</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205181</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205183</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205184</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205185</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205186</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205187</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208318</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208319</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208320</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208498</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208500</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209504</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209505</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209695</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209696</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211152</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211153</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205188</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>12</Drop>
+        <Location>4TH</Location>
+        <Post_Mile>31.23</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205194</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205195</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205196</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205190</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205191</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205192</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209711</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209712</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209713</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209714</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209715</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209716</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209717</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209718</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209719</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209720</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209721</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209723</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209724</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212737</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212738</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205219</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>13</Drop>
+        <Location>GRAND 2</Location>
+        <Post_Mile>31.9</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205221</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205222</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205223</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205224</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205226</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205227</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205228</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209759</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209760</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209761</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209762</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205238</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>16</Drop>
+        <Location>17TH 1</Location>
+        <Post_Mile>32.25</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205240</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205241</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205242</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205243</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205245</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205247</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205248</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205249</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209819</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209820</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209821</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209822</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209823</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209824</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205251</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205252</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205253</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205208</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>17</Drop>
+        <Location>GRAND 1</Location>
+        <Post_Mile>31.6</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205212</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205213</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205214</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205216</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205217</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205218</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209748</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209749</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209750</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209751</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209752</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209754</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209755</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212778</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212779</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204912</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>18</Drop>
+        <Location>JEFFREY 1</Location>
+        <Post_Mile>25.08</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204914</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204915</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204916</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204917</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204918</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204920</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204921</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204923</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204925</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204926</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204927</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212843</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212844</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204892</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>19</Drop>
+        <Location>JEFFREY 1</Location>
+        <Post_Mile>24.84</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204894</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204895</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204896</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204897</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204898</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204900</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204901</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204903</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204905</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204906</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204907</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204908</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204909</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204911</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205094</LDS_ID>
+        <Line_Num>22</Line_Num>
+        <Drop>20</Drop>
+        <Location>TUSTIN RANCH</Location>
+        <Post_Mile>28.35</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205096</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205097</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205098</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205099</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205100</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205102</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205104</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205106</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205107</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205108</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205109</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205110</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>23</Line_Num>
+    <Count>18</Count>
+    <Schedule>23</Schedule>
+    <Line_Info>21</Line_Info>
+    <System_Key>1123005995</System_Key>
+    <Global_Seq>1357626</Global_Seq>
+    <Schedule_Seq>26479</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1205156</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>1</Drop>
+        <Location>B ST.</Location>
+        <Post_Mile>30.0</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205158</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205159</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205160</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205161</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205162</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205163</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208966</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208969</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208970</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208971</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208972</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208974</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205164</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>2</Drop>
+        <Location>S OF 55</Location>
+        <Post_Mile>30.2</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1208978</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208979</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208980</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208981</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208982</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208983</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208984</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208985</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208986</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208987</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208988</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208991</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205167</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>3</Drop>
+        <Location>N OF 55</Location>
+        <Post_Mile>30.4</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1208994</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208995</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208996</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208997</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208998</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208999</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209001</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209003</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209004</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209005</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209007</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209008</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209009</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209010</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205172</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>4</Drop>
+        <Location>WILLIAMS</Location>
+        <Post_Mile>30.6</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211174</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211175</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205197</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>5</Drop>
+        <Location>CONCORD</Location>
+        <Post_Mile>31.4</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205199</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205201</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205202</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205203</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205205</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205206</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205207</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209732</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209733</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209734</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209735</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209736</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209737</Loop_ID>
+            <Loop_Location>OS_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209742</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209743</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209744</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205254</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>6</Drop>
+        <Location>17TH 2</Location>
+        <Post_Mile>32.5</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205256</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205257</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205258</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205259</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205261</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205263</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205264</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205265</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209782</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209783</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209930</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205267</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205268</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>7</Drop>
+        <Location>17TH 3</Location>
+        <Post_Mile>32.6</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1208291</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208297</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209934</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209935</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209936</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209938</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209939</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209940</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209941</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209942</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1209845</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>11</Drop>
+        <Location>N OF 5 OFF</Location>
+        <Post_Mile>10.2</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209846</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209847</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209848</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209849</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209854</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209856</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209857</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209858</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211968</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203261</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>14</Drop>
+        <Location>S OF 5</Location>
+        <Post_Mile>10.4</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203263</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203265</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203267</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203268</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203269</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209866</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209867</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209868</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209869</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209870</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209871</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209872</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203270</LDS_ID>
+        <Line_Num>23</Line_Num>
+        <Drop>15</Drop>
+        <Location>N OF 5</Location>
+        <Post_Mile>10.5</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209876</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209877</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209878</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209880</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209881</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209882</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209883</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209884</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209885</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209886</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209887</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209894</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>26</Line_Num>
+    <Count>3</Count>
+    <Schedule>25</Schedule>
+    <Line_Info>25</Line_Info>
+    <System_Key>1123006044</System_Key>
+    <Global_Seq>1357604</Global_Seq>
+    <Schedule_Seq>26482</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1209052</LDS_ID>
+        <Line_Num>26</Line_Num>
+        <Drop>13</Drop>
+        <Location>SPRUCE</Location>
+        <Post_Mile>5.05</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209062</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209063</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209064</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209065</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209066</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209067</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209069</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209072</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209073</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209074</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>27</Line_Num>
+    <Count>3</Count>
+    <Schedule>26</Schedule>
+    <Line_Info>26</Line_Info>
+    <System_Key>1123006050</System_Key>
+    <Global_Seq>1357603</Global_Seq>
+    <Schedule_Seq>26481</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1201409</LDS_ID>
+        <Line_Num>27</Line_Num>
+        <Drop>1</Drop>
+        <Location>N OF 55</Location>
+        <Post_Mile>8.9</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209125</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209126</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209127</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209128</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209131</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209132</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209133</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209134</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209135</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209136</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209478</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209479</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209480</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209481</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201405</LDS_ID>
+        <Line_Num>27</Line_Num>
+        <Drop>2</Drop>
+        <Location>AIRPORT</Location>
+        <Post_Mile>8.27</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209192</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209193</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209194</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209195</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209196</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209197</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209198</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209199</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209200</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209201</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209202</Loop_ID>
+            <Loop_Location>OS_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209203</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209471</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209472</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>29</Line_Num>
+    <Count>13</Count>
+    <Schedule>28</Schedule>
+    <Line_Info>28</Line_Info>
+    <System_Key>1123006080</System_Key>
+    <Global_Seq>1357609</Global_Seq>
+    <Schedule_Seq>26480</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1208924</LDS_ID>
+        <Line_Num>29</Line_Num>
+        <Drop>2</Drop>
+        <Location>N OF BONITA</Location>
+        <Post_Mile>23.2</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210510</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210511</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210512</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210514</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210515</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210516</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210519</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210520</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1208925</LDS_ID>
+        <Line_Num>29</Line_Num>
+        <Drop>3</Drop>
+        <Location>BISON 1</Location>
+        <Post_Mile>23.5</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210495</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210496</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210497</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210498</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210499</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210501</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210502</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210503</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210767</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1208926</LDS_ID>
+        <Line_Num>29</Line_Num>
+        <Drop>4</Drop>
+        <Location>MACARTHUR 1</Location>
+        <Post_Mile>23.7</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210490</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210492</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210493</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210769</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1210382</LDS_ID>
+        <Line_Num>29</Line_Num>
+        <Drop>5</Drop>
+        <Location>BISON 2</Location>
+        <Post_Mile>23.9</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210480</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210481</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210482</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210483</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210484</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210485</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210771</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1208927</LDS_ID>
+        <Line_Num>29</Line_Num>
+        <Drop>6</Drop>
+        <Location>MACARTHUR 2</Location>
+        <Post_Mile>24.1</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210467</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210468</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210469</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210470</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210471</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210472</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210773</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210797</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>31</Line_Num>
+    <Count>18</Count>
+    <Schedule>5</Schedule>
+    <Line_Info>5</Line_Info>
+    <System_Key>1123005744</System_Key>
+    <Global_Seq>1357649</Global_Seq>
+    <Schedule_Seq>26489</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1201475</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>1</Drop>
+        <Location>BRISTOL 2</Location>
+        <Post_Mile>9.65</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201477</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201478</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201479</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201480</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201482</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201483</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201484</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201485</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201486</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201488</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201444</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>2</Drop>
+        <Location>BRISTOL 1</Location>
+        <Post_Mile>9.46</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201446</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201447</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201448</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201450</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201452</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201454</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201455</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201456</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201457</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201458</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201459</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>3</Drop>
+        <Location>BRISTOL 2</Location>
+        <Post_Mile>9.54</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201461</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201462</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201463</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201464</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201466</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201468</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201470</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201471</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201472</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201473</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201474</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204756</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>5</Drop>
+        <Location>BARRANCA</Location>
+        <Post_Mile>22.75</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204758</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204760</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204762</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204763</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204764</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204765</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204767</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204768</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204769</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204770</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204771</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204773</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204775</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212713</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212714</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201547</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>6</Drop>
+        <Location>HARBOR 2</Location>
+        <Post_Mile>11.5</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201549</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201550</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201551</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201552</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201555</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201557</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201559</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201560</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201561</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201562</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201563</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210125</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210126</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211181</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201531</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>7</Drop>
+        <Location>HARBOR 1</Location>
+        <Post_Mile>11.4</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201533</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201534</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201535</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201537</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201540</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201542</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201543</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201544</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201545</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210120</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201564</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>8</Drop>
+        <Location>HARBOR 2</Location>
+        <Post_Mile>11.6</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201566</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201567</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201568</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201569</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201572</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201574</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201575</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201576</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201577</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201516</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>9</Drop>
+        <Location>HARBOR 1</Location>
+        <Post_Mile>11.2</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201518</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201519</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201520</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201521</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201524</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201526</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201527</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201528</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201529</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201530</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211193</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201502</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>11</Drop>
+        <Location>FAIRVIEW</Location>
+        <Post_Mile>10.9</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201504</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201505</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201506</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201507</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201509</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201511</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201512</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201513</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201514</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201515</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204802</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>16</Drop>
+        <Location>N OF 133</Location>
+        <Post_Mile>23.2</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204804</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204805</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204807</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204809</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204810</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204811</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204812</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212704</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212705</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204793</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>17</Drop>
+        <Location>N OF 133</Location>
+        <Post_Mile>23.1</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204795</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204797</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204799</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204800</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204801</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204813</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>18</Drop>
+        <Location>S OF SAND CNYN</Location>
+        <Post_Mile>23.5</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204815</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204817</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204818</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204819</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204820</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204821</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204822</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204824</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204826</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204827</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204828</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204829</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204830</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204831</Loop_ID>
+            <Loop_Location>OS_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204776</LDS_ID>
+        <Line_Num>31</Line_Num>
+        <Drop>20</Drop>
+        <Location>S OF 133</Location>
+        <Post_Mile>23.05</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204778</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204780</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204782</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204783</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204784</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204785</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204786</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204788</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204789</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204790</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204791</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204792</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212728</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212729</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>34</Line_Num>
+    <Count>20</Count>
+    <Schedule>31</Schedule>
+    <Line_Info>31</Line_Info>
+    <System_Key>1123006127</System_Key>
+    <Global_Seq>1357632</Global_Seq>
+    <Schedule_Seq>26475</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1209055</LDS_ID>
+        <Line_Num>34</Line_Num>
+        <Drop>3</Drop>
+        <Location>N OF 73</Location>
+        <Post_Mile>10.48</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209206</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209207</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209208</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209209</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209210</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209211</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209212</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209213</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209214</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209215</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209457</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209458</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209459</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209460</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209461</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209462</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209466</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209467</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1209226</LDS_ID>
+        <Line_Num>34</Line_Num>
+        <Drop>4</Drop>
+        <Location>HAMPSHIRE</Location>
+        <Post_Mile>12.16</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209227</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209228</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209229</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209230</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209231</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209232</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209233</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209234</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209236</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209237</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209238</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209239</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209240</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201489</LDS_ID>
+        <Line_Num>34</Line_Num>
+        <Drop>5</Drop>
+        <Location>FAIRVIEW</Location>
+        <Post_Mile>10.28</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201492</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201493</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201495</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201498</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201499</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201500</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201501</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209499</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1208936</LDS_ID>
+        <Line_Num>34</Line_Num>
+        <Drop>19</Drop>
+        <Location>FAIRVIEW</Location>
+        <Post_Mile>27.72</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1212490</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212491</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212492</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212493</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212494</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212534</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212535</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212536</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>36</Line_Num>
+    <Count>17</Count>
+    <Schedule>32</Schedule>
+    <Line_Info>32</Line_Info>
+    <System_Key>1123006146</System_Key>
+    <Global_Seq>1357615</Global_Seq>
+    <Schedule_Seq>26478</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1211667</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>7</Drop>
+        <Location>N OF PORTOLA</Location>
+        <Post_Mile>12.77</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211668</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211669</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211674</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211675</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211685</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>8</Drop>
+        <Location>S OF PORTOLA</Location>
+        <Post_Mile>12.42</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211686</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211687</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211688</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211689</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211690</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211691</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211694</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>9</Drop>
+        <Location>IRVINE BLVD 3</Location>
+        <Post_Mile>12.05</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211695</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211696</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211697</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211698</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211699</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211700</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211701</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211702</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211703</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211704</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211705</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211719</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>10</Drop>
+        <Location>N OF PM 11</Location>
+        <Post_Mile>11.35</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211720</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211721</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211722</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211723</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211710</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>11</Drop>
+        <Location>IRVINE BLVD 1</Location>
+        <Post_Mile>11.7</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211711</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211712</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211713</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211714</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211715</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211726</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>12</Drop>
+        <Location>AT PM 11</Location>
+        <Post_Mile>11.08</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211727</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211728</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211729</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211730</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211733</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>13</Drop>
+        <Location>S OF PM 11</Location>
+        <Post_Mile>10.73</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211734</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211735</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211736</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211737</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211738</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211739</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211742</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>14</Drop>
+        <Location>N OF MARINE</Location>
+        <Post_Mile>10.5</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211743</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211744</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211745</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211746</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211747</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211748</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211749</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211754</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>15</Drop>
+        <Location>MARINE WAY</Location>
+        <Post_Mile>10.05</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211755</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211756</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211757</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211758</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211759</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211762</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>16</Drop>
+        <Location>N OF 5</Location>
+        <Post_Mile>9.77</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211763</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211764</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211765</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211766</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211767</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211768</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211769</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1211774</LDS_ID>
+        <Line_Num>36</Line_Num>
+        <Drop>17</Drop>
+        <Location>S OF 5</Location>
+        <Post_Mile>9.37</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211775</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211776</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211777</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211778</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211779</Loop_ID>
+            <Loop_Location>COLL_DIST_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211780</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211781</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211782</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211783</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>45</Line_Num>
+    <Count>19</Count>
+    <Schedule>11</Schedule>
+    <Line_Info>11</Line_Info>
+    <System_Key>1123005841</System_Key>
+    <Global_Seq>1357646</Global_Seq>
+    <Schedule_Seq>26484</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1204539</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>1</Drop>
+        <Location>LA PAZ 1</Location>
+        <Post_Mile>16.51</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204541</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204542</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204543</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204545</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204547</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204548</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204549</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204550</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210084</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210372</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211111</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204553</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>2</Drop>
+        <Location>LA PAZ 2</Location>
+        <Post_Mile>16.69</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204555</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204556</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204557</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204558</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204560</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204561</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204562</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204563</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210086</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204566</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>3</Drop>
+        <Location>ALICIA 1</Location>
+        <Post_Mile>17.43</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204568</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204569</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204570</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204572</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204573</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204574</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204575</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210088</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210123</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210371</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204578</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>4</Drop>
+        <Location>ALICIA 2</Location>
+        <Post_Mile>17.63</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204580</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204581</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204582</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204584</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204585</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204587</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204588</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204589</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204590</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204592</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210092</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210093</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210094</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210370</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204537</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>5</Drop>
+        <Location>LA PAZ 1</Location>
+        <Post_Mile>16.3</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211007</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211008</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211009</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211010</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211011</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211012</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211013</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211014</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211015</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211016</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204608</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>6</Drop>
+        <Location>EL TORO 1</Location>
+        <Post_Mile>18.61</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204610</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204611</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204612</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204613</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204614</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204616</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204617</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204618</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204619</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210101</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204622</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>7</Drop>
+        <Location>EL TORO 2</Location>
+        <Post_Mile>18.82</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204624</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204625</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204626</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204627</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204629</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204630</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210104</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210105</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204637</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>8</Drop>
+        <Location>RED ROBIN</Location>
+        <Post_Mile>19.33</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204639</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204640</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204641</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204642</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204645</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204646</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204647</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204648</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210107</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210108</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210111</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>7</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210113</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210114</Loop_ID>
+            <Loop_Location>OS_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210116</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210117</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210118</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210119</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204551</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>9</Drop>
+        <Location>LA PAZ 2</Location>
+        <Post_Mile>16.5</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210995</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210996</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210997</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210998</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210999</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211000</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211001</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211002</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211003</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211004</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211005</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211006</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211179</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204666</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>10</Drop>
+        <Location>LAKE FOR2</Location>
+        <Post_Mile>20.0</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204668</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204669</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204670</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204671</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204673</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204674</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204675</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204676</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204677</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204679</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204680</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211113</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211114</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211115</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211116</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204721</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>11</Drop>
+        <Location>ALTON 2</Location>
+        <Post_Mile>22.1</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204723</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204724</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204725</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204726</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204728</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204730</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204732</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204733</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204734</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204735</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204736</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208956</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211149</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211150</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204738</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204739</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204740</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204741</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204742</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>12</Drop>
+        <Location>ALTON 3</Location>
+        <Post_Mile>22.2</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204744</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204745</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204746</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204747</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204749</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204751</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204752</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204753</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204754</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204755</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204564</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>13</Drop>
+        <Location>ALICIA 1</Location>
+        <Post_Mile>17.26</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210354</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210355</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210356</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210357</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210358</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210359</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210360</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210361</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210362</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210363</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210366</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204706</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>15</Drop>
+        <Location>ALTON 1</Location>
+        <Post_Mile>21.92</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204708</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204709</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204710</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204711</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204713</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204715</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204717</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204718</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204719</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204720</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204576</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>17</Drop>
+        <Location>ALICIA 2</Location>
+        <Post_Mile>17.49</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210341</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210342</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210343</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210344</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210345</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210346</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210347</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210348</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210349</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210350</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210351</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210352</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204606</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>19</Drop>
+        <Location>EL TORO 1</Location>
+        <Post_Mile>18.5</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210327</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210328</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210329</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210330</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210331</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210332</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210333</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210334</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210335</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210336</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210337</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210338</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204620</LDS_ID>
+        <Line_Num>45</Line_Num>
+        <Drop>20</Drop>
+        <Location>EL TORO 2</Location>
+        <Post_Mile>18.7</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210307</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210308</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210309</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210310</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210311</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210312</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210313</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210314</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210315</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210316</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210317</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210318</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210319</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>46</Line_Num>
+    <Count>20</Count>
+    <Schedule>36</Schedule>
+    <Line_Info>36</Line_Info>
+    <System_Key>1123006209</System_Key>
+    <Global_Seq>1357644</Global_Seq>
+    <Schedule_Seq>26472</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1201202</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>1</Drop>
+        <Location>JEFFREY 2</Location>
+        <Post_Mile>4.03</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201204</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201205</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201206</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201207</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201208</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201210</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201212</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201213</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201214</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201215</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201176</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>2</Drop>
+        <Location>JEFFREY 1</Location>
+        <Post_Mile>3.86</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201178</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201179</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201180</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201182</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201184</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201186</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201187</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201188</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201189</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209896</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201245</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>3</Drop>
+        <Location>CULVER 1</Location>
+        <Post_Mile>5.55</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201247</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201248</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201249</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201250</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201252</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201253</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201255</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201256</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201257</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201258</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201260</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210826</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212696</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201321</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>4</Drop>
+        <Location>JAMBOREE1</Location>
+        <Post_Mile>6.85</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201323</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201324</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201325</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201326</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201328</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201329</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201330</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201332</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201334</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201335</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201336</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201337</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201338</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201388</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>5</Drop>
+        <Location>MACARTHUR 1</Location>
+        <Post_Mile>7.73</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201390</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201391</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201392</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201393</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201395</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201396</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201398</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201400</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201401</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201402</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201403</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201404</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211043</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211044</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201190</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>6</Drop>
+        <Location>JEFFREY 2</Location>
+        <Post_Mile>4.03</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201192</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201193</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201194</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201196</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201198</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201199</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201200</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201201</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209045</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201164</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>7</Drop>
+        <Location>JEFFREY 1</Location>
+        <Post_Mile>3.84</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201166</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201167</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201168</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201169</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201170</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201172</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201173</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201174</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201175</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209044</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201275</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>8</Drop>
+        <Location>CULVER 2</Location>
+        <Post_Mile>5.74</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201277</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201278</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201279</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201280</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201282</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201284</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201285</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201286</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201287</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201288</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201261</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>9</Drop>
+        <Location>CULVER 2</Location>
+        <Post_Mile>5.69</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201263</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201264</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201265</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201267</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201269</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201271</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201272</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201273</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201274</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210827</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201231</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>10</Drop>
+        <Location>CULVER 1</Location>
+        <Post_Mile>5.5</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201233</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201234</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201235</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201236</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201237</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201239</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201241</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201242</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201243</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201244</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201356</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>11</Drop>
+        <Location>JAMBOREE2</Location>
+        <Post_Mile>7.07</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201358</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201359</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201360</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201361</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201362</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201364</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201366</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201367</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201368</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201369</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201370</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201339</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>12</Drop>
+        <Location>JAMBOREE2</Location>
+        <Post_Mile>7.01</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201341</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201342</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201343</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201344</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201346</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201347</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201349</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201351</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201352</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201353</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201354</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201355</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201306</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>13</Drop>
+        <Location>JAMBOREE1</Location>
+        <Post_Mile>6.8</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201308</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201309</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201310</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201311</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201312</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201314</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201316</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201317</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201318</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201319</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201320</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201371</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>14</Drop>
+        <Location>MACARTHUR1</Location>
+        <Post_Mile>7.69</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201373</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201374</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201375</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201376</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201378</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201379</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201381</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201383</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201384</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201385</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201386</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201387</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211110</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201289</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>15</Drop>
+        <Location>HARVARD</Location>
+        <Post_Mile>6.1</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201291</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201293</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201294</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201295</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201296</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201297</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201299</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201300</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201301</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201302</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201303</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201305</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201216</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>16</Drop>
+        <Location>YALE</Location>
+        <Post_Mile>5.01</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201218</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201219</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201220</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201221</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201223</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201224</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201225</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201226</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201228</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201230</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201043</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>17</Drop>
+        <Location>BARRANCA2</Location>
+        <Post_Mile>9.0</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201045</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201046</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201047</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201048</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201049</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201051</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201053</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201055</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201056</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201411</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>18</Drop>
+        <Location>RED HILL</Location>
+        <Post_Mile>8.4</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201413</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201414</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201416</Loop_ID>
+            <Loop_Location>COLL_DIST_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201418</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201420</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201421</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201422</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201423</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201424</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201426</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201427</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201428</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201429</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201431</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201432</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201433</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201434</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201436</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201057</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>19</Drop>
+        <Location>BARRANCA1</Location>
+        <Post_Mile>9.0</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201059</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201060</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201061</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201062</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201063</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201065</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201067</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201068</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201069</LDS_ID>
+        <Line_Num>46</Line_Num>
+        <Drop>20</Drop>
+        <Location>BARRANCA2</Location>
+        <Post_Mile>9.1</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>133</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201071</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201072</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201073</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201074</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201075</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201077</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201078</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201079</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>50</Line_Num>
+    <Count>19</Count>
+    <Schedule>13</Schedule>
+    <Line_Info>13</Line_Info>
+    <System_Key>1123005873</System_Key>
+    <Global_Seq>1357650</Global_Seq>
+    <Schedule_Seq>24148</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1205111</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>1</Drop>
+        <Location>RED HILL</Location>
+        <Post_Mile>29.02</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205113</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205114</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205115</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205116</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205117</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205119</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205121</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205123</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205124</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205125</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205126</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205127</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205128</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>2</Drop>
+        <Location>RED HILL</Location>
+        <Post_Mile>29.24</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205130</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205131</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205132</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205133</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205134</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205136</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205137</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205138</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208493</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208495</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208534</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208539</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205146</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>3</Drop>
+        <Location>NEWPORT</Location>
+        <Post_Mile>29.79</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205148</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205149</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205150</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205151</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205153</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205154</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205155</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208356</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208357</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208361</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208501</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208502</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208503</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208504</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208505</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208506</Loop_ID>
+            <Loop_Location>OS_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208507</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208957</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208958</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208959</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208960</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208961</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203244</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>4</Drop>
+        <Location>MCFADDEN</Location>
+        <Post_Mile>10.0</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203246</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203247</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203248</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203249</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203251</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203253</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203255</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203256</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203257</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203258</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203211</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>5</Drop>
+        <Location>EDINGER 2</Location>
+        <Post_Mile>9.41</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203213</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203214</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203215</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203216</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203218</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203220</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203222</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203223</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203224</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203225</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203196</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>6</Drop>
+        <Location>EDINGER 1</Location>
+        <Post_Mile>9.19</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203198</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203199</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203200</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203201</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203203</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203205</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203207</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203208</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203209</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203210</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211167</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211168</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211169</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211170</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211171</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203165</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>7</Drop>
+        <Location>DYER 1</Location>
+        <Post_Mile>7.85</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203167</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203168</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203169</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203171</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203173</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203174</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203175</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1213048</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203176</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>8</Drop>
+        <Location>DYER 2</Location>
+        <Post_Mile>8.12</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203178</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203179</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203180</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203181</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203183</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203185</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203186</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203187</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203189</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203190</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203191</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203192</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203194</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203195</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203153</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>9</Drop>
+        <Location>DYER 1</Location>
+        <Post_Mile>7.62</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203155</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203156</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203157</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203158</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203160</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203162</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203163</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203164</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1213047</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203115</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>10</Drop>
+        <Location>MACARTHU1</Location>
+        <Post_Mile>6.94</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203117</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203118</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203119</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203121</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203123</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203125</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203126</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203127</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203128</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203140</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>11</Drop>
+        <Location>MACARTHU2</Location>
+        <Post_Mile>7.16</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203142</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203143</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203144</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203145</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203147</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203149</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203150</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203151</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203152</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203129</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>12</Drop>
+        <Location>MACARTHU2</Location>
+        <Post_Mile>7.03</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203131</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203132</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203133</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203135</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203137</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203138</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203139</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203103</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>13</Drop>
+        <Location>MACARTHU1</Location>
+        <Post_Mile>6.88</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203105</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203106</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203107</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203109</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203111</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203112</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203113</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203114</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203226</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>14</Drop>
+        <Location>MCFADDEN</Location>
+        <Post_Mile>10.0</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203228</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203229</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203230</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203231</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203233</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203234</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203236</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203238</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203240</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203241</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203242</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203243</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203062</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>16</Drop>
+        <Location>FAIR 2</Location>
+        <Post_Mile>3.96</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203064</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203065</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203066</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203067</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203069</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203070</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203072</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203073</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203074</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203075</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203077</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203078</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203079</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203080</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203044</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>17</Drop>
+        <Location>FAIR 1</Location>
+        <Post_Mile>3.6</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203046</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203047</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203048</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203049</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203051</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203052</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203053</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203054</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203056</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203058</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203059</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203060</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203061</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203026</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>18</Drop>
+        <Location>VICTORIA2</Location>
+        <Post_Mile>3.11</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203028</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203029</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203030</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203031</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203033</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203034</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203036</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203037</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203038</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203039</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203041</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203042</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203043</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203085</LDS_ID>
+        <Line_Num>50</Line_Num>
+        <Drop>20</Drop>
+        <Location>PAULARINO 2</Location>
+        <Post_Mile>5.8</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203087</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203091</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203092</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203093</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203096</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203097</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203098</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210152</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210153</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210154</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210155</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210156</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210157</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210158</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>56</Line_Num>
+    <Count>20</Count>
+    <Schedule>14</Schedule>
+    <Line_Info>14</Line_Info>
+    <System_Key>1123005892</System_Key>
+    <Global_Seq>1357643</Global_Seq>
+    <Schedule_Seq>26482</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1203293</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>1</Drop>
+        <Location>FOURTH 2</Location>
+        <Post_Mile>11.1</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203295</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203296</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203297</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203298</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203300</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203302</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203304</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203305</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203306</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211965</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211966</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212750</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1213009</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203274</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>2</Drop>
+        <Location>FOURTH 1</Location>
+        <Post_Mile>10.84</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203276</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203277</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203278</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203279</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203281</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203283</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203285</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203286</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203287</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203289</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203290</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203291</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209048</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211958</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211959</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211960</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211961</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203321</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>3</Drop>
+        <Location>17TH 1</Location>
+        <Post_Mile>11.74</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203323</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203324</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203325</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203326</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203328</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203330</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203332</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203333</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203334</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212757</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212758</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203335</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>4</Drop>
+        <Location>17TH 2</Location>
+        <Post_Mile>12.0</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203337</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203338</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203339</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203341</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203343</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203344</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203345</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203347</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212999</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1213000</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1203307</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>5</Drop>
+        <Location>17TH 1</Location>
+        <Post_Mile>11.62</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>55</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1203309</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203310</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203311</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203312</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203314</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203316</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203318</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203319</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1203320</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1213049</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1212485</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>15</Drop>
+        <Location>BEAR 2</Location>
+        <Post_Mile>27.4</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1212486</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212487</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212488</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212527</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212528</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212529</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212530</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212531</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1208935</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>16</Drop>
+        <Location>BEAR 1</Location>
+        <Post_Mile>27.2</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1212481</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212482</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212483</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212520</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212521</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212522</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212523</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212524</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1208931</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>17</Drop>
+        <Location>ORCHID</Location>
+        <Post_Mile>25.25</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1212446</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212447</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212448</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212449</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212450</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212451</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212452</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212501</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212502</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212503</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1208932</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>18</Drop>
+        <Location>CAMPUS</Location>
+        <Post_Mile>25.7</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1212456</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212457</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212458</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212460</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212461</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212462</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212507</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212508</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212509</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212510</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212511</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212512</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1208934</LDS_ID>
+        <Line_Num>56</Line_Num>
+        <Drop>19</Drop>
+        <Location>N OF 55</Location>
+        <Post_Mile>26.7</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>73</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1212474</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212475</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212477</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212478</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212540</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212541</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212542</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212543</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>73</Line_Num>
+    <Count>16</Count>
+    <Schedule>18</Schedule>
+    <Line_Info>18</Line_Info>
+    <System_Key>1123005950</System_Key>
+    <Global_Seq>1357636</Global_Seq>
+    <Schedule_Seq>26481</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1201119</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>1</Drop>
+        <Location>IRVINE C2</Location>
+        <Post_Mile>1.11</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201121</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201122</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201123</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201124</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201126</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201127</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201128</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201129</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209042</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201130</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>2</Drop>
+        <Location>S OF 133</Location>
+        <Post_Mile>1.57</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201132</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209079</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209080</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209081</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209082</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209083</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209084</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209085</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209086</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209087</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209089</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210930</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210931</Loop_ID>
+            <Loop_Location>COLL_DIST_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210934</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201133</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>3</Drop>
+        <Location>N OF 133</Location>
+        <Post_Mile>1.93</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201135</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209149</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209150</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209151</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209153</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209154</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209155</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209156</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209157</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209160</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209473</Loop_ID>
+            <Loop_Location>COLL_DIST_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209474</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209475</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210928</Loop_ID>
+            <Loop_Location>COLL_DIST_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201092</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>4</Drop>
+        <Location>IRVINE C1</Location>
+        <Post_Mile>0.93</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201094</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201095</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201096</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201097</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201099</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201101</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201102</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201103</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201104</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208953</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210822</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210823</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210824</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201150</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>5</Drop>
+        <Location>SAND CANYON</Location>
+        <Post_Mile>2.99</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201152</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201153</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201154</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201155</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201156</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201158</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201160</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201161</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201162</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201163</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210056</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211041</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201105</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>6</Drop>
+        <Location>IRVINE C2</Location>
+        <Post_Mile>0.96</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201107</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201108</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201109</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201111</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201113</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201114</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201115</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201116</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211052</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211053</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1209051</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>7</Drop>
+        <Location>N OF SAND CANYON</Location>
+        <Post_Mile>3.31</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209056</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209057</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209058</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209180</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209181</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209182</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209183</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209184</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209185</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209186</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1209054</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>11</Drop>
+        <Location>AT 133</Location>
+        <Post_Mile>1.73</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209118</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209119</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209121</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209122</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201136</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>12</Drop>
+        <Location>SAND CANYON</Location>
+        <Post_Mile>2.88</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201138</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201139</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201140</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201141</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201142</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201144</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201146</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201147</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201148</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201149</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211048</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211049</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201080</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>13</Drop>
+        <Location>IRVINE C1</Location>
+        <Post_Mile>0.77</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1201082</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201083</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201084</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201086</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201088</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201089</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201090</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1201091</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211045</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211046</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204941</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>15</Drop>
+        <Location>YALE</Location>
+        <Post_Mile>25.8</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204943</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204945</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204946</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204947</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204948</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204949</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204951</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204952</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204953</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204954</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204955</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204957</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205068</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>16</Drop>
+        <Location>JAMBOREE 2</Location>
+        <Post_Mile>27.7</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205075</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205076</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210807</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210808</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210809</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210810</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210811</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210813</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205019</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>17</Drop>
+        <Location>JAMBOREE 1</Location>
+        <Post_Mile>27.43</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205021</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205022</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205023</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205024</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205025</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205027</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205029</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205030</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205031</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205032</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205033</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1212847</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205034</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>18</Drop>
+        <Location>JAMBOREE 1</Location>
+        <Post_Mile>27.55</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205036</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205037</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205038</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205039</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205040</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205042</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205048</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205049</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205050</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1205051</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>19</Drop>
+        <Location>JAMBOREE 2</Location>
+        <Post_Mile>27.7</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1205053</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205054</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205055</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205056</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205057</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205059</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205066</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1205067</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1209050</LDS_ID>
+        <Line_Num>73</Line_Num>
+        <Drop>20</Drop>
+        <Location>LAGUNA CANYON RD</Location>
+        <Post_Mile>2.35</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1209165</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209166</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209167</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209168</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209169</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209170</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209171</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209172</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209173</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1209175</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211050</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211051</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+  <Line>
+    <Line_Num>74</Line_Num>
+    <Count>18</Count>
+    <Schedule>19</Schedule>
+    <Line_Info>19</Line_Info>
+    <System_Key>1123005967</System_Key>
+    <Global_Seq>1357638</Global_Seq>
+    <Schedule_Seq>26480</Schedule_Seq>
+    <Stations>
+      <Station>
+        <LDS_ID>1204649</LDS_ID>
+        <Line_Num>74</Line_Num>
+        <Drop>1</Drop>
+        <Location>LAKE FOREST 1</Location>
+        <Post_Mile>19.8</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210292</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210293</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210294</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210295</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210296</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210297</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210298</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210299</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210300</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210301</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210302</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210303</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204664</LDS_ID>
+        <Line_Num>74</Line_Num>
+        <Drop>4</Drop>
+        <Location>LAKE FOREST 2</Location>
+        <Post_Mile>19.9</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1210273</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210274</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210275</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210276</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210277</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210278</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210279</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210280</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210281</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210282</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210283</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210284</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210285</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210287</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210288</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210289</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210290</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204696</LDS_ID>
+        <Line_Num>74</Line_Num>
+        <Drop>5</Drop>
+        <Location>BAKE 1</Location>
+        <Post_Mile>20.59</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1208301</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208302</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208303</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208304</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211119</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211120</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211121</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211122</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211123</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211124</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211125</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211126</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211128</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211129</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211131</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211132</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204698</LDS_ID>
+        <Line_Num>74</Line_Num>
+        <Drop>6</Drop>
+        <Location>BAKE 2</Location>
+        <Post_Mile>20.94</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1208310</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208311</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208312</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208313</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211137</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211138</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211139</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211140</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211141</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211142</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211143</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211144</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211145</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204694</LDS_ID>
+        <Line_Num>74</Line_Num>
+        <Drop>7</Drop>
+        <Location>BAKE 1</Location>
+        <Post_Mile>20.59</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1208305</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208306</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208307</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208308</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208309</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210243</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210244</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210245</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210246</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210247</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210248</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210249</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210251</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210252</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210253</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204700</LDS_ID>
+        <Line_Num>74</Line_Num>
+        <Drop>8</Drop>
+        <Location>BAKE 2</Location>
+        <Post_Mile>20.95</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1208314</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208315</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208316</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1208317</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210225</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210226</Loop_ID>
+            <Loop_Location>ML_6</Loop_Location>
+            <Lane_Num>6</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210227</Loop_ID>
+            <Loop_Location>DEMAND</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210228</Loop_ID>
+            <Loop_Location>PASSAGE</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210229</Loop_ID>
+            <Loop_Location>QUEUE</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210230</Loop_ID>
+            <Loop_Location>RAMP_ON</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210231</Loop_ID>
+            <Loop_Location>RAMP_OFF</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210233</Loop_ID>
+            <Loop_Location>RAMP_HOV</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210234</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210235</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210237</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210238</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210239</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210240</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210241</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210242</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204681</LDS_ID>
+        <Line_Num>74</Line_Num>
+        <Drop>15</Drop>
+        <Location>OLDFIELD</Location>
+        <Post_Mile>20.23</Post_Mile>
+        <Direction>N</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1204683</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204684</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204685</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204686</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204687</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204689</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204690</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204692</Loop_ID>
+            <Loop_Location>OS_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204693</Loop_ID>
+            <Loop_Location>OS_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210262</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210263</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210264</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210265</Loop_ID>
+            <Loop_Location>SD_6</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210266</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210267</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210268</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1210269</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1204691</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1204702</LDS_ID>
+        <Line_Num>74</Line_Num>
+        <Drop>17</Drop>
+        <Location>At 405</Location>
+        <Post_Mile>21.25</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>5</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211154</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211155</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211156</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211157</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211158</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211159</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211160</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211161</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211162</Loop_ID>
+            <Loop_Location>SD_3</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211163</Loop_ID>
+            <Loop_Location>SD_4</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211164</Loop_ID>
+            <Loop_Location>SD_5</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211165</Loop_ID>
+            <Loop_Location>COLL_DIST_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211166</Loop_ID>
+            <Loop_Location>COLL_DIST_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+      <Station>
+        <LDS_ID>1201117</LDS_ID>
+        <Line_Num>74</Line_Num>
+        <Drop>18</Drop>
+        <Location>N OF 5</Location>
+        <Post_Mile>0.6</Post_Mile>
+        <Direction>S</Direction>
+        <Freeway>405</Freeway>
+        <ML_Tot_Vol>0</ML_Tot_Vol>
+        <Opp_Tot_Vol>0</Opp_Tot_Vol>
+        <Loops>
+          <Loop>
+            <Loop_ID>1211055</Loop_ID>
+            <Loop_Location>ML_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211056</Loop_ID>
+            <Loop_Location>ML_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211057</Loop_ID>
+            <Loop_Location>ML_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211058</Loop_ID>
+            <Loop_Location>ML_4</Loop_Location>
+            <Lane_Num>4</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211059</Loop_ID>
+            <Loop_Location>ML_5</Loop_Location>
+            <Lane_Num>5</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211060</Loop_ID>
+            <Loop_Location>OS_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211061</Loop_ID>
+            <Loop_Location>OS_2</Loop_Location>
+            <Lane_Num>2</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211062</Loop_ID>
+            <Loop_Location>OS_3</Loop_Location>
+            <Lane_Num>3</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211063</Loop_ID>
+            <Loop_Location>SD_1</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+          <Loop>
+            <Loop_ID>1211064</Loop_ID>
+            <Loop_Location>SD_2</Loop_Location>
+            <Lane_Num>1</Lane_Num>
+            <Vol>0</Vol>
+            <Occ>0</Occ>
+            <Spd>0</Spd>
+          </Loop>
+        </Loops>
+      </Station>
+    </Stations>
+  </Line>
+</Network>
Index: /branches/trunk/scripts/one-incident.xml
===================================================================
--- /branches/trunk/scripts/one-incident.xml	(revision 82)
+++ /branches/trunk/scripts/one-incident.xml	(revision 82)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<TMC_SCRIPT title="One Incident Simulation">
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="100">Media Log</INCIDENT>		
+		
+		<CAD_DATA>
+			<HEADER_INFO>
+				<Type>Media</Type>
+				<Beat>
+				</Beat>
+				<TruncLoc>
+				</TruncLoc>
+				<FullLoc>
+				</FullLoc>
+			</HEADER_INFO>			
+			
+			<CAD_INCIDENT_EVENT>	
+			</CAD_INCIDENT_EVENT>		
+			
+		</CAD_DATA>				
+		
+	</SCRIPT_EVENT>	
+</TMC_SCRIPT>
Index: /branches/trunk/scripts/full_script_2016.xml
===================================================================
--- /branches/trunk/scripts/full_script_2016.xml	(revision 82)
+++ /branches/trunk/scripts/full_script_2016.xml	(revision 82)
@@ -0,0 +1,4847 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE TMC_SCRIPT SYSTEM "script.dtd">
+
+<TMC_SCRIPT title="Full Simulation">
+
+	<SCRIPT_DATA>
+		<NEW_UNIT UnitNum = "14-14">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>55 at Dyer Rd</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>011234</BADGE_NUM>
+			<OFFICER>John Carrie</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>9796</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>14-14</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-17">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>405 MacArthur Boulevard</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>011304</BADGE_NUM>
+			<OFFICER>James Hill</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>15053</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>14-17</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-9">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>55 Edinger Avenue</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>012454</BADGE_NUM>
+			<OFFICER>Bobby Hey</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>6394</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>14-9</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-9">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I405 IRVINE CTR</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>011596</BADGE_NUM>
+			<OFFICER>Harry Jackson</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>10606</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-9</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-S3">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>73 Bear Street</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>011250</BADGE_NUM>
+			<OFFICER>James Tuchman</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>19005</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>14-S3</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-15">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>55 4th street</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>013282</BADGE_NUM>
+			<OFFICER>Sam Spellicy</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>23786</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-15</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-19">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>405 Culver</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>012495</BADGE_NUM>
+			<OFFICER>Michael Bay</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>15760</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-19</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-24">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I-405 IRVINE CNTR</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>011194</BADGE_NUM>
+			<OFFICER>Greg Johnson</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>16987</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-24</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-19">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I-5 / Sand Canyon</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>013181</BADGE_NUM>
+			<OFFICER>Andre Muller</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>18685</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-19</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-13">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I-5 / 133</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>015283</BADGE_NUM>
+			<OFFICER>Craig O'Neil</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>14069</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-13</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-11">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>SR55 AT DYER</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>012555</BADGE_NUM>
+			<OFFICER>Alex Carlton</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>15860</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-11</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-07">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I405 / CULVER OFFR</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>013606</BADGE_NUM>
+			<OFFICER>Gary Schmidt</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>14999</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-7</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-S4">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC></CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>013565</BADGE_NUM>
+			<OFFICER>Daniel Pierce</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>10606</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-S4</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-22">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>57 / Chapman</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>012345</BADGE_NUM>
+			<OFFICER>Victor Percival</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>24203</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-22</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-23">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>22 / Euclid Avenue</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>011860</BADGE_NUM>
+			<OFFICER>Michael Rocker</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>20184</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-23</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-26">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>57 / 91</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton Area</AREA>
+			<BADGE_NUM>011480</BADGE_NUM>
+			<OFFICER>Patrick King</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>14023</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-26</ALIAS>
+		</NEW_UNIT>
+		<!-- 17 isn't a valid CHP office? -->
+		<NEW_UNIT UnitNum = "17-14">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>405 / Euclid</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>017935</BADGE_NUM>
+			<OFFICER>William Bond</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>29877</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>17-14</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "17-16">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>S-405 / Euclid</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>015839</BADGE_NUM>
+			<OFFICER>Matthew McCarmick</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>23998</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>17-16</ALIAS>
+		</NEW_UNIT>
+	</SCRIPT_DATA>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="100">Media Log</INCIDENT>		
+		
+		<CAD_DATA>
+			<HEADER_INFO>
+				<Type>Media</Type>
+				<Beat>
+				</Beat>
+				<TruncLoc>
+				</TruncLoc>
+				<FullLoc>
+				</FullLoc>
+			</HEADER_INFO>			
+			
+			<CAD_INCIDENT_EVENT>	
+			</CAD_INCIDENT_EVENT>		
+			
+		</CAD_DATA>				
+		
+	</SCRIPT_EVENT>	
+
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO003</MASTER_INC_NUM>
+			<P>1</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1179 Accident - Ambulance Responding</TYPE_CODE>
+				<TYPE>1179</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>14-14</BEAT>
+				<ADDRESS>SB55 AT 405 </ADDRESS>
+				<LOC>SB55 AT 405</LOC>
+				<CITY>Costa Mesa</CITY>
+				<AREA>14-Santa Maria</AREA>
+				<FIRE>Costa Mesa</FIRE>
+				<LAW>Costa Mesa</LAW>
+				<EMS>Costa Mesa</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>14-14</Beat>
+				<TruncLoc>SB55 AT 405</TruncLoc>
+				<FullLoc>SB55 AT 405</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="187_N_405_ML">
+				<Route>405</Route>
+				<Direction>NB</Direction>
+				<Postmile>8.4</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<LOCATION_INFO ID="187_N_405_HV">
+				<Route>405</Route>
+				<Direction>NB</Direction>
+				<Postmile>8.4</Postmile>
+				<Location_type>HV</Location_type>					
+			</LOCATION_INFO>	
+			
+			<LOCATION_INFO ID="187_S_55_ML">
+				<Route>55</Route>
+				<Direction>SB</Direction>
+				<Postmile>6.5</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+		</CAD_DATA>	
+		
+		<GENERAL_INFO> 			
+			<TITLE>Incident Description</TITLE>
+			<TEXT>This is a stalled DOT truck on SB 55 overpass at 405. The truck is 
+			  hit by a vehicle, the vehicle is vaulted over the railing, and a 6 
+			  vehicle collision occurs below in the NB 405 lanes. The #2 and 3 lanes 
+			  are blocked on SB 55 and the #1, 2, and 3 lanes are blocked on NB 405. 
+			  The driver of the truck is uninjured, although there are 4 fatals, 2 
+			  major injured, and 4 minor injured in the collision below. MAIT is 
+			  called to the scene to investigate the collision and a Sig Alert is 
+			  declared. 
+			</TEXT>
+		</GENERAL_INFO>	
+		
+		<TELEPHONE>	
+			<STUDENT>Places a call to CHP Dispatch to notify of stalled DOT vehicle.</STUDENT>
+		</TELEPHONE>				
+		
+		<MAINTENANCE_RADIO>Dispatch, this is xxx. I'm on south 55 at the 405.  
+		 		My truck is out of service here, stuck in the lane.  I need CHP assistance ASAP!" 
+		</MAINTENANCE_RADIO>	
+		
+	</SCRIPT_EVENT>	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:01:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>	
+
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>	
+				<DETAIL>STALLED DOT SB SR-55 AT I-405</DETAIL>	
+				
+				<PARAMICS LocationID="187_S_55_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>
+				</PARAMICS>		
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:02:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>	
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<UNIT UnitNum="14-14" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "25" Path = "187/18701.mp3" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		        
+		
+		<CHP_RADIO RadioFile="18701.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">14-14 Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 14-14 go ahead</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia 11-25 stalled DOT truck southbound 55 overpass at 405.</LINE>
+				<LINE Role="Field">Santa Lucia 14-14 10-4. Enroute from 55 at Dyer Rd.</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia copies enroute from 55 at Dyer Rd.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<CAD_EVALUATION>
+			<EXPECTED_ACTION>Operator should be verifying incident 187 on CAD</EXPECTED_ACTION>
+		</CAD_EVALUATION>
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Operator viewing cameras in incident area.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:03:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>CELLULAR 911 RPT DOT HT, 2ND VEH OVER THE SIDE, UNVERIFIED</DETAIL>
+				<AUDIO Length = "26" Path = "187/18702.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18702.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">14-14 Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 14-14 go ahead</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia. Cellular 911 caller reports stalled vehicle on the 55/405 overpass was hit and a vehicle was pushed over the side.  Can you verify?</LINE>				
+				<LINE Role="Field">Santa Lucia, negative, I'm one minute away.</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia 10-4. One minute away.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:03:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>DUPLICATE CALL</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:04:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>DUPLICATE CALL</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:05:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>DOT HIT BY VEH, VEH OVER SIDE.</DETAIL>
+				<DETAIL>2ND VEH LANDED NB 405 BELOW, LG COLLISION OCCUR. REQ 2 1141 CODE 2 UNITS ASSIST</DETAIL>
+				<UNIT UnitNum="14-14" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "42" Path = "187/18703.mp3" />
+				
+				<PARAMICS LocationID="187_N_405_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+				</PARAMICS>					
+				
+				<PARAMICS LocationID="187_N_405_HV">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+				</PARAMICS>					
+				
+				<PARAMICS LocationID="187_S_55_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+				</PARAMICS>			
+			</CAD_INCIDENT_EVENT>			
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18703.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-14</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 14-14 10-97 11-83 11-25.  It appears the DOT truck was hit by a vehicle and over the side landed in the northbound 405 lanes below.  A major collision occurred below.  Request 11-41 Code 2 and a couple units to assist.</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia 10-4 10-97 11-83 11-25.  DOT truck was hit by vehicle and the vehicle over the side landed in the northbound 405 lanes below.  A large collision occurred below.  Request 11-41 Code 2 and a couple units to assist.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="72" type="new"> 
+			<LOCATION>SB 55 @ WARNER AVE</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AHEAD</CMS_LINE>
+				<CMS_LINE>AT 405 OVERPASS</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be responding to incident 187</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should be monitoring ATMS operator</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:05:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>DUPLICATE CALL</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:06:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-17 14-9 ENRT ASSIST 1183 1125</DETAIL>
+				<UNIT UnitNum="14-17" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="14-9" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "40" Path = "187/18704.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18704.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">14-17, 14-9 Santa Lucia</LINE>
+				<LINE Role="Field_1">Santa Lucia 14-17 go ahead.</LINE>	
+				<LINE Role="Field_2">Santa Lucia 14-9 go ahead.</LINE>
+				<LINE Role="Dispatch">	14-17, 14-9 assist 14-14 11-83 11-25 northbound 405 at the 55 interchange.</LINE>				
+				<LINE Role="Field_1">Santa Lucia 14-17 copies.  Enroute from 405 just south of Macarthur Boulevard.</LINE>
+				<LINE Role="Field_2">14-9 10-4, enroute from 55 at Edinger Avenue.</LINE>
+				<LINE Role="Dispatch">Santa Lucia copies 14-17 enroute from 405 just south of Macarthur and 14-9 enroute from 55 at Edinger.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:06:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>DUPLICATE CALL</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:07:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>DOT DRIVER UNINJURED, #2,3 LNS BLCKD SB 55.</DETAIL>
+				<DETAIL>14-14 MVNG TO 405 ASSESS DMG</DETAIL>
+				<AUDIO Length = "29" Path = "187/18705.mp3" />
+			</CAD_INCIDENT_EVENT>
+			
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18705.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-14</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">	Santa Lucia, the driver of the DOT truck is uninjured but the #2 and #3 lanes are now blocked on southbound 55.  I'm moving down to the 405 lanes to assess the damage.</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa-Lucia 10-4. Driver of the DOT truck is uninjured.  The #2 and #3 lanes are now blocked on southbound 55. Moving down to the 405 lanes to assess the damage.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="72" type="update"> 
+			<LOCATION>SB 55 @ WARNER AVE</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AHEAD</CMS_LINE>
+				<CMS_LINE>AT 405 OVERPASS</CMS_LINE>
+				<CMS_LINE>2 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>	
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should be updating the incident board.</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:08:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #1">Hello, this is Cameron Stevens at KCLY TV channel 2.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #1">I was told that a car flew off an 
+										 overpass causing a large pile-up on the freeway below.
+			</INSTRUCTOR>
+			<STUDENT>Incident should be confirmed</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #1">I want to confirm the location so we 
+										 can send a helicopter to check it out.
+			</INSTRUCTOR>
+			<STUDENT>55/405 interchange</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:08:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO004</MASTER_INC_NUM>
+			<P>2</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1179 Accident - Ambulance Responding</TYPE_CODE>
+				<TYPE>1179</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>9-9</BEAT>
+				<ADDRESS>NB5 JNO Lake Forest Dr</ADDRESS>
+				<LOC>NB5 JNO Lake Forest Dr</LOC>
+				<CITY>Templeton</CITY>
+				<AREA>9-Templeton</AREA>
+				<FIRE>Templeton</FIRE>
+				<LAW>Templeton</LAW>
+				<EMS>Templeton</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>9-9</Beat>
+				<TruncLoc>NB5 JNO Lake Forest Dr</TruncLoc>
+				<FullLoc>NB5 JNO Lake Forest Dr</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="188_N_5_ML">
+				<Route>5</Route>
+				<Direction>NB</Direction>
+				<Postmile>20</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>	
+			
+			<CAD_INCIDENT_EVENT>			
+				<PARAMICS LocationID="188_N_5_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>
+					<Lane_number>5</Lane_number>
+				</PARAMICS>					
+			</CAD_INCIDENT_EVENT>					
+		</CAD_DATA>		
+		
+		<GENERAL_INFO>
+			<TITLE>Incident Description</TITLE>
+			<TEXT>This is a two vehicle collision between a tomato truck and a car. The 
+	  	  truck spills tomatoes across lanes #3,4,5 right lanes plus 
+	  	  shoulder of NB 5 just north of Lake Forest Drive. There is one 11-44 
+	  	  and 2 major injured. Ambulance, fire, paramedics, additional units, 
+	  	  Maintenance/coroner, and TMT are requested on this incident.
+			</TEXT>
+		</GENERAL_INFO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:10:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>9-9 ENRT FRM I405 @ IRVINE CTR</DETAIL>
+				<UNIT UnitNum="9-9" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "25" Path = "188/18801.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18801.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-9 Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 11-79 northbound 5 just north of Lake Forest Drive.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 copied enroute from 405 at Irvine Center.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Enroute from 405 at Irvine Center.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CAD_EVALUATION>
+			<EXPECTED_ACTION>Operator should be monitoring the CAD</EXPECTED_ACTION>
+		</CAD_EVALUATION>
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Operator should try to confirm the incident with a CCTV camera.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should verify location and respond to incident 188</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:11:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #1">Hello, this is Dakota Crew at 
+											KCOW radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #1">I just heard over the scanner that 
+											you have a major accident on I405 at 55.
+			</INSTRUCTOR>
+			<STUDENT>Should confirm incident.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #1">Can you give me a run down on what 
+										 	happened?
+			</INSTRUCTOR>
+			<STUDENT>A collision occurred on NB 55 at 405.  A vehicle went over rail 
+					     onto NB 405 causing a 6 car collision.
+			</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:12:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-14 1097, MULTIPLE 1144 NB 405 AT 55 OVERPASS, 6 VEH TC</DETAIL>
+				<DETAIL>BLOCKING 3 INSIDE LNS NB 405. DRVR AND PSSNGR IN VEH 1144, 2 OTHER FATALS, MULT INJR, REQ CRNR AND SIGALERT</DETAIL>
+				<AUDIO Length = "46" Path = "187/18706.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18706.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-14</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 14-14 10-97. Multiple 1144 northbound 405 at 55 
+					overpass. Six vehicle collision blocking the three inside 
+					lanes. The driver and passenger of the car that went over 
+					the railing are both 11-44. I've got two other fatals and 
+					multiple injured down here. Request coroner and issue Sig 
+					Alert.
+				</LINE>
+				
+				<LINE Role="Dispatch">	14-14 Santa Lucia 10-4 10-97 11-80 11-25 northbound 405 
+						at 55 overpass. Multiple 1144. Six vehicle collision blocking the three 
+						inside lanes. The driver and passenger of the car that 
+						went over the railing are 11-44, 2 other 11-44.  
+						Multiple injuries, request coroner and send Sig Alert.
+				</LINE>
+			</DIALOG>
+		</CHP_RADIO>					
+		
+		<CMS_EVALUATION cmsID="87" type="new"> 
+			<LOCATION>NB 405 @ HARVARD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>3 LEFT LNS BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="88" type="new"> 
+			<LOCATION>NB 405 @ ICD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>3 LEFT LNS BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page sig alert information</EXPECTED_ACTION>	
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:12:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 CRNR</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>	
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should insert info for enroute coroner</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:13:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-17 1097, PARAMEDICS 1097. 1184 SB 55 FOR DOT 1125</DETAIL>
+				<UNIT UnitNum="14-17" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "46" Path = "187/18707.mp3" />	
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18707.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-17 10-97. 1144 northbound 405 at 55. 	
+			Paramedics are 10-97. We've gotta secure the scene southbound 55 for the DOT 
+			hazard. Has Caltrans been notified that their truck has been 
+			involved in a collision?</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4 10-97 11-44 northbound 405 
+						at 55. Paramedics 10-97. Will be doing 11-84 on southbound 55 for 
+						DOT collision. Caltrans will be notified.			
+				</LINE>	
+				<LINE Role="Field">Santa Lucia 14-17 10-4</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:14:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-9, FD, PARAMEDICS 1097.  TC SEMI W/TOMATOES AND VEH ON NB-5 #3,4,5 LNS</DETAIL>
+				<DETAIL>TRCK ON FIRE, REQ CT CLNUP, UNITS 1184</DETAIL>
+				<UNIT UnitNum="9-9" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "39" Path = "188/18802.mp3" />
+			</CAD_INCIDENT_EVENT>
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18802.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9</LINE>
+				<LINE Role="Dispatch">9-9 go ahead Santa Lucia</LINE>
+				<LINE Role="Field">Santa Lucia 9-9 10-97 11-79. Fire department and 
+					parmedics 10-97.  Collision between semi truck carrying 
+					tomatoes and vehicle in 2 right lanes.  Truck on fire and 
+					tomatoes spilled over three right lanes. Request Caltrans to 
+					clean up the tomatoes and units for 11-84.</LINE>
+				<LINE Role="Dispatch">Santa Lucia 10-4, 9-9 10-97 11-79. Fire and 
+						paramedics 10-97. Collision involves tomato truck and 
+						car in two right lanes. Truck on fire and tomatoes over 
+						three right lanes.  Request Caltrans.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+		<CMS_EVALUATION cmsID="31" type="new"> 
+			<LOCATION>??</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>UR TIRES R RND</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should have ensured that a maintenance team was dispatched</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:14:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>REQ MAIT, REQ 14-S UNIT, REQ TMT</DETAIL>
+				<UNIT UnitNum="14-S3" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "34" Path = "187/18708.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18708.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 14-14</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia, request MAIT, they'll have to investigate this 
+					one.  Also, request 14-S unit and TMT.</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia copied request MAIT, 14-S unit, and TMT.</LINE>				
+				<LINE Role="Dispatch">	14-S3 unit copy.</LINE>				
+				<LINE Role="Field">	Santa Lucia 14-S3, 10-4 enroute from 73 at Bear Street.</LINE>				
+				<LINE Role="Dispatch">	14-S3 Santa Lucia copies enroute from 73 at Bear Street.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be alert and advising radio on TMT.</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should notify the TMT leader of incident 187</EXPECTED_ACTION>
+		</RADIO_EVALUATION>	
+		
+		<TMT_RADIO>TMT leader espond to student action.  Dispatch appropriate units???</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:15:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #2">Hello, this is Monica Stevens at KCLY radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #2">I called earlier about the accident 
+											on I405. Have any more details come 
+											in on that incident?
+			</INSTRUCTOR>
+			<STUDENT>Vehicles blocking 3 NB 405 lanes, 4 dead and 7 injured.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #2">Do you have an alternate route I can recommend?
+			</INSTRUCTOR>
+			<STUDENT>Yes (TBD)</STUDENT>	
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:16:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<MAINTENANCE_RADIO>If Maintenance unit was sent out, radio the supervisor 
+			with a 10-97.  Say that you're going to await MAIT investigation and 
+			transport other Maintenance worker.			
+		</MAINTENANCE_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:17:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-9 1097, ASSIST 1184</DETAIL>
+				<UNIT UnitNum="14-9" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "22" Path = "187/18709.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18709.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-9.</LINE>				
+				<LINE Role="Dispatch">14-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-9 10-97. Will assist 14-14 with 11-84.</LINE>				
+				<LINE Role="Dispatch">14-9 Santa Lucia 10-4 10-97 northbound 405 at 55. 
+						Will assist 14-14 with 11-84.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:18:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>TRAFFIC BACKING SB 55 REQ TMT MEDIUM DUTY 1185</DETAIL>
+				<AUDIO Length = "24" Path = "187/18710.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18710.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>			
+				<LINE Role="Field">Santa Lucia 14-17. Traffic is backing up on southbound 55. 
+					Request TMT and medium duty 11-85 for the DOT truck.	</LINE>			
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4. Traffic backing up on southbound 
+						55.  Requesting TMT and medium duty 11-85.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:19:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>		
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>4 1144'S, 2 1180'S, 4 1181'S</DETAIL>
+				<AUDIO Length = "20" Path = "187/18711.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18711.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-14</LINE>		
+				<LINE Role="Dispatch">14-14 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 14-14. 4 11-44's, 2 11-80's, and 4 11-81's.</LINE>		
+				<LINE Role="Dispatch">14-14 Santa Lucia copies 4 11-44's,2 11-80's, and 4 11-81's.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #2">Hello, this is Fred Roppel at KNOW TV."</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #2">Have any more details come in on the pileup at 55/405?</INSTRUCTOR>
+			<STUDENT>Vehicles blocking 3 NB 405 lanes, 4 dead and 7 injured, ??? mile backup</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">Do you have an alternate route I can recommend?</INSTRUCTOR>
+			<STUDENT>(pause for answer: Yes)</STUDENT>
+			<STUDENT>3 car collision, vehicles blocking #2,3,4 lanes.  Moderate injuries.</STUDENT>
+		</TELEPHONE>
+		
+		<CMS_EVALUATION cmsID="95" type="new"> 
+			<LOCATION>NB 5 @ EL TORO</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>3 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:20:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-15,9-19 ENRT FOR 1184</DETAIL>
+				<UNIT UnitNum="9-15" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="9-19" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "38" Path = "188/18803.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18803.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-15, 9-19 Santa Lucia</LINE>				
+				<LINE Role="Field_1">Santa Lucia 9-15 go ahead.</LINE>				
+				<LINE Role="Field_2">Santa Lucia go ahead to 9-19.</LINE>				
+				<LINE Role="Dispatch">9-15 and 9-19 Santa Lucia 11-84 for 11-79 
+						northbound 5 just north of Lake Forest Drive.</LINE>				
+				<LINE Role="Field_1">	Santa Lucia 9-15 10-4. Enroute from 55 at 4th Street.</LINE>				
+				<LINE Role="Field_2">Santa Lucia 9-19 copied enroute from 405 at Culver.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copies 9-15 enroute from 55 at 4th and 9-19 
+		  				enroute from 405 at Culver.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #3">Hello, this is Bill Bradley at KCTR radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #3">I heard here was a large collision on the 5.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #3">What details do you have on that?</INSTRUCTOR>
+			<STUDENT>Semi and 2 cars, tomatoes over three right lanes.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #3">Were there any injured?</INSTRUCTOR>
+			<STUDENT>Don't know yet.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:21:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 SABLAN TOWING</DETAIL>
+				<TOW Company="SABLAN TOWING" ConfNum="(949)555-2468" PubNum="(949)555-8899" Beat=""/>
+				<AUDIO Length = "18" Path = "187/18712.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18712.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">	14-17 Santa Lucia information.</LINE>				
+				<LINE Role="Field">	Santa Lucia 14-17 go ahead.</LINE>				
+				<LINE Role="Dispatch">	14-17 Santa Lucia 10-39 Sablan's Towing.</LINE>				
+				<LINE Role="Field">	14-17 copied 10-39 Sablan's Towing.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:22:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-S3 1097 NB 405 @ 55</DETAIL>
+				<DETAIL>MAIT ETA 15</DETAIL>
+				<UNIT UnitNum="14-S3" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "26" Path = "187/18713.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>			
+
+		<CHP_RADIO RadioFile="18713.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 10-97 northbound 405 at 55.  Do you 
+					have an ETA for MAIT?</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4 10-97 northbound 405 
+						at 55. MAIT ETA 15 minutes.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3 copies MAIT ETA 15.</LINE>
+			</DIALOG>		
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:24:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1141 1097, TRCK STLL FIRE, 2 1180 IN VEH, UNK IN TRCK</DETAIL>
+				<AUDIO Length = "32" Path = "188/18804.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18804.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. 11-41 10-97. Truck still engulfed in 
+					flames.  Two 11-80's in the vehicle. Unknown passengers in 
+					the truck. Request TMT, traffic backing up quickly.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. 11-41 10-97. Truck still engulfed.  
+						Two 11-80's in vehicle and unknown passengers in truck.  
+						Request TMT, traffic backing up.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #4">Hello, this is Alex Harmon at KJOK radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #4">How many vehicles were involved in the 
+								 			collision on northbound 5?
+			</INSTRUCTOR>
+			<STUDENT>1 semi, two cars.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #4">How many lanes were blocked?</INSTRUCTOR>
+			<STUDENT>Three right lanes blocked.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #4">Do you have an alternate route established?</INSTRUCTOR>
+			<STUDENT>What's it to you!?</STUDENT>
+		</TELEPHONE>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be assisting radio operator</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should dispatch TMT</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:25:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>REQUEST 1185 BIG RIG AND 1185 ROT, ISSUE SIG ALERT</DETAIL>
+				<AUDIO Length = "23" Path = "188/18805.mp3" />
+			</CAD_INCIDENT_EVENT>
+		</CAD_DATA>			
+		
+
+		<CHP_RADIO RadioFile="18805.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 9-9. Roll 11-85 big rig and a rotational 
+					11-85.  Issue a Sig Alert, this could take a while.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia copied roll 11-85 big rig and 11-85 
+						rotational. Issue a Sig Alert until further notice.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #5">Hello, this is Tim Rogers at KLNW radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #5">What details do you have on the 
+											collision Northbound 5 at Lake Forest Drive?
+			</INSTRUCTOR>
+			<STUDENT>Semi vs. two cars, tomatoes over lanes 3,4,5, two major 
+						 injured, unknown passenger in truc.</STUDENT>
+		</TELEPHONE>		
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be ensuring a Sig Alert is issued</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		
+		<MAINTENANCE_RADIO>
+			If Maintenance has not been requested by this time, 
+			have someone call as CHP Dispatch and make a request for them.
+		</MAINTENANCE_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:27:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CRNR 1097, INJURED TRANSPORTED</DETAIL>
+				<AUDIO Length = "17" Path = "187/18714.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18714.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>
+				<LINE Role="Dispatch">14-S3 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia, coroner 10-97. The injured have been transported.</LINE>
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4 coroner 10-97. Injured transported.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-97 coroner</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:30:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-15 1097, ADVS PD TO DIRECT TRAFFIC OFF AT LAKE FOREST </DETAIL>
+				<UNIT UnitNum="9-15" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "26" Path = "188/18806.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18806.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-15.</LINE>				
+				<LINE Role="Dispatch">9-15 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-15 10-97 11-80. Advise local PD that 
+					we are going to direct traffic off at Lake Forest off ramp and 
+					are closing the Lake Forest on ramp.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copies 9-15 10-97 11-80. Advise PD 
+						we're directing traffic off Lake Forest offramp and closing 
+						Lake Forest onramp.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<STUDENT>Student places call to Police Department</STUDENT>
+			<STUDENT>Student correctly notifies PD of incident location and details</STUDENT>
+		</TELEPHONE>
+
+		<TMT_RADIO>
+			If no sign truck/s have been requested yet, a phone call needs to be 
+			made from CHP Dispatch requesting them.			
+		</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:30:30</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #6">Hello, this is John Sinclair at KRST radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #6">Is there an alternate route 
+											established for the northbound 5 
+											lanes due to the collision at Lake Forest Drive?
+			</INSTRUCTOR>
+			<STUDENT>Lake Forest East to Muirlands or Lake Forest West to Irvine Ctr.  
+				Re-enter I5 at numerous locations</STUDENT>
+		</TELEPHONE>		  
+	</SCRIPT_EVENT>
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:31:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 COLLEGE OAK BIG RIG, CYCLE TOW FOR ROT</DETAIL>
+				<TOW Company="College Oak" ConfNum="(949)555-2990" PubNum="(949)555-5758" Beat=""/>
+				<TOW Company="Cycle" ConfNum="(949)555-2281" PubNum="(949)555-7162" Beat=""/>
+				<AUDIO Length = "20" Path = "188/18807.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18807.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-9 Santa Lucia information</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-39 College Oak for big rig 11-85 and 
+						Cycle Tow for 11-85 rotational.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 copied 10-39 College Oak and Cycle Tow.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>	  
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:32:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-19 1097 ASSISTNG 1184</DETAIL>
+				<UNIT UnitNum="9-19" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "20" Path = "188/18808.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18808.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-19</LINE>
+				<LINE Role="Dispatch">9-19 go ahead to Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 9-19 10-97 11-80. Assisting with 11-84.</LINE>				
+				<LINE Role="Dispatch">9-19 Santa Lucia copied 10-97 11-80. Assisting with 11-84.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:35:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT 1097 STARTING INVESTIGATION SB SR55</DETAIL>
+				<AUDIO Length = "22" Path = "187/18715.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="187/18715.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3, MAIT is 10-97. They're starting their 
+					investigation on the 55 overpass.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4 MAIT 10-97. Starting 
+						investigation on 55 overpass.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-97 MAIT</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:36:00</TIME_INDEX> 
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="CHP Dispatch">Hello, CHP Dispatch.  Do you have traffic control enroute for NB 405 at 55</INSTRUCTOR>
+			<STUDENT>Do you mean sign truck crews or cones on the road?</STUDENT>
+			<INSTRUCTOR Role="CHP Dispatch">Cones</INSTRUCTOR>
+		</TELEPHONE>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should interact with the dispatch operator regarding cone crews</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:37:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>	
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MED DUTY 1185 1097, AWAIT FINISH MAIT BEFORE TOW VEH</DETAIL>
+				<AUDIO Length = "25" Path = "187/18716.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18716.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia, medium duty 11-85 10-97. Will await the finish of 
+					MAIT investigation before towing vehicle.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4 medium rig 11-85 10-97. Will await 
+						the finish of MAIT investigation before towing vehicle.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:38:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 PD, SENDING 2 UNITS ASST 1184</DETAIL>
+				<AUDIO Length = "17" Path = "188/18809.mp3" />
+			</CAD_INCIDENT_EVENT>
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18809.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-9 Santa Lucia information.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-39 police department. Sending two 
+						units to assist with 11-84.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 copied</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #3">"Hello, this is Terry Webb at KTSV TV 11."</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #3">My CAD is down, do you have any 
+										 incidents going on right now?
+			</INSTRUCTOR>
+			<STUDENT>Notify reporter of all current incidents.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #3">Give me the details on those.</INSTRUCTOR> 
+			<STUDENT>Notify reporter of all current incident details.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:40:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CRNR CONFIRMED FOUR FATAL, PREP TO TRANSPORT</DETAIL>
+				<AUDIO Length = "19" Path = "187/18717.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18717.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. The coroner has confirmed four fatals and 
+					is preparing them to be transported.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia copied coroner confirmed four fatals 
+						and preparing for transport</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:42:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1180S TRANSPORTED</DETAIL>
+				<AUDIO Length = "14" Path = "188/18810.mp3" />
+			</CAD_INCIDENT_EVENT>
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18810.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 9-9. 11-80's transported.</LINE>
+				<LINE Role="Dispatch">9-9 Santa Lucia copied 11-80's transported.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:43:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-9 FIRE OUT</DETAIL>
+				<AUDIO Length = "14" Path = "188/18811.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18811.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-9. The fire is out.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia 10-4. Fire is out.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should note that the fire has been put out</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>should be active and responding to situation</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:44:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>LAKE FOREST ONRAMP CLOSED, DIRECTING TRAFFIC OFF LAKE FOREST OFFRAMP</DETAIL>
+				<AUDIO Length = "23" Path = "188/18812.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18812.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-15.</LINE>				
+				<LINE Role="Dispatch">9-15 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-15. Lake Forest onramp closed. Directing 405 traffic 
+					off Lake Forest offramp.</LINE>				
+				<LINE Role="Dispatch">9-15 Santa Lucia 10-4. Lake Forest onramp closed.  
+					Directing 405 traffic off at Lake Forest offramp.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #7">Hello, this is Tom Webb at KSON radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #7">Do you have an alternate established 
+											for the norhtbound 5 lanes near Lake 
+											Forest Drive?
+			</INSTRUCTOR>
+			<STUDENT>Same as before..</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #7">When are the lanes supposed to be open?	</INSTRUCTOR>
+			<STUDENT>No specific time, approx. 1 hour.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:47:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT FINISHED W/ INVESTIGATION SB SR-55 AT I-405, PREP DOT TRCK FOR TOW</DETAIL>
+				<AUDIO Length = "24" Path = "187/18718.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18718.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia, MAIT is finished with their investigation on 
+					the 55 overpass.  Preparing DOT truck for tow.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4. MAIT is finished with their 
+						investigation on the 55 overpass. Preparing DOT truck 
+						for tow.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:48:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1 1144 IN TRCK, REQ CRNR</DETAIL>
+				<AUDIO Length = "18" Path = "188/18813.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18813.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. There is one 11-44 in the truck. Request coroner.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia copied one 11-44 in truck. Request coroner.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for coroner request</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+		<TMT_RADIO>Sign truck/s are 97 at the end of the current queue.</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:49:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #8">Hello, this is Jordan Bradley at KTCR radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #8">Do you have any incidents going on right now?</INSTRUCTOR>
+			<STUDENT>Notify reporter of current incidents.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #8">What details do you have on those?</INSTRUCTOR>
+			<STUDENT>Notify reporter of current incident details.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:50:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-9 1039 CRNR, ETA 15</DETAIL>
+				<AUDIO Length = "16" Path = "188/18814.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18814.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">	9-9 Santa Lucia</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-9 go ahead.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia 10-39 coroner, ETA is 15 minutes.</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-9 10-4.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-39 CORONER</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>		
+		
+		<MAINTENANCE_RADIO>
+			Radio traffic between maintenance workers on site and maintenance dispatcher. 
+			Dispatched crews are 10-97 and beginning the cleanup.
+		</MAINTENANCE_RADIO>
+
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:51:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CT 1097, STRTNG CLNUP OF TOMATOES</DETAIL>
+				<AUDIO Length = "18" Path = "188/18815.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18815.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-9. Caltrans is 10-97. Starting cleanup of tomatoes.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia 10-4. Caltrans 10-97. Starting cleanup of tomatoes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #4">Hello, this is Art Philco at KTTQ news 2.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #4">I'm away from my CAD. What's going on 
+										 with the accident on northbound 5 
+										 involving the tomato truck spill?
+			</INSTRUCTOR>
+			<STUDENT>Fire out on truck, 11-44, will start cleanup.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #4">Was anybody killed in the collision.</INSTRUCTOR>
+			<STUDENT>One 11-44</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:52:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TMT_RADIO>Radio traffic between TMT crew and TMT leader regarding current queue status</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:53:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1185 ROT 1097</DETAIL>
+				<AUDIO Length = "15" Path = "188/18816.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18816.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. 11-85 rotation 10-97.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia copied 11-85 rotation 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #9">Hello, this is Jim Sanso at KTAK radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #9">What details do you have on the northbound 5 collision?</INSTRUCTOR>
+			<STUDENT>(pause for answer)</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #9">Is there an alternate route established?</INSTRUCTOR> 
+			<STUDENT>(pause for answer)</STUDENT>			
+		</TELEPHONE>		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:54:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT STARTING INVESTIGATION NB 405 TO TAKE 30 MIN</DETAIL>
+				<AUDIO Length = "23" Path = "187/18719.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18719.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">	14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 14-S3. MAIT is starting investigation on 
+					northbound 405. The investigation should take 30 minutes.</LINE>				
+				<LINE Role="Dispatch">	14-S3 Santa Lucia copied MAIT starting investigation on 
+						northbound 405. The investigation should take 30 minutes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:55:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CLNUP NRLY FNSHD DOT RDY TO BE TWD, SB SR-55 LNS OPN IN 5</DETAIL>
+				<AUDIO Length = "25" Path = "187/18720.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18720.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia, nearly finished with cleanup and the DOT truck 
+					is ready to be towed. Southbound 55 lanes open in 5 minutes.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4. Nearly finished with cleanup and 
+						DOT truck is ready to be towed. Southbound 55 lanes open in 5.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:56:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>WTNSSES, JOHN/BETTY JONES SAW TOMATO TRUCK LOSE CONTROL, FLIP OVER, VEH HIT, TRCK IMM CAUGHT FIRE</DETAIL>
+				<WITNESS Name="John/Betty Jones" Address="101 Lowland Dr." PhoneNum="(949)555-8375"/>
+				<AUDIO Length = "27" Path = "188/18817.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18817.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Witnesses John and Betty Jones saw the 
+					tomato truck lose control, flip over, and the vehicle hit 
+					it. The truck then caught fire.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Witnesses John and Betty Jones saw 
+						tomato truck lose control, flip over, and vehicle hit 
+						it. Truck then immediately caught fire.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Public">Hello, is George there?</INSTRUCTOR>
+			<STUDENT>No, wrong number.</STUDENT>
+			<INSTRUCTOR Role="Public">Sorry, good bye.</INSTRUCTOR> 
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:59:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>BIG RIG 1185 1097</DETAIL>
+				<AUDIO Length = "16" Path = "188/18818.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18818.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 go ahead to Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9, big rig 11-85 10-97.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia copies, big rig 11-85 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #10">"Hello, this is Bill Rasmussen at KTRC radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #10">"Do you have any updated info on the 
+											northbound 5 collision involving the 
+											tomato truck?"
+			</INSTRUCTOR>
+			<STUDENT>Pause for answer.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #10">When is it expected to be cleared.</INSTRUCTOR>
+			<STUDENT>Cleaning up now, no definite answer, approx. 30 minutes.</STUDENT>
+		</TELEPHONE>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should call CHP to inquire for incident duration.  (Approx 30 minutes)</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:02:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-17 1097 DOT TRCK TWD, SB SR-55 OPN</DETAIL>
+				<AUDIO Length = "21" Path = "187/18721.mp3" />
+				
+				<PARAMICS LocationID="187_S_55_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>				
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18721.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 10-98, the DOT truck has been towed and the 
+					southbound 55 lanes are open.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 14-17 10-98. DOT truck towed and 
+						southbound 55 lanes open.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="72" type="remove">
+			<LOCATION>SB 55 @ WARNER AVE</LOCATION>
+		</CMS_EVALUATION>			
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+		<MAINTENANCE_RADIO>
+			Maintenance workers are 10-98.  Truck has been towed and 
+			taking maintenance worker, whose truck got hit, to the shop.
+		</MAINTENANCE_RADIO>		
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:03:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT PARTIAL CMPLT, PICS TKN, NEED MSRMNTS, INTERVIEWS</DETAIL>
+				<AUDIO Length = "25" Path = "187/18722.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18722.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. MAIT has partially completed its 
+					investigation. Pictures have been taken, but still need to 
+					take measurements and conduct interviews.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4. MAIT has partially completed its 
+		  				investigation.  Pictures have been taken, but still need 
+		  				to take measurements and conduct interviews.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:05:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CT #3 LN ALMOST CLEARED OF TOMATOES</DETAIL>
+				<AUDIO Length = "17" Path = "188/18819.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18819.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Caltrans has the #3 lane almost cleared of the tomatoes.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Caltrans has #3 almost cleared.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #11">"Hello, this is Chris Rasmuessan at KWIT radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #11">"Do you have an ETA for the opening of the lanes on Eastbound 91?"
+			</INSTRUCTOR>
+			<STUDENT>No to full opening, approx. 30 minutes, #3 lane nearly cleared.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:07:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>	
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CRNR 1097</DETAIL>
+				<AUDIO Length = "14" Path = "188/18820.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="31520.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9, coroner 10-97.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia copies coroner 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-97 coroner</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+	</SCRIPT_EVENT>
+	
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:08:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #1">"Hello, this Dakota Crew at KTAK radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #1">"Do you have any new incidents 
+											within the last 20 minutes?"
+			</INSTRUCTOR>
+			<STUDENT>No.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #1">Give me the details on that.</INSTRUCTOR>
+		</TELEPHONE>		
+		
+		<MAINTENANCE_RADIO>
+			Maintenance crew notifies dispatch that lane #3 is clear.  The #4,5
+			lanes should be clear in another 20-30 minutes.
+		</MAINTENANCE_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:08:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>REQ 6 ROT 1185</DETAIL>
+				<AUDIO Length = "17" Path = "187/18723.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18723.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. Request 6 rotational 11-85's.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia copied requesting 6 rotational 11-85's.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:09:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VEH TOWED, #3 LN CLEARED, OPENING</DETAIL>
+				<AUDIO Length = "18" Path = "188/18821.mp3" />
+				
+				<PARAMICS LocationID="188_N_5_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>4</Lane_number>
+					<Lane_number>5</Lane_number>
+				</PARAMICS>	
+				
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18821.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Vehicle towed. #3 lane cleared of 
+					tomatoes and opening lane now.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Vehicle towed, #3 lane cleared 
+						and opening lane now.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:10:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT NEARLY COMPLETE, FINISHING INTERVIEWS, TOW ETA 10</DETAIL>
+				<AUDIO Length = "29" Path = "187/18724.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18724.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. MAIT has nearly completed their 
+					investigation, they are finishing up the interviews. ETA 
+					tows?</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia. MAIT has nearly completed their 
+						investigation, they are finishing up the interviews. 
+						Tow ETA 10 minutes.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3 10-4 ETA 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TMT_RADIO>Have SB 55 TMT units go 10-98.</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:12:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1144 CNFRMD, #3 LN OPN, FULL OPNNG 20 MIN</DETAIL>
+				<AUDIO Length = "21" Path = "188/18822.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18822.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Coroner has confirmed 11-44. #3 lane is 
+					open. Full opening in 20 minutes.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. 11-44 confirmed. #3 lane open, 
+						full opening in 20.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for confirmed 1144</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:13:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #1">"Hello, this is Cameron Stevens at KCLY TV 2."</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #1">"My CAD is down. Were there any 
+										 confirmed fatalities at the collision 
+										 northbound 5?"
+			</INSTRUCTOR>
+			<STUDENT>1 dead.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #1">"When are the lanes supposed to be open?"</INSTRUCTOR>
+			<STUDENT>#3 lane open, full opening in 20.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:15:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CT NRLY FNSHD CLNUP, TRCK BEING PRPRD FOR 1185</DETAIL>
+				<AUDIO Length = "18" Path = "188/18823.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18823.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Caltrans is nearly finished with cleanup. 	
+					Truck being prepared for 11-85.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia 10-4. Caltrans nearly finished. Truck 
+						being prepared for 11-85.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:16:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #2">"Hello, this is Monica Stevens at KCLY radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #2">When is the roadway supposed to be cleared on the 5?
+			</INSTRUCTOR>
+			<STUDENT>#3 lane open, full opening in approx. 15.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:16:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT FINISHED INVESTIGATION 1098, START CLEANUP WHEN 1185S ARRIVE</DETAIL>
+				<AUDIO Length = "23" Path = "187/18725.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18725.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. MAIT is finished with their investigation 
+					and 10-98. Will start cleanup when the 11-85's arrive.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia copied MAIT finished with 
+						investigation and 10-98. Start cleanup when 11-85's 
+						arrive.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:18:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<MAINTENANCE_RADIO>Confirm completion of tomato cleanup.  Going 10-98</MAINTENANCE_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:19:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>	
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1185 1097 PARTIAL OPENING IN 15</DETAIL>
+				<AUDIO Length = "21" Path = "187/18726.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18726.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3 11-85's 10-97. Partial opening in 15 minutes.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4 11-85's 10-97. Partial opening in 15 minutes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:20:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CT 98 TOMATOES, LNS OPN IN 10</DETAIL>
+				<AUDIO Length = "17" Path = "188/18824.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18824.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Caltrans done cleaning up the tomatoes. 
+					Lanes open in 10.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Caltrans 98 with 
+						tomatoes, lanes open in 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:21:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #3">"Hello, this is Bill Bradley at KCTR radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #3">"What kind of backup is there on 
+											northbound 5 due to the tomato truck spill and collision?"
+			</INSTRUCTOR>
+			<STUDENT>Current queue from ATMS.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #3">Are the lanes open soon?</INSTRUCTOR>
+			<STUDENT>10 minutes.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:23:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO005</MASTER_INC_NUM>
+			<P>3</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1031 - Crime in progress</TYPE_CODE>
+				<TYPE>1031</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>28-24</BEAT>
+				<ADDRESS>NB/SB 405 at Jeffrey</ADDRESS>
+				<LOC>NB/SB 405 at Jeffrey</LOC>
+				<CITY>San Luis Obispo</CITY>
+				<AREA>28-San Luis Obispo</AREA>
+				<FIRE>San Luis Obispo</FIRE>
+				<LAW>San Luis Obispo</LAW>
+				<EMS>San Luis Obispo</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1031</Type>
+				<Beat>28-24</Beat>
+				<TruncLoc>NB/SB 405 at Jeffrey</TruncLoc>
+				<FullLoc>NB/SB 405 at Jeffrey</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="189_N_405_ML">
+				<Route>405</Route>
+				<Direction>NB</Direction>
+				<Postmile>3.04</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<LOCATION_INFO ID="189_N_405_HV">
+				<Route>405</Route>
+				<Direction>NB</Direction>
+				<Postmile>3.04</Postmile>
+				<Location_type>HV</Location_type>					
+			</LOCATION_INFO>
+
+			<LOCATION_INFO ID="189_S_405_ML">
+				<Route>405</Route>
+				<Direction>SB</Direction>
+				<Postmile>5.55</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<LOCATION_INFO ID="189_S_405_HV">
+				<Route>405</Route>
+				<Direction>SB</Direction>
+				<Postmile>5.55</Postmile>
+				<Location_type>HV</Location_type>					
+			</LOCATION_INFO>
+			
+
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>CELLULAR 911 RPT SUICIDE BMBR AT I-405 @ JEFFREY, UNVERIFIED</DETAIL>
+				<DETAIL>1039 IRV PD, PD ENRT, 28-24 ENRT FROM I-405 @ IRVINE CNTR.</DETAIL>
+				<UNIT UnitNum="28-24" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "23" Path = "189/18901.mp3" />
+			</CAD_INCIDENT_EVENT>		
+			
+		</CAD_DATA>	
+
+		<GENERAL_INFO> 
+			<TITLE>Incident Description</TITLE>
+			<TEXT>This is a suicide attempt and a bomb threat. A man with a bomb 
+		  strapped to him is threatening to blow up the interchange at I-405 and
+		  Jeffrey Road. The freeway interchange is shut down completely, causing 
+		  major backup in both directions on I-405. The man is eventually 
+		  apprehended after attempting to explode the bomb. The PD, additional 
+		  units, sign trucks, negotiator, and the bomb squad are sent to the 
+		  scene to assist.
+			</TEXT>
+		</GENERAL_INFO>
+
+		<CHP_RADIO RadioFile="18901.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">28-24 Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-24 go ahead.</LINE>				
+				<LINE Role="Dispatch">	28-24 Santa Lucia suicide attempt 405 on the Jeffrey 
+						overpass. The police department has been notified 
+						and is enroute.</LINE>				
+				<LINE Role="Field">	Santa Lucia 28-24 10-4. Enroute from 405 at Irvine Center.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Operator should be viewing CCTV cameras in vicinity of incident</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+
+		<MAINTENANCE_RADIO>No Maintenance needed on scene for this incident.</MAINTENANCE_RADIO>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:24:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>TRCK TWD, FD SPRYNG LNS, LNS OPN IN 5</DETAIL>
+				<AUDIO Length = "21" Path = "188/18825.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18825.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Truck towed. Fire department spraying lanes 
+					clean. Lanes open in 5.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Truck towed. Fire department 
+						spraying lane clean, lanes open in 5.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:25:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #4">Hello, this is Alex Harmon at KJOK radio.</INSTRUCTOR> 
+			<INSTRUCTOR Role="Radio Reporter #4">Are the lanes open yet on 
+											northbound 5 just north of Lake 
+											Forest Drive.
+			</INSTRUCTOR>
+			<STUDENT>#3 open, all lanes open in 5.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #4">Are there any other new incidents 
+											going on right now?
+			</INSTRUCTOR>
+			<STUDENT>Notify reporter of new incidents.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:25:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-24 1097, PD 1097</DETAIL>
+				<UNIT UnitNum="28-24" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "18" Path = "189/18902.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18902.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-24.</LINE>				
+				<LINE Role="Dispatch">28-24 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-24 10-97 405 at Jeffrey. 
+				                   Irvine PD is 10-97.
+				</LINE>			
+				<LINE Role="Dispatch">10-4, Copy you  are 97 with Irvine PD.
+				</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:29:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-19 ENRT FROM I-5 AT SND CYN, 28-13 ENRT FROM I-5 AT 133</DETAIL>
+				<DETAIL>SHUT DWN NB I-405 AT SND CYN OFFR</DETAIL>
+				<UNIT UnitNum="28-19" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="28-13" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "44" Path = "189/18903.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18903.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">28-19 Santa Lucia.</LINE>				
+				<LINE Role="Field_1">Santa Lucia 28-19 go ahead.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia 10-23.</LINE>					
+				<LINE Role="Dispatch">(pause)</LINE>				
+				<LINE Role="Dispatch">28-13 Santa Lucia.</LINE>				
+				<LINE Role="Field_2">Santa Luica 28-13 go ahead.</LINE>				
+				<LINE Role="Dispatch">28-19 and 28-13 Santa Lucia, proceed to northbound 405 
+						to shut down the northbound lanes at the Sand Canyon off 
+						ramp. A man has threatened to blow up the 405 at 
+						Jeffrey interchange.</LINE>
+				
+				<LINE Role="Field_1">Santa Lucia 28-19 10-4. Enroute from I-5 at Sand Canyon.</LINE>				
+				<LINE Role="Field_2">Santa Lucia 28-13 copied, enroute from I-5 at 133.</LINE>
+			</DIALOG>
+		</CHP_RADIO>			
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:30:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>OPN #2,3 LNS, FULL OPN IN 5</DETAIL>
+				<AUDIO Length = "20" Path = "187/18727.mp3" />				
+				
+				<PARAMICS LocationID="187_N_405_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+				</PARAMICS>						
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18727.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. We have opened the #2 and #3 lanes. Full 
+					opening in 5 minutes.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4. #2 and #3 lanes open, full opening in 5.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="87" type="update">
+			<LOCATION>NB 405 @ HARVARD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="88" type="update">
+			<LOCATION>NB 405 @ ICD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="95" type="update">
+			<LOCATION>NB 5 @ EL TORO</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>		
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:31:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>ALL LNS CLR, 9-15 OPENING LAKE FOREST ONRAMP</DETAIL>
+				<DETAIL>9-9,9-15,9-19 1098</DETAIL>
+				<UNIT UnitNum="9-9" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="9-15" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="9-19" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "25" Path = "188/18827.mp3" />
+				
+				<PARAMICS LocationID="188_N_5_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>		
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="18827.mp3">
+			<DIALOG> 
+				<LINE Role="Field">Santa Lucia 9-9</LINE>
+				<LINE Role="Dispatch">9-9 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia 9-9. All lanes are clear.  9-15 is opening Lake Forest Onramp.  All units are 10-98.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. All lanes open.  9-15 opening Lake Forest Onramp.
+						9-9. 9-15, 9-19 are 1098.</LINE>	
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should cancel Sig Alert</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be handling situation well</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:31:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-11 ENRT FROM I405 AT BRISTOL, 28-07 ENRT FROM SR55 AT DYER</DETAIL>
+				<DETAIL>28-11 28-07 TO SHT DWN SB I405 AT CULVER OFFR</DETAIL>
+				<UNIT UnitNum="28-11" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="28-07" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "45" Path = "189/18904.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18904.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">	28-11 Santa Lucia.</LINE>
+				<LINE Role="Field_1">	Santa Lucia 28-11 go ahead.</LINE>
+				<LINE Role="Dispatch">	28-11 Santa Lucia 10-23.</LINE>
+				<LINE Role="Dispatch">	28-07 Santa Lucia.</LINE>
+				<LINE Role="Field_2">	Santa Lucia 28-07 go ahead.</LINE>
+				<LINE Role="Dispatch">	28-11 and 28-07 Santa Lucia, proceed to southbound I405 
+							to shut down the southbound lanes at the Culver Dr off 
+							ramp. A man has threatened to blow up the 405 at 
+							Jeffrey interchange.</LINE>
+				<LINE Role="Field_1">	Santa Lucia, 28-11 10-4 enroute from 405 at Bristol Sreet.</LINE>
+				<LINE Role="Field_2">	Santa Lucia, 28-07 10-4. Enroute from 55 at Dyer.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #2">Hello, this is Fred Roppel at KNOW TV channel 11.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #2">I just heard about a suicide attempt on I405.
+			</INSTRUCTOR>
+			<STUDENT>Confirm report.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"Where exactly is it located, I would 
+											 like to send a camera out there?"
+			</INSTRUCTOR>
+			<STUDENT>I405 at Jeffrey Dr.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"Are you closing down any of the lanes?"</INSTRUCTOR>
+			<STUDENT>Closing down the whole interchange.</STUDENT>
+		</TELEPHONE>
+
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>HAR should note incident. Should note interchange closed 
+							 when all lanes have been closed. HAR's #3 and #4 might 
+							 also note interchange closed.
+			</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:32:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>PD CLOSING JEFFREY AND UNIV DR, SENDING NEGOTIATOR, REQ SIGALERT</DETAIL>
+				<AUDIO Length = "30" Path = "189/18905.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="18905.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-24.</LINE>				
+				<LINE Role="Dispatch">28-24 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-24. The police department is taking care of 
+					the Jeffrey Road and University Drive closures. They have 
+					sent for a negotiator to talk the man down. Issue a Sig 
+					Alert on this one, we'll be here a while.</LINE>				
+				<LINE Role="Dispatch">28-24 Santa Lucia 10-4. PD closing Jeffrey Road and 
+						University Drive and sending negotiator to talk man 
+						down. 	Requesting Sig Alert until further notice.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #5">Hello, this is Tim Rogers at KLNW radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #5">I was told that both the northbound 
+											and southbound I405 lanes are going 
+											to be closed due to a suicide 
+											attempt. What details do you have on 
+											that?
+			</INSTRUCTOR>
+			<STUDENT>Gives details of closure.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #5">Is a detour being set up?</INSTRUCTOR>
+			<STUDENT>Don't know as of yet.</STUDENT>
+		</TELEPHONE>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should ensure HQ Comm is notified</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should notify District Duty Officer</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:35:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VEH TWD, LNS OPN, 14-S, 14-9, 14-14 1098</DETAIL>
+				<UNIT UnitNum="14-14" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="14-17" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="14-9" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="14-S3" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "23" Path = "187/18728.mp3" />
+				
+				<PARAMICS LocationID="187_N_405_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>							
+				
+				<PARAMICS LocationID="187_N_405_HV">
+					<Status>CLEARED</Status>
+				</PARAMICS>			
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18728.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. Vehicles have been towed and lanes open. 
+					All units are 10-98.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4. Vehicles towed and lanes open.  
+						14-S3,14-9, and 14-14 are 10-98.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #3">Hello, this is Terry Webb at KTSV TV channel 11.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #3">Are the lanes clear NB 405 at 55?
+			</INSTRUCTOR>
+			<STUDENT>Lanes were just cleared.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #3">How many were injured in that accident?
+			</INSTRUCTOR>
+			<STUDENT>There were 3 dead and 7 injured.</STUDENT>
+		</TELEPHONE>
+		
+		<CMS_EVALUATION cmsID="87" type="remove">
+			<LOCATION>NB 405 @ HARVARD</LOCATION>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="88" type="remove">
+			<LOCATION>NB 405 @ ICD</LOCATION>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="95" type="remove">
+			<LOCATION>NB 5 @ EL TORO</LOCATION>
+		</CMS_EVALUATION>
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be alert to the situation</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:36:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TMT_RADIO>TMT units go 10-98.  Traffic is back to normal</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:36:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-13 1097, 10-23 28-19 B4 CLOSING NB LNS, 1039 DOT FOR SIGN TRUCKS</DETAIL>
+				<UNIT UnitNum="28-13" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "33" Path = "189/18906.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18906.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-13.</LINE>				
+				<LINE Role="Dispatch">28-13 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-13 10-97 northbound 405 at Sand Canyon.  Will 
+					10-23 28-19 and then proceed to close down northbound lanes. 
+					Do we have any sign trucks enroute yet to assist with the 
+					closure?</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-13 10-97 northbound 405 at Sand 
+						Canyon. 10-23 28-19 before closing northbound lanes. Checking on TMT.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>
+			</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		
+		<MAINTENANCE_RADIO>Get TMT rolling.</MAINTENANCE_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:37:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-11 1097, CLSNG DWN SB LNS AT CULVER DR OFFR</DETAIL>
+				<UNIT UnitNum="28-11" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "21" Path = "189/18907.mp3" />
+				
+				<PARAMICS LocationID="189_S_405_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>				
+				</PARAMICS>	
+
+				<PARAMICS LocationID="189_S_405_HV">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>		
+				</PARAMICS>				
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18907.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-11.</LINE>				
+				<LINE Role="Dispatch">28-11 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-11 10-97 405 at Culver offramp.  
+					Proceeding to close down the southbound lanes.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-11 10-97 405 at Culver offramp. 
+					Closing southbound lanes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="CHP Dispatch">Hello, this is CHP Dispatch.</INSTRUCTOR>
+			<STUDENT>Have sign trucks been sent to the bomb threat at the 
+						 I405 and Jeffrey Road overpass?</STUDENT>
+			<STUDENT>Responds correctly to question.</STUDENT>
+			<STUDENT>Notifies maintenace station to dispatch sign trucks.</STUDENT>
+		</TELEPHONE>
+		
+		<CMS_EVALUATION cmsID="89" type="new"> 
+			<LOCATION>SB 405 @ Von Karmen</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>FWY CLOSED AT CULVER DR</CMS_LINE> 
+				<CMS_LINE>USE OTHER ROUTES</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		
+		<CMS_EVALUATION cmsID="86" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>FWY CLOSED AT CULVER DR</CMS_LINE> 
+				<CMS_LINE>USE OTHER ROUTES</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		
+		<CMS_EVALUATION cmsID="72" type="new"> 
+			<LOCATION>SB 55 @ Warner</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>S-405 CLOSED AT CULVER DR</CMS_LINE> 
+				<CMS_LINE>USE OTHER ROUTES</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:38:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-13, 28-19 SHUTTING DWN NB 405 LNS AT SAND CYN ST OFFR</DETAIL>
+				<UNIT UnitNum="28-19" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "30" Path = "189/18908.mp3" />
+				
+				<PARAMICS LocationID="189_N_405_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>	
+					<Lane_number>5</Lane_number>				
+				</PARAMICS>	
+				
+				<PARAMICS LocationID="189_N_405_HV">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>				
+				</PARAMICS>	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18908.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-19.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-19 10-97 northbound 405 at Sand Canyon.  
+					28-13 and I are proceeding to shut down the northbound 405 lanes 
+					at the Sand Canyon offramp.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-19 10-97 northbound 405 at Sand 
+						Canyon. 28-13, 28-19 shutting down northbound 405 lanes at 
+						Sand Canyon off ramp.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #4">Hello, this is Art Philco at KTTQ TV.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #4">I heard over the scanner that there is 
+										 a bomb threat on the 5.
+			</INSTRUCTOR>
+			<STUDENT>Correct location is I405.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #4">I would like to send a helicopter out 
+										 there, what are the details on the 
+										 threat?
+			</INSTRUCTOR>
+		</TELEPHONE>	
+		
+		<CMS_EVALUATION cmsID="88" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>FWY CLOSED AT SAND CYN AVE</CMS_LINE> 
+				<CMS_LINE>USE HWY-133</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="95" type="new"> 
+			<LOCATION>NB 5 @ El Toro</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>N-405 CLOSED AT SAND CYN AVE</CMS_LINE> 
+				<CMS_LINE>USE OTHER ROUTES</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:39:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #1">Hello, this is Cameron Stevens at KNOW TV 2.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #1">I heard about a suicide on the 405, 
+										 what details do you have on that?
+			</INSTRUCTOR>
+			<STUDENT>Located I405 and Jeffrey overpass, man has bomb 
+						 strapped to himself, closing down I405 in both directions.
+			</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:40:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-07 1097 ASSTNG 28-11 CLSNG SB LNS AT CULVER OFFR</DETAIL>
+				<UNIT UnitNum="28-07" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "23" Path = "189/18909.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18909.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-07.</LINE>				
+				<LINE Role="Dispatch">28-07 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-07 10-97 southbound 405 at Culver Dr. 
+					Assisting 28-11 with the closure.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-07 10-97 southbound 405 at Culver 
+						Drive. Assisting 28-11 with closure.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+		<TMT_RADIO>If no sign trucks have been requested yet, another 
+						 phone call needs to be made from CHP Dispatch 
+						 requesting them.
+		</TMT_RADIO>		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:41:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-S4 1097 I5 JEFFREY AVE ASSIST</DETAIL>
+				<UNIT UnitNum="28-S4" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "19" Path = "189/18910.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18910.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4 10-97 I-405 at Jeffrey overpass.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-S4 10-97 I-405 at Jeffrey Road.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #6">Hello, this is John Sinclair at KNIN radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #6">Is the surrounding residential area 
+											around the bomb threat being evacuated?
+			</INSTRUCTOR>
+			<STUDENT>They don't know, although the correct answer will be no.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:43:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>PD STTNG DETOURS, SB TRFFC OFF AT CULVER AVE, NB TRFFC OFF AT SAND CYN</DETAIL>
+				<AUDIO Length = "22" Path = "189/18911.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18911.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">	28-S4 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">	Santa Lucia 28-S4. Irvine PD is setting up 
+					detours through the city for the northbound and southbound 
+					405 traffic.
+				</LINE>				
+				<LINE Role="Dispatch">	28-S4 Santa Lucia 10-4. Police department setting up 
+						detours through the city for all traffic.
+				</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Public">Hello, I just saw on TV that there is bomb 
+								   on the I405 near University Drive.
+			</INSTRUCTOR>
+			<STUDENT>Confirm report.</STUDENT>
+			<INSTRUCTOR Role="Public">"I live nearby, Is that area evacuated?</INSTRUCTOR>
+			<STUDENT>No, not to the best of my knowledge.	</STUDENT>
+		</TELEPHONE>
+
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should have posted a Sig Alert by this time</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:44:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>NEGOTIATOR 1097</DETAIL>
+				<AUDIO Length = "20" Path = "189/18912.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18912.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. Negotiator is 10-97 and attempting to 
+					talk the man down.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia 28-S4 10-4. Negotiator is 10-97 and 
+						attempting to talk man down.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>	
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:45:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<TMT_RADIO>Have NB 405 TMT units go 10-98.</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:45:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>NB LNS SHUT DOWN</DETAIL>
+				<AUDIO Length = "16" Path = "189/18913.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18913.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-19.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-19. The northbound lanes are shut down.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia 10-4. Northbound lanes are shut down.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:46:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>SUSP WON'T ALLOW NEGOTIATOR NEAR HIM</DETAIL>
+				<AUDIO Length = "22" Path = "189/18914.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18914.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. This is going to take a while. The man 
+					won't let the negotiator get close to him.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. Negotiations will take a while, 
+						man won't let the negotiator get close to him.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:47:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-07 SB LNS SHUT DOWN</DETAIL>
+				<AUDIO Length = "19" Path = "189/18915.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18915.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-07.</LINE>				
+				<LINE Role="Dispatch">28-07 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-07. The southbound lanes have been shut down. 
+					Traffic is building up quickly.</LINE>				
+				<LINE Role="Dispatch">28-07 Santa Lucia 10-4. Southbound lanes shut down.  
+						Traffic building up quickly.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:50:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>SUSP IS CALMING DOWN.  BOMB SQD 1097</DETAIL>
+				<AUDIO Length = "18" Path = "189/18916.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18916.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>
+				<LINE Role="Dispatch">28-S4 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia 28-S4. The man is calming down. The bomb squad is 10-97.</LINE>
+				<LINE Role="Dispatch">	28-S4 Santa Lucia 10-4. Man calming down. Bomb squad 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-97 Bomb Squad</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+
+		<TMT_RADIO>>Call saying the sign trucks are 10-97.  Queue update.</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:51:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO006</MASTER_INC_NUM>
+			<P>5</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1179 Accident - Ambulance Responding</TYPE_CODE>
+				<TYPE>1179</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>9-22</BEAT>
+				<ADDRESS>NB5 JNO Main Street</ADDRESS>
+				<LOC>NB5 JNO Main Street</LOC>
+				<CITY>Templeton</CITY>
+				<AREA>9-Templeton</AREA>
+				<FIRE>Templeton</FIRE>
+				<LAW>Templeton</LAW>
+				<EMS>Templeton</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>9-22</Beat>
+				<TruncLoc>NB5 JNO Main St</TruncLoc>
+				<FullLoc>NB5 JNO Main St</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="190_N_5_ML">
+				<Route>5</Route>
+				<Direction>NB</Direction>
+				<Postmile>33.2</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<CAD_INCIDENT_EVENT>
+				<PARAMICS LocationID="190_N_5_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>				
+				</PARAMICS>		
+			</CAD_INCIDENT_EVENT>
+			
+		</CAD_DATA>		
+		
+		<GENERAL_INFO> 
+			<TITLE>Incident Description</TITLE>
+			<TEXT>Incident Description - This is a collision involving a tanker truck 
+		  and a car that block the #3 and 4 lanes on NB I-5 just north of 
+		  Main Street. There are 2 minor injured and 1 major injured. 
+		  Liquid is leaking out of the tanker truck which is identified as milk. 
+		  The leak is plugged and the fire department sprays the milk down the 
+		  drain. The fire department, ambulance, additional units, TMT, a big 
+		  rig tow, and a rotational tow are sent to the scene.</TEXT>
+		</GENERAL_INFO>
+
+		<MAINTENANCE_RADIO>No Maintenance needed on scene for this incident.</MAINTENANCE_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:53:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>9-22 ENRT FROM 57 @ CHAPMAN</DETAIL>
+				<UNIT UnitNum="9-22" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "24" Path = "190/19001.mp3" />
+				
+			</CAD_INCIDENT_EVENT>					
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19001.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-22 Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 11-79 northbound 5 just north of Main Street.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22 copies, enroute from 57 at Chapman Ave.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Enroute from 57 at Chapman Ave.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CAD_EVALUATION>
+			<EXPECTED_ACTION>Should shold be verifying incident 190 on the CAD.</EXPECTED_ACTION>
+		</CAD_EVALUATION>	
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Should try to confirm the incident with a CCTV cameras.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:54:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Mayor">"Hello, this is Mayor Krom of Irvine."
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Mayor">I just heard that a bomb went off on I405. Was 
+								 anyone injured or killed?
+			</INSTRUCTOR>
+			<STUDENT>Not true - no bomb was not detonated.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:56:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>		
+
+		<TMT_RADIO>Queue update</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:58:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>9-22 1097 2 VEH TC, VEH VS TANKER TRK, BLKNG #3,4</DETAIL>
+				<DETAIL>UNID LIQUID LEAKING FROM TNKR, NEED TO CLOSE NB LANES, REQ UNITS</DETAIL>
+				<UNIT UnitNum="9-22" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "37" Path = "190/19002.mp3" />		
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19002.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22 1097 JNO Main St. 2 vehicle collision 
+					between tanker truck and vehicle blocking #3, 4 lanes.  
+					Unidentified liquid leaking out of the tanker. Request 
+					additional units, we're going to have to shut down the 
+					northbound lanes until we identify the susbstance.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied. 9-22 10-97.  2 vehicle 
+						collision, tanker truck and vehicle, blocking #3, 4. 
+						Unidentified liquid leaking out of tanker. Request 
+						units to shut down NB lanes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="93" type="new"> 
+			<LOCATION>NB-5 S/O Redhill</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>2 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>				
+		
+		<CMS_EVALUATION cmsID="94" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT N-5</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>2 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+
+		<MAINTENANCE_RADIO>TMT Earliest possible request for sign trucks. Send trucks if requested.
+		</MAINTENANCE_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:59:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>9-23, 9-26 ENRT TO ASSIST 9-22</DETAIL>
+				<UNIT UnitNum="9-23" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="9-26" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "41" Path = "190/19003.mp3" />		
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19003.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-23, 9-26 Santa Lucia.</LINE>				
+				<LINE Role="Field_1">Santa Lucia 9-23 go ahead.</LINE>				
+				<LINE Role="Field_2">Santa Lucia 9-26 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-23 and 9-26 Santa Lucia, 1179 northbound 5 
+						just north of Main St blocking #3,4 .  22 request assistance closing freeway.</LINE>				
+				<LINE Role="Field_1">Santa Lucia 9-23 10-4. Enroute from 22 just south of 
+						Euclid Avenue.</LINE>				
+				<LINE Role="Field_2">Santa Lucia 10-4. 9-26 enroute from 57 at 91.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 9-23, 9-26 enroute.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:00:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>1141, FD 1097, TRCK DRVR 1180 UNCONCIOUS, 2 1181S, LIQUID LEAKING INTO #2 LN. #2,3,4 BLKD AT THIS TIME</DETAIL>
+				<AUDIO Length = "35" Path = "190/19004.mp3" />		
+				
+				<PARAMICS LocationID="190_N_5_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>				
+				</PARAMICS>					
+				
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19004.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. 1141 is 1097. The 
+					driver of the truck is 1180 and unconscious. There are 2 
+					1181s in the other vehicle. The liquid is leaking out into 
+					the #2 lane. #2,3,4 lanes blocked at this time.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copies. 1141 1097. 1 
+						1180 and 2 1181's.  Liquid leaking into #2 lane.  #2,3,4 lanes are blocked.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #7">Hello, this is Kim Williamson at KRST radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #7">I just caught on the scanner that 
+											there was some type of spill on 57.
+			</INSTRUCTOR>
+			<STUDENT>Confirm incident.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #7">What kind of details do you have 
+											on the collision?
+			</INSTRUCTOR>
+			<STUDENT>Truck vs car, #3 and 4 lanes blocked, liquid spill in lanes.</STUDENT>
+		</TELEPHONE>
+		
+		<CMS_EVALUATION cmsID="93" type="update"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>3 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>				
+		
+		<CMS_EVALUATION cmsID="94" type="update"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT N-5</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>3 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>			
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:01:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>NEGOTIATOR MAKING PROGRESS, SUSP MAY SURRENDER</DETAIL>
+				<AUDIO Length = "21" Path = "189/18919.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18919.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. The negotiator has made some 
+					progress. Looks like the man is about to give himself up.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. Negotiator has made progress and 
+						looks like the man is about to give himself up.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:01:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>DONT HAVE TO SHUT THE FWY, LIQUID ID'D AS MILK.  #1 LN WILL REMAIN OPEN.</DETAIL>
+				<DETAIL>ATTEMPTING TO CONTROL THE LEAK. REQ BIG RIG AND ROT 1185</DETAIL>
+				<AUDIO Length = "27" Path = "190/19005.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19005.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 9-22. We don't have to shut down all the lanes, 
+					the liquid is milk. Attempting to control the leak.  Request big 
+					rig 11-85 and 11-85 rotational.</LINE>
+				<LINE Role="Dispatch">9-22 Santa Lucia copied don't have to close all lanes, 
+						liquid is milk. Attempting to control the leak. Requesting big 
+						rig and rotational 11-85's.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #8">Hello, this is Tom Webb at KSON radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #8">I just heard the northbound lanes 
+											on 57 are being closed.
+			</INSTRUCTOR>
+			<STUDENT>Confirmation.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #8">Why are they closing the lanes.
+			</INSTRUCTOR>
+			<STUDENT>Liquid spill, collision.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #8">How long are they expected to be 
+											closed.
+			</INSTRUCTOR>
+			<STUDENT>Until cleanup - no definitive answer.</STUDENT>
+		</TELEPHONE>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:02:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #2">"Hello, this is Fred Roppel at KNOW TV 
+										 Channel 3."
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #2">"Has a bomb been found yet at the 405 
+										 and Jeffrey interchange?"
+			</INSTRUCTOR>
+			<STUDENT>No bomb has been found.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"When will they be done with their search?"
+			</INSTRUCTOR>
+			<STUDENT>Unknown, but about 10 minutes.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"Are there any other incidents going on 
+										 right now?"
+			</INSTRUCTOR>
+			<STUDENT>Notify reporter of incidents.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"What are their details?"</INSTRUCTOR>
+			<STUDENT>Notify reporter of incident details.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:03:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #9">Hello, this is Jordan Bradley at KTCR radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #9">How many lanes are blocked by the 
+											collision on 57 at Katella?
+			</INSTRUCTOR>
+			<STUDENT>#3 and 4 lanes blocked, milk in #2 lane.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #9">How many Injured are there?</INSTRUCTOR>
+			<STUDENT>3 injured.</STUDENT>
+		</TELEPHONE>
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>HAR should note incident.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:04:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-23 1097, REQ TMT, TRAFFIC BACKING</DETAIL>
+				<UNIT UnitNum="9-23" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "21" Path = "190/19006.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19006.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-23.</LINE>				
+				<LINE Role="Dispatch">9-23 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-23 10-97 11-80. Request TMT, traffic is backing up.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copies 9-23 10-97 11-80. Request TMT, traffic is backing up.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		
+		<TMT_RADIO>
+			Time of request by CHP officers in the field for sign 
+						 trucks. Send sign trucks to scene when requested.
+						 ***CONTROL ROOM ACTION*** - Call TMC, ask for TMT
+		</TMT_RADIO>
+		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:05:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+
+		<TMT_RADIO>Queue Update</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:06:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAN TRIED TO DETONATE THE DEVICE, BOMB DIDNT ACTIVATE, PD APPRHNDNG</DETAIL>
+				<AUDIO Length = "23" Path = "189/18921.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18921.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. The man just tried to blow himself up, 
+					but the bomb didn't go off! The police department is 
+					apprehending him now.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. Man attempted to blow up the 
+						interchange and is being apprehended by the PD.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:08:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>SUSP IN CUSTODY, BOMB SQD INSPECTING BOMB</DETAIL>
+				<AUDIO Length = "20" Path = "189/18922.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18922.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. The man is in custody, and the bomb squad 
+					is attempting to diffuse the bomb.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. Man in custody, and bomb squad 
+						diffusing the bomb.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:09:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<TMT_RADIO>Queue update</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:11:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>PREPARING TO TRANSPORT VICTIMS, #1 LN OPN</DETAIL>
+				<AUDIO Length = "15" Path = "190/19007.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19007.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The victims are being prepared for 
+					transport.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Victims being prepared for 
+						transport.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:11:30</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #10">Hello, this is Jim Sanso at KTAK 
+											 radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #10">I just heard about a large 
+											 collision and spill on the 55.
+			</INSTRUCTOR>
+			<STUDENT>Correct location is on northbound 57.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #10">Give me the details on that.
+			</INSTRUCTOR>
+			<STUDENT>Gives details regarding incident.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:12:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should have requested sign truck(s)</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:13:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-26 1097 VICTIMS TRANSPORTED</DETAIL>
+				<UNIT UnitNum="9-26" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "15" Path = "190/19008.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19008.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-26.</LINE>				
+				<LINE Role="Dispatch">9-26 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia I'm 1097.  The victims have been transported.</LINE>				
+				<LINE Role="Dispatch">	Santa Lucia copies 9-26 10-97. Victims transported.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #11">Hello, this is Bill Rasmussen at KTRC radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #11">What details do you have on the collision on 57.
+			</INSTRUCTOR>
+			<STUDENT>Tanker vs. car, milk spill, 3 lanes blocked, 3 injured.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #11">Is there an alternate route 
+											established, that I could tell my listeners?
+			</INSTRUCTOR>
+			<STUDENT>Alternate route??</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:14:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CODE A, BOMB DEFUSED, LNS BEING OPENED</DETAIL>
+				<AUDIO Length = "19" Path = "189/18923.mp3" />
+				
+				<PARAMICS LocationID="189_N_405_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>	
+				
+				<PARAMICS LocationID="189_N_405_HV">
+					<Status>CLEARED</Status>
+				</PARAMICS>		
+				
+				<PARAMICS LocationID="189_S_405_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>	
+				
+				<PARAMICS LocationID="189_S_405_HV">
+					<Status>CLEARED</Status>
+				</PARAMICS>		
+				
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="18923.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. The bomb has been diffused. We're opening 
+					the lanes now.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. The bomb has been diffused and 
+						lanes are being opened.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should update TMT units</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:14:30</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #12">"Hello, this is Fred Masterson at KTRC radio."
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #12">"My CAD is down and I was wondering 
+											 if you had any new incidents?"
+			</INSTRUCTOR>
+			<STUDENT>Yes, tanker vs. car, spill.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #12">"What do you have on that?"
+			</INSTRUCTOR>
+			<STUDENT>Gives details.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:15:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>HOLE IN TANKER PLUGGED, FD WASHING DOWN RDWY</DETAIL>
+				<AUDIO Length = "20" Path = "190/19009.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19009.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The hole in the tanker has been plugged. 
+					Not too much spilled on the roadway here.  The fire department is going 
+					to wash it down.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Hole plugged. Fire department 
+						spraying down roadway.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:16:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>SB LNS OPN 28-11 28-07 1098</DETAIL>
+				<UNIT UnitNum="28-11" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="28-07" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "21" Path = "189/18924.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18924.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-07.</LINE>				
+				<LINE Role="Dispatch">28-07 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-07. Southbound lanes are open. 28-11 and I are 10-98.</LINE>				
+				<LINE Role="Dispatch">28-07 Santa Lucia 10-4. Southbound lanes open. 28-11, 28-07 10-98.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+		<CMS_EVALUATION cmsID="72" type="remove"> 
+			<LOCATION>SB 55 @ Warner</LOCATION>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="86" type="update"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE> 
+				<CMS_LINE>AT JEFFREY RD</CMS_LINE>
+				<CMS_LINE>HEAVY TRAFFIC</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="89" type="update"> 
+			<LOCATION>SB 405 @ Von Karmen</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE> 
+				<CMS_LINE>AT JEFFREY RD</CMS_LINE>
+				<CMS_LINE>HEAVY TRAFFIC</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:16:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #13">Hello, this is Chris Rasmuessan at KWIT radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #13">What's going on with the tanker 
+											spill on 5 north of Main St?
+			</INSTRUCTOR>
+			<STUDENT>(tanker plugged, injured transported, diluting milk with water, #1 lane only open.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:17:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO007</MASTER_INC_NUM>
+			<P>4</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1179 Accident - Ambulance Responding</TYPE_CODE>
+				<TYPE>1179</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>17-14</BEAT>
+				<ADDRESS>SB73 JNO Baker St.</ADDRESS>
+				<LOC>SB73 JNO Baker St.</LOC>
+				<CITY>Templeton</CITY>
+				<AREA>17</AREA>
+				<FIRE>Templeton</FIRE>
+				<LAW>Templeton</LAW>
+				<EMS>Templeton</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>17-14</Beat>
+				<TruncLoc>SB73 JNO Baker St.</TruncLoc>
+				<FullLoc>SB73 JNO Baker St.</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="191_S_73_ML">
+				<Route>73</Route>
+				<Direction>SB</Direction>
+				<Postmile>26.7</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>911 CELLULAR CALL, RV FIRE SB-73 AT BEAR St, UNVERIFIED</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+		
+		<GENERAL_INFO> 
+			<TITLE>Incident Description</TITLE>
+			<TEXT> This is an RV fire on the shoulder southbound 73 just north of 
+		   Bear/Baker Street. There are two injured victims who were pulled from 
+		   the RV by passers-by. The #3 is closed to fight the fire. 
+		   The fire department, paramedics, an extra unit, sign truck/s, and 
+		   ambulance are sent to the scene.
+			</TEXT>
+		</GENERAL_INFO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:17:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>NB LNS OPN 28-13 28-19 1098</DETAIL>
+				<UNIT UnitNum="28-13" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="28-19" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "22" Path = "189/18925.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18925.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-19.</LINE>
+				<LINE Role="Dispatch">28-19 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia 28-19. Northbound lanes are open. 28-13 and I are 10-98.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia copies northbound lanes open. 28-13, 28-19 10-98.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="88" type="update"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE> 
+				<CMS_LINE>AT JEFFREY RD</CMS_LINE>
+				<CMS_LINE>HEAVY TRAFFIC</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="95" type="update"> 
+			<LOCATION>NB 5 @ El Toro</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE> 
+				<CMS_LINE>N-405 AT JEFFREY RD</CMS_LINE>
+				<CMS_LINE>HEAVY TRAFFIC</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:18:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-24, 28-S4 1098 PD OPNNG OVRPASS</DETAIL>
+				<UNIT UnitNum="28-24" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="28-S4" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "24" Path = "189/18926.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="18926.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. 28-24 and I are 10-98. The police 
+					department is opening the overpass.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. 28-S4, 28-24 10-98. Police 
+						department opening overpass.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:19:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>17-14 ENRT FROM 405 AT EUCLID</DETAIL>
+				<UNIT UnitNum="17-14" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "24" Path = "191/19101.mp3" />
+				
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19101.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">17-14 Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 go ahead.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia, RV fire southbound 73 just north of Baker Street. </LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 10-4. Enroute from 405 @ Euclid.</LINE>				
+				<LINE Role="Dispatch">10-4 Santa Lucia copies, 17-14 enroute from 405 @ Euclid.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+		
+		<CAD_EVALUATION>
+			<EXPECTED_ACTION>Operator should be verifying incident 191 on the CAD</EXPECTED_ACTION>
+		</CAD_EVALUATION>
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Attempt to verify incident on ATMS</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		
+		<MAINTENANCE_RADIO>No Maintenance needed on scene for this incident.</MAINTENANCE_RADIO>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:20:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1185 ROT 1097</DETAIL>
+				<TOW Company="Martins" ConfNum="(949)555-2031" PubNum="(949)555-9067" Beat=""/>
+				<AUDIO Length = "16" Path = "190/19010.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19010.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The 11-85 rotation 10-97.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copies 11-85 rotation 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:21:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>BIG RIG 1185 1097, ONCE FD IS DONE, WILL START CLEANUP</DETAIL>
+				<TOW Company="Imperial" ConfNum="(949)555-1128" PubNum="(949)555-1520" Beat=""/>
+				<AUDIO Length = "22" Path = "190/19011.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19011.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-22 big rig 11-85 10-97. Once the 
+				  fire department is done, we will start clearing vehicles.</LINE>				
+				<LINE Role="Dispatch">	9-22 Santa Lucia 10-4. Big rig 11-85 10-97. Start 
+						cleanup when fire department done.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #1">Hello, this is Dakota Crew at KCOW radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #1">Do you have an alternate route I 
+										    could tell my listeners about for collision on I-5?
+			</INSTRUCTOR>
+			<STUDENT>Should have one established.</STUDENT>
+		</TELEPHONE>		
+
+		<TMT_RADIO>
+			Sign trucks should be 1097.
+		</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:22:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #2">Hello, this is Monica Stevens at KCLY radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #2">Do you have any update info on the 
+											collision on 57.
+			</INSTRUCTOR>
+			<STUDENT>Clearing the milk, about to move vehicles, injured transported, etc.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:23:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #1">Hello, this is Cameron Stevens at KCLY Channel 11.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #1">Is the bomb squad done with their 
+										 search yet at the 405 and Jeffrey 
+										 interchange?
+			</INSTRUCTOR>
+			<STUDENT>Yes</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #1">When will the lanes be open?</INSTRUCTOR>
+			<STUDENT>They were already opened about 10 minutes ago.</STUDENT>
+		</TELEPHONE>
+
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should issue a Sig Alert</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+		<MAINTENANCE_RADIO>TMT The traffic is near normal. I'm (we're) 1098.</MAINTENANCE_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:23:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>FD DONE, OPENING #2, STARTING CLEANUP</DETAIL>
+				<AUDIO Length = "19" Path = "190/19012.mp3" />
+				
+				<PARAMICS LocationID="190_N_5_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>				
+				</PARAMICS>			
+			</CAD_INCIDENT_EVENT>		
+			
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="19012.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. Fire department is done.
+					Opening the #2 lane and starting cleanup.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Fire department is done, opening 
+						#2 lane, and starting cleanup.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:24:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>RV ON FIRE ON RS, 2 1181S, PARAMEDICS 1097, REQ UNIT TO ASSIST</DETAIL>
+				<UNIT UnitNum="17-14" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "42" Path = "191/19102.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="19102.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 10-97 RV fire southbound 73 just north of
+					Baker Street.  RV on the right hand shoulder. Citizens 
+					pulled 2 11-81's from vehicle, paramedics 10-97.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copies 17-14 10-97 RV fire southbound 73 
+						just north of Baker Street. RV on right hand shoulder. 2 
+						11-81's pulled from RV, paramedics 10-97.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 10-4. Send a unit to assist.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia copies.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		
+		<CMS_EVALUATION cmsID="86" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT S-73</CMS_LINE> 
+				<CMS_LINE>AT BAKER ST</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:25:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>17-16 ENRT FROM S-405 @ EUCLID TO ASSIST 17-14</DETAIL>
+				<UNIT UnitNum="17-16" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "20" Path = "191/19103.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		
+		<CHP_RADIO RadioFile="19103.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">17-16 Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-16 go ahead.</LINE>				
+				<LINE Role="Dispatch">17-16 Santa Lucia, 17-14 requesting assistance RV fire 
+						southbound 73 just north of Baker Street.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-1610-4. Enroute from S-405 @ Euclid.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+		
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #2">Hello, this is Fred Roppel at KNOW TV channel 3.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #2">I just heard about a RV fire over the scanner.</INSTRUCTOR>
+			<STUDENT>Confirm RV fire.</STUDENT>								 
+			<INSTRUCTOR Role="TV Reporter #2">Where was that located, I'd like to 
+										 send a camera out there?</INSTRUCTOR>
+			<STUDENT>Southbound 73 just North of Baker Street.</STUDENT>												 
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:26:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>FD 1097, CLOSING RT LN, REQ TMT, TRAFFIC ADVISORY</DETAIL>
+				<AUDIO Length = "24" Path = "191/19104.mp3" />
+				
+				<PARAMICS LocationID="191_S_73_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>		
+				</PARAMICS>		
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="19104.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14, fire department 10-97.   Closing the right lane 
+					for the fire engines. Request sign truck, traffic advisory.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia copies fire departement 10-97. Closing 
+						the right lane. Request sign truck, traffic advisory.</LINE>
+			</DIALOG>
+		</CHP_RADIO>			
+		
+		<CMS_EVALUATION cmsID="86" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT S-73</CMS_LINE> 
+				<CMS_LINE>AT BAKER ST</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>			
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should issue traffic advisory</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should send TMT units</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+		
+		<TMT_RADIO>
+		Time of request by CHP officers in the field for sign trucks. Send sign 
+		trucks to scene when requested.
+		</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:27:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>#2 LN OPN, FULL CLNUP IN 20</DETAIL>
+				<AUDIO Length = "18" Path = "190/19013.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19013.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The #2 lane is open. Full cleanup in 20 minutes.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copied #2 open, full cleanup in 20.</LINE>
+			</DIALOG>
+		</CHP_RADIO>			
+		
+		<CMS_EVALUATION cmsID="93" type="update"> 
+			<LOCATION>NB 5 S/O Redhill</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>				
+		
+		<CMS_EVALUATION cmsID="94" type="update"> 
+			<LOCATION>NB 55 @ Dyer</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT N-5</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>				 
+		
+		<TMT_RADIO>Queue update. Possibly reposition.</TMT_RADIO>	
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:28:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #3">Hello, this is Terry Webb at KTSV radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #3">I heard that there was an RV fire on 
+										  southbound 73.
+			</INSTRUCTOR>
+			<STUDENT>Confirm RV fire</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #3">What details do you have on it, are 
+										  any lanes blocked?
+			</INSTRUCTOR>
+			<STUDENT>RV fire on shoulder, two injured pulled from vehicle, 
+						 fire on shoulder, no lanes blocked.
+			</STUDENT>
+		</TELEPHONE>	
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:28:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #4">Hello, this is Art Philco at KTTQ news.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #4">Our computers are down, what 
+										  incidents do you have going on?
+			</INSTRUCTOR>
+			<STUDENT>Notify reporter of current incidents.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #4">Give me all the details on those.</INSTRUCTOR>
+			<STUDENT>Notify reporter of current incident details.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:29:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>17-14 1097</DETAIL>
+				<UNIT UnitNum="17-16" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "24" Path = "191/19105.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19105.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-16</LINE>				
+				<LINE Role="Dispatch">17-16 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-16 10-97 RV fire southbound 73 just north of
+					Baker Street.</LINE>
+				<LINE Role="Dispatch">10-4 Santa Lucia copied 17-16, 10-97 RV fire 
+						southbound 73 just north of Baker Street.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>HAR should note incident.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:32:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VEH READY TO BE TOWED, TRCK AND TNKR BEING UPRIGHTED</DETAIL>
+				<AUDIO Length = "19" Path = "190/19014.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19014.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The car is ready to be towed. The truck 
+					and tanker are being uprighted.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Car ready for tow, truck and 
+						tanker being uprighted.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:33:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VICTIMS TRANSPORTED, PASSERS BY RESCUED VICTIMS</DETAIL>
+				<AUDIO Length = "24" Path = "191/19106.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19106.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. The two victims transported. Passers-by 
+					saw the RV on fire and assisted in pulling the two victims 
+					out of the vehicle before it was completely engulfed.</LINE>
+				<LINE Role="Dispatch">17-14 Santa Lucia 10-4. Victims transported. Passers-by 
+						pulled victims out of RV.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>	
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:34:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #4">Hello, this is Alex Harmon at KJOK radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #4">Have any of the lanes been open on 5 
+										 north of Main St.</INSTRUCTOR>
+			<STUDENT>#2 lane open.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #4">When is there a full opening?</INSTRUCTOR>
+			<STUDENT>Around 15 to 20 minutes.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:34:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #5">Hello, this is Tim Rogers at KLNW radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #5">How long is it going to take to clear 
+										  up the RV fire on southbound 73?
+			</INSTRUCTOR>
+			<STUDENT>No estimated time as of yet.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:35:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>FIRE IS OUT, FD INVESTIGATING CAUSE OF FIRE</DETAIL>
+				<AUDIO Length = "19" Path = "191/19107.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19107.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. The fire is out, and the fire department 
+					is investigating the cause of the fire.</LINE>
+				<LINE Role="Dispatch">	17-14 Santa Lucia copied, fire out and fire department 
+						investigating cause of fire.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:37:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VEH TOWED, TNKR UPRGHT, FULL OPENING IN 10</DETAIL>
+				<AUDIO Length = "20" Path = "190/19015.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19015.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The car has been towed. The tanker truck 
+					is upright. Full opening in 10 minutes.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copied car towed. Tanker truck upright. 
+						Full opening in 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:38:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #6">Hello, this is John Sinclair at KNIN radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #6">Is there an estimated time for lane 
+										 opening for the collision on I-5?
+			</INSTRUCTOR>
+			<STUDENT>10 minutes.</STUDENT>
+		</TELEPHONE>
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:39:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>REQ FLAT BED 1185, FD 98 IN 15</DETAIL>
+				<AUDIO Length = "22" Path = "191/19108.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19108.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 request flat bed 11-85 for the RV. Fire 
+					department done within 15 minutes.</LINE>
+				<LINE Role="Dispatch">	17-14 Santa Lucia 10-4. Request flat bed 11-85, fire 
+						 department 98 in 15.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+	
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:40:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CMS_EVALUATION cmsID="86" type="remove"> 
+			<LOCATION>TBD</LOCATION>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="89" type="remove"> 
+			<LOCATION>SB 405 @ Von Karmen</LOCATION>
+		</CMS_EVALUATION>
+		
+		<CMS_EVALUATION cmsID="88" type="remove"> 
+			<LOCATION>TBD</LOCATION>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="95" type="remove"> 
+			<LOCATION>NB 5 @ El Toro</LOCATION>
+		</CMS_EVALUATION>			
+
+	</SCRIPT_EVENT>
+	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:41:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 1185 ENRT, ETA 10</DETAIL>
+				<AUDIO Length = "18" Path = "191/19109.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19109.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">17-14 Santa Lucia information.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 go ahead.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia. 11-85 enroute, ETA 10.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 copied 1 1-85 enroute with ETA of 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #7">Hello, this is Kim Williamson at KRST radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #7">I was just told about a RV fire on 
+										  73 , what details do you have on that?
+			</INSTRUCTOR>
+			<STUDENT>Gives incident details.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:42:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>TANKER READY FOR TOW, FINISHING CLEANUP</DETAIL>
+				<AUDIO Length = "18" Path = "190/19016.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19016.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The tanker truck is ready to be towed. 
+					Finishing cleanup.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Tanker truck ready to be towed, 
+						finishing cleanup.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:43:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:46:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>TANKER TOWED, RDWY CLR, OPENING LANES</DETAIL>
+				<AUDIO Length = "20" Path = "190/19017.mp3" />
+				
+				<PARAMICS LocationID="190_N_5_ML">
+					<Status>CLEARED</Status>				
+				</PARAMICS>				
+			</CAD_INCIDENT_EVENT>					
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19017.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The tanker truck has been towed, roadway 
+					is clear. We're opening all lanes.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Tanker truck towed, roadway 
+						clear. Opening lanes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="93" type="update"> 
+			<LOCATION>NB 5 S/O Redhill</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>					
+		<CMS_EVALUATION cmsID="94" type="update"> 
+			<LOCATION>NB 55 @ Dyer</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE>
+				<CMS_LINE>N-5 AT MAIN ST</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>			
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:46:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #8">Hello, this is Tom Webb at KSON radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #8">Do you have any incidents going on right now?</INSTRUCTOR>
+			<STUDENT>Notifies reporter of current incidents.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:48:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1185 1097, INVESTIGATION NEARLY COMPLETE</DETAIL>
+				<TOW Company="Martins" ConfNum="(949)555-2031" PubNum="(949)555-9067" Beat=""/>
+				<AUDIO Length = "21" Path = "191/19111.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19111.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 11-85 10-97. Fire department is nearly 
+					completed with their investigation.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia 10-4. 11-85 10-97, investigation 
+						nearly completed.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:49:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>	
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>LNS OPN, 9-22, 9-23, 9-26 10-98</DETAIL>
+				<UNIT UnitNum="9-22" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="9-23" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="9-26" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "21" Path = "190/19018.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="19018.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The lanes are open, all units 10-98.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copied lanes open, 9-22, 9-23, 9-26 10-98.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:51:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>FD INVESTIGATION COMPLETE, SPRAYING RS, FIRE CAUSED BY KITCHEN FIRE</DETAIL>
+				<AUDIO Length = "20" Path = "191/19112.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19112.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. The fire department investigation 
+					complete.  Fire caused by a kitchen fire.</LINE>
+				<LINE Role="Dispatch">17-14 Santa Lucia copied fire department is 98.
+				  Fire caused by kitchen fire.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #9">Hello, this is Jordan Bradley at KTCR radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #9">What is the traffic like on 73 around the RV fire?</INSTRUCTOR>
+			<STUDENT>Notifies reporter with current queue from ATMS.  One lane is closed.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #9">When will the incident be cleared?</INSTRUCTOR>
+			<STUDENT>Inknown, a good answer around 15 minutes.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:53:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>		
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:53:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>HAR should have been cleared</EXPECTED_ACTION>
+		</ATMS_EVALUATION>		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:54:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>	
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>RV READY FOR 1185, LN OPN IN 10</DETAIL>
+				<AUDIO Length = "21" Path = "191/19113.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		<CHP_RADIO RadioFile="19113.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. RV ready for 11-85. The lane will be open in 10.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia 10-4. RV ready for 11-85, lane open in 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Public">Hello, is Helen there?</INSTRUCTOR>
+			<STUDENT>Wrong number.</STUDENT>
+			<INSTRUCTOR Role="Public">Sorry. </INSTRUCTOR>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:55:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>		
+		
+		<TMT_RADIO>Queue update 10-98</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:58:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>RV TOWED, LANES OPEN IN 5</DETAIL>
+				<AUDIO Length = "17" Path = "191/19114.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19114.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. RV towed, lane open in 5.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia copied, RV towed, lane open in 5.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:59:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #10">Hello, this is Jim Sanso at KTAK radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #10">Has the RV been cleaned up yet at the fire on 73?</INSTRUCTOR>
+			<STUDENT>The RV was just towed, the lane will be open in 5 minutes.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #10">Do you have any other incidents going on right now?</INSTRUCTOR>
+			<STUDENT>Notifies reporter of current incidents.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>03:00:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>		
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>03:01:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>17-14, 17-16 1098. LN OPN</DETAIL>
+				<UNIT UnitNum="17-14" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="17-16" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "19" Path = "191/19115.mp3" />
+				
+				<PARAMICS LocationID="191_S_73_ML">
+					<Status>CLEARED</Status>			
+				</PARAMICS>					
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19115.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-16.</LINE>
+				<LINE Role="Dispatch">17-16 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia 17-16. #1 Lane is open. All units are 10-98.</LINE>				
+				<LINE Role="Dispatch">17-16 Santa Lucia 10-4. #1 lane open.  
+						17-14, 17-16 are 1098.</LINE>	
+			</DIALOG>			
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="86" type="remove"> 
+			<LOCATION>TBD</LOCATION>
+		</CMS_EVALUATION>			
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+	</SCRIPT_EVENT>
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>03:00:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>		
+		
+		<CMS_EVALUATION cmsID="93" type="remove"> 
+			<LOCATION>NB 5 S/O Redhill</LOCATION>
+		</CMS_EVALUATION>				
+		
+		<CMS_EVALUATION cmsID="94" type="remove"> 
+			<LOCATION>NB 55 @ Dyer</LOCATION>
+		</CMS_EVALUATION>		
+		
+	</SCRIPT_EVENT>
+	
+</TMC_SCRIPT>
+
Index: /branches/trunk/scripts/audio_systest.xml
===================================================================
--- /branches/trunk/scripts/audio_systest.xml	(revision 82)
+++ /branches/trunk/scripts/audio_systest.xml	(revision 82)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE TMC_SCRIPT SYSTEM "script.dtd">
+
+<TMC_SCRIPT title="System test for Audio - single event">
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:03</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>	
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<UNIT UnitNum="14-14" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "25" Path = "187/18701.mp3" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18701.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">14-14 Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 14-14 go ahead</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia 11-25 stalled DOT truck southbound 55 overpass at 405.</LINE>
+				<LINE Role="Field">Santa Lucia 14-14 10-4. Enroute from 55 at Dyer Rd.</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia copies enroute from 55 at Dyer Rd.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+</TMC_SCRIPT>
+
Index: /branches/trunk/scripts/short_script.xml
===================================================================
--- /branches/trunk/scripts/short_script.xml	(revision 82)
+++ /branches/trunk/scripts/short_script.xml	(revision 82)
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE TMC_SCRIPT SYSTEM "script.dtd">
+
+<TMC_SCRIPT title="Short Silent Test Script">
+
+	<SCRIPT_DATA>
+		<NEW_UNIT UnitNum = "14-7">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>SB 405 AT BROOKHURST</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>015238</BADGE_NUM>
+			<OFFICER>John Carrie</OFFICER>
+			<OFFICE>Santa Maria</OFFICE>
+			<TIMER>9796</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>5</ALIAS>
+			<UNIT_STATUS>Assignable</UNIT_STATUS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-21">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>55 AT MACARTHUR</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>065982</BADGE_NUM>
+			<OFFICER>James Hill</OFFICER>
+			<OFFICE>Santa Maria</OFFICE>
+			<TIMER>15053</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>3</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-13">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>NB 405 AT JEFFREY</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>015978</BADGE_NUM>
+			<OFFICER>Bobby Hey</OFFICER>
+			<OFFICE>Santa Maria</OFFICE>
+			<TIMER>6394</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>8</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "A25-101>">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>San Luis Obispo Area-SLCC</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>015538</BADGE_NUM>
+			<OFFICER>Katie Lee</OFFICER>
+			<OFFICE>Santa Maria</OFFICE>
+			<TIMER>10606</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>4</ALIAS>
+		</NEW_UNIT>
+	</SCRIPT_DATA>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="100">Media Log</INCIDENT>		
+		
+		<CAD_DATA>
+		
+			<HEADER_INFO>
+				<Type>Media</Type>
+				<Beat>
+				</Beat>
+				<TruncLoc>
+				</TruncLoc>
+				<FullLoc>
+				</FullLoc>
+			</HEADER_INFO>			
+			
+			<CAD_INCIDENT_EVENT>	
+			</CAD_INCIDENT_EVENT>		
+			
+		</CAD_DATA>				
+		
+	</SCRIPT_EVENT>	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Landslide</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>A349BD39</MASTER_INC_NUM>
+			<P>1</P>
+			<LOCATION>
+				<BEAT>14-13</BEAT>
+				<ADDRESS> NB101 AT REDONDO </ADDRESS>
+				<LOC>NB101 Santa Lucia</LOC>
+				<CITY>SANTA MARIA</CITY>
+				<AREA>SANTA MARIA</AREA>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>-
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>14-13</Beat>
+				<TruncLoc>NB101 AT REDONDO</TruncLoc>
+				<FullLoc>NB101 AT REDONDO</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="181_N_405_ML">
+				<Route>101</Route>
+				<Direction>NB</Direction>
+				<Postmile>7.8</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+		
+		</CAD_DATA>		
+		
+		<GENERAL_INFO>
+			<TITLE>Incident Description</TITLE>
+			<TEXT>Landslide blocking all lanes.</TEXT>
+		</GENERAL_INFO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:05</TIME_INDEX>
+		<INCIDENT LogNum="181">Landslide</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>ENRT FROM NB 405 AT JEFFREY</DETAIL>	
+				<UNIT UnitNum="14-13" Status="ENRT" Primary="true" Active="true"/>
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		 	
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:10</TIME_INDEX>
+		<INCIDENT LogNum="181">Landslide</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>INCIDENT CLOSED.</DETAIL>	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+	</SCRIPT_EVENT>
+
+</TMC_SCRIPT>
Index: /branches/trunk/scripts/testScript.xml
===================================================================
--- /branches/trunk/scripts/testScript.xml	(revision 82)
+++ /branches/trunk/scripts/testScript.xml	(revision 82)
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE TMC_SCRIPT SYSTEM "script.dtd">
+
+<TMC_SCRIPT title="Full Simulation">
+	<SCRIPT_DATA>
+		<UNIT UnitNum = "14-S2">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>Santa Maria Area</CURR_LOC>
+			<DESTINATION>Santa Maria Area</DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>015238</BADGE_NUM>
+			<OFFICER>John Carrie</OFFICER>
+			<OFFICE>Santa Maria</OFFICE>
+			<TIMER>3600</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>us</ALIAS>
+			<UNIT_STATUS>Assignable</UNIT_STATUS>
+		</UNIT>
+		<UNIT UnitNum = "14-S2">
+			<AGY>AGY</AGY>
+			<OFFICE>Duplicate = replace</OFFICE>
+		</UNIT>
+		<UNIT UnitNum = "A9-001">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>Us101 N / Us101 N Willow Rd</CURR_LOC>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>065982</BADGE_NUM>
+			<OFFICER>James Hill</OFFICER>
+			<OFFICE>San Luis Obispo</OFFICE>
+			<TIMER>36000</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>3</ALIAS>
+		</UNIT>
+		<UNIT UnitNum = "3-MZQ1>">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>San Luis Obispo Area-SLCC</CURR_LOC>
+			<DESTINATION>San Luis Obispo Area-SLCC</DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>015978</BADGE_NUM>
+			<OFFICER>Bobby Hey</OFFICER>
+			<OFFICE>San Luis Obispo</OFFICE>
+			<TIMER>2500</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>8</ALIAS>
+		</UNIT>
+		<UNIT UnitNum = "A25-101>">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>San Luis Obispo Area-SLCC</CURR_LOC>
+			<DESTINATION>San Luis Obispo Area-SLCC</DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>015538</BADGE_NUM>
+			<OFFICER>Katie Lee</OFFICER>
+			<OFFICE>San Luis Obispo</OFFICE>
+			<TIMER>1500</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>4</ALIAS>
+		</UNIT>
+	</SCRIPT_DATA>
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="100">Media Log</INCIDENT>
+		<CAD_DATA>
+			<MASTER_INC_NUM>HI</MASTER_INC_NUM>
+		</CAD_DATA>
+		<LOCATION_INFO>
+			<ADDRESS>1 Grand Avenue</ADDRESS>
+		</LOCATION_INFO>
+	</SCRIPT_EVENT>
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="200">Media Log</INCIDENT>
+		<LOCATION_INFO>
+			<ADDRESS>500 Foothill Boulevard</ADDRESS>
+		</LOCATION_INFO>
+	</SCRIPT_EVENT>
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="300">Media Log</INCIDENT>
+		<LOCATION_INFO>
+			<ADDRESS>200 Santa Rosa</ADDRESS>
+		</LOCATION_INFO>
+	</SCRIPT_EVENT>
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="400">Media Log</INCIDENT>
+		<LOCATION_INFO>
+			<ADDRESS>600 Madonna Road</ADDRESS>
+		</LOCATION_INFO>
+	</SCRIPT_EVENT>
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="500">Media Log</INCIDENT>
+		<LOCATION_INFO>
+			<ADDRESS>500 Osos</ADDRESS>
+		</LOCATION_INFO>
+	</SCRIPT_EVENT>
+</TMC_SCRIPT>
Index: /branches/trunk/scripts/practice_script_2016.xml
===================================================================
--- /branches/trunk/scripts/practice_script_2016.xml	(revision 82)
+++ /branches/trunk/scripts/practice_script_2016.xml	(revision 82)
@@ -0,0 +1,797 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE TMC_SCRIPT SYSTEM "script.dtd">
+
+<TMC_SCRIPT title="Practice Simulation">
+
+	<SCRIPT_DATA>
+		<NEW_UNIT UnitNum = "14-7">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>SB 405 AT BROOKHURST</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>015238</BADGE_NUM>
+			<OFFICER>John Carrie</OFFICER>
+			<OFFICE>Santa Maria</OFFICE>
+			<TIMER>9796</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>5</ALIAS>
+			<UNIT_STATUS>Assignable</UNIT_STATUS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-21">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>55 AT MACARTHUR</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>065982</BADGE_NUM>
+			<OFFICER>James Hill</OFFICER>
+			<OFFICE>Santa Maria</OFFICE>
+			<TIMER>15053</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>3</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-13">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>NB 405 AT JEFFREY</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>015978</BADGE_NUM>
+			<OFFICER>Bobby Hey</OFFICER>
+			<OFFICE>Santa Maria</OFFICE>
+			<TIMER>6394</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>8</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "A25-101>">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>San Luis Obispo Area-SLCC</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>015538</BADGE_NUM>
+			<OFFICER>Katie Lee</OFFICER>
+			<OFFICE>Santa Maria</OFFICE>
+			<TIMER>10606</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>4</ALIAS>
+		</NEW_UNIT>
+	</SCRIPT_DATA>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="100">Media Log</INCIDENT>		
+		
+		<CAD_DATA>
+		
+			<HEADER_INFO>
+				<Type>Media</Type>
+				<Beat>
+				</Beat>
+				<TruncLoc>
+				</TruncLoc>
+				<FullLoc>
+				</FullLoc>
+			</HEADER_INFO>			
+			
+			<CAD_INCIDENT_EVENT>	
+			</CAD_INCIDENT_EVENT>		
+			
+		</CAD_DATA>				
+		
+	</SCRIPT_EVENT>	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>A349BD39</MASTER_INC_NUM>
+			<P>1</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1179 Accident - Ambulance Responding</TYPE_CODE>
+				<TYPE>1179</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>14-13</BEAT>
+				<ADDRESS> NB405 AT MACARTHUR </ADDRESS>
+				<LOC>NB405 Santa Lucia</LOC>
+				<CITY>SANTA MARIA</CITY>
+				<AREA>SANTA MARIA</AREA>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>-
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>14-13</Beat>
+				<TruncLoc>NB405 AT MACARTHUR</TruncLoc>
+				<FullLoc>NB405 AT MACARTHUR</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="181_N_405_ML">
+				<Route>405</Route>
+				<Direction>NB</Direction>
+				<Postmile>7.8</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<CAD_INCIDENT_EVENT>
+				<PARAMICS LocationID="181_N_405_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+				</PARAMICS>				
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+		
+		<GENERAL_INFO>
+			<TITLE>Incident Description</TITLE>
+			<TEXT>This is a three-vehicle collision involving a hay truck and two 
+			  cars blocking the #1, 2, and 3 lanes on NB 405 just south of 
+			  MacArthur Boulevard. The truck spills hay over the #2 and 3 lanes. 
+			  There is one 11-44 and two minor injured. Ambulance, fire, 
+			  paramedics, additional units, Maintenance, and coroner are 
+			  requested on this incident.</TEXT>
+		</GENERAL_INFO>
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>
+		Should be attempting to verify via CCTV.
+			</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>ENRT FROM NB 405 AT JEFFREY</DETAIL>	
+				<UNIT UnitNum="14-13" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "29" Path = "181/18101.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		 	
+		
+		<CHP_RADIO RadioFile="18101.wav">
+			<DIALOG>
+				<LINE Role="Dispatch">14-13 Santa Lucia</LINE>
+				<LINE Role="Field">Santa Lucia 14-13 go ahead</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia 11-79 NB 405 JSO MacArthur Blvd.</LINE>				
+				<LINE Role="Field">14-13 Santa Lucia 10-4, enroute from NB 405 at Jeffrey Road.</LINE>			
+				<LINE Role="Dispatch">14-13 Santa Lucia 10-4, enroute from NB 405 at Jeffrey Road.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+		<MAINTENANCE_RADIO>Size of Cleanup: 50 bales of hay.</MAINTENANCE_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:03:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-13 10-97 1125, EMS 10-97, HAY TRK VS 2 VEH, #1,2,3 LNS BLCKD REQ ADDL UNITS</DETAIL>	
+				<UNIT UnitNum="14-13" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "41" Path = "181/18102.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18102.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia 14-13 10-97 11-79 11-25. Paramedics 
+							   and fire 10-97. Collision between a hay truck and 
+							   two vehicles blocking the left three lanes. The 
+							   hay truck is on its side, will be out checking. 
+							   Request a couple units to assist.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia copies 10-97 11-79 11-25. 
+								  Fire and paramedics 10-97. Collision involves 
+								  hay truck and two vehicles in three lanes. Hay 
+								  truck on its side, will be out checking. 
+								  Requesting units.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CAD_EVALUATION>
+			<EXPECTED_ACTION>
+		    Should try to verify incident using CAD.
+			</EXPECTED_ACTION>
+		</CAD_EVALUATION>	  
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>	
+		
+		<TMT_RADIO>>Earliest expected time for request of sign trucks. Send truck/s if 
+			  requested. Have units arrive 10 minutes after time of request.
+		</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:04:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-7 ENRT FROM SB 405 AT BROOKHURST </DETAIL>
+				<DETAIL>14-21 ENRT FROM 55 AT MACARTHUR</DETAIL>	
+				<UNIT UnitNum="14-7" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="14-21" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "40" Path = "181/18103.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18103.wav">
+			<DIALOG>
+				<LINE Role="Dispatch">14-7, 14-21 Santa Lucia</LINE>
+				<LINE Role="Field">Santa Lucia 14-7 go ahead</LINE>
+				<LINE Role="Field">14-21, go ahead</LINE>
+				<LINE Role="Dispatch">14-7 and 14-21 assist 14-13 with 11-79 11-25 
+								  northbound 405 just south of MacArthur</LINE>
+				<LINE Role="Field">Santa Lucia 14-7 10-4, enroute from southbound 
+							   405 at Brookhurst Street.</LINE>
+				<LINE Role="Field">Santa Lucia 14-21 copied enroute from 55 at 
+							   Macarthur</LINE>
+				<LINE Role="Dispatch">Santa Lucia copies 14-7 enroute from 405 at 
+								  Brookhurst and 14-21 enroute from 55 at 
+								  Macarthur.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #1">Hello, this is Bill Bradley at KTCR 
+											radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #1">We just heard over the scanner that 
+											there was an accident and a spill on NB 405.</INSTRUCTOR>
+			<STUDENT>(pause for confirmation)</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #1">Our computers are down. Do you have 
+											any details on that?</INSTRUCTOR>
+			
+		</TELEPHONE>
+		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:05:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1144 IN HAY TRK, 2 1181S, REQ CORONER</DETAIL>	
+				<DETAIL>REQ DOT TO REMOVE HAY SPILLED IN SB LANES</DETAIL>					
+				<AUDIO Length = "29" Path = "181/18104.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>				
+		
+		<CHP_RADIO RadioFile="18104.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia, 11-44 in hay truck and two 11-81's 
+							   from other vehicles. Request coroner. Also 
+							   request Caltrans, there's hay bales spilled over 
+							   the two right lanes.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia copied 11-44 in hay truck 
+								  and two 11-81's. Requesting coroner and 
+								  Caltrans to clean up spilled hay bales.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be alert to the situation</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>
+			Earliest expected call from TMC for Maintenance.
+			</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:07:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-7 REQ 1185 BIG RIG AND 2 ROT 1185</DETAIL>		
+				<UNIT UnitNum="14-7" Status="1097" Primary="false" Active="true"/>			
+				<AUDIO Length = "25" Path = "181/18105.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>					
+		
+		<CHP_RADIO RadioFile="18105.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-7</LINE>
+				<LINE Role="Dispatch">14-7 go ahead to Santa Lucia</LINE>
+				<LINE Role="Field">Santa Lucia 14-7 10-97 11-80 11-25. Roll a 11-85 
+							   big rig and two rotational 11-85's.</LINE>
+				<LINE Role="Dispatch">14-7 Santa Lucia copied 10-97 11-80 11-25. 
+								  Roll 11-85 big rig and two 11-85's 
+								  rotational</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #2">"Hello, this is John Sinclair at 
+											KNIN radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #2">"I heard that there was a big 
+											accident on NB 405 at Macarthur."
+			</INSTRUCTOR>
+			<STUDENT>(pause for confirmation)</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #2">"What is going on there?"
+			</INSTRUCTOR>
+		</TELEPHONE>
+		
+		
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>HAR should note incident.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		<CMS_EVALUATION cmsID="87" type="new"> 
+			<LOCATION>NB 405 @ HARVARD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AHEAD</CMS_LINE>
+				<CMS_LINE>AT MACARTHUR BLVD</CMS_LINE>
+				<CMS_LINE>3 LT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>	
+		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:08:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #1">"Hello, this is Bill Bradley at KTCR 
+											radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #1">"We heard over the scanner that 
+											there was an accident and a spill on 
+											NB 405."</INSTRUCTOR>
+			<STUDENT>(pause for confirmation)</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #1">"Our computers are down. Do you have 
+											any details on that?"</INSTRUCTOR>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:09:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>10-39 COLLEGE OAK FOR BIG RIG AND CYCLE FOR ROT</DETAIL>		
+				<AUDIO Length = "24" Path = "181/18106.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18106.wav">
+			<DIALOG>
+				<LINE Role="Dispatch">14-13 Santa Lucia information</LINE>
+				<LINE Role="Field">Santa Lucia 14-13 go ahead</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia 10-39 College Oak for big 
+								  rig 11-85 and Cycle Tow for 11-85 rotational.
+				</LINE>
+				<LINE Role="Field">Santa Lucia 9-9 copied 10-39 College Oak and 
+							   Cycle Tow.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<MAINTENANCE_RADIO>If Maintenance has not by requested by this time, have someone 
+			  call as CHP Dispatch and make a request for them.
+		</MAINTENANCE_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:11:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-21 1097 PROV 1184 TRF BACKING QUICKLY</DETAIL>		
+				<UNIT UnitNum="14-21" Status="1097" Primary="false" Active="true"/>			
+				<AUDIO Length = "26" Path = "181/18107.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18107.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-21</LINE>
+				<LINE Role="Dispatch">14-21 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia 14-21 10-97 11-80 11-25. Assisting in 
+							   11-84, traffic is backing quickly.</LINE>
+				<LINE Role="Dispatch">14-21 Santa Lucia copies 10-97 11-80 11-25 and 
+								  assisting in 11-84, traffic is backing 
+								  quickly.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:12:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VEH KNOCKED HAY BALES ONTO VON KARMAN AVENUE ADV CITY</DETAIL>			
+				<AUDIO Length = "21" Path = "181/18108.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18108.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia, one of the vehicles knocked a couple 
+							   of hay bales onto Airport Loop Drive below. 
+							   Notify the city about the bales.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia 10-4. Hay bales knocked onto 
+								  Airport Loop Drive. City will be notified.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:15:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>		
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1181 TRANSPORTED REQ ETA FOR CORONER</DETAIL>	
+				<DETAIL>ETA FOR CORONER 10</DETAIL>		
+				<AUDIO Length = "19" Path = "181/18109.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18109.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia, 11-81's transported. What's the 
+							   coroner's ETA?</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia 10-4. 11-81's transported, 
+								  coroner's ETA 10 minutes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:17:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="CHP Dispatch">"Hello, this is CHP Dispatch."</INSTRUCTOR>
+			<INSTRUCTOR Role="CHP Dispatch">"Has the city has been notified of the 
+										hay spilled onto one of their streets?"
+			</INSTRUCTOR>
+			<STUDENT>(If they haven't been notified, say the following)
+			</STUDENT>
+			<INSTRUCTOR Role="CHP Dispatch">"Could you notify the city of the spill 
+										onto Airport Loop Drive?"</INSTRUCTOR>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:18:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-13 1185 1097, #3 LN WILL OPEN 5-10</DETAIL>	
+				<TOW Company="College Oak" ConfNum="(949)555-2990" PubNum="(949)555-5758" Beat=""/>
+				<TOW Company="Cycle" ConfNum="(949)555-2281" PubNum="(949)555-7162" Beat=""/>
+				<AUDIO Length = "25" Path = "181/18110.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18110.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia, 11-85's 10-97. Clearing the #3 lane 
+							   and opening it in 5 to 10 minutes.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia 10-4,11-85's 10-97. Clearing 
+								  the #3 lane and opening it in 5 to 10 minutes.
+				</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:19:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #1">"Hi, My name is Jay Stevens with KCLY 
+										 news 2, and I was wondering if you had 
+										 the latest info on the incident on the 
+										 405."</INSTRUCTOR>
+			<STUDENT>(note information given)</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #1">"OK, thanks!"</INSTRUCTOR>
+		</TELEPHONE>		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:20:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>DOT 1097 TO REMOVE BALES</DETAIL>	
+				<AUDIO Length = "19" Path = "181/18111.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18111.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 go ahead to Santa Lucia</LINE>
+				<LINE Role="Field">Santa Lucia, Caltrans is 10-97 and beginning 
+							   cleanup of the bales. </LINE>
+				<LINE Role="Dispatch">Santa Lucia copies Caltrans 10-97 and 
+								  beginning cleanup.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:22:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #3">"Hello, this is Jack Crew at KCOW 
+											radio"</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #3">"We just heard over the scanner that 
+											there was a mud slide on the PCH."
+			</INSTRUCTOR>
+			<STUDENT>(pause for confirmation)</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #3">"Do you have any details on the mud 
+											slide?"</INSTRUCTOR>
+			<STUDENT>(pause for answer)</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #3">"Has anyone been killed?"</INSTRUCTOR>
+			<STUDENT>(pause for answer)</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:23:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CORONER 1097</DETAIL>	
+				<AUDIO Length = "16" Path = "181/18112.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18112.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 go ahead to Santa Lucia</LINE>
+				<LINE Role="Field">Coroner 10-97.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia 10-4 Coroner 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+		
+	</SCRIPT_EVENT>	
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:25:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>#3 LN CLEARED OPENING NOW</DETAIL>	
+				<AUDIO Length = "17" Path = "181/18113.wav" />	
+				
+				<PARAMICS LocationID="181_N_405_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+					<Lane_number>2</Lane_number>
+				</PARAMICS>						
+				
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18113.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 go ahead to Santa Lucia</LINE>
+				<LINE Role="Field">Santa Lucia, the #3 lane has been cleared and 
+							   were opening it now.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia 10-4. #3 lane cleared and 
+								  opening it.</LINE>	
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="87" type="update"> 
+			<LOCATION>NB 405 @ HARVARD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AHEAD</CMS_LINE>
+				<CMS_LINE>AT MACARTHUR BLVD</CMS_LINE>
+				<CMS_LINE>2 LT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>	
+		
+		<MAINTENANCE_RADIO>TMC, M31. Were halfway done with the bale cleanup. We should be finished in 
+			 5 to 10 minutes.
+		</MAINTENANCE_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:28:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CORONER CONFIRMED 1144, VEHS READY FOR TOW, HAY NEARLY CLEARED, ALL LANES OPEN IN 15</DETAIL>	
+				<AUDIO Length = "30" Path = "181/18114.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18114.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia, the coroner has confirmed the 11-44. 
+							   The two vehicles are ready to be towed and the 
+							   hay bales are nearly cleared. We should have all 
+							   lanes open in 15 minutes.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia copies 11-44 confirmed. The 
+								  two vehicles are ready for tow and hay bales 
+								  nearly cleared. Lanes open in 15 minutes.</LINE>
+				
+			</DIALOG>
+		</CHP_RADIO>		
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:30:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>WTNSSES, JOHN/BETTY JONES SAW HAY TRUCK LOSE CONTROL, FLIP OVER, 2 VEH HIT</DETAIL>
+				<AUDIO Length = "30" Path = "181/18115.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>				
+		
+		<CHP_RADIO RadioFile="18115.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia, witnesses John and Betty Rogers saw 
+							   the hay truck lose control, flip over, and the 
+							   two vehicles hit it.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia 10-4. Witnesses John and 
+								  Betty Rogers saw hay truck lose control, flip 
+								  over, and the two vehicles hit it.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<MAINTENANCE_RADIO>Done cleaning up the hay.  10-98 units</MAINTENANCE_RADIO>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:32:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>HAY TRK READY FOR TOW, 2 VEHS TOWED, DOT CLEARED HAY BALES, LANES OPEN IN 10</DETAIL>	
+				<AUDIO Length = "28" Path = "181/18116.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18116.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia, the truck is being prepared for tow 
+							   and the two vehicles have been towed. Caltrans 
+							   has finished cleaning up the bales of hay. Lanes 
+							   open in 10.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia copies truck being prepared 
+								  for tow and two vehicles have been towed. 
+								  Caltrans finished cleaning up the bales of 
+								  hay. Lanes open in 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:36:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>		
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>LANES OPEN IN 5</DETAIL>	
+				<AUDIO Length = "20" Path = "181/18117.wav" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18117.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia, we're nearly finished with cleanup. 
+							   Lanes open in 5 minutes.</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia copied nearly finished with 
+								  cleanup. Lanes open in 5.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:41:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-13 14-7 14-21 1098, TRK TOWED, ALL LNS CLR</DETAIL>	
+				<UNIT UnitNum="14-13" Status="1098" Primary="true" Active="false"/>		
+				<UNIT UnitNum="14-7" Status="1098" Primary="false" Active="false"/>		
+				<UNIT UnitNum="14-21" Status="1098" Primary="false" Active="false"/>		
+				<AUDIO Length = "19" Path = "181/18118.wav" />	
+				
+				<PARAMICS LocationID="181_N_405_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>						
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18118.wav">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-13</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia go ahead</LINE>
+				<LINE Role="Field">Santa Lucia, the truck as been towed and the 
+							   lanes are clear. All units are 10-98</LINE>
+				<LINE Role="Dispatch">14-13 Santa Lucia 10-4. 14-13, 14-7, and 14-21 
+								  10-98.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		
+		<CMS_EVALUATION cmsID="87" type="update"> 
+			<LOCATION>NB 405 @ HARVARD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE>
+				<CMS_LINE>AT MACARTHUR BLVD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:50:00</TIME_INDEX>
+		<INCIDENT LogNum="181">Overturned Hay Truck</INCIDENT>
+		
+		<TMT_RADIO>Queue Update.  TMT 10-98</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+</TMC_SCRIPT>
Index: /branches/trunk/scripts/system_test_script.xml
===================================================================
--- /branches/trunk/scripts/system_test_script.xml	(revision 82)
+++ /branches/trunk/scripts/system_test_script.xml	(revision 82)
@@ -0,0 +1,4847 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE TMC_SCRIPT SYSTEM "script.dtd">
+
+<TMC_SCRIPT title="Full Simulation">
+
+	<SCRIPT_DATA>
+		<NEW_UNIT UnitNum = "14-14">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>55 at Dyer Rd</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>011234</BADGE_NUM>
+			<OFFICER>John Carrie</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>9796</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>14-14</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-17">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>405 MacArthur Boulevard</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>011304</BADGE_NUM>
+			<OFFICER>James Hill</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>15053</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>14-17</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-9">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>55 Edinger Avenue</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>012454</BADGE_NUM>
+			<OFFICER>Bobby Hey</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>6394</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>14-9</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-9">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I405 IRVINE CTR</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>011596</BADGE_NUM>
+			<OFFICER>Harry Jackson</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>10606</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-9</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "14-S3">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>73 Bear Street</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>011250</BADGE_NUM>
+			<OFFICER>James Tuchman</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>19005</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>14-S3</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-15">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>55 4th street</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>013282</BADGE_NUM>
+			<OFFICER>Sam Spellicy</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>23786</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-15</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-19">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>405 Culver</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>012495</BADGE_NUM>
+			<OFFICER>Michael Bay</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>15760</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-19</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-24">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I-405 IRVINE CNTR</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>011194</BADGE_NUM>
+			<OFFICER>Greg Johnson</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>16987</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-24</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-19">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I-5 / Sand Canyon</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>013181</BADGE_NUM>
+			<OFFICER>Andre Muller</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>18685</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-19</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-13">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I-5 / 133</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>015283</BADGE_NUM>
+			<OFFICER>Craig O'Neil</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>14069</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-13</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-11">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>SR55 AT DYER</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>012555</BADGE_NUM>
+			<OFFICER>Alex Carlton</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>15860</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-11</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-07">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>I405 / CULVER OFFR</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>013606</BADGE_NUM>
+			<OFFICER>Gary Schmidt</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>14999</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-7</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "28-S4">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC></CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>28-San Luis Obispo</AREA>
+			<BADGE_NUM>013565</BADGE_NUM>
+			<OFFICER>Daniel Pierce</OFFICER>
+			<OFFICE>San Luis Obispo Area</OFFICE>
+			<TIMER>10606</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>28-S4</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-22">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>57 / Chapman</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>012345</BADGE_NUM>
+			<OFFICER>Victor Percival</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>24203</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-22</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-23">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>22 / Euclid Avenue</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton</AREA>
+			<BADGE_NUM>011860</BADGE_NUM>
+			<OFFICER>Michael Rocker</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>20184</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-23</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "9-26">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>57 / 91</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>9-Templeton Area</AREA>
+			<BADGE_NUM>011480</BADGE_NUM>
+			<OFFICER>Patrick King</OFFICER>
+			<OFFICE>Templeton Area</OFFICE>
+			<TIMER>14023</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>9-26</ALIAS>
+		</NEW_UNIT>
+		<!-- 17 isn't a valid CHP office? -->
+		<NEW_UNIT UnitNum = "17-14">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>405 / Euclid</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>017935</BADGE_NUM>
+			<OFFICER>William Bond</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>29877</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>17-14</ALIAS>
+		</NEW_UNIT>
+		<NEW_UNIT UnitNum = "17-16">
+			<STATUS>10-8</STATUS>
+			<CURR_LOC>S-405 / Euclid</CURR_LOC>
+			<DESTINATION></DESTINATION>
+			<AREA>14-Santa Maria</AREA>
+			<BADGE_NUM>015839</BADGE_NUM>
+			<OFFICER>Matthew McCarmick</OFFICER>
+			<OFFICE>Santa Maria Area</OFFICE>
+			<TIMER>23998</TIMER>
+			<AGY>CHP</AGY>
+			<ALIAS>17-16</ALIAS>
+		</NEW_UNIT>
+	</SCRIPT_DATA>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="100">Media Log</INCIDENT>		
+		
+		<CAD_DATA>
+			<HEADER_INFO>
+				<Type>Media</Type>
+				<Beat>
+				</Beat>
+				<TruncLoc>
+				</TruncLoc>
+				<FullLoc>
+				</FullLoc>
+			</HEADER_INFO>			
+			
+			<CAD_INCIDENT_EVENT>	
+			</CAD_INCIDENT_EVENT>		
+			
+		</CAD_DATA>				
+		
+	</SCRIPT_EVENT>	
+
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Project 3 System Test</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO003</MASTER_INC_NUM>
+			<P>1</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1179 Accident - Ambulance Responding</TYPE_CODE>
+				<TYPE>1179</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>14-14</BEAT>
+				<ADDRESS>SB55 AT 405 </ADDRESS>
+				<LOC>SB55 AT 405</LOC>
+				<CITY>Costa Mesa</CITY>
+				<AREA>14-Santa Maria</AREA>
+				<FIRE>Costa Mesa</FIRE>
+				<LAW>Costa Mesa</LAW>
+				<EMS>Costa Mesa</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>14-14</Beat>
+				<TruncLoc>SB55 AT 405</TruncLoc>
+				<FullLoc>SB55 AT 405</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="187_N_405_ML">
+				<Route>405</Route>
+				<Direction>NB</Direction>
+				<Postmile>8.4</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<LOCATION_INFO ID="187_N_405_HV">
+				<Route>405</Route>
+				<Direction>NB</Direction>
+				<Postmile>8.4</Postmile>
+				<Location_type>HV</Location_type>					
+			</LOCATION_INFO>	
+			
+			<LOCATION_INFO ID="187_S_55_ML">
+				<Route>55</Route>
+				<Direction>SB</Direction>
+				<Postmile>6.5</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+		</CAD_DATA>	
+		
+		<GENERAL_INFO> 			
+			<TITLE>Incident Description</TITLE>
+			<TEXT>This is a stalled DOT truck on SB 55 overpass at 405. The truck is 
+			  hit by a vehicle, the vehicle is vaulted over the railing, and a 6 
+			  vehicle collision occurs below in the NB 405 lanes. The #2 and 3 lanes 
+			  are blocked on SB 55 and the #1, 2, and 3 lanes are blocked on NB 405. 
+			  The driver of the truck is uninjured, although there are 4 fatals, 2 
+			  major injured, and 4 minor injured in the collision below. MAIT is 
+			  called to the scene to investigate the collision and a Sig Alert is 
+			  declared. 
+			</TEXT>
+		</GENERAL_INFO>	
+		
+		<TELEPHONE>	
+			<STUDENT>Places a call to CHP Dispatch to notify of stalled DOT vehicle.</STUDENT>
+		</TELEPHONE>				
+		
+		<MAINTENANCE_RADIO>Dispatch, this is xxx. I'm on south 55 at the 405.  
+		 		My truck is out of service here, stuck in the lane.  I need CHP assistance ASAP!" 
+		</MAINTENANCE_RADIO>	
+		
+	</SCRIPT_EVENT>	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:05</TIME_INDEX>
+		<INCIDENT LogNum="187">Project 3 System Test</INCIDENT>	
+
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>	
+				<DETAIL>STALLED DOT SB SR-55 AT I-405</DETAIL>	
+				
+				<PARAMICS LocationID="187_S_55_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>
+				</PARAMICS>		
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:00:05</TIME_INDEX>
+		<INCIDENT LogNum="187">Project 3 System Test</INCIDENT>	
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<UNIT UnitNum="14-14" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "25" Path = "187/18701.mp3" />	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		        
+		
+		<CHP_RADIO RadioFile="18701.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">14-14 Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 14-14 go ahead</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia 11-25 stalled DOT truck southbound 55 overpass at 405.</LINE>
+				<LINE Role="Field">Santa Lucia 14-14 10-4. Enroute from 55 at Dyer Rd.</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia copies enroute from 55 at Dyer Rd.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<CAD_EVALUATION>
+			<EXPECTED_ACTION>Operator should be verifying incident 187 on CAD</EXPECTED_ACTION>
+		</CAD_EVALUATION>
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Operator viewing cameras in incident area.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:03:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>CELLULAR 911 RPT DOT HT, 2ND VEH OVER THE SIDE, UNVERIFIED</DETAIL>
+				<AUDIO Length = "26" Path = "187/18702.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18702.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">14-14 Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 14-14 go ahead</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia. Cellular 911 caller reports stalled vehicle on the 55/405 overpass was hit and a vehicle was pushed over the side.  Can you verify?</LINE>				
+				<LINE Role="Field">Santa Lucia, negative, I'm one minute away.</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia 10-4. One minute away.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:03:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>DUPLICATE CALL</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:04:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>DUPLICATE CALL</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:05:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>DOT HIT BY VEH, VEH OVER SIDE.</DETAIL>
+				<DETAIL>2ND VEH LANDED NB 405 BELOW, LG COLLISION OCCUR. REQ 2 1141 CODE 2 UNITS ASSIST</DETAIL>
+				<UNIT UnitNum="14-14" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "42" Path = "187/18703.mp3" />
+				
+				<PARAMICS LocationID="187_N_405_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+				</PARAMICS>					
+				
+				<PARAMICS LocationID="187_N_405_HV">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+				</PARAMICS>					
+				
+				<PARAMICS LocationID="187_S_55_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+				</PARAMICS>			
+			</CAD_INCIDENT_EVENT>			
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18703.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-14</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 14-14 10-97 11-83 11-25.  It appears the DOT truck was hit by a vehicle and over the side landed in the northbound 405 lanes below.  A major collision occurred below.  Request 11-41 Code 2 and a couple units to assist.</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia 10-4 10-97 11-83 11-25.  DOT truck was hit by vehicle and the vehicle over the side landed in the northbound 405 lanes below.  A large collision occurred below.  Request 11-41 Code 2 and a couple units to assist.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="72" type="new"> 
+			<LOCATION>SB 55 @ WARNER AVE</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AHEAD</CMS_LINE>
+				<CMS_LINE>AT 405 OVERPASS</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be responding to incident 187</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should be monitoring ATMS operator</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:05:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>DUPLICATE CALL</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:06:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-17 14-9 ENRT ASSIST 1183 1125</DETAIL>
+				<UNIT UnitNum="14-17" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="14-9" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "40" Path = "187/18704.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18704.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">14-17, 14-9 Santa Lucia</LINE>
+				<LINE Role="Field_1">Santa Lucia 14-17 go ahead.</LINE>	
+				<LINE Role="Field_2">Santa Lucia 14-9 go ahead.</LINE>
+				<LINE Role="Dispatch">	14-17, 14-9 assist 14-14 11-83 11-25 northbound 405 at the 55 interchange.</LINE>				
+				<LINE Role="Field_1">Santa Lucia 14-17 copies.  Enroute from 405 just south of Macarthur Boulevard.</LINE>
+				<LINE Role="Field_2">14-9 10-4, enroute from 55 at Edinger Avenue.</LINE>
+				<LINE Role="Dispatch">Santa Lucia copies 14-17 enroute from 405 just south of Macarthur and 14-9 enroute from 55 at Edinger.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:06:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>		
+				<DETAIL>DUPLICATE CALL</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:07:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>DOT DRIVER UNINJURED, #2,3 LNS BLCKD SB 55.</DETAIL>
+				<DETAIL>14-14 MVNG TO 405 ASSESS DMG</DETAIL>
+				<AUDIO Length = "29" Path = "187/18705.mp3" />
+			</CAD_INCIDENT_EVENT>
+			
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18705.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-14</LINE>				
+				<LINE Role="Dispatch">14-14 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">	Santa Lucia, the driver of the DOT truck is uninjured but the #2 and #3 lanes are now blocked on southbound 55.  I'm moving down to the 405 lanes to assess the damage.</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa-Lucia 10-4. Driver of the DOT truck is uninjured.  The #2 and #3 lanes are now blocked on southbound 55. Moving down to the 405 lanes to assess the damage.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="72" type="update"> 
+			<LOCATION>SB 55 @ WARNER AVE</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AHEAD</CMS_LINE>
+				<CMS_LINE>AT 405 OVERPASS</CMS_LINE>
+				<CMS_LINE>2 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>	
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should be updating the incident board.</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:08:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #1">Hello, this is Cameron Stevens at KCLY TV channel 2.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #1">I was told that a car flew off an 
+										 overpass causing a large pile-up on the freeway below.
+			</INSTRUCTOR>
+			<STUDENT>Incident should be confirmed</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #1">I want to confirm the location so we 
+										 can send a helicopter to check it out.
+			</INSTRUCTOR>
+			<STUDENT>55/405 interchange</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:08:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO004</MASTER_INC_NUM>
+			<P>2</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1179 Accident - Ambulance Responding</TYPE_CODE>
+				<TYPE>1179</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>9-9</BEAT>
+				<ADDRESS>NB5 JNO Lake Forest Dr</ADDRESS>
+				<LOC>NB5 JNO Lake Forest Dr</LOC>
+				<CITY>Templeton</CITY>
+				<AREA>9-Templeton</AREA>
+				<FIRE>Templeton</FIRE>
+				<LAW>Templeton</LAW>
+				<EMS>Templeton</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>9-9</Beat>
+				<TruncLoc>NB5 JNO Lake Forest Dr</TruncLoc>
+				<FullLoc>NB5 JNO Lake Forest Dr</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="188_N_5_ML">
+				<Route>5</Route>
+				<Direction>NB</Direction>
+				<Postmile>20</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>	
+			
+			<CAD_INCIDENT_EVENT>			
+				<PARAMICS LocationID="188_N_5_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>
+					<Lane_number>5</Lane_number>
+				</PARAMICS>					
+			</CAD_INCIDENT_EVENT>					
+		</CAD_DATA>		
+		
+		<GENERAL_INFO>
+			<TITLE>Incident Description</TITLE>
+			<TEXT>This is a two vehicle collision between a tomato truck and a car. The 
+	  	  truck spills tomatoes across lanes #3,4,5 right lanes plus 
+	  	  shoulder of NB 5 just north of Lake Forest Drive. There is one 11-44 
+	  	  and 2 major injured. Ambulance, fire, paramedics, additional units, 
+	  	  Maintenance/coroner, and TMT are requested on this incident.
+			</TEXT>
+		</GENERAL_INFO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:10:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>9-9 ENRT FRM I405 @ IRVINE CTR</DETAIL>
+				<UNIT UnitNum="9-9" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "25" Path = "188/18801.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18801.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-9 Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 11-79 northbound 5 just north of Lake Forest Drive.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 copied enroute from 405 at Irvine Center.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Enroute from 405 at Irvine Center.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CAD_EVALUATION>
+			<EXPECTED_ACTION>Operator should be monitoring the CAD</EXPECTED_ACTION>
+		</CAD_EVALUATION>
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Operator should try to confirm the incident with a CCTV camera.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should verify location and respond to incident 188</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:11:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #1">Hello, this is Dakota Crew at 
+											KCOW radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #1">I just heard over the scanner that 
+											you have a major accident on I405 at 55.
+			</INSTRUCTOR>
+			<STUDENT>Should confirm incident.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #1">Can you give me a run down on what 
+										 	happened?
+			</INSTRUCTOR>
+			<STUDENT>A collision occurred on NB 55 at 405.  A vehicle went over rail 
+					     onto NB 405 causing a 6 car collision.
+			</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:12:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-14 1097, MULTIPLE 1144 NB 405 AT 55 OVERPASS, 6 VEH TC</DETAIL>
+				<DETAIL>BLOCKING 3 INSIDE LNS NB 405. DRVR AND PSSNGR IN VEH 1144, 2 OTHER FATALS, MULT INJR, REQ CRNR AND SIGALERT</DETAIL>
+				<AUDIO Length = "46" Path = "187/18706.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18706.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-14</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 14-14 10-97. Multiple 1144 northbound 405 at 55 
+					overpass. Six vehicle collision blocking the three inside 
+					lanes. The driver and passenger of the car that went over 
+					the railing are both 11-44. I've got two other fatals and 
+					multiple injured down here. Request coroner and issue Sig 
+					Alert.
+				</LINE>
+				
+				<LINE Role="Dispatch">	14-14 Santa Lucia 10-4 10-97 11-80 11-25 northbound 405 
+						at 55 overpass. Multiple 1144. Six vehicle collision blocking the three 
+						inside lanes. The driver and passenger of the car that 
+						went over the railing are 11-44, 2 other 11-44.  
+						Multiple injuries, request coroner and send Sig Alert.
+				</LINE>
+			</DIALOG>
+		</CHP_RADIO>					
+		
+		<CMS_EVALUATION cmsID="87" type="new"> 
+			<LOCATION>NB 405 @ HARVARD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>3 LEFT LNS BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="88" type="new"> 
+			<LOCATION>NB 405 @ ICD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>3 LEFT LNS BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page sig alert information</EXPECTED_ACTION>	
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:12:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 CRNR</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>	
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should insert info for enroute coroner</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:13:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-17 1097, PARAMEDICS 1097. 1184 SB 55 FOR DOT 1125</DETAIL>
+				<UNIT UnitNum="14-17" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "46" Path = "187/18707.mp3" />	
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18707.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-17 10-97. 1144 northbound 405 at 55. 	
+			Paramedics are 10-97. We've gotta secure the scene southbound 55 for the DOT 
+			hazard. Has Caltrans been notified that their truck has been 
+			involved in a collision?</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4 10-97 11-44 northbound 405 
+						at 55. Paramedics 10-97. Will be doing 11-84 on southbound 55 for 
+						DOT collision. Caltrans will be notified.			
+				</LINE>	
+				<LINE Role="Field">Santa Lucia 14-17 10-4</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:14:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-9, FD, PARAMEDICS 1097.  TC SEMI W/TOMATOES AND VEH ON NB-5 #3,4,5 LNS</DETAIL>
+				<DETAIL>TRCK ON FIRE, REQ CT CLNUP, UNITS 1184</DETAIL>
+				<UNIT UnitNum="9-9" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "39" Path = "188/18802.mp3" />
+			</CAD_INCIDENT_EVENT>
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18802.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9</LINE>
+				<LINE Role="Dispatch">9-9 go ahead Santa Lucia</LINE>
+				<LINE Role="Field">Santa Lucia 9-9 10-97 11-79. Fire department and 
+					parmedics 10-97.  Collision between semi truck carrying 
+					tomatoes and vehicle in 2 right lanes.  Truck on fire and 
+					tomatoes spilled over three right lanes. Request Caltrans to 
+					clean up the tomatoes and units for 11-84.</LINE>
+				<LINE Role="Dispatch">Santa Lucia 10-4, 9-9 10-97 11-79. Fire and 
+						paramedics 10-97. Collision involves tomato truck and 
+						car in two right lanes. Truck on fire and tomatoes over 
+						three right lanes.  Request Caltrans.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+		<CMS_EVALUATION cmsID="31" type="new"> 
+			<LOCATION>??</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>UR TIRES R RND</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should have ensured that a maintenance team was dispatched</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:14:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>REQ MAIT, REQ 14-S UNIT, REQ TMT</DETAIL>
+				<UNIT UnitNum="14-S3" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "34" Path = "187/18708.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18708.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 14-14</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia, request MAIT, they'll have to investigate this 
+					one.  Also, request 14-S unit and TMT.</LINE>				
+				<LINE Role="Dispatch">	14-14 Santa Lucia copied request MAIT, 14-S unit, and TMT.</LINE>				
+				<LINE Role="Dispatch">	14-S3 unit copy.</LINE>				
+				<LINE Role="Field">	Santa Lucia 14-S3, 10-4 enroute from 73 at Bear Street.</LINE>				
+				<LINE Role="Dispatch">	14-S3 Santa Lucia copies enroute from 73 at Bear Street.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be alert and advising radio on TMT.</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should notify the TMT leader of incident 187</EXPECTED_ACTION>
+		</RADIO_EVALUATION>	
+		
+		<TMT_RADIO>TMT leader espond to student action.  Dispatch appropriate units???</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:15:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #2">Hello, this is Monica Stevens at KCLY radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #2">I called earlier about the accident 
+											on I405. Have any more details come 
+											in on that incident?
+			</INSTRUCTOR>
+			<STUDENT>Vehicles blocking 3 NB 405 lanes, 4 dead and 7 injured.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #2">Do you have an alternate route I can recommend?
+			</INSTRUCTOR>
+			<STUDENT>Yes (TBD)</STUDENT>	
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:16:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<MAINTENANCE_RADIO>If Maintenance unit was sent out, radio the supervisor 
+			with a 10-97.  Say that you're going to await MAIT investigation and 
+			transport other Maintenance worker.			
+		</MAINTENANCE_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:17:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-9 1097, ASSIST 1184</DETAIL>
+				<UNIT UnitNum="14-9" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "22" Path = "187/18709.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18709.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-9.</LINE>				
+				<LINE Role="Dispatch">14-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-9 10-97. Will assist 14-14 with 11-84.</LINE>				
+				<LINE Role="Dispatch">14-9 Santa Lucia 10-4 10-97 northbound 405 at 55. 
+						Will assist 14-14 with 11-84.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:18:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>TRAFFIC BACKING SB 55 REQ TMT MEDIUM DUTY 1185</DETAIL>
+				<AUDIO Length = "24" Path = "187/18710.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18710.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>			
+				<LINE Role="Field">Santa Lucia 14-17. Traffic is backing up on southbound 55. 
+					Request TMT and medium duty 11-85 for the DOT truck.	</LINE>			
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4. Traffic backing up on southbound 
+						55.  Requesting TMT and medium duty 11-85.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:19:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>		
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>4 1144'S, 2 1180'S, 4 1181'S</DETAIL>
+				<AUDIO Length = "20" Path = "187/18711.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18711.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-14</LINE>		
+				<LINE Role="Dispatch">14-14 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 14-14. 4 11-44's, 2 11-80's, and 4 11-81's.</LINE>		
+				<LINE Role="Dispatch">14-14 Santa Lucia copies 4 11-44's,2 11-80's, and 4 11-81's.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #2">Hello, this is Fred Roppel at KNOW TV."</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #2">Have any more details come in on the pileup at 55/405?</INSTRUCTOR>
+			<STUDENT>Vehicles blocking 3 NB 405 lanes, 4 dead and 7 injured, ??? mile backup</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">Do you have an alternate route I can recommend?</INSTRUCTOR>
+			<STUDENT>(pause for answer: Yes)</STUDENT>
+			<STUDENT>3 car collision, vehicles blocking #2,3,4 lanes.  Moderate injuries.</STUDENT>
+		</TELEPHONE>
+		
+		<CMS_EVALUATION cmsID="95" type="new"> 
+			<LOCATION>NB 5 @ EL TORO</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>3 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:20:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-15,9-19 ENRT FOR 1184</DETAIL>
+				<UNIT UnitNum="9-15" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="9-19" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "38" Path = "188/18803.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18803.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-15, 9-19 Santa Lucia</LINE>				
+				<LINE Role="Field_1">Santa Lucia 9-15 go ahead.</LINE>				
+				<LINE Role="Field_2">Santa Lucia go ahead to 9-19.</LINE>				
+				<LINE Role="Dispatch">9-15 and 9-19 Santa Lucia 11-84 for 11-79 
+						northbound 5 just north of Lake Forest Drive.</LINE>				
+				<LINE Role="Field_1">	Santa Lucia 9-15 10-4. Enroute from 55 at 4th Street.</LINE>				
+				<LINE Role="Field_2">Santa Lucia 9-19 copied enroute from 405 at Culver.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copies 9-15 enroute from 55 at 4th and 9-19 
+		  				enroute from 405 at Culver.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #3">Hello, this is Bill Bradley at KCTR radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #3">I heard here was a large collision on the 5.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #3">What details do you have on that?</INSTRUCTOR>
+			<STUDENT>Semi and 2 cars, tomatoes over three right lanes.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #3">Were there any injured?</INSTRUCTOR>
+			<STUDENT>Don't know yet.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:21:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 SABLAN TOWING</DETAIL>
+				<TOW Company="SABLAN TOWING" ConfNum="(949)555-2468" PubNum="(949)555-8899" Beat=""/>
+				<AUDIO Length = "18" Path = "187/18712.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18712.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">	14-17 Santa Lucia information.</LINE>				
+				<LINE Role="Field">	Santa Lucia 14-17 go ahead.</LINE>				
+				<LINE Role="Dispatch">	14-17 Santa Lucia 10-39 Sablan's Towing.</LINE>				
+				<LINE Role="Field">	14-17 copied 10-39 Sablan's Towing.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:22:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-S3 1097 NB 405 @ 55</DETAIL>
+				<DETAIL>MAIT ETA 15</DETAIL>
+				<UNIT UnitNum="14-S3" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "26" Path = "187/18713.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>			
+
+		<CHP_RADIO RadioFile="18713.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 10-97 northbound 405 at 55.  Do you 
+					have an ETA for MAIT?</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4 10-97 northbound 405 
+						at 55. MAIT ETA 15 minutes.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3 copies MAIT ETA 15.</LINE>
+			</DIALOG>		
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:24:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1141 1097, TRCK STLL FIRE, 2 1180 IN VEH, UNK IN TRCK</DETAIL>
+				<AUDIO Length = "32" Path = "188/18804.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18804.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. 11-41 10-97. Truck still engulfed in 
+					flames.  Two 11-80's in the vehicle. Unknown passengers in 
+					the truck. Request TMT, traffic backing up quickly.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. 11-41 10-97. Truck still engulfed.  
+						Two 11-80's in vehicle and unknown passengers in truck.  
+						Request TMT, traffic backing up.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #4">Hello, this is Alex Harmon at KJOK radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #4">How many vehicles were involved in the 
+								 			collision on northbound 5?
+			</INSTRUCTOR>
+			<STUDENT>1 semi, two cars.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #4">How many lanes were blocked?</INSTRUCTOR>
+			<STUDENT>Three right lanes blocked.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #4">Do you have an alternate route established?</INSTRUCTOR>
+			<STUDENT>What's it to you!?</STUDENT>
+		</TELEPHONE>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be assisting radio operator</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should dispatch TMT</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:25:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>REQUEST 1185 BIG RIG AND 1185 ROT, ISSUE SIG ALERT</DETAIL>
+				<AUDIO Length = "23" Path = "188/18805.mp3" />
+			</CAD_INCIDENT_EVENT>
+		</CAD_DATA>			
+		
+
+		<CHP_RADIO RadioFile="18805.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 9-9. Roll 11-85 big rig and a rotational 
+					11-85.  Issue a Sig Alert, this could take a while.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia copied roll 11-85 big rig and 11-85 
+						rotational. Issue a Sig Alert until further notice.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #5">Hello, this is Tim Rogers at KLNW radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #5">What details do you have on the 
+											collision Northbound 5 at Lake Forest Drive?
+			</INSTRUCTOR>
+			<STUDENT>Semi vs. two cars, tomatoes over lanes 3,4,5, two major 
+						 injured, unknown passenger in truc.</STUDENT>
+		</TELEPHONE>		
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be ensuring a Sig Alert is issued</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		
+		<MAINTENANCE_RADIO>
+			If Maintenance has not been requested by this time, 
+			have someone call as CHP Dispatch and make a request for them.
+		</MAINTENANCE_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:27:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CRNR 1097, INJURED TRANSPORTED</DETAIL>
+				<AUDIO Length = "17" Path = "187/18714.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18714.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>
+				<LINE Role="Dispatch">14-S3 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia, coroner 10-97. The injured have been transported.</LINE>
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4 coroner 10-97. Injured transported.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-97 coroner</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:30:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-15 1097, ADVS PD TO DIRECT TRAFFIC OFF AT LAKE FOREST </DETAIL>
+				<UNIT UnitNum="9-15" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "26" Path = "188/18806.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18806.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-15.</LINE>				
+				<LINE Role="Dispatch">9-15 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-15 10-97 11-80. Advise local PD that 
+					we are going to direct traffic off at Lake Forest off ramp and 
+					are closing the Lake Forest on ramp.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copies 9-15 10-97 11-80. Advise PD 
+						we're directing traffic off Lake Forest offramp and closing 
+						Lake Forest onramp.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<STUDENT>Student places call to Police Department</STUDENT>
+			<STUDENT>Student correctly notifies PD of incident location and details</STUDENT>
+		</TELEPHONE>
+
+		<TMT_RADIO>
+			If no sign truck/s have been requested yet, a phone call needs to be 
+			made from CHP Dispatch requesting them.			
+		</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:30:30</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #6">Hello, this is John Sinclair at KRST radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #6">Is there an alternate route 
+											established for the northbound 5 
+											lanes due to the collision at Lake Forest Drive?
+			</INSTRUCTOR>
+			<STUDENT>Lake Forest East to Muirlands or Lake Forest West to Irvine Ctr.  
+				Re-enter I5 at numerous locations</STUDENT>
+		</TELEPHONE>		  
+	</SCRIPT_EVENT>
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:31:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 COLLEGE OAK BIG RIG, CYCLE TOW FOR ROT</DETAIL>
+				<TOW Company="College Oak" ConfNum="(949)555-2990" PubNum="(949)555-5758" Beat=""/>
+				<TOW Company="Cycle" ConfNum="(949)555-2281" PubNum="(949)555-7162" Beat=""/>
+				<AUDIO Length = "20" Path = "188/18807.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18807.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-9 Santa Lucia information</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-39 College Oak for big rig 11-85 and 
+						Cycle Tow for 11-85 rotational.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 copied 10-39 College Oak and Cycle Tow.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>	  
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:32:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-19 1097 ASSISTNG 1184</DETAIL>
+				<UNIT UnitNum="9-19" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "20" Path = "188/18808.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18808.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-19</LINE>
+				<LINE Role="Dispatch">9-19 go ahead to Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 9-19 10-97 11-80. Assisting with 11-84.</LINE>				
+				<LINE Role="Dispatch">9-19 Santa Lucia copied 10-97 11-80. Assisting with 11-84.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:35:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>	
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT 1097 STARTING INVESTIGATION SB SR55</DETAIL>
+				<AUDIO Length = "22" Path = "187/18715.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="187/18715.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3, MAIT is 10-97. They're starting their 
+					investigation on the 55 overpass.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4 MAIT 10-97. Starting 
+						investigation on 55 overpass.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-97 MAIT</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:36:00</TIME_INDEX> 
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="CHP Dispatch">Hello, CHP Dispatch.  Do you have traffic control enroute for NB 405 at 55</INSTRUCTOR>
+			<STUDENT>Do you mean sign truck crews or cones on the road?</STUDENT>
+			<INSTRUCTOR Role="CHP Dispatch">Cones</INSTRUCTOR>
+		</TELEPHONE>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should interact with the dispatch operator regarding cone crews</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:37:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>	
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MED DUTY 1185 1097, AWAIT FINISH MAIT BEFORE TOW VEH</DETAIL>
+				<AUDIO Length = "25" Path = "187/18716.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18716.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia, medium duty 11-85 10-97. Will await the finish of 
+					MAIT investigation before towing vehicle.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4 medium rig 11-85 10-97. Will await 
+						the finish of MAIT investigation before towing vehicle.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:38:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 PD, SENDING 2 UNITS ASST 1184</DETAIL>
+				<AUDIO Length = "17" Path = "188/18809.mp3" />
+			</CAD_INCIDENT_EVENT>
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18809.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-9 Santa Lucia information.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-39 police department. Sending two 
+						units to assist with 11-84.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9 copied</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #3">"Hello, this is Terry Webb at KTSV TV 11."</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #3">My CAD is down, do you have any 
+										 incidents going on right now?
+			</INSTRUCTOR>
+			<STUDENT>Notify reporter of all current incidents.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #3">Give me the details on those.</INSTRUCTOR> 
+			<STUDENT>Notify reporter of all current incident details.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:40:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CRNR CONFIRMED FOUR FATAL, PREP TO TRANSPORT</DETAIL>
+				<AUDIO Length = "19" Path = "187/18717.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18717.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. The coroner has confirmed four fatals and 
+					is preparing them to be transported.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia copied coroner confirmed four fatals 
+						and preparing for transport</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:42:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1180S TRANSPORTED</DETAIL>
+				<AUDIO Length = "14" Path = "188/18810.mp3" />
+			</CAD_INCIDENT_EVENT>
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18810.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 9-9. 11-80's transported.</LINE>
+				<LINE Role="Dispatch">9-9 Santa Lucia copied 11-80's transported.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:43:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-9 FIRE OUT</DETAIL>
+				<AUDIO Length = "14" Path = "188/18811.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18811.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-9. The fire is out.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia 10-4. Fire is out.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should note that the fire has been put out</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>should be active and responding to situation</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:44:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>LAKE FOREST ONRAMP CLOSED, DIRECTING TRAFFIC OFF LAKE FOREST OFFRAMP</DETAIL>
+				<AUDIO Length = "23" Path = "188/18812.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18812.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-15.</LINE>				
+				<LINE Role="Dispatch">9-15 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-15. Lake Forest onramp closed. Directing 405 traffic 
+					off Lake Forest offramp.</LINE>				
+				<LINE Role="Dispatch">9-15 Santa Lucia 10-4. Lake Forest onramp closed.  
+					Directing 405 traffic off at Lake Forest offramp.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #7">Hello, this is Tom Webb at KSON radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #7">Do you have an alternate established 
+											for the norhtbound 5 lanes near Lake 
+											Forest Drive?
+			</INSTRUCTOR>
+			<STUDENT>Same as before..</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #7">When are the lanes supposed to be open?	</INSTRUCTOR>
+			<STUDENT>No specific time, approx. 1 hour.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:47:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT FINISHED W/ INVESTIGATION SB SR-55 AT I-405, PREP DOT TRCK FOR TOW</DETAIL>
+				<AUDIO Length = "24" Path = "187/18718.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18718.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia, MAIT is finished with their investigation on 
+					the 55 overpass.  Preparing DOT truck for tow.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4. MAIT is finished with their 
+						investigation on the 55 overpass. Preparing DOT truck 
+						for tow.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:48:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1 1144 IN TRCK, REQ CRNR</DETAIL>
+				<AUDIO Length = "18" Path = "188/18813.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18813.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. There is one 11-44 in the truck. Request coroner.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia copied one 11-44 in truck. Request coroner.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for coroner request</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+		<TMT_RADIO>Sign truck/s are 97 at the end of the current queue.</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:49:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #8">Hello, this is Jordan Bradley at KTCR radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #8">Do you have any incidents going on right now?</INSTRUCTOR>
+			<STUDENT>Notify reporter of current incidents.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #8">What details do you have on those?</INSTRUCTOR>
+			<STUDENT>Notify reporter of current incident details.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:50:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-9 1039 CRNR, ETA 15</DETAIL>
+				<AUDIO Length = "16" Path = "188/18814.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18814.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">	9-9 Santa Lucia</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-9 go ahead.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia 10-39 coroner, ETA is 15 minutes.</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-9 10-4.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-39 CORONER</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>		
+		
+		<MAINTENANCE_RADIO>
+			Radio traffic between maintenance workers on site and maintenance dispatcher. 
+			Dispatched crews are 10-97 and beginning the cleanup.
+		</MAINTENANCE_RADIO>
+
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:51:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CT 1097, STRTNG CLNUP OF TOMATOES</DETAIL>
+				<AUDIO Length = "18" Path = "188/18815.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18815.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-9. Caltrans is 10-97. Starting cleanup of tomatoes.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia 10-4. Caltrans 10-97. Starting cleanup of tomatoes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #4">Hello, this is Art Philco at KTTQ news 2.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #4">I'm away from my CAD. What's going on 
+										 with the accident on northbound 5 
+										 involving the tomato truck spill?
+			</INSTRUCTOR>
+			<STUDENT>Fire out on truck, 11-44, will start cleanup.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #4">Was anybody killed in the collision.</INSTRUCTOR>
+			<STUDENT>One 11-44</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:52:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TMT_RADIO>Radio traffic between TMT crew and TMT leader regarding current queue status</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:53:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1185 ROT 1097</DETAIL>
+				<AUDIO Length = "15" Path = "188/18816.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18816.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. 11-85 rotation 10-97.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia copied 11-85 rotation 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #9">Hello, this is Jim Sanso at KTAK radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #9">What details do you have on the northbound 5 collision?</INSTRUCTOR>
+			<STUDENT>(pause for answer)</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #9">Is there an alternate route established?</INSTRUCTOR> 
+			<STUDENT>(pause for answer)</STUDENT>			
+		</TELEPHONE>		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:54:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT STARTING INVESTIGATION NB 405 TO TAKE 30 MIN</DETAIL>
+				<AUDIO Length = "23" Path = "187/18719.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18719.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">	14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 14-S3. MAIT is starting investigation on 
+					northbound 405. The investigation should take 30 minutes.</LINE>				
+				<LINE Role="Dispatch">	14-S3 Santa Lucia copied MAIT starting investigation on 
+						northbound 405. The investigation should take 30 minutes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:55:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CLNUP NRLY FNSHD DOT RDY TO BE TWD, SB SR-55 LNS OPN IN 5</DETAIL>
+				<AUDIO Length = "25" Path = "187/18720.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18720.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia, nearly finished with cleanup and the DOT truck 
+					is ready to be towed. Southbound 55 lanes open in 5 minutes.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia 10-4. Nearly finished with cleanup and 
+						DOT truck is ready to be towed. Southbound 55 lanes open in 5.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:56:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>WTNSSES, JOHN/BETTY JONES SAW TOMATO TRUCK LOSE CONTROL, FLIP OVER, VEH HIT, TRCK IMM CAUGHT FIRE</DETAIL>
+				<WITNESS Name="John/Betty Jones" Address="101 Lowland Dr." PhoneNum="(949)555-8375"/>
+				<AUDIO Length = "27" Path = "188/18817.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18817.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Witnesses John and Betty Jones saw the 
+					tomato truck lose control, flip over, and the vehicle hit 
+					it. The truck then caught fire.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Witnesses John and Betty Jones saw 
+						tomato truck lose control, flip over, and vehicle hit 
+						it. Truck then immediately caught fire.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Public">Hello, is George there?</INSTRUCTOR>
+			<STUDENT>No, wrong number.</STUDENT>
+			<INSTRUCTOR Role="Public">Sorry, good bye.</INSTRUCTOR> 
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>00:59:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>BIG RIG 1185 1097</DETAIL>
+				<AUDIO Length = "16" Path = "188/18818.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18818.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 go ahead to Santa Lucia</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9, big rig 11-85 10-97.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia copies, big rig 11-85 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #10">"Hello, this is Bill Rasmussen at KTRC radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #10">"Do you have any updated info on the 
+											northbound 5 collision involving the 
+											tomato truck?"
+			</INSTRUCTOR>
+			<STUDENT>Pause for answer.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #10">When is it expected to be cleared.</INSTRUCTOR>
+			<STUDENT>Cleaning up now, no definite answer, approx. 30 minutes.</STUDENT>
+		</TELEPHONE>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should call CHP to inquire for incident duration.  (Approx 30 minutes)</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:02:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>14-17 1097 DOT TRCK TWD, SB SR-55 OPN</DETAIL>
+				<AUDIO Length = "21" Path = "187/18721.mp3" />
+				
+				<PARAMICS LocationID="187_S_55_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>				
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18721.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-17.</LINE>				
+				<LINE Role="Dispatch">14-17 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 10-98, the DOT truck has been towed and the 
+					southbound 55 lanes are open.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 14-17 10-98. DOT truck towed and 
+						southbound 55 lanes open.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="72" type="remove">
+			<LOCATION>SB 55 @ WARNER AVE</LOCATION>
+		</CMS_EVALUATION>			
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+		<MAINTENANCE_RADIO>
+			Maintenance workers are 10-98.  Truck has been towed and 
+			taking maintenance worker, whose truck got hit, to the shop.
+		</MAINTENANCE_RADIO>		
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:03:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT PARTIAL CMPLT, PICS TKN, NEED MSRMNTS, INTERVIEWS</DETAIL>
+				<AUDIO Length = "25" Path = "187/18722.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18722.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. MAIT has partially completed its 
+					investigation. Pictures have been taken, but still need to 
+					take measurements and conduct interviews.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4. MAIT has partially completed its 
+		  				investigation.  Pictures have been taken, but still need 
+		  				to take measurements and conduct interviews.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:05:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CT #3 LN ALMOST CLEARED OF TOMATOES</DETAIL>
+				<AUDIO Length = "17" Path = "188/18819.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18819.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Caltrans has the #3 lane almost cleared of the tomatoes.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Caltrans has #3 almost cleared.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #11">"Hello, this is Chris Rasmuessan at KWIT radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #11">"Do you have an ETA for the opening of the lanes on Eastbound 91?"
+			</INSTRUCTOR>
+			<STUDENT>No to full opening, approx. 30 minutes, #3 lane nearly cleared.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:07:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>	
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CRNR 1097</DETAIL>
+				<AUDIO Length = "14" Path = "188/18820.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="31520.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9, coroner 10-97.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia copies coroner 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-97 coroner</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+	</SCRIPT_EVENT>
+	
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:08:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #1">"Hello, this Dakota Crew at KTAK radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #1">"Do you have any new incidents 
+											within the last 20 minutes?"
+			</INSTRUCTOR>
+			<STUDENT>No.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #1">Give me the details on that.</INSTRUCTOR>
+		</TELEPHONE>		
+		
+		<MAINTENANCE_RADIO>
+			Maintenance crew notifies dispatch that lane #3 is clear.  The #4,5
+			lanes should be clear in another 20-30 minutes.
+		</MAINTENANCE_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:08:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>REQ 6 ROT 1185</DETAIL>
+				<AUDIO Length = "17" Path = "187/18723.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18723.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. Request 6 rotational 11-85's.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia copied requesting 6 rotational 11-85's.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:09:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VEH TOWED, #3 LN CLEARED, OPENING</DETAIL>
+				<AUDIO Length = "18" Path = "188/18821.mp3" />
+				
+				<PARAMICS LocationID="188_N_5_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>4</Lane_number>
+					<Lane_number>5</Lane_number>
+				</PARAMICS>	
+				
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18821.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Vehicle towed. #3 lane cleared of 
+					tomatoes and opening lane now.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Vehicle towed, #3 lane cleared 
+						and opening lane now.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:10:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT NEARLY COMPLETE, FINISHING INTERVIEWS, TOW ETA 10</DETAIL>
+				<AUDIO Length = "29" Path = "187/18724.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18724.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. MAIT has nearly completed their 
+					investigation, they are finishing up the interviews. ETA 
+					tows?</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia. MAIT has nearly completed their 
+						investigation, they are finishing up the interviews. 
+						Tow ETA 10 minutes.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3 10-4 ETA 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TMT_RADIO>Have SB 55 TMT units go 10-98.</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:12:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1144 CNFRMD, #3 LN OPN, FULL OPNNG 20 MIN</DETAIL>
+				<AUDIO Length = "21" Path = "188/18822.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18822.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Coroner has confirmed 11-44. #3 lane is 
+					open. Full opening in 20 minutes.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. 11-44 confirmed. #3 lane open, 
+						full opening in 20.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for confirmed 1144</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:13:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #1">"Hello, this is Cameron Stevens at KCLY TV 2."</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #1">"My CAD is down. Were there any 
+										 confirmed fatalities at the collision 
+										 northbound 5?"
+			</INSTRUCTOR>
+			<STUDENT>1 dead.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #1">"When are the lanes supposed to be open?"</INSTRUCTOR>
+			<STUDENT>#3 lane open, full opening in 20.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:15:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CT NRLY FNSHD CLNUP, TRCK BEING PRPRD FOR 1185</DETAIL>
+				<AUDIO Length = "18" Path = "188/18823.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18823.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Caltrans is nearly finished with cleanup. 	
+					Truck being prepared for 11-85.</LINE>				
+				<LINE Role="Dispatch">	9-9 Santa Lucia 10-4. Caltrans nearly finished. Truck 
+						being prepared for 11-85.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:16:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #2">"Hello, this is Monica Stevens at KCLY radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #2">When is the roadway supposed to be cleared on the 5?
+			</INSTRUCTOR>
+			<STUDENT>#3 lane open, full opening in approx. 15.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:16:30</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAIT FINISHED INVESTIGATION 1098, START CLEANUP WHEN 1185S ARRIVE</DETAIL>
+				<AUDIO Length = "23" Path = "187/18725.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18725.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. MAIT is finished with their investigation 
+					and 10-98. Will start cleanup when the 11-85's arrive.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia copied MAIT finished with 
+						investigation and 10-98. Start cleanup when 11-85's 
+						arrive.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:18:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<MAINTENANCE_RADIO>Confirm completion of tomato cleanup.  Going 10-98</MAINTENANCE_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:19:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>	
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1185 1097 PARTIAL OPENING IN 15</DETAIL>
+				<AUDIO Length = "21" Path = "187/18726.mp3" />
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18726.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3 11-85's 10-97. Partial opening in 15 minutes.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4 11-85's 10-97. Partial opening in 15 minutes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:20:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CT 98 TOMATOES, LNS OPN IN 10</DETAIL>
+				<AUDIO Length = "17" Path = "188/18824.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18824.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Caltrans done cleaning up the tomatoes. 
+					Lanes open in 10.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Caltrans 98 with 
+						tomatoes, lanes open in 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:21:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #3">"Hello, this is Bill Bradley at KCTR radio."</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #3">"What kind of backup is there on 
+											northbound 5 due to the tomato truck spill and collision?"
+			</INSTRUCTOR>
+			<STUDENT>Current queue from ATMS.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #3">Are the lanes open soon?</INSTRUCTOR>
+			<STUDENT>10 minutes.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:23:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO005</MASTER_INC_NUM>
+			<P>3</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1031 - Crime in progress</TYPE_CODE>
+				<TYPE>1031</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>28-24</BEAT>
+				<ADDRESS>NB/SB 405 at Jeffrey</ADDRESS>
+				<LOC>NB/SB 405 at Jeffrey</LOC>
+				<CITY>San Luis Obispo</CITY>
+				<AREA>28-San Luis Obispo</AREA>
+				<FIRE>San Luis Obispo</FIRE>
+				<LAW>San Luis Obispo</LAW>
+				<EMS>San Luis Obispo</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1031</Type>
+				<Beat>28-24</Beat>
+				<TruncLoc>NB/SB 405 at Jeffrey</TruncLoc>
+				<FullLoc>NB/SB 405 at Jeffrey</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="189_N_405_ML">
+				<Route>405</Route>
+				<Direction>NB</Direction>
+				<Postmile>3.04</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<LOCATION_INFO ID="189_N_405_HV">
+				<Route>405</Route>
+				<Direction>NB</Direction>
+				<Postmile>3.04</Postmile>
+				<Location_type>HV</Location_type>					
+			</LOCATION_INFO>
+
+			<LOCATION_INFO ID="189_S_405_ML">
+				<Route>405</Route>
+				<Direction>SB</Direction>
+				<Postmile>5.55</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<LOCATION_INFO ID="189_S_405_HV">
+				<Route>405</Route>
+				<Direction>SB</Direction>
+				<Postmile>5.55</Postmile>
+				<Location_type>HV</Location_type>					
+			</LOCATION_INFO>
+			
+
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>CELLULAR 911 RPT SUICIDE BMBR AT I-405 @ JEFFREY, UNVERIFIED</DETAIL>
+				<DETAIL>1039 IRV PD, PD ENRT, 28-24 ENRT FROM I-405 @ IRVINE CNTR.</DETAIL>
+				<UNIT UnitNum="28-24" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "23" Path = "189/18901.mp3" />
+			</CAD_INCIDENT_EVENT>		
+			
+		</CAD_DATA>	
+
+		<GENERAL_INFO> 
+			<TITLE>Incident Description</TITLE>
+			<TEXT>This is a suicide attempt and a bomb threat. A man with a bomb 
+		  strapped to him is threatening to blow up the interchange at I-405 and
+		  Jeffrey Road. The freeway interchange is shut down completely, causing 
+		  major backup in both directions on I-405. The man is eventually 
+		  apprehended after attempting to explode the bomb. The PD, additional 
+		  units, sign trucks, negotiator, and the bomb squad are sent to the 
+		  scene to assist.
+			</TEXT>
+		</GENERAL_INFO>
+
+		<CHP_RADIO RadioFile="18901.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">28-24 Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-24 go ahead.</LINE>				
+				<LINE Role="Dispatch">	28-24 Santa Lucia suicide attempt 405 on the Jeffrey 
+						overpass. The police department has been notified 
+						and is enroute.</LINE>				
+				<LINE Role="Field">	Santa Lucia 28-24 10-4. Enroute from 405 at Irvine Center.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Operator should be viewing CCTV cameras in vicinity of incident</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+
+		<MAINTENANCE_RADIO>No Maintenance needed on scene for this incident.</MAINTENANCE_RADIO>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:24:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>TRCK TWD, FD SPRYNG LNS, LNS OPN IN 5</DETAIL>
+				<AUDIO Length = "21" Path = "188/18825.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18825.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-9.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-9. Truck towed. Fire department spraying lanes 
+					clean. Lanes open in 5.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. Truck towed. Fire department 
+						spraying lane clean, lanes open in 5.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:25:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #4">Hello, this is Alex Harmon at KJOK radio.</INSTRUCTOR> 
+			<INSTRUCTOR Role="Radio Reporter #4">Are the lanes open yet on 
+											northbound 5 just north of Lake 
+											Forest Drive.
+			</INSTRUCTOR>
+			<STUDENT>#3 open, all lanes open in 5.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #4">Are there any other new incidents 
+											going on right now?
+			</INSTRUCTOR>
+			<STUDENT>Notify reporter of new incidents.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:25:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-24 1097, PD 1097</DETAIL>
+				<UNIT UnitNum="28-24" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "18" Path = "189/18902.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18902.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-24.</LINE>				
+				<LINE Role="Dispatch">28-24 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-24 10-97 405 at Jeffrey. 
+				                   Irvine PD is 10-97.
+				</LINE>			
+				<LINE Role="Dispatch">10-4, Copy you  are 97 with Irvine PD.
+				</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:29:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-19 ENRT FROM I-5 AT SND CYN, 28-13 ENRT FROM I-5 AT 133</DETAIL>
+				<DETAIL>SHUT DWN NB I-405 AT SND CYN OFFR</DETAIL>
+				<UNIT UnitNum="28-19" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="28-13" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "44" Path = "189/18903.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18903.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">28-19 Santa Lucia.</LINE>				
+				<LINE Role="Field_1">Santa Lucia 28-19 go ahead.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia 10-23.</LINE>					
+				<LINE Role="Dispatch">(pause)</LINE>				
+				<LINE Role="Dispatch">28-13 Santa Lucia.</LINE>				
+				<LINE Role="Field_2">Santa Luica 28-13 go ahead.</LINE>				
+				<LINE Role="Dispatch">28-19 and 28-13 Santa Lucia, proceed to northbound 405 
+						to shut down the northbound lanes at the Sand Canyon off 
+						ramp. A man has threatened to blow up the 405 at 
+						Jeffrey interchange.</LINE>
+				
+				<LINE Role="Field_1">Santa Lucia 28-19 10-4. Enroute from I-5 at Sand Canyon.</LINE>				
+				<LINE Role="Field_2">Santa Lucia 28-13 copied, enroute from I-5 at 133.</LINE>
+			</DIALOG>
+		</CHP_RADIO>			
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:30:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>OPN #2,3 LNS, FULL OPN IN 5</DETAIL>
+				<AUDIO Length = "20" Path = "187/18727.mp3" />				
+				
+				<PARAMICS LocationID="187_N_405_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+				</PARAMICS>						
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+
+		<CHP_RADIO RadioFile="18727.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. We have opened the #2 and #3 lanes. Full 
+					opening in 5 minutes.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4. #2 and #3 lanes open, full opening in 5.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="87" type="update">
+			<LOCATION>NB 405 @ HARVARD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="88" type="update">
+			<LOCATION>NB 405 @ ICD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="95" type="update">
+			<LOCATION>NB 5 @ EL TORO</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT AT HWY-55</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>		
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:31:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>ALL LNS CLR, 9-15 OPENING LAKE FOREST ONRAMP</DETAIL>
+				<DETAIL>9-9,9-15,9-19 1098</DETAIL>
+				<UNIT UnitNum="9-9" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="9-15" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="9-19" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "25" Path = "188/18827.mp3" />
+				
+				<PARAMICS LocationID="188_N_5_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>		
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="18827.mp3">
+			<DIALOG> 
+				<LINE Role="Field">Santa Lucia 9-9</LINE>
+				<LINE Role="Dispatch">9-9 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia 9-9. All lanes are clear.  9-15 is opening Lake Forest Onramp.  All units are 10-98.</LINE>				
+				<LINE Role="Dispatch">9-9 Santa Lucia 10-4. All lanes open.  9-15 opening Lake Forest Onramp.
+						9-9. 9-15, 9-19 are 1098.</LINE>	
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should cancel Sig Alert</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be handling situation well</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:31:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-11 ENRT FROM I405 AT BRISTOL, 28-07 ENRT FROM SR55 AT DYER</DETAIL>
+				<DETAIL>28-11 28-07 TO SHT DWN SB I405 AT CULVER OFFR</DETAIL>
+				<UNIT UnitNum="28-11" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="28-07" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "45" Path = "189/18904.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18904.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">	28-11 Santa Lucia.</LINE>
+				<LINE Role="Field_1">	Santa Lucia 28-11 go ahead.</LINE>
+				<LINE Role="Dispatch">	28-11 Santa Lucia 10-23.</LINE>
+				<LINE Role="Dispatch">	28-07 Santa Lucia.</LINE>
+				<LINE Role="Field_2">	Santa Lucia 28-07 go ahead.</LINE>
+				<LINE Role="Dispatch">	28-11 and 28-07 Santa Lucia, proceed to southbound I405 
+							to shut down the southbound lanes at the Culver Dr off 
+							ramp. A man has threatened to blow up the 405 at 
+							Jeffrey interchange.</LINE>
+				<LINE Role="Field_1">	Santa Lucia, 28-11 10-4 enroute from 405 at Bristol Sreet.</LINE>
+				<LINE Role="Field_2">	Santa Lucia, 28-07 10-4. Enroute from 55 at Dyer.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #2">Hello, this is Fred Roppel at KNOW TV channel 11.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #2">I just heard about a suicide attempt on I405.
+			</INSTRUCTOR>
+			<STUDENT>Confirm report.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"Where exactly is it located, I would 
+											 like to send a camera out there?"
+			</INSTRUCTOR>
+			<STUDENT>I405 at Jeffrey Dr.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"Are you closing down any of the lanes?"</INSTRUCTOR>
+			<STUDENT>Closing down the whole interchange.</STUDENT>
+		</TELEPHONE>
+
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>HAR should note incident. Should note interchange closed 
+							 when all lanes have been closed. HAR's #3 and #4 might 
+							 also note interchange closed.
+			</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:32:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>PD CLOSING JEFFREY AND UNIV DR, SENDING NEGOTIATOR, REQ SIGALERT</DETAIL>
+				<AUDIO Length = "30" Path = "189/18905.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="18905.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-24.</LINE>				
+				<LINE Role="Dispatch">28-24 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-24. The police department is taking care of 
+					the Jeffrey Road and University Drive closures. They have 
+					sent for a negotiator to talk the man down. Issue a Sig 
+					Alert on this one, we'll be here a while.</LINE>				
+				<LINE Role="Dispatch">28-24 Santa Lucia 10-4. PD closing Jeffrey Road and 
+						University Drive and sending negotiator to talk man 
+						down. 	Requesting Sig Alert until further notice.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #5">Hello, this is Tim Rogers at KLNW radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #5">I was told that both the northbound 
+											and southbound I405 lanes are going 
+											to be closed due to a suicide 
+											attempt. What details do you have on 
+											that?
+			</INSTRUCTOR>
+			<STUDENT>Gives details of closure.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #5">Is a detour being set up?</INSTRUCTOR>
+			<STUDENT>Don't know as of yet.</STUDENT>
+		</TELEPHONE>
+		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should ensure HQ Comm is notified</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should notify District Duty Officer</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:35:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VEH TWD, LNS OPN, 14-S, 14-9, 14-14 1098</DETAIL>
+				<UNIT UnitNum="14-14" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="14-17" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="14-9" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="14-S3" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "23" Path = "187/18728.mp3" />
+				
+				<PARAMICS LocationID="187_N_405_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>							
+				
+				<PARAMICS LocationID="187_N_405_HV">
+					<Status>CLEARED</Status>
+				</PARAMICS>			
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>
+		
+		<CHP_RADIO RadioFile="18728.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 14-S3.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 14-S3. Vehicles have been towed and lanes open. 
+					All units are 10-98.</LINE>				
+				<LINE Role="Dispatch">14-S3 Santa Lucia 10-4. Vehicles towed and lanes open.  
+						14-S3,14-9, and 14-14 are 10-98.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #3">Hello, this is Terry Webb at KTSV TV channel 11.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #3">Are the lanes clear NB 405 at 55?
+			</INSTRUCTOR>
+			<STUDENT>Lanes were just cleared.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #3">How many were injured in that accident?
+			</INSTRUCTOR>
+			<STUDENT>There were 3 dead and 7 injured.</STUDENT>
+		</TELEPHONE>
+		
+		<CMS_EVALUATION cmsID="87" type="remove">
+			<LOCATION>NB 405 @ HARVARD</LOCATION>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="88" type="remove">
+			<LOCATION>NB 405 @ ICD</LOCATION>
+		</CMS_EVALUATION>
+		<CMS_EVALUATION cmsID="95" type="remove">
+			<LOCATION>NB 5 @ EL TORO</LOCATION>
+		</CMS_EVALUATION>
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>		
+		<FACILITATOR_EVALUATION>
+			<EXPECTED_ACTION>Should be alert to the situation</EXPECTED_ACTION>
+		</FACILITATOR_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:36:00</TIME_INDEX>
+		<INCIDENT LogNum="188">Tomato Truck Spill/Fire</INCIDENT>
+
+		<TMT_RADIO>TMT units go 10-98.  Traffic is back to normal</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:36:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-13 1097, 10-23 28-19 B4 CLOSING NB LNS, 1039 DOT FOR SIGN TRUCKS</DETAIL>
+				<UNIT UnitNum="28-13" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "33" Path = "189/18906.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18906.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-13.</LINE>				
+				<LINE Role="Dispatch">28-13 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-13 10-97 northbound 405 at Sand Canyon.  Will 
+					10-23 28-19 and then proceed to close down northbound lanes. 
+					Do we have any sign trucks enroute yet to assist with the 
+					closure?</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-13 10-97 northbound 405 at Sand 
+						Canyon. 10-23 28-19 before closing northbound lanes. Checking on TMT.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>
+			</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		
+		<MAINTENANCE_RADIO>Get TMT rolling.</MAINTENANCE_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:37:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-11 1097, CLSNG DWN SB LNS AT CULVER DR OFFR</DETAIL>
+				<UNIT UnitNum="28-11" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "21" Path = "189/18907.mp3" />
+				
+				<PARAMICS LocationID="189_S_405_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>				
+				</PARAMICS>	
+
+				<PARAMICS LocationID="189_S_405_HV">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>		
+				</PARAMICS>				
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18907.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-11.</LINE>				
+				<LINE Role="Dispatch">28-11 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-11 10-97 405 at Culver offramp.  
+					Proceeding to close down the southbound lanes.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-11 10-97 405 at Culver offramp. 
+					Closing southbound lanes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="CHP Dispatch">Hello, this is CHP Dispatch.</INSTRUCTOR>
+			<STUDENT>Have sign trucks been sent to the bomb threat at the 
+						 I405 and Jeffrey Road overpass?</STUDENT>
+			<STUDENT>Responds correctly to question.</STUDENT>
+			<STUDENT>Notifies maintenace station to dispatch sign trucks.</STUDENT>
+		</TELEPHONE>
+		
+		<CMS_EVALUATION cmsID="89" type="new"> 
+			<LOCATION>SB 405 @ Von Karmen</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>FWY CLOSED AT CULVER DR</CMS_LINE> 
+				<CMS_LINE>USE OTHER ROUTES</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		
+		<CMS_EVALUATION cmsID="86" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>FWY CLOSED AT CULVER DR</CMS_LINE> 
+				<CMS_LINE>USE OTHER ROUTES</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		
+		<CMS_EVALUATION cmsID="72" type="new"> 
+			<LOCATION>SB 55 @ Warner</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>S-405 CLOSED AT CULVER DR</CMS_LINE> 
+				<CMS_LINE>USE OTHER ROUTES</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:38:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-13, 28-19 SHUTTING DWN NB 405 LNS AT SAND CYN ST OFFR</DETAIL>
+				<UNIT UnitNum="28-19" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "30" Path = "189/18908.mp3" />
+				
+				<PARAMICS LocationID="189_N_405_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>	
+					<Lane_number>5</Lane_number>				
+				</PARAMICS>	
+				
+				<PARAMICS LocationID="189_N_405_HV">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>1</Lane_number>				
+				</PARAMICS>	
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18908.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-19.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-19 10-97 northbound 405 at Sand Canyon.  
+					28-13 and I are proceeding to shut down the northbound 405 lanes 
+					at the Sand Canyon offramp.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-19 10-97 northbound 405 at Sand 
+						Canyon. 28-13, 28-19 shutting down northbound 405 lanes at 
+						Sand Canyon off ramp.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #4">Hello, this is Art Philco at KTTQ TV.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #4">I heard over the scanner that there is 
+										 a bomb threat on the 5.
+			</INSTRUCTOR>
+			<STUDENT>Correct location is I405.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #4">I would like to send a helicopter out 
+										 there, what are the details on the 
+										 threat?
+			</INSTRUCTOR>
+		</TELEPHONE>	
+		
+		<CMS_EVALUATION cmsID="88" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>FWY CLOSED AT SAND CYN AVE</CMS_LINE> 
+				<CMS_LINE>USE HWY-133</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="95" type="new"> 
+			<LOCATION>NB 5 @ El Toro</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>N-405 CLOSED AT SAND CYN AVE</CMS_LINE> 
+				<CMS_LINE>USE OTHER ROUTES</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:39:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #1">Hello, this is Cameron Stevens at KNOW TV 2.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #1">I heard about a suicide on the 405, 
+										 what details do you have on that?
+			</INSTRUCTOR>
+			<STUDENT>Located I405 and Jeffrey overpass, man has bomb 
+						 strapped to himself, closing down I405 in both directions.
+			</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:40:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-07 1097 ASSTNG 28-11 CLSNG SB LNS AT CULVER OFFR</DETAIL>
+				<UNIT UnitNum="28-07" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "23" Path = "189/18909.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18909.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-07.</LINE>				
+				<LINE Role="Dispatch">28-07 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-07 10-97 southbound 405 at Culver Dr. 
+					Assisting 28-11 with the closure.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-07 10-97 southbound 405 at Culver 
+						Drive. Assisting 28-11 with closure.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+		<TMT_RADIO>If no sign trucks have been requested yet, another 
+						 phone call needs to be made from CHP Dispatch 
+						 requesting them.
+		</TMT_RADIO>		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:41:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-S4 1097 I5 JEFFREY AVE ASSIST</DETAIL>
+				<UNIT UnitNum="28-S4" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "19" Path = "189/18910.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18910.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4 10-97 I-405 at Jeffrey overpass.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 28-S4 10-97 I-405 at Jeffrey Road.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #6">Hello, this is John Sinclair at KNIN radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #6">Is the surrounding residential area 
+											around the bomb threat being evacuated?
+			</INSTRUCTOR>
+			<STUDENT>They don't know, although the correct answer will be no.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:43:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>PD STTNG DETOURS, SB TRFFC OFF AT CULVER AVE, NB TRFFC OFF AT SAND CYN</DETAIL>
+				<AUDIO Length = "22" Path = "189/18911.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18911.mp3">
+			<DIALOG>
+				<LINE Role="Field">	Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">	28-S4 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">	Santa Lucia 28-S4. Irvine PD is setting up 
+					detours through the city for the northbound and southbound 
+					405 traffic.
+				</LINE>				
+				<LINE Role="Dispatch">	28-S4 Santa Lucia 10-4. Police department setting up 
+						detours through the city for all traffic.
+				</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Public">Hello, I just saw on TV that there is bomb 
+								   on the I405 near University Drive.
+			</INSTRUCTOR>
+			<STUDENT>Confirm report.</STUDENT>
+			<INSTRUCTOR Role="Public">"I live nearby, Is that area evacuated?</INSTRUCTOR>
+			<STUDENT>No, not to the best of my knowledge.	</STUDENT>
+		</TELEPHONE>
+
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should have posted a Sig Alert by this time</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:44:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>NEGOTIATOR 1097</DETAIL>
+				<AUDIO Length = "20" Path = "189/18912.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18912.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. Negotiator is 10-97 and attempting to 
+					talk the man down.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia 28-S4 10-4. Negotiator is 10-97 and 
+						attempting to talk man down.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>	
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:45:00</TIME_INDEX>
+		<INCIDENT LogNum="187">Stalled DOT/Traffic Collision</INCIDENT>
+		
+		<TMT_RADIO>Have NB 405 TMT units go 10-98.</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:45:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>NB LNS SHUT DOWN</DETAIL>
+				<AUDIO Length = "16" Path = "189/18913.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18913.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-19.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-19. The northbound lanes are shut down.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia 10-4. Northbound lanes are shut down.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:46:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>SUSP WON'T ALLOW NEGOTIATOR NEAR HIM</DETAIL>
+				<AUDIO Length = "22" Path = "189/18914.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="18914.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. This is going to take a while. The man 
+					won't let the negotiator get close to him.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. Negotiations will take a while, 
+						man won't let the negotiator get close to him.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:47:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-07 SB LNS SHUT DOWN</DETAIL>
+				<AUDIO Length = "19" Path = "189/18915.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18915.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-07.</LINE>				
+				<LINE Role="Dispatch">28-07 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-07. The southbound lanes have been shut down. 
+					Traffic is building up quickly.</LINE>				
+				<LINE Role="Dispatch">28-07 Santa Lucia 10-4. Southbound lanes shut down.  
+						Traffic building up quickly.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:50:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>SUSP IS CALMING DOWN.  BOMB SQD 1097</DETAIL>
+				<AUDIO Length = "18" Path = "189/18916.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18916.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>
+				<LINE Role="Dispatch">28-S4 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia 28-S4. The man is calming down. The bomb squad is 10-97.</LINE>
+				<LINE Role="Dispatch">	28-S4 Santa Lucia 10-4. Man calming down. Bomb squad 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should enter info for 10-97 Bomb Squad</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+
+		<TMT_RADIO>>Call saying the sign trucks are 10-97.  Queue update.</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:51:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO006</MASTER_INC_NUM>
+			<P>5</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1179 Accident - Ambulance Responding</TYPE_CODE>
+				<TYPE>1179</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>9-22</BEAT>
+				<ADDRESS>NB5 JNO Main Street</ADDRESS>
+				<LOC>NB5 JNO Main Street</LOC>
+				<CITY>Templeton</CITY>
+				<AREA>9-Templeton</AREA>
+				<FIRE>Templeton</FIRE>
+				<LAW>Templeton</LAW>
+				<EMS>Templeton</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>9-22</Beat>
+				<TruncLoc>NB5 JNO Main St</TruncLoc>
+				<FullLoc>NB5 JNO Main St</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="190_N_5_ML">
+				<Route>5</Route>
+				<Direction>NB</Direction>
+				<Postmile>33.2</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<CAD_INCIDENT_EVENT>
+				<PARAMICS LocationID="190_N_5_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>				
+				</PARAMICS>		
+			</CAD_INCIDENT_EVENT>
+			
+		</CAD_DATA>		
+		
+		<GENERAL_INFO> 
+			<TITLE>Incident Description</TITLE>
+			<TEXT>Incident Description - This is a collision involving a tanker truck 
+		  and a car that block the #3 and 4 lanes on NB I-5 just north of 
+		  Main Street. There are 2 minor injured and 1 major injured. 
+		  Liquid is leaking out of the tanker truck which is identified as milk. 
+		  The leak is plugged and the fire department sprays the milk down the 
+		  drain. The fire department, ambulance, additional units, TMT, a big 
+		  rig tow, and a rotational tow are sent to the scene.</TEXT>
+		</GENERAL_INFO>
+
+		<MAINTENANCE_RADIO>No Maintenance needed on scene for this incident.</MAINTENANCE_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:53:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>9-22 ENRT FROM 57 @ CHAPMAN</DETAIL>
+				<UNIT UnitNum="9-22" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "24" Path = "190/19001.mp3" />
+				
+			</CAD_INCIDENT_EVENT>					
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19001.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-22 Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 11-79 northbound 5 just north of Main Street.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22 copies, enroute from 57 at Chapman Ave.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Enroute from 57 at Chapman Ave.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CAD_EVALUATION>
+			<EXPECTED_ACTION>Should shold be verifying incident 190 on the CAD.</EXPECTED_ACTION>
+		</CAD_EVALUATION>	
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Should try to confirm the incident with a CCTV cameras.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:54:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Mayor">"Hello, this is Mayor Krom of Irvine."
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Mayor">I just heard that a bomb went off on I405. Was 
+								 anyone injured or killed?
+			</INSTRUCTOR>
+			<STUDENT>Not true - no bomb was not detonated.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:56:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>		
+
+		<TMT_RADIO>Queue update</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:58:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>9-22 1097 2 VEH TC, VEH VS TANKER TRK, BLKNG #3,4</DETAIL>
+				<DETAIL>UNID LIQUID LEAKING FROM TNKR, NEED TO CLOSE NB LANES, REQ UNITS</DETAIL>
+				<UNIT UnitNum="9-22" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "37" Path = "190/19002.mp3" />		
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19002.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22 1097 JNO Main St. 2 vehicle collision 
+					between tanker truck and vehicle blocking #3, 4 lanes.  
+					Unidentified liquid leaking out of the tanker. Request 
+					additional units, we're going to have to shut down the 
+					northbound lanes until we identify the susbstance.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied. 9-22 10-97.  2 vehicle 
+						collision, tanker truck and vehicle, blocking #3, 4. 
+						Unidentified liquid leaking out of tanker. Request 
+						units to shut down NB lanes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="93" type="new"> 
+			<LOCATION>NB-5 S/O Redhill</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>2 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>				
+		
+		<CMS_EVALUATION cmsID="94" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT N-5</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>2 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+
+		<MAINTENANCE_RADIO>TMT Earliest possible request for sign trucks. Send trucks if requested.
+		</MAINTENANCE_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>01:59:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>9-23, 9-26 ENRT TO ASSIST 9-22</DETAIL>
+				<UNIT UnitNum="9-23" Status="ENRT" Primary="false" Active="true"/>
+				<UNIT UnitNum="9-26" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "41" Path = "190/19003.mp3" />		
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19003.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">9-23, 9-26 Santa Lucia.</LINE>				
+				<LINE Role="Field_1">Santa Lucia 9-23 go ahead.</LINE>				
+				<LINE Role="Field_2">Santa Lucia 9-26 go ahead.</LINE>				
+				<LINE Role="Dispatch">9-23 and 9-26 Santa Lucia, 1179 northbound 5 
+						just north of Main St blocking #3,4 .  22 request assistance closing freeway.</LINE>				
+				<LINE Role="Field_1">Santa Lucia 9-23 10-4. Enroute from 22 just south of 
+						Euclid Avenue.</LINE>				
+				<LINE Role="Field_2">Santa Lucia 10-4. 9-26 enroute from 57 at 91.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copied 9-23, 9-26 enroute.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:00:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>1141, FD 1097, TRCK DRVR 1180 UNCONCIOUS, 2 1181S, LIQUID LEAKING INTO #2 LN. #2,3,4 BLKD AT THIS TIME</DETAIL>
+				<AUDIO Length = "35" Path = "190/19004.mp3" />		
+				
+				<PARAMICS LocationID="190_N_5_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>2</Lane_number>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>				
+				</PARAMICS>					
+				
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19004.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. 1141 is 1097. The 
+					driver of the truck is 1180 and unconscious. There are 2 
+					1181s in the other vehicle. The liquid is leaking out into 
+					the #2 lane. #2,3,4 lanes blocked at this time.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copies. 1141 1097. 1 
+						1180 and 2 1181's.  Liquid leaking into #2 lane.  #2,3,4 lanes are blocked.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #7">Hello, this is Kim Williamson at KRST radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #7">I just caught on the scanner that 
+											there was some type of spill on 57.
+			</INSTRUCTOR>
+			<STUDENT>Confirm incident.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #7">What kind of details do you have 
+											on the collision?
+			</INSTRUCTOR>
+			<STUDENT>Truck vs car, #3 and 4 lanes blocked, liquid spill in lanes.</STUDENT>
+		</TELEPHONE>
+		
+		<CMS_EVALUATION cmsID="93" type="update"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>3 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>				
+		
+		<CMS_EVALUATION cmsID="94" type="update"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT N-5</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>3 RT LANES BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>			
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:01:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>NEGOTIATOR MAKING PROGRESS, SUSP MAY SURRENDER</DETAIL>
+				<AUDIO Length = "21" Path = "189/18919.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="18919.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. The negotiator has made some 
+					progress. Looks like the man is about to give himself up.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. Negotiator has made progress and 
+						looks like the man is about to give himself up.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:01:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>DONT HAVE TO SHUT THE FWY, LIQUID ID'D AS MILK.  #1 LN WILL REMAIN OPEN.</DETAIL>
+				<DETAIL>ATTEMPTING TO CONTROL THE LEAK. REQ BIG RIG AND ROT 1185</DETAIL>
+				<AUDIO Length = "27" Path = "190/19005.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19005.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>
+				<LINE Role="Field">Santa Lucia 9-22. We don't have to shut down all the lanes, 
+					the liquid is milk. Attempting to control the leak.  Request big 
+					rig 11-85 and 11-85 rotational.</LINE>
+				<LINE Role="Dispatch">9-22 Santa Lucia copied don't have to close all lanes, 
+						liquid is milk. Attempting to control the leak. Requesting big 
+						rig and rotational 11-85's.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #8">Hello, this is Tom Webb at KSON radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #8">I just heard the northbound lanes 
+											on 57 are being closed.
+			</INSTRUCTOR>
+			<STUDENT>Confirmation.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #8">Why are they closing the lanes.
+			</INSTRUCTOR>
+			<STUDENT>Liquid spill, collision.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #8">How long are they expected to be 
+											closed.
+			</INSTRUCTOR>
+			<STUDENT>Until cleanup - no definitive answer.</STUDENT>
+		</TELEPHONE>
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:02:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #2">"Hello, this is Fred Roppel at KNOW TV 
+										 Channel 3."
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #2">"Has a bomb been found yet at the 405 
+										 and Jeffrey interchange?"
+			</INSTRUCTOR>
+			<STUDENT>No bomb has been found.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"When will they be done with their search?"
+			</INSTRUCTOR>
+			<STUDENT>Unknown, but about 10 minutes.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"Are there any other incidents going on 
+										 right now?"
+			</INSTRUCTOR>
+			<STUDENT>Notify reporter of incidents.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #2">"What are their details?"</INSTRUCTOR>
+			<STUDENT>Notify reporter of incident details.</STUDENT>
+		</TELEPHONE>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:03:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #9">Hello, this is Jordan Bradley at KTCR radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #9">How many lanes are blocked by the 
+											collision on 57 at Katella?
+			</INSTRUCTOR>
+			<STUDENT>#3 and 4 lanes blocked, milk in #2 lane.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #9">How many Injured are there?</INSTRUCTOR>
+			<STUDENT>3 injured.</STUDENT>
+		</TELEPHONE>
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>HAR should note incident.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:04:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-23 1097, REQ TMT, TRAFFIC BACKING</DETAIL>
+				<UNIT UnitNum="9-23" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "21" Path = "190/19006.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19006.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-23.</LINE>				
+				<LINE Role="Dispatch">9-23 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-23 10-97 11-80. Request TMT, traffic is backing up.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copies 9-23 10-97 11-80. Request TMT, traffic is backing up.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		
+		<TMT_RADIO>
+			Time of request by CHP officers in the field for sign 
+						 trucks. Send sign trucks to scene when requested.
+						 ***CONTROL ROOM ACTION*** - Call TMC, ask for TMT
+		</TMT_RADIO>
+		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:05:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+
+		<TMT_RADIO>Queue Update</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:06:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>MAN TRIED TO DETONATE THE DEVICE, BOMB DIDNT ACTIVATE, PD APPRHNDNG</DETAIL>
+				<AUDIO Length = "23" Path = "189/18921.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>			
+		
+		<CHP_RADIO RadioFile="18921.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. The man just tried to blow himself up, 
+					but the bomb didn't go off! The police department is 
+					apprehending him now.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. Man attempted to blow up the 
+						interchange and is being apprehended by the PD.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:08:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>SUSP IN CUSTODY, BOMB SQD INSPECTING BOMB</DETAIL>
+				<AUDIO Length = "20" Path = "189/18922.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18922.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. The man is in custody, and the bomb squad 
+					is attempting to diffuse the bomb.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. Man in custody, and bomb squad 
+						diffusing the bomb.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:09:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<TMT_RADIO>Queue update</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:11:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>PREPARING TO TRANSPORT VICTIMS, #1 LN OPN</DETAIL>
+				<AUDIO Length = "15" Path = "190/19007.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19007.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The victims are being prepared for 
+					transport.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Victims being prepared for 
+						transport.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:11:30</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #10">Hello, this is Jim Sanso at KTAK 
+											 radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #10">I just heard about a large 
+											 collision and spill on the 55.
+			</INSTRUCTOR>
+			<STUDENT>Correct location is on northbound 57.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #10">Give me the details on that.
+			</INSTRUCTOR>
+			<STUDENT>Gives details regarding incident.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:12:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should have requested sign truck(s)</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:13:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>9-26 1097 VICTIMS TRANSPORTED</DETAIL>
+				<UNIT UnitNum="9-26" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "15" Path = "190/19008.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19008.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-26.</LINE>				
+				<LINE Role="Dispatch">9-26 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia I'm 1097.  The victims have been transported.</LINE>				
+				<LINE Role="Dispatch">	Santa Lucia copies 9-26 10-97. Victims transported.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #11">Hello, this is Bill Rasmussen at KTRC radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #11">What details do you have on the collision on 57.
+			</INSTRUCTOR>
+			<STUDENT>Tanker vs. car, milk spill, 3 lanes blocked, 3 injured.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #11">Is there an alternate route 
+											established, that I could tell my listeners?
+			</INSTRUCTOR>
+			<STUDENT>Alternate route??</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:14:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>CODE A, BOMB DEFUSED, LNS BEING OPENED</DETAIL>
+				<AUDIO Length = "19" Path = "189/18923.mp3" />
+				
+				<PARAMICS LocationID="189_N_405_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>	
+				
+				<PARAMICS LocationID="189_N_405_HV">
+					<Status>CLEARED</Status>
+				</PARAMICS>		
+				
+				<PARAMICS LocationID="189_S_405_ML">
+					<Status>CLEARED</Status>
+				</PARAMICS>	
+				
+				<PARAMICS LocationID="189_S_405_HV">
+					<Status>CLEARED</Status>
+				</PARAMICS>		
+				
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="18923.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. The bomb has been diffused. We're opening 
+					the lanes now.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. The bomb has been diffused and 
+						lanes are being opened.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should update TMT units</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:14:30</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #12">"Hello, this is Fred Masterson at KTRC radio."
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #12">"My CAD is down and I was wondering 
+											 if you had any new incidents?"
+			</INSTRUCTOR>
+			<STUDENT>Yes, tanker vs. car, spill.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #12">"What do you have on that?"
+			</INSTRUCTOR>
+			<STUDENT>Gives details.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:15:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>HOLE IN TANKER PLUGGED, FD WASHING DOWN RDWY</DETAIL>
+				<AUDIO Length = "20" Path = "190/19009.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19009.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The hole in the tanker has been plugged. 
+					Not too much spilled on the roadway here.  The fire department is going 
+					to wash it down.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Hole plugged. Fire department 
+						spraying down roadway.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:16:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>SB LNS OPN 28-11 28-07 1098</DETAIL>
+				<UNIT UnitNum="28-11" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="28-07" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "21" Path = "189/18924.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18924.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-07.</LINE>				
+				<LINE Role="Dispatch">28-07 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-07. Southbound lanes are open. 28-11 and I are 10-98.</LINE>				
+				<LINE Role="Dispatch">28-07 Santa Lucia 10-4. Southbound lanes open. 28-11, 28-07 10-98.</LINE>
+			</DIALOG>
+		</CHP_RADIO>		
+		
+		<CMS_EVALUATION cmsID="72" type="remove"> 
+			<LOCATION>SB 55 @ Warner</LOCATION>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="86" type="update"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE> 
+				<CMS_LINE>AT JEFFREY RD</CMS_LINE>
+				<CMS_LINE>HEAVY TRAFFIC</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="89" type="update"> 
+			<LOCATION>SB 405 @ Von Karmen</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE> 
+				<CMS_LINE>AT JEFFREY RD</CMS_LINE>
+				<CMS_LINE>HEAVY TRAFFIC</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:16:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #13">Hello, this is Chris Rasmuessan at KWIT radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #13">What's going on with the tanker 
+											spill on 5 north of Main St?
+			</INSTRUCTOR>
+			<STUDENT>(tanker plugged, injured transported, diluting milk with water, #1 lane only open.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:17:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<MASTER_INC_NUM>145086SLO007</MASTER_INC_NUM>
+			<P>4</P>
+			<ADDITIONAL_INFO>
+				<TYPE_CODE>1179 Accident - Ambulance Responding</TYPE_CODE>
+				<TYPE>1179</TYPE>
+			</ADDITIONAL_INFO>
+			<LOCATION>
+				<BEAT>17-14</BEAT>
+				<ADDRESS>SB73 JNO Baker St.</ADDRESS>
+				<LOC>SB73 JNO Baker St.</LOC>
+				<CITY>Templeton</CITY>
+				<AREA>17</AREA>
+				<FIRE>Templeton</FIRE>
+				<LAW>Templeton</LAW>
+				<EMS>Templeton</EMS>
+			</LOCATION>
+			<GENERAL>
+				<AGY>CHP</AGY>
+			</GENERAL>
+		
+			<HEADER_INFO>
+				<Type>1179</Type>
+				<Beat>17-14</Beat>
+				<TruncLoc>SB73 JNO Baker St.</TruncLoc>
+				<FullLoc>SB73 JNO Baker St.</FullLoc>
+			</HEADER_INFO>
+			
+			<LOCATION_INFO ID="191_S_73_ML">
+				<Route>73</Route>
+				<Direction>SB</Direction>
+				<Postmile>26.7</Postmile>
+				<Location_type>ML</Location_type>					
+			</LOCATION_INFO>
+			
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>911 CELLULAR CALL, RV FIRE SB-73 AT BEAR St, UNVERIFIED</DETAIL>
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+		
+		<GENERAL_INFO> 
+			<TITLE>Incident Description</TITLE>
+			<TEXT> This is an RV fire on the shoulder southbound 73 just north of 
+		   Bear/Baker Street. There are two injured victims who were pulled from 
+		   the RV by passers-by. The #3 is closed to fight the fire. 
+		   The fire department, paramedics, an extra unit, sign truck/s, and 
+		   ambulance are sent to the scene.
+			</TEXT>
+		</GENERAL_INFO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:17:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>NB LNS OPN 28-13 28-19 1098</DETAIL>
+				<UNIT UnitNum="28-13" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="28-19" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "22" Path = "189/18925.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="18925.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-19.</LINE>
+				<LINE Role="Dispatch">28-19 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia 28-19. Northbound lanes are open. 28-13 and I are 10-98.</LINE>				
+				<LINE Role="Dispatch">28-19 Santa Lucia copies northbound lanes open. 28-13, 28-19 10-98.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="88" type="update"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE> 
+				<CMS_LINE>AT JEFFREY RD</CMS_LINE>
+				<CMS_LINE>HEAVY TRAFFIC</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="95" type="update"> 
+			<LOCATION>NB 5 @ El Toro</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE> 
+				<CMS_LINE>N-405 AT JEFFREY RD</CMS_LINE>
+				<CMS_LINE>HEAVY TRAFFIC</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:18:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>28-24, 28-S4 1098 PD OPNNG OVRPASS</DETAIL>
+				<UNIT UnitNum="28-24" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="28-S4" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "24" Path = "189/18926.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="18926.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 28-S4.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 28-S4. 28-24 and I are 10-98. The police 
+					department is opening the overpass.</LINE>				
+				<LINE Role="Dispatch">28-S4 Santa Lucia 10-4. 28-S4, 28-24 10-98. Police 
+						department opening overpass.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:19:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>			
+				<DETAIL>17-14 ENRT FROM 405 AT EUCLID</DETAIL>
+				<UNIT UnitNum="17-14" Status="ENRT" Primary="true" Active="true"/>
+				<AUDIO Length = "24" Path = "191/19101.mp3" />
+				
+			</CAD_INCIDENT_EVENT>	
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19101.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">17-14 Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 go ahead.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia, RV fire southbound 73 just north of Baker Street. </LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 10-4. Enroute from 405 @ Euclid.</LINE>				
+				<LINE Role="Dispatch">10-4 Santa Lucia copies, 17-14 enroute from 405 @ Euclid.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+		
+		<CAD_EVALUATION>
+			<EXPECTED_ACTION>Operator should be verifying incident 191 on the CAD</EXPECTED_ACTION>
+		</CAD_EVALUATION>
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>Attempt to verify incident on ATMS</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		
+		<MAINTENANCE_RADIO>No Maintenance needed on scene for this incident.</MAINTENANCE_RADIO>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:20:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1185 ROT 1097</DETAIL>
+				<TOW Company="Martins" ConfNum="(949)555-2031" PubNum="(949)555-9067" Beat=""/>
+				<AUDIO Length = "16" Path = "190/19010.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19010.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The 11-85 rotation 10-97.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copies 11-85 rotation 10-97.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:21:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>BIG RIG 1185 1097, ONCE FD IS DONE, WILL START CLEANUP</DETAIL>
+				<TOW Company="Imperial" ConfNum="(949)555-1128" PubNum="(949)555-1520" Beat=""/>
+				<AUDIO Length = "22" Path = "190/19011.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+
+		<CHP_RADIO RadioFile="19011.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">	Santa Lucia 9-22 big rig 11-85 10-97. Once the 
+				  fire department is done, we will start clearing vehicles.</LINE>				
+				<LINE Role="Dispatch">	9-22 Santa Lucia 10-4. Big rig 11-85 10-97. Start 
+						cleanup when fire department done.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #1">Hello, this is Dakota Crew at KCOW radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #1">Do you have an alternate route I 
+										    could tell my listeners about for collision on I-5?
+			</INSTRUCTOR>
+			<STUDENT>Should have one established.</STUDENT>
+		</TELEPHONE>		
+
+		<TMT_RADIO>
+			Sign trucks should be 1097.
+		</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:22:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #2">Hello, this is Monica Stevens at KCLY radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #2">Do you have any update info on the 
+											collision on 57.
+			</INSTRUCTOR>
+			<STUDENT>Clearing the milk, about to move vehicles, injured transported, etc.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:23:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #1">Hello, this is Cameron Stevens at KCLY Channel 11.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #1">Is the bomb squad done with their 
+										 search yet at the 405 and Jeffrey 
+										 interchange?
+			</INSTRUCTOR>
+			<STUDENT>Yes</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #1">When will the lanes be open?</INSTRUCTOR>
+			<STUDENT>They were already opened about 10 minutes ago.</STUDENT>
+		</TELEPHONE>
+
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+			<EXPECTED_ACTION>Should issue a Sig Alert</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+		<MAINTENANCE_RADIO>TMT The traffic is near normal. I'm (we're) 1098.</MAINTENANCE_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:23:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>FD DONE, OPENING #2, STARTING CLEANUP</DETAIL>
+				<AUDIO Length = "19" Path = "190/19012.mp3" />
+				
+				<PARAMICS LocationID="190_N_5_ML">
+					<Status>CHANGED</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>
+					<Lane_number>4</Lane_number>				
+				</PARAMICS>			
+			</CAD_INCIDENT_EVENT>		
+			
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="19012.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. Fire department is done.
+					Opening the #2 lane and starting cleanup.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Fire department is done, opening 
+						#2 lane, and starting cleanup.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:24:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>RV ON FIRE ON RS, 2 1181S, PARAMEDICS 1097, REQ UNIT TO ASSIST</DETAIL>
+				<UNIT UnitNum="17-14" Status="1097" Primary="true" Active="true"/>
+				<AUDIO Length = "42" Path = "191/19102.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="19102.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 10-97 RV fire southbound 73 just north of
+					Baker Street.  RV on the right hand shoulder. Citizens 
+					pulled 2 11-81's from vehicle, paramedics 10-97.</LINE>				
+				<LINE Role="Dispatch">Santa Lucia copies 17-14 10-97 RV fire southbound 73 
+						just north of Baker Street. RV on right hand shoulder. 2 
+						11-81's pulled from RV, paramedics 10-97.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 10-4. Send a unit to assist.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia copies.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		
+		<CMS_EVALUATION cmsID="86" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT S-73</CMS_LINE> 
+				<CMS_LINE>AT BAKER ST</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:25:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>17-16 ENRT FROM S-405 @ EUCLID TO ASSIST 17-14</DETAIL>
+				<UNIT UnitNum="17-16" Status="ENRT" Primary="false" Active="true"/>
+				<AUDIO Length = "20" Path = "191/19103.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		
+		<CHP_RADIO RadioFile="19103.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">17-16 Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-16 go ahead.</LINE>				
+				<LINE Role="Dispatch">17-16 Santa Lucia, 17-14 requesting assistance RV fire 
+						southbound 73 just north of Baker Street.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-1610-4. Enroute from S-405 @ Euclid.</LINE>
+			</DIALOG>
+		</CHP_RADIO>	
+		
+
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #2">Hello, this is Fred Roppel at KNOW TV channel 3.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #2">I just heard about a RV fire over the scanner.</INSTRUCTOR>
+			<STUDENT>Confirm RV fire.</STUDENT>								 
+			<INSTRUCTOR Role="TV Reporter #2">Where was that located, I'd like to 
+										 send a camera out there?</INSTRUCTOR>
+			<STUDENT>Southbound 73 just North of Baker Street.</STUDENT>												 
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:26:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>FD 1097, CLOSING RT LN, REQ TMT, TRAFFIC ADVISORY</DETAIL>
+				<AUDIO Length = "24" Path = "191/19104.mp3" />
+				
+				<PARAMICS LocationID="191_S_73_ML">
+					<Status>NEW</Status>
+					<Incident_type>LANE_BREAKDOWN</Incident_type>
+					<Lane_number>3</Lane_number>		
+				</PARAMICS>		
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="19104.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14, fire department 10-97.   Closing the right lane 
+					for the fire engines. Request sign truck, traffic advisory.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia copies fire departement 10-97. Closing 
+						the right lane. Request sign truck, traffic advisory.</LINE>
+			</DIALOG>
+		</CHP_RADIO>			
+		
+		<CMS_EVALUATION cmsID="86" type="new"> 
+			<LOCATION>TBD</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT S-73</CMS_LINE> 
+				<CMS_LINE>AT BAKER ST</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>			
+		
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should issue traffic advisory</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+		<RADIO_EVALUATION>
+			<EXPECTED_ACTION>Operator should send TMT units</EXPECTED_ACTION>
+		</RADIO_EVALUATION>
+		
+		<TMT_RADIO>
+		Time of request by CHP officers in the field for sign trucks. Send sign 
+		trucks to scene when requested.
+		</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:27:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>#2 LN OPN, FULL CLNUP IN 20</DETAIL>
+				<AUDIO Length = "18" Path = "190/19013.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19013.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The #2 lane is open. Full cleanup in 20 minutes.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copied #2 open, full cleanup in 20.</LINE>
+			</DIALOG>
+		</CHP_RADIO>			
+		
+		<CMS_EVALUATION cmsID="93" type="update"> 
+			<LOCATION>NB 5 S/O Redhill</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>				
+		
+		<CMS_EVALUATION cmsID="94" type="update"> 
+			<LOCATION>NB 55 @ Dyer</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT N-5</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+				<CMS_LINE>RT LANE BLKD</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>				 
+		
+		<TMT_RADIO>Queue update. Possibly reposition.</TMT_RADIO>	
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:28:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #3">Hello, this is Terry Webb at KTSV radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #3">I heard that there was an RV fire on 
+										  southbound 73.
+			</INSTRUCTOR>
+			<STUDENT>Confirm RV fire</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #3">What details do you have on it, are 
+										  any lanes blocked?
+			</INSTRUCTOR>
+			<STUDENT>RV fire on shoulder, two injured pulled from vehicle, 
+						 fire on shoulder, no lanes blocked.
+			</STUDENT>
+		</TELEPHONE>	
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:28:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #4">Hello, this is Art Philco at KTTQ news.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #4">Our computers are down, what 
+										  incidents do you have going on?
+			</INSTRUCTOR>
+			<STUDENT>Notify reporter of current incidents.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #4">Give me all the details on those.</INSTRUCTOR>
+			<STUDENT>Notify reporter of current incident details.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:29:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>17-14 1097</DETAIL>
+				<UNIT UnitNum="17-16" Status="1097" Primary="false" Active="true"/>
+				<AUDIO Length = "24" Path = "191/19105.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19105.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-16</LINE>				
+				<LINE Role="Dispatch">17-16 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-16 10-97 RV fire southbound 73 just north of
+					Baker Street.</LINE>
+				<LINE Role="Dispatch">10-4 Santa Lucia copied 17-16, 10-97 RV fire 
+						southbound 73 just north of Baker Street.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>HAR should note incident.</EXPECTED_ACTION>
+		</ATMS_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:32:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VEH READY TO BE TOWED, TRCK AND TNKR BEING UPRIGHTED</DETAIL>
+				<AUDIO Length = "19" Path = "190/19014.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+
+		<CHP_RADIO RadioFile="19014.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The car is ready to be towed. The truck 
+					and tanker are being uprighted.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Car ready for tow, truck and 
+						tanker being uprighted.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:33:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VICTIMS TRANSPORTED, PASSERS BY RESCUED VICTIMS</DETAIL>
+				<AUDIO Length = "24" Path = "191/19106.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19106.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. The two victims transported. Passers-by 
+					saw the RV on fire and assisted in pulling the two victims 
+					out of the vehicle before it was completely engulfed.</LINE>
+				<LINE Role="Dispatch">17-14 Santa Lucia 10-4. Victims transported. Passers-by 
+						pulled victims out of RV.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>	
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:34:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #4">Hello, this is Alex Harmon at KJOK radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #4">Have any of the lanes been open on 5 
+										 north of Main St.</INSTRUCTOR>
+			<STUDENT>#2 lane open.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #4">When is there a full opening?</INSTRUCTOR>
+			<STUDENT>Around 15 to 20 minutes.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:34:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #5">Hello, this is Tim Rogers at KLNW radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #5">How long is it going to take to clear 
+										  up the RV fire on southbound 73?
+			</INSTRUCTOR>
+			<STUDENT>No estimated time as of yet.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:35:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>FIRE IS OUT, FD INVESTIGATING CAUSE OF FIRE</DETAIL>
+				<AUDIO Length = "19" Path = "191/19107.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19107.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. The fire is out, and the fire department 
+					is investigating the cause of the fire.</LINE>
+				<LINE Role="Dispatch">	17-14 Santa Lucia copied, fire out and fire department 
+						investigating cause of fire.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:37:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>VEH TOWED, TNKR UPRGHT, FULL OPENING IN 10</DETAIL>
+				<AUDIO Length = "20" Path = "190/19015.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19015.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The car has been towed. The tanker truck 
+					is upright. Full opening in 10 minutes.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copied car towed. Tanker truck upright. 
+						Full opening in 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:38:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #6">Hello, this is John Sinclair at KNIN radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #6">Is there an estimated time for lane 
+										 opening for the collision on I-5?
+			</INSTRUCTOR>
+			<STUDENT>10 minutes.</STUDENT>
+		</TELEPHONE>
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:39:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>REQ FLAT BED 1185, FD 98 IN 15</DETAIL>
+				<AUDIO Length = "22" Path = "191/19108.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19108.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 request flat bed 11-85 for the RV. Fire 
+					department done within 15 minutes.</LINE>
+				<LINE Role="Dispatch">	17-14 Santa Lucia 10-4. Request flat bed 11-85, fire 
+						 department 98 in 15.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+	
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:40:00</TIME_INDEX>
+		<INCIDENT LogNum="189">Suicide Attempt/Bomb Threat</INCIDENT>
+		
+		<CMS_EVALUATION cmsID="86" type="remove"> 
+			<LOCATION>TBD</LOCATION>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="89" type="remove"> 
+			<LOCATION>SB 405 @ Von Karmen</LOCATION>
+		</CMS_EVALUATION>
+		
+		<CMS_EVALUATION cmsID="88" type="remove"> 
+			<LOCATION>TBD</LOCATION>
+		</CMS_EVALUATION>		
+		
+		<CMS_EVALUATION cmsID="95" type="remove"> 
+			<LOCATION>NB 5 @ El Toro</LOCATION>
+		</CMS_EVALUATION>			
+
+	</SCRIPT_EVENT>
+	
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:41:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1039 1185 ENRT, ETA 10</DETAIL>
+				<AUDIO Length = "18" Path = "191/19109.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19109.mp3">
+			<DIALOG>
+				<LINE Role="Dispatch">17-14 Santa Lucia information.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 go ahead.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia. 11-85 enroute, ETA 10.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 copied 1 1-85 enroute with ETA of 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #7">Hello, this is Kim Williamson at KRST radio.
+			</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #7">I was just told about a RV fire on 
+										  73 , what details do you have on that?
+			</INSTRUCTOR>
+			<STUDENT>Gives incident details.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:42:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>TANKER READY FOR TOW, FINISHING CLEANUP</DETAIL>
+				<AUDIO Length = "18" Path = "190/19016.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19016.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The tanker truck is ready to be towed. 
+					Finishing cleanup.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Tanker truck ready to be towed, 
+						finishing cleanup.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:43:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:46:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>TANKER TOWED, RDWY CLR, OPENING LANES</DETAIL>
+				<AUDIO Length = "20" Path = "190/19017.mp3" />
+				
+				<PARAMICS LocationID="190_N_5_ML">
+					<Status>CLEARED</Status>				
+				</PARAMICS>				
+			</CAD_INCIDENT_EVENT>					
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19017.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The tanker truck has been towed, roadway 
+					is clear. We're opening all lanes.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia 10-4. Tanker truck towed, roadway 
+						clear. Opening lanes.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="93" type="update"> 
+			<LOCATION>NB 5 S/O Redhill</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE>
+				<CMS_LINE>AT MAIN ST</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>					
+		<CMS_EVALUATION cmsID="94" type="update"> 
+			<LOCATION>NB 55 @ Dyer</LOCATION>
+			<SAMPLE_MESSAGE>
+				<CMS_LINE>ACCIDENT CLEARED</CMS_LINE>
+				<CMS_LINE>N-5 AT MAIN ST</CMS_LINE>
+			</SAMPLE_MESSAGE>
+		</CMS_EVALUATION>			
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:46:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #8">Hello, this is Tom Webb at KSON radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #8">Do you have any incidents going on right now?</INSTRUCTOR>
+			<STUDENT>Notifies reporter of current incidents.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:48:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>1185 1097, INVESTIGATION NEARLY COMPLETE</DETAIL>
+				<TOW Company="Martins" ConfNum="(949)555-2031" PubNum="(949)555-9067" Beat=""/>
+				<AUDIO Length = "21" Path = "191/19111.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19111.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14 11-85 10-97. Fire department is nearly 
+					completed with their investigation.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia 10-4. 11-85 10-97, investigation 
+						nearly completed.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:49:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>	
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>LNS OPN, 9-22, 9-23, 9-26 10-98</DETAIL>
+				<UNIT UnitNum="9-22" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="9-23" Status="1098" Primary="false" Active="false"/>
+				<UNIT UnitNum="9-26" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "21" Path = "190/19018.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		
+		<CHP_RADIO RadioFile="19018.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 9-22.</LINE>				
+				<LINE Role="Dispatch">9-22 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 9-22. The lanes are open, all units 10-98.</LINE>				
+				<LINE Role="Dispatch">9-22 Santa Lucia copied lanes open, 9-22, 9-23, 9-26 10-98.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:51:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>FD INVESTIGATION COMPLETE, SPRAYING RS, FIRE CAUSED BY KITCHEN FIRE</DETAIL>
+				<AUDIO Length = "20" Path = "191/19112.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19112.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. The fire department investigation 
+					complete.  Fire caused by a kitchen fire.</LINE>
+				<LINE Role="Dispatch">17-14 Santa Lucia copied fire department is 98.
+				  Fire caused by kitchen fire.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Radio Reporter #9">Hello, this is Jordan Bradley at KTCR radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="Radio Reporter #9">What is the traffic like on 73 around the RV fire?</INSTRUCTOR>
+			<STUDENT>Notifies reporter with current queue from ATMS.  One lane is closed.</STUDENT>
+			<INSTRUCTOR Role="Radio Reporter #9">When will the incident be cleared?</INSTRUCTOR>
+			<STUDENT>Inknown, a good answer around 15 minutes.</STUDENT>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:53:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>		
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:53:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>
+		
+		<ATMS_EVALUATION>
+			<EXPECTED_ACTION>HAR should have been cleared</EXPECTED_ACTION>
+		</ATMS_EVALUATION>		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:54:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>	
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>RV READY FOR 1185, LN OPN IN 10</DETAIL>
+				<AUDIO Length = "21" Path = "191/19113.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>	
+		<CHP_RADIO RadioFile="19113.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 go ahead to Santa Lucia.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. RV ready for 11-85. The lane will be open in 10.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia 10-4. RV ready for 11-85, lane open in 10.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="Public">Hello, is Helen there?</INSTRUCTOR>
+			<STUDENT>Wrong number.</STUDENT>
+			<INSTRUCTOR Role="Public">Sorry. </INSTRUCTOR>
+		</TELEPHONE>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:55:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>		
+		
+		<TMT_RADIO>Queue update 10-98</TMT_RADIO>
+
+	</SCRIPT_EVENT>
+
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:58:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>RV TOWED, LANES OPEN IN 5</DETAIL>
+				<AUDIO Length = "17" Path = "191/19114.mp3" />
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19114.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-14.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia go ahead.</LINE>				
+				<LINE Role="Field">Santa Lucia 17-14. RV towed, lane open in 5.</LINE>				
+				<LINE Role="Dispatch">17-14 Santa Lucia copied, RV towed, lane open in 5.</LINE>
+			</DIALOG>
+		</CHP_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>02:59:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+
+		
+		<TELEPHONE>
+			<INSTRUCTOR Role="TV Reporter #10">Hello, this is Jim Sanso at KTAK radio.</INSTRUCTOR>
+			<INSTRUCTOR Role="TV Reporter #10">Has the RV been cleaned up yet at the fire on 73?</INSTRUCTOR>
+			<STUDENT>The RV was just towed, the lane will be open in 5 minutes.</STUDENT>
+			<INSTRUCTOR Role="TV Reporter #10">Do you have any other incidents going on right now?</INSTRUCTOR>
+			<STUDENT>Notifies reporter of current incidents.</STUDENT>
+		</TELEPHONE>
+		
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>03:00:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>		
+		
+		<TMT_RADIO>Queue update</TMT_RADIO>
+	</SCRIPT_EVENT>
+
+	<SCRIPT_EVENT>
+		<TIME_INDEX>03:01:00</TIME_INDEX>
+		<INCIDENT LogNum="191">RV Fire</INCIDENT>
+		
+		<CAD_DATA>
+			<CAD_INCIDENT_EVENT>
+				<DETAIL>17-14, 17-16 1098. LN OPN</DETAIL>
+				<UNIT UnitNum="17-14" Status="1098" Primary="true" Active="false"/>
+				<UNIT UnitNum="17-16" Status="1098" Primary="false" Active="false"/>
+				<AUDIO Length = "19" Path = "191/19115.mp3" />
+				
+				<PARAMICS LocationID="191_S_73_ML">
+					<Status>CLEARED</Status>			
+				</PARAMICS>					
+			</CAD_INCIDENT_EVENT>		
+		</CAD_DATA>		
+		
+		<CHP_RADIO RadioFile="19115.mp3">
+			<DIALOG>
+				<LINE Role="Field">Santa Lucia 17-16.</LINE>
+				<LINE Role="Dispatch">17-16 go ahead to Santa Lucia.</LINE>
+				<LINE Role="Field">Santa Lucia 17-16. #1 Lane is open. All units are 10-98.</LINE>				
+				<LINE Role="Dispatch">17-16 Santa Lucia 10-4. #1 lane open.  
+						17-14, 17-16 are 1098.</LINE>	
+			</DIALOG>			
+		</CHP_RADIO>
+		
+		<CMS_EVALUATION cmsID="86" type="remove"> 
+			<LOCATION>TBD</LOCATION>
+		</CMS_EVALUATION>			
+		<ACTIVITY_LOG_EVALUATION>
+			<EXPECTED_ACTION>Should fax and page information</EXPECTED_ACTION>
+		</ACTIVITY_LOG_EVALUATION>
+
+	</SCRIPT_EVENT>
+	
+	<SCRIPT_EVENT>
+		<TIME_INDEX>03:00:00</TIME_INDEX>
+		<INCIDENT LogNum="190">Tanker Truck vs. Car/Spill</INCIDENT>		
+		
+		<CMS_EVALUATION cmsID="93" type="remove"> 
+			<LOCATION>NB 5 S/O Redhill</LOCATION>
+		</CMS_EVALUATION>				
+		
+		<CMS_EVALUATION cmsID="94" type="remove"> 
+			<LOCATION>NB 55 @ Dyer</LOCATION>
+		</CMS_EVALUATION>		
+		
+	</SCRIPT_EVENT>
+	
+</TMC_SCRIPT>
+
Index: /branches/trunk/scripts/Cardfile.xml
===================================================================
--- /branches/trunk/scripts/Cardfile.xml	(revision 82)
+++ /branches/trunk/scripts/Cardfile.xml	(revision 82)
@@ -0,0 +1,675 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Please do not modify titles. Note that these titles are not
+sent into the actual screen. If titles are to be modified,
+they need to be changed in CardfileHandler.java  -->
+
+
+
+<CARDFILE> 
+
+	<TAB title = "Santa Lucia TMC (D14)">
+		<CARDFILE_OBJ name = "Dispatch Maintenance" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 450-2600</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>
+		
+		<CARDFILE_OBJ name = "TMC Floor" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 450-3200</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>
+		
+		<CARDFILE_OBJ name = "TMC Front Desk" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 450-2364</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>
+
+		<CARDFILE_OBJ name = "Construction Help Line" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 450-2077</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+		
+	</TAB>
+
+	
+	<TAB title = "Santa Lucia Caltrans">
+		
+		<CARDFILE_OBJ name = "District Director Riley Jones" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 231-3522</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+		
+		<CARDFILE_OBJ name = "Capital Outlay Terry Arias" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 231-3554</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>				
+
+		<CARDFILE_OBJ name = "Administration Sam McIntyre" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 231-3422</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+
+		<CARDFILE_OBJ name = "Planning Thomas Sheldon" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 231-3426</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+		
+		<CARDFILE_OBJ name = "Public Information" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 231-3704</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>	
+
+		<CARDFILE_OBJ name = "Technical Support" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 450-1000</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>				
+		
+	</TAB>
+	
+	<TAB title = "Caltrans District Offices">
+
+		<CARDFILE_OBJ name = "Caltrans Headquarter Comm Center" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(916) 324-2265</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+
+		<CARDFILE_OBJ name = "Anaheim TMC" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 764-8090</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+
+		<CARDFILE_OBJ name = "Los Angeles (D7) TMC" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(213) 897-3656</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+	
+		<CARDFILE_OBJ name = "San Bernardino (D8) TMC" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(909) 383-4561</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>
+
+		<CARDFILE_OBJ name = "San Diego (D11) TMC" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(619) 688-6785</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>
+		
+		<CARDFILE_OBJ name = "Orange County (D12) TMC" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 936-3400</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+
+		</TAB>
+	
+	<TAB title = "Allied Agencies">
+
+		<CARDFILE_OBJ name = "Anaheim PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 765-1900</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+
+		<CARDFILE_OBJ name = "Animal Control" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 935-6848</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>	
+
+		<CARDFILE_OBJ name = "Brea / Yorba Linda PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 990-7673</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+	
+		<CARDFILE_OBJ name = "Buena Park PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 562-3901</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>	
+		
+		<CARDFILE_OBJ name = "Costa Mesa PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 754-5252</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+		
+		<CARDFILE_OBJ name = "Fountain Valley PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 593-4485</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+
+		<CARDFILE_OBJ name = "Fullerton PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 738-6317</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+
+		<CARDFILE_OBJ name = "Huntington Beach PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 960-8811</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+	
+		<CARDFILE_OBJ name = "Irvine PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 724-7000</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+		
+		<CARDFILE_OBJ name = "Laguna Beach PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 497-0701</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+	
+		<CARDFILE_OBJ name = "Newport Beach PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 644-3681</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>	
+
+		<CARDFILE_OBJ name = "Placentia PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 993-8164</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+
+		<CARDFILE_OBJ name = "Santa Ana PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 245-8049</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>	
+
+		<CARDFILE_OBJ name = "Tustin PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 573-3200</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+
+		<CARDFILE_OBJ name = "Westminster PD" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 898-3315</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+	
+	</TAB>
+	
+	<TAB title = "Radio Stations">
+		
+		<CARDFILE_OBJ name = "KCOW Radio" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 270-3324</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+		
+		<CARDFILE_OBJ name = "KLTY Radio" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(213) 632-2353</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+
+		<CARDFILE_OBJ name = "KCTR Radio" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 323-6830</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+
+		<CARDFILE_OBJ name = "KJOK Radio" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(9490) 462-2205</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+
+		<CARDFILE_OBJ name = "KLNW Radio" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(562) 325-2352</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+
+		<CARDFILE_OBJ name = "KNIN Radio" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(562) 783-2346</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+				
+		<CARDFILE_OBJ name = "KRST Radio" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(949) 277-2964</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+						
+		<CARDFILE_OBJ name = "KSON Radio" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 474-3793</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+		
+		<CARDFILE_OBJ name = "KTCR Radio" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(213) 897-4600</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+				
+						
+	</TAB>
+	
+	<TAB title = "TV Stations">
+		
+		<CARDFILE_OBJ name = "KCLY Channel 2" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(562) 440-3925</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+
+		<CARDFILE_OBJ name = "KNOW TV 3" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(714) 270-9870</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+				
+		<CARDFILE_OBJ name = "KTSV Channel 11" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(562) 324-2962</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>		
+
+		<CARDFILE_OBJ name = "KTTQ TV" >
+			<ADDRESS></ADDRESS>
+			<CITY></CITY>
+			<STATE></STATE>
+			<ZIP></ZIP>
+			<PHONE1>(310) 560-3400</PHONE1>
+			<PHONE2></PHONE2>
+			<FAX></FAX>
+		</CARDFILE_OBJ>			
+				
+						
+		
+	</TAB>
+	
+	<TAB title = "Courts">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Public Transportation">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "GG Other">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "MY Misc">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "SL Misc">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "VT Misc">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "CHP Offices">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "State Agencies/Facilities">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Government Officials">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Federal Agencies">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Fire/EMS">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Jails">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Hospitals/Med Centers">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Tow Companies">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "CalTrans">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "County Roads">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Utilities">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Animal Control">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Airports">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Credit Cards">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "GG Crisis Shelters">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Ranges">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Hotlines">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Hwy Patrols OOS">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Parks/Recreation">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Shelters">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "SL County Services">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "SL Resources">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Truck/Tire Repair">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "MCC Employees">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "Gate Access Codes">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "VT Call Signs">
+		
+		
+		
+	</TAB>
+	
+	<TAB title = "SLCC Employees">
+		
+		
+		
+	</TAB>
+
+</CARDFILE>
Index: /branches/trunk/src/paramsim/paramicssimulator/ParamicsSimulator.java
===================================================================
--- /branches/trunk/src/paramsim/paramicssimulator/ParamicsSimulator.java	(revision 82)
+++ /branches/trunk/src/paramsim/paramicssimulator/ParamicsSimulator.java	(revision 82)
@@ -0,0 +1,412 @@
+package paramsim.paramicssimulator;
+
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Observable;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JOptionPane;
+
+import paramsim.paramicssimulator.ParamicsSimulatorLogMessage.PARAMICS_SIMULATOR_LOG;
+import paramsim.paramicssimulator.gui.ParamicsSimulatorGUI;
+
+/**
+ * ParamicsSimulator is the main class for this module.  The ParamicsSimulator
+ * can be used to simulate the Paramics device.<br><br>  
+ * The properties file for the ParamicsCommunicator class contains the following data.<br>
+ * <code>
+ * -----------------------------------------------------------------------------<br>
+ * WorkingDirectory      The working directory of the Paramics Communicator<br>
+ * ParamicsStatusLog     The Paramics status log file <br>
+ * CameraStatusLog       The camera status log file <br>
+ * ExchangeLog			 The exchange log file <br> 
+ * CameraControlConfig   The camera control file which maps the camera information <br>
+ * DVDPlayersConfig      The DVD Players XML file which contains camera information <br>
+ * -----------------------------------------------------------------------------<br>
+ * Example File: <br>
+ * WorkingDirectory    = c:/paramics/out <br>
+ * ParamicsStatusLog   = paramics_status.log <br>
+ * CameraStatusLog     = camera_status.log <br>
+ * IncidentLog     	   = exchange.log <br>
+ * CameraControlConfig = camera_control.txt
+ * DVDPlayersConfig    = dvdplayers.xml
+ * -----------------------------------------------------------------------------<br>
+ * </code>
+ *
+ * @author Greg Eddington (geddingt@calpoly.edu)
+ */
+public class ParamicsSimulator extends Observable implements Runnable
+{
+	/** Error Log **/
+	private static Logger paramLogger = Logger.getLogger("paramsim.paramicssimulator");
+	
+	/** Incident file **/
+	private static final String INCIDENT_FILE = "exchange.xml";
+	
+	/** Paramics Status file **/
+	private static final String PARAM_STATUS_FILE = "paramics_status.xml";
+	
+	/** Camera Status file **/
+	private static final String CAMERA_STATUS_FILE = "camera_status.xml";
+	
+	/** Sleep Time (10 seconds) **/
+	private static final int SLEEP_TIME = 10000;
+	
+	/**
+	 * Enumeration containing property names.
+	 * @author Greg Eddington
+	 */
+	private static enum PROPERTIES 
+	{
+		/** The working directory for Paramics **/
+		WORKING_DIR ("WorkingDirectory"),
+		
+		/** The Paramics log **/
+		PARAM_STATUS_LOG ("ParamicsStatusLog"),
+		
+		/** The camera status log **/
+		CAMERA_STATUS_LOG ("CameraStatusLog"),
+		
+		/** The exchange log **/
+		INCIDENT_LOG ("IncidentLog"),
+		
+		/** The camera control file **/
+		CAMERA_CONTROL ("CameraControlConfig"),
+		
+		/** The still images XML file **/
+		DVD_PLAYERS ("DVDPlayersConfig");
+		
+		public String name;
+		
+		private PROPERTIES(String n) 
+		{
+			name = n;
+		}
+	}
+	
+	/** 
+	 * Enumeration of network statuses.
+	 * @author Greg Eddington
+	 **/
+	public static enum NETWORK_STATUS
+	{
+		LOADING ("LOADING"),
+		WARMING ("WARMING"),
+		LOADED ("LOADED"),
+		UNKNOWN ("UNKNOWN");
+		
+		public String message;
+		
+		private NETWORK_STATUS(String n) 
+		{
+			message = n;
+		}
+	}
+	
+	/** Properties object. */
+	private Properties paramicsSimProp = null;	
+	
+	/** Working Directory **/
+	private String workingDirectory = null;
+	
+	/** Incidents File **/
+	private String incidentFile = null;
+	
+	/** Paramics Status File **/
+	private String paramStatusFile = null;
+	
+	/** Camera Status File **/
+	private String cameraStatusFile = null;
+
+	/** Incidents Log **/
+	private String incidentLog = null;
+	
+	/** Paramics Status Log **/
+	private String paramStatusLog = null;
+
+	/** Camera Status Log **/
+	private String cameraStatusLog = null;
+	
+	/** Incident Reader **/
+	private ParamicsIncidentReader incidentReader = null;
+	
+	/** The paramics simulator GUI **/
+	private ParamicsSimulatorGUI theGUI;
+	
+	/** The network ID **/
+	private int networkId = 1;
+	
+	/** Simulation Cameras **/
+	private List<SimulationCamera> cameras;
+	
+	/**
+	 * Creates a ParamicsSimulator object with properties defined in the propertiesFile
+	 * parameter.  It will initialize all file locations.
+	 */
+	public ParamicsSimulator(String propertiesFile) 
+	{		
+		try 
+		{
+			paramicsSimProp = new Properties();
+			paramicsSimProp.load(new FileInputStream(propertiesFile));
+			
+			/** Check property file **/
+			for (PROPERTIES property : PROPERTIES.values())
+			{
+				if (paramicsSimProp.getProperty(property.name) == null || 
+					paramicsSimProp.getProperty(property.name).length() == 0) 
+				{				
+					System.err.println("Invalid Configuration: Properties file missing " +
+						property.name + " property.");
+					System.exit(0);
+				}
+			}
+			
+			// Directory
+			workingDirectory = paramicsSimProp.getProperty(PROPERTIES.WORKING_DIR.name).trim();			
+			boolean endsWithSlash = workingDirectory.charAt(workingDirectory.length()-1) == '/' || 
+				workingDirectory.charAt(workingDirectory.length()-1) == '\\';
+			
+			// Files
+			paramStatusFile = workingDirectory + (endsWithSlash ? "" : "/") + PARAM_STATUS_FILE;
+			cameraStatusFile = workingDirectory + (endsWithSlash ? "" : "/") + CAMERA_STATUS_FILE;
+			incidentFile = workingDirectory + (endsWithSlash ? "" : "/") + INCIDENT_FILE;
+			
+			// Logs
+			incidentLog = paramicsSimProp.getProperty(PROPERTIES.INCIDENT_LOG.name).trim();
+			paramStatusLog = paramicsSimProp.getProperty(PROPERTIES.PARAM_STATUS_LOG.name).trim();
+			cameraStatusLog = paramicsSimProp.getProperty(PROPERTIES.CAMERA_STATUS_LOG.name).trim();
+			
+			// Delete any old logs
+			File ilFile = new File(incidentLog);
+			File pslFile = new File(paramStatusLog);
+			File cslFile = new File(cameraStatusLog);
+			ilFile.delete();
+			pslFile.delete();
+			cslFile.delete();
+			
+			// Cameras
+			String cameraConfig = paramicsSimProp.getProperty(PROPERTIES.CAMERA_CONTROL.name).trim();
+			String stillImages = paramicsSimProp.getProperty(PROPERTIES.DVD_PLAYERS.name).trim();
+			try
+			{
+				// Load the cameras
+				cameras = CameraParser.loadCameras(stillImages, cameraConfig);
+			}
+			catch (IOException e)
+			{
+				// Create an empty camera array
+				cameras = new ArrayList<SimulationCamera>();
+				
+				// Log Error
+				paramLogger.logp(Level.SEVERE, "ParamicsSimulator", "Constructor", 
+						"Error loading camera config from files \"" + stillImages +
+						"\" and \"" + cameraConfig + "\".", e);
+			}
+			
+			// Initialize GUI
+			theGUI = new ParamicsSimulatorGUI(this);
+			addObserver(theGUI);
+			theGUI.addWindowListener
+			(
+				new WindowListener() 
+				{			
+					public void windowActivated(WindowEvent arg0) {};
+					public void windowClosed(WindowEvent arg0) {};
+					public void windowClosing(WindowEvent arg0) { System.exit(0); };
+					public void windowDeactivated(WindowEvent arg0) {};
+					public void windowDeiconified(WindowEvent arg0) {};
+					public void windowIconified(WindowEvent arg0) {};
+					public void windowOpened(WindowEvent arg0) {};
+				}
+			);
+			
+			// Write an initial packets
+			writeParamicsStatus(NETWORK_STATUS.LOADING);
+			writeCameraStatus(cameras);
+		} 
+		catch (Exception e) 
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsSimulator", "Constructor", 
+					"Exception in reading properties file.", e);
+		}
+		
+		incidentReader = new ParamicsIncidentReader();
+	}
+	
+	/**
+	 * Appends a message to a log file.
+	 * @param logName The name of the log file.
+	 * @param message The message to append.
+	 */
+	private void writeToLog(String logName, String message)
+	{
+		try
+		{
+			FileWriter w = new FileWriter(logName, true);
+			w.write(message + "\n\n");
+			w.close();
+		}
+		catch (IOException e)
+		{
+			paramLogger.logp(Level.WARNING, "ParamicsSimulator", "writeToLog", 
+				"Error writing to file " + logName + ".", e);
+		}
+	}
+	
+	/**
+	 * Runs the Paramics simulator thread.
+	 */
+	public void run() 
+	{
+		// Check for packets and update the simulator
+		for(;;)
+		{
+			// Flush the input file
+			ParamicsSimulationInfo psi = incidentReader.parse(incidentFile);
+			
+			// Update the network ID if a packet is received
+			if (psi != null)
+			{
+				networkId = psi.networkId;
+				writeToLog(incidentLog, psi.xmlMessage);
+				setChanged();
+				notifyObservers(new ParamicsSimulatorLogMessage(PARAMICS_SIMULATOR_LOG.EXCHANGE, psi.xmlMessage));
+			}
+			
+			// Write camera status
+			writeCameraStatus(cameras);
+			
+			// Sleep
+			try
+			{
+				Thread.sleep(SLEEP_TIME);
+			}
+			catch (InterruptedException ie) {}
+		}
+	}
+
+	/**
+	 * Writes the camera status to the camera status XML file read by the Paramics Communicator,
+	 * as well as to the camera status log file.  All observers are notified with the new status,
+	 * so they can also log it.
+	 * 
+	 * @param id Camera ID
+	 * @param route Route
+	 * @param direction The direction of traffic
+	 * @param postmile The postmile
+	 * @param averageSpeedNE The average speed North or East
+	 * @param averageSpeedSW The average speed South or West
+	 */
+	public void writeCameraStatus(List<SimulationCamera> cameras)
+	{
+		StringBuilder message = new StringBuilder("<Camera_Status>\n");
+		for (SimulationCamera camera : cameras)
+		{
+			message.append
+			(
+				"   <Camera>\n" +
+				"      <Identifier>" + camera.id + "</Identifier>\n" +
+				"      <Route>" + camera.route + "</Route>\n" + 
+				"      <Direction>" + camera.direction.xml + "</Direction>\n" +
+				"      <Postmile>" + camera.postmile + "</Postmile>\n" + 
+				"      <Ave_Speed_NE>" + camera.averageSpeedNE + "</Ave_Speed_NE>\n" +
+				"      <Ave_Speed_SW>" + camera.averageSpeedSW + "</Ave_Speed_SW>\n" +
+				"   </Camera>\n"
+			);
+		}
+		message.append("</Camera_Status>");
+		
+		try
+		{
+			FileWriter w = new FileWriter(cameraStatusFile);
+			w.write(message.toString());
+			w.close();
+		}
+		catch (IOException e)
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsSimulator", "writeCameraStatus", 
+				"Error writing to file " + cameraStatusFile + ".", e);
+		}
+
+		writeToLog(cameraStatusLog, message.toString());
+		
+		setChanged();
+		notifyObservers(new ParamicsSimulatorLogMessage(PARAMICS_SIMULATOR_LOG.CAMERA_STATUS, message.toString()));	
+	}
+	
+	/**
+	 * Writes the Paramics status to the camera status XML file read by the Paramics Communicator,
+	 * as well as to the Paramics status log file.  All observers are notified with the new status,
+	 * so they can also log it.
+	 * 
+	 * @param status The current Paramics status
+	 */
+	public void writeParamicsStatus(NETWORK_STATUS status)
+	{
+		String message = "<Paramics>\n   <Network_Status>" + status.message +
+						 "</Network_Status>\n   <Network_ID>" + networkId + "</Network_ID>\n</Paramics>";
+		
+		try
+		{
+			FileWriter w = new FileWriter(paramStatusFile);
+			w.write(message);
+			w.close();
+		}
+		catch (IOException e)
+		{
+			paramLogger.logp(Level.SEVERE, "TrafficSimulator", "writeParamicsStatus", 
+					"Error writing to file " + paramStatusFile + ".", e);
+		}
+		
+		writeToLog(paramStatusLog, message);
+		
+		setChanged();
+		notifyObservers(new ParamicsSimulatorLogMessage(PARAMICS_SIMULATOR_LOG.PARAMICS_STATUS, message));	
+	}	
+	
+	/**
+	 * Runs the Paramics simulator.
+	 */
+	public static void main(String[] args) 
+	{
+		try
+		{
+			if(System.getProperty("PARAMICS_SIM_PROPERTIES") != null)
+			{
+				new Thread(new ParamicsSimulator(System.getProperty(
+					"PARAMICS_SIM_PROPERTIES"))).start();
+			}
+			else
+			{
+				throw new Exception ("PARAMICS_SIM_PROPERTIES system property not defined.");
+			}
+		} 
+		catch (Exception e) 
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsSimulator", "Main", 
+					"Error occured initializing application", e);
+			
+			JOptionPane.showMessageDialog(null, e.getMessage(), "Error - Program Exiting", JOptionPane.ERROR_MESSAGE);	
+	        	
+			System.exit(-1);
+		}
+	}
+	
+	/**
+	 * Gets the simulation cameras being used by the Paramics Simulator.
+	 * @return A list of Simulation Cameras.
+	 */
+	public List<SimulationCamera> getCameras()
+	{
+		return cameras;
+	}
+}
Index: /branches/trunk/src/paramsim/paramicssimulator/ParamicsIncidentReader.java
===================================================================
--- /branches/trunk/src/paramsim/paramicssimulator/ParamicsIncidentReader.java	(revision 82)
+++ /branches/trunk/src/paramsim/paramicssimulator/ParamicsIncidentReader.java	(revision 82)
@@ -0,0 +1,285 @@
+package paramsim.paramicssimulator;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * A class which will read a FileReader stream, parsing it as an XML document,
+ * and return a IncidentStatus object which contains the parsed information.
+ * 
+ * @author Greg Eddington (geddingt@calpoly.edu)
+ */
+public class ParamicsIncidentReader 
+{	
+	/** Error Log **/
+	private static Logger paramLogger = Logger.getLogger("paramsim.paramicssimulator");
+	
+	/** A SAX Handler that is used to parse received Incident Status Node. **/
+	protected IncidentStatusHandler ish = null;
+	
+	/** The current networkId **/
+	private int networkId = 1;
+	
+	/** The Paramics Simulation Info for the most recent incident read **/
+	protected ParamicsSimulationInfo psi = null;
+	
+	/** Value (seconds since 1/1/1970) of input file's last modification time. */
+	protected long lastModified = 0;
+	
+	/**
+	 * Constructor.
+	 */
+	public ParamicsIncidentReader() 
+	{		
+		ish = new IncidentStatusHandler();
+	}
+	
+	/**
+	 * This method parses the received XML node with the local CameraStatusHandler.
+	 * All updated camera information is sent to the ParamicsSimulationManager.
+	 * 
+	 * If a successful read of the file occurs, the file is written with an empty string
+	 * and the date of the last modification is stored.
+	 *
+	 * @param filename The file to check for message in.
+	 * @return A ParamicsSimulationInfo object containing the file's information
+	 * 		   A null pointer on:
+	 * 		     - The file does not exist
+	 * 		     - No new modification
+	 * 		     - An error opening file 		  
+	 *           - An empty file
+	 *           - An error parsing the file
+	 *           
+	 *         The caller is able to call this function to check if there are any new messages
+	 *         in the file.  If there are, a PSI object is returned.  If there aren't any new
+	 *         messages, a null pointer is returned.
+	 */
+	public ParamicsSimulationInfo parse(String filename) 
+	{	
+		ParamicsSimulationInfo psi = null;
+		
+		File f = new File(filename);
+		BufferedReader r = null;
+		
+		// File does not exist: No information
+		if (!(f.exists()))
+		{
+			return null;
+		}
+		
+		// File not modified: No new information
+		if (f.lastModified() <= lastModified)
+		{
+			return null;
+		}
+		
+		try 
+		{
+			// Try to open the file
+			r = new BufferedReader(new FileReader(f));
+			
+			// Read the file to the end
+			StringBuilder xml = new StringBuilder("");
+			String line = r.readLine();
+			while (line != null)
+			{
+				xml.append(line + "\n");
+				line = r.readLine();
+			}
+			
+			// If the file has contents in it, read them and returned a PSI describing the contents
+			if(xml.length() > 0) 
+			{
+				// Parse the file
+				SAXParserFactory.newInstance().newSAXParser().parse(new InputSource(new StringReader(xml.toString())), ish);
+				psi = new ParamicsSimulationInfo(networkId, xml.toString());
+			}
+			else if (xml.length() == 0)
+			{
+				lastModified = modifyFile(f);
+				r.close();
+			}
+		}
+		catch (FileNotFoundException fnfe)
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					filename + " dissapeared before reading.", fnfe);
+			psi = null;
+		}
+		catch (IOException ioe)
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					"Error while reading file " + filename + ".", ioe);
+			psi = null;
+		}
+		catch (SAXException saxe)
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					"Error while parsing file " + filename + ".", saxe);
+			psi = null;
+		}
+		catch (ParserConfigurationException pce)
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					"Error while configuring parser.", pce);
+		}
+		
+		// If a incident was read
+		if (psi != null)
+		{
+			lastModified = modifyFile(f);
+			try
+			{
+				r.close();
+			}
+			catch (IOException e)
+			{
+				paramLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+						"Error while closing file" + filename + ".", e);
+			}			
+		}
+		
+		// Return no object if there was an error while reading, or the psi created from
+		// parsing the file if the operation was successful.
+		return psi;
+	}
+	
+	private long modifyFile(File f)
+	{
+		FileWriter w = null;
+		
+		// Write to the file to show that it was read.
+		try
+		{
+			w = new FileWriter(f);
+			w.write("");
+			w.close();
+		}
+		catch (IOException e)
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					"Error while writing to file " + f.getName() + " to show that file was read.", e);
+		}
+		
+		// Save the last modified time
+		return f.lastModified();
+	}
+
+    /**
+     * Internal SAX Handler used to parse the Incident Status Document read by
+     * the remote Status Reader.  The schema for this document is: <br/>
+     *
+	 * <CAD_DATA><br>
+	 *    <Basic><br>
+	 *       <Comm_Interval/><br/>
+	 *       <Network_ID/><br/>
+	 *       <Simulation/><br/>
+	 *       <Incident/><br/>
+	 *    </Basic>
+	 *
+	 *    <Simulation_Data>
+	 *       <Simulation_speed/><br/>
+	 *       <CAD_clock><br/>
+	 *          <hour/><br/>
+	 *          <minute/><br/>
+	 *          <second/><br/>
+	 *          <Location><br/>
+	 *       </CAD_clock><br/>
+	 *    </Simulation_Data>
+	 *    
+	 *    <CAD_Incidents>
+	 *       <Incident><br/>
+	 *          <Identifier/><br/>
+	 *          <Status/><br/>
+	 *          <Location><br/>
+	 *              <Route/><br/>
+	 *              <Direction/><br/>
+	 *              <Location_type/><br/>
+	 *              <Postmile/><br/>
+	 *          </Location><br/>
+	 *          <Incident_type/><br/>
+	 *          <Lanes><br/>
+	 *             <Lane_number/><br/>
+	 *             ...
+	 *          </Lanes><br/>
+	 *       </Incident><br/>
+	 *       ...
+	 *    </CAD_Incidents>   
+	 *    
+	 *    <Management>
+	 *       <Diversion>
+     *          <Diversion_path>
+     *             <Identifier/>
+     *             <Percentage/>
+     *          <Diversion_path>
+     *          ...
+     *       </Diversion>
+     *       ...
+	 *    </Management>
+	 *  
+	 * </CAD_DATA>
+     */	
+	protected class IncidentStatusHandler extends DefaultHandler 
+	{
+		private final String NETWORK_ID   = "Network_ID";
+		
+		/** A buffer for reading characters **/
+		private StringBuffer parsedValue  = new StringBuffer();
+
+		public void startDocument() 
+		{ 
+		}	
+		
+		/** Appends characters to the xmlMessage and parsedValue buffers **/
+		public void characters(char[] ch, int start, int length) 
+		{
+			parsedValue.append(new String(ch, start, length).trim());
+		}
+		
+	    public void startElement (String uri, String localName, String qName, Attributes attributes)
+			throws SAXException
+		{
+	    }
+		
+		public void endElement(String uri, String localName, String qName)  
+		{
+			if(qName.equals(NETWORK_ID)) { networkId = Integer.parseInt(parsedValue.toString()); }
+			
+			parsedValue.setLength(0);
+		}	
+		
+		public void error(SAXParseException e) 
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "error", 
+					"Error in parsing received incident status.", e);
+		}
+		
+		public void fatalError(SAXParseException e) 
+		{
+			paramLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "fatalError", 
+					"Fatal error in parsing received incident status.", e);
+		}
+		
+		public void warning(SAXParseException e) 
+		{
+			paramLogger.logp(Level.WARNING, "ParamicsIncidentReader", "warning", 
+					"Warning in parsing received incident status.", e);
+		}		
+	}		
+}
Index: /branches/trunk/src/paramsim/paramicssimulator/ParamicsSimulationInfo.java
===================================================================
--- /branches/trunk/src/paramsim/paramicssimulator/ParamicsSimulationInfo.java	(revision 82)
+++ /branches/trunk/src/paramsim/paramicssimulator/ParamicsSimulationInfo.java	(revision 82)
@@ -0,0 +1,22 @@
+package paramsim.paramicssimulator;
+
+/**
+ * A class which encapsulates the data present in an Paramics incident status document.
+ * 
+ * @author Greg Eddington (geddingt@calpoly.edu)
+ */
+public class ParamicsSimulationInfo 
+{
+	/** The network ID **/
+	public int networkId;
+
+	/** The XML message **/
+	public String xmlMessage;
+	
+	/** Constructor **/
+	public ParamicsSimulationInfo(int networkId, String xmlMessage)
+	{
+		this.networkId = networkId;
+		this.xmlMessage = xmlMessage;
+	}
+}
Index: /branches/trunk/src/paramsim/paramicssimulator/gui/ParamicsControlPanel.java
===================================================================
--- /branches/trunk/src/paramsim/paramicssimulator/gui/ParamicsControlPanel.java	(revision 82)
+++ /branches/trunk/src/paramsim/paramicssimulator/gui/ParamicsControlPanel.java	(revision 82)
@@ -0,0 +1,215 @@
+package paramsim.paramicssimulator.gui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import paramsim.paramicssimulator.ParamicsSimulator;
+import paramsim.paramicssimulator.SimulationCamera;
+import paramsim.paramicssimulator.ParamicsSimulator.NETWORK_STATUS;
+
+/**
+ * A JPanel which provides an interface to control the Paramics Simulator.
+ * Contains a Paramics Status interface using radio buttons, and multiple
+ * Camera Status interfaces using radio buttons.
+ * 
+ * @author Greg Eddington
+ */
+@SuppressWarnings("serial")
+public class ParamicsControlPanel extends JPanel implements ActionListener
+{
+	/** The simulator **/
+	private ParamicsSimulator simulator;
+	
+	/** Loading Status **/
+	private final static String LOADING = "Loading";
+	
+	/** Warming Status **/
+	private final static String WARMING = "Warming";
+	
+	/** Loaded Status **/
+	private final static String LOADED = "Loaded";
+	
+	/** Free Flow Speed Label **/
+	private final static String FREE_FLOW = "Free Flow";
+	
+	/** Slow Speed Label **/
+	private final static String SLOW = "Slow";
+	
+	/** Stopped Speed Label **/
+	private final static String STOPPED = "Stopped";
+	
+	/** Fast Camera Status Character ID **/
+	private final static Character FAST_CHARACTER = 'F';
+	
+	/** Medium Camera Status Character ID **/
+	private final static Character MEDIUM_CHARACTER = 'M';
+	
+	/** Slow Camera Status Character ID **/
+	private final static Character SLOW_CHARACTER = 'S';
+	
+	/** Constructor **/
+	public ParamicsControlPanel(ParamicsSimulator simulator)
+	{
+		this.simulator = simulator;
+		
+		Box controlsBox = new Box(BoxLayout.Y_AXIS);
+		controlsBox.setAlignmentY(Box.CENTER_ALIGNMENT);
+
+		controlsBox.add(Box.createVerticalStrut(20));
+		controlsBox.add(CreateStatusBox());
+		controlsBox.add(Box.createVerticalStrut(20));
+		controlsBox.add(CreateCameraBox());
+		
+		add(controlsBox);
+	}
+	
+	/** Create a Paramics Status GUI box **/
+	private Box CreateStatusBox()
+	{
+		Box radioBox = new Box(BoxLayout.X_AXIS);
+		
+		ButtonGroup radioButtons = new ButtonGroup();	
+		
+		JRadioButton loadingButton = new JRadioButton(LOADING);
+		loadingButton.setActionCommand(LOADING);
+		JRadioButton warmingButton = new JRadioButton(WARMING);
+		warmingButton.setActionCommand(WARMING);
+		JRadioButton loadedButton = new JRadioButton(LOADED);
+		loadedButton.setActionCommand(LOADED);
+		
+		loadingButton.addActionListener(this);
+		warmingButton.addActionListener(this);
+		loadedButton.addActionListener(this);
+		
+		loadingButton.setSelected(true);
+		
+		radioButtons.add(loadingButton);
+		radioButtons.add(warmingButton);
+		radioButtons.add(loadedButton);
+		
+		radioBox.add(loadingButton);
+		radioBox.add(Box.createHorizontalStrut(25));
+		radioBox.add(warmingButton);
+		radioBox.add(Box.createHorizontalStrut(25));
+		radioBox.add(loadedButton);
+		
+		Box statusBox = new Box(BoxLayout.Y_AXIS);
+		statusBox.setBorder( BorderFactory.createCompoundBorder(
+								BorderFactory.createTitledBorder("Paramics Status"), 
+								BorderFactory.createEmptyBorder(0, 40, 10, 40) ) );
+		statusBox.add(radioBox);
+		
+		return statusBox;
+	}
+	
+	/** Creates a Camera Status GUI box **/
+	private Box CreateCameraBox()
+	{
+		Box camerasBox = new Box(BoxLayout.Y_AXIS);
+		Box cameraLineBox = new Box(BoxLayout.X_AXIS);
+		
+		for (int i = 1; i <= simulator.getCameras().size(); i++)
+		{
+			Box cameraBox = new Box(BoxLayout.Y_AXIS);
+			cameraBox.setBorder( BorderFactory.createCompoundBorder(
+				BorderFactory.createTitledBorder("Camera " + simulator.getCameras().get(i-1).id), 
+				BorderFactory.createEmptyBorder(0, 5, 10, 5) ) );
+			ButtonGroup radioButtons = new ButtonGroup();
+			
+			JRadioButton fastButton = new JRadioButton(FREE_FLOW);
+			JRadioButton mediumButton = new JRadioButton(SLOW);
+			JRadioButton slowButton = new JRadioButton(STOPPED);
+			slowButton.setSelected(true);
+	
+			fastButton.setActionCommand(FAST_CHARACTER + Integer.toString(i-1));
+			mediumButton.setActionCommand(MEDIUM_CHARACTER + Integer.toString(i-1));
+			slowButton.setActionCommand(SLOW_CHARACTER + Integer.toString(i-1));
+			
+			fastButton.addActionListener(this);
+			mediumButton.addActionListener(this);
+			slowButton.addActionListener(this);
+			
+			radioButtons.add(fastButton);
+			radioButtons.add(mediumButton);
+			radioButtons.add(slowButton);
+			cameraBox.add(fastButton);
+			cameraBox.add(mediumButton);
+			cameraBox.add(slowButton);
+			
+			cameraLineBox.add(cameraBox);
+			cameraLineBox.add(Box.createHorizontalStrut(20));
+			
+			if (i % 3 == 0 && i != simulator.getCameras().size())
+			{
+				camerasBox.add(cameraLineBox);
+				camerasBox.add(Box.createVerticalStrut(15));
+				cameraLineBox = new Box(BoxLayout.X_AXIS);
+			}
+		}
+		camerasBox.add(cameraLineBox);
+		camerasBox.add(Box.createVerticalStrut(15));
+		cameraLineBox = new Box(BoxLayout.X_AXIS);
+		
+		return camerasBox;
+	}
+
+	/** 
+	 * Listens for actions performed in the GUI.
+	 * 
+	 * A Paramics Status action will be either LOADING, WARMING, or LOADED.  If
+	 * recieved, the writeParamicsStatus function will be called from the simulator
+	 * with the appropriate message.
+	 * 
+	 * Any other action is considered a Camera Status Action.  The first character
+	 * of the action command is either FAST_CHARACTER, MEDIUM_CHARACTER, or SLOW_CHARACTER,
+	 * with the remainder of the command being the ID# of the camera.  The writeCameraStatus
+	 * function of the simulator will be called with the appropriate information.
+	 */
+	public void actionPerformed(ActionEvent e) 
+	{
+		String command = e.getActionCommand();
+		if (command == LOADING)
+		{
+			simulator.writeParamicsStatus(NETWORK_STATUS.LOADING);
+		}
+		else if (command == WARMING)
+		{
+			simulator.writeParamicsStatus(NETWORK_STATUS.WARMING);
+		}
+		else if (command == LOADED)
+		{
+			simulator.writeParamicsStatus(NETWORK_STATUS.LOADED);
+		}
+		else // Camera Speed Status
+		{
+			List<SimulationCamera> cameras = simulator.getCameras();
+			SimulationCamera camera = cameras.get(Integer.parseInt(command.substring(1)));
+			
+			if (e.getActionCommand().charAt(0) == FAST_CHARACTER)
+			{
+				camera.averageSpeedNE = camera.averageSpeedSW =
+					((camera.minFreeFlowSpeed + camera.maxFreeFlowSpeed) / 2);
+			}
+			else if (e.getActionCommand().charAt(0) == MEDIUM_CHARACTER)
+			{
+				camera.averageSpeedNE = camera.averageSpeedSW =
+					((camera.minSlowSpeed + camera.maxSlowSpeed) / 2);
+			}
+			else if (e.getActionCommand().charAt(0) == SLOW_CHARACTER)
+			{
+				camera.averageSpeedNE = camera.averageSpeedSW =
+					((camera.minStoppedSpeed + camera.maxStoppedSpeed) / 2);
+			}
+			
+			simulator.writeCameraStatus(cameras);
+		}
+	}
+}
Index: /branches/trunk/src/paramsim/paramicssimulator/gui/ParamicsLogPanel.java
===================================================================
--- /branches/trunk/src/paramsim/paramicssimulator/gui/ParamicsLogPanel.java	(revision 82)
+++ /branches/trunk/src/paramsim/paramicssimulator/gui/ParamicsLogPanel.java	(revision 82)
@@ -0,0 +1,51 @@
+package paramsim.paramicssimulator.gui;
+
+import java.awt.Insets;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+/** 
+ * A JPanel which records of a log of errors and messages written or recieved
+ * by the Paramics Simulator.
+ * 
+ * @author Greg Eddington
+ **/
+@SuppressWarnings("serial")
+public class ParamicsLogPanel extends JPanel
+{
+	/** The timestamp format **/
+	private static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
+	
+	/** The log text area **/
+	private JTextArea log;
+
+	/** Constructor **/
+	public ParamicsLogPanel()
+	{
+		log = new JTextArea();
+		log.setColumns(35);
+		log.setLineWrap(true);
+		log.setRows(24);
+		log.setWrapStyleWord(true);
+		log.setEditable(false);
+		log.setText("");
+		log.setMargin(new Insets(0, 10, 0, 10));
+		JScrollPane logPane = new JScrollPane(log);
+		add(logPane);
+	}
+	
+	/**
+	 * Write a string appended to the end of the log.
+	 * 
+	 * @param message
+	 */
+	public void write(String message)
+	{
+		log.setText(log.getText() + sdf.format(Calendar.getInstance().getTime()) + ":\n" + 
+				message + "\n\n");
+	}
+}
Index: /branches/trunk/src/paramsim/paramicssimulator/gui/ParamicsSimulatorGUI.java
===================================================================
--- /branches/trunk/src/paramsim/paramicssimulator/gui/ParamicsSimulatorGUI.java	(revision 82)
+++ /branches/trunk/src/paramsim/paramicssimulator/gui/ParamicsSimulatorGUI.java	(revision 82)
@@ -0,0 +1,137 @@
+package paramsim.paramicssimulator.gui;
+
+import java.awt.Dimension;
+import java.text.DateFormat;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JFrame;
+import javax.swing.JTabbedPane;
+
+import paramsim.paramicssimulator.ParamicsSimulator;
+import paramsim.paramicssimulator.ParamicsSimulatorLogMessage;
+
+/**
+ * A class which interfaces a ParamicsSimulator.
+ * Contains tabs for the controls, logs for all file IO performed by the Simulator, as well
+ * as an error log.
+ * 
+ * @author Greg Eddington
+ */
+@SuppressWarnings("serial")
+public class ParamicsSimulatorGUI extends JFrame implements Observer
+{	
+	/** The tabs of the GUI **/
+	private JTabbedPane tabs;
+	
+	/** The Paramics Status Panel **/
+	private ParamicsLogPanel paramicsStatusPanel;
+	
+	/** The Camera Status Panel **/
+	private ParamicsLogPanel cameraStatusPanel;
+	
+	/** The Incident Panel **/
+	private ParamicsLogPanel incidentPanel;
+	
+	/** The Error Panel **/
+	private ParamicsLogPanel errorPanel;
+	
+	/** The Paramics Simulator the GUI is interfacing **/
+	private ParamicsSimulator simulator;
+	
+	/**
+	 * Logging handler that writes all received log records to the
+	 * error text area.
+	 * @author Greg Eddington
+	 */
+	protected class ParamicsSimulatorErrorLoggerHandler extends Handler 
+	{
+		DateFormat timeFormat = DateFormat.getTimeInstance();
+		public void close() throws SecurityException {}
+		public void flush() {}
+		public void publish(LogRecord record) { errorPanel.write(record.getMessage()); }		
+	}
+
+	/**
+	 * Creates a new GUI for the Paramics Simulator.
+	 * 
+	 * @param simulator The Simulator to interface
+	 */
+	public ParamicsSimulatorGUI(ParamicsSimulator simulator) 
+	{		
+		super("Paramics Simulator");
+	
+		// Set the logger handler
+		Logger.getLogger("paramsim.paramicssimulator").addHandler(new ParamicsSimulatorErrorLoggerHandler());
+		
+		this.simulator = simulator;
+		
+		initializeGUI();
+	}	
+	
+	/**
+	 * Updates the GUI when something being observed changes.
+	 * 
+	 * If the argument is a ParamicSimulatorLogMessage, switch on which log the message
+	 * is for and update the appropriate log panel.
+	 */
+	public void update(Observable o, Object arg) 
+	{	
+		if(arg instanceof ParamicsSimulatorLogMessage) 
+		{
+			ParamicsSimulatorLogMessage logMessage = (ParamicsSimulatorLogMessage)arg;
+			switch (logMessage.log)
+			{
+				case PARAMICS_STATUS:
+					paramicsStatusPanel.write(logMessage.message);
+					break;
+				case CAMERA_STATUS:
+					cameraStatusPanel.write(logMessage.message);
+					break;
+				case EXCHANGE:
+					incidentPanel.write(logMessage.message);
+					break;
+			}
+		}
+	}
+	
+	/** Initializes the GUI **/
+	public void initializeGUI() 
+	{	
+		// Create tab layout
+		tabs = new JTabbedPane();
+		tabs.setAlignmentX(Box.CENTER_ALIGNMENT);
+		tabs.setMinimumSize(new Dimension(440, 440));
+		tabs.setPreferredSize(new Dimension(440, 440));
+		tabs.setMaximumSize(new Dimension(440, 440));
+		tabs.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+		
+		Box guiBox = new Box(BoxLayout.Y_AXIS);
+		guiBox.add(tabs);
+		add(guiBox);
+	
+		// Add tabs
+		tabs.add("Control", new ParamicsControlPanel(simulator));
+		paramicsStatusPanel = new ParamicsLogPanel();
+		tabs.add("Paramics Status", paramicsStatusPanel);
+		cameraStatusPanel = new ParamicsLogPanel();
+		tabs.add("Camera Status", cameraStatusPanel);
+		incidentPanel = new ParamicsLogPanel();
+		tabs.add("Incidents", incidentPanel);
+		errorPanel = new ParamicsLogPanel();
+		tabs.add("Errors", errorPanel);
+		
+		// Set size
+		setMinimumSize(new Dimension(450, 450));
+		setPreferredSize(new Dimension(450, 450));
+		setResizable(false);
+		pack();
+		setVisible(true);
+	}
+}
Index: /branches/trunk/src/paramsim/paramicssimulator/CameraParser.java
===================================================================
--- /branches/trunk/src/paramsim/paramicssimulator/CameraParser.java	(revision 82)
+++ /branches/trunk/src/paramsim/paramicssimulator/CameraParser.java	(revision 82)
@@ -0,0 +1,201 @@
+package paramsim.paramicssimulator;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import paramsim.paramicssimulator.SimulationCamera.ROAD_DIRECTION;
+
+/**
+ * Creates a list of Simulation Cameras by parsing two configuration files: 
+ * the camera_control file used by Paramics, and the dvdplayers.xml file 
+ * used by the CAD Simulator.
+ * 
+ * @author Greg Eddington
+ */
+public class CameraParser
+{
+	/** Stopped DVD Title **/
+	private static final String STOPPED_TITLE = "3";
+	/** Slow DVD Titlee **/
+	private static final String SLOW_TITLE = "2";
+	/** Free Flow DVD Title **/
+	private static final String FREE_FLOW_TITLE = "1";
+	
+	/**
+	 * Enumeration containing XML tag names used to parse the XML
+	 * document containing information about DVD Cameras.
+	 * @author Matthew Cechini
+	 * @author Greg Eddington
+	 */
+	private static enum CAMERA_TAGS 
+	{	
+		/** Top level tag. */
+		DVD_PLAYERS ("DVD_PLAYERS"),
+		/** DVD player info. */	
+		DVD_PLAYER ("DVD_PLAYER"),
+		/** CCTV camera info. */
+		CCTV         ("CCTV"),
+		/** CCTV camera id. */
+		ID           ("id"),
+		/** CCTV camera direction. */
+		DIRECTION    ("dir"),
+		/** Speed range mapping to a title number. */
+		RANGE        ("RANGE"),
+		/** Minimum speed in a range. */
+		MIN_SPEED    ("min_speed"),
+		/** Maximum speed in a range. */
+		MAX_SPEED    ("max_speed"),
+		/** Title name. */
+		TITLE        ("title");
+		
+		/** XML Tag name. */
+		public String tag;
+		
+		/** Constructor **/
+		private CAMERA_TAGS(String t) { tag = t; }
+	}
+	
+	/**
+	 * Constructor.
+	 */
+	public CameraParser() 
+	{
+	}
+
+	/**
+	 * Parses two input files and creates a list of Simulation Cameras.
+	 * 
+	 * @param dvdPlayersXml The XML file which contains DVD information for the CAD Simulator.
+	 * @param cameraControlFile The camera_control file used by Paramics to map cameras to a simulation.
+	 * @return A list of cameras configured from the parsed files.
+	 * @throws IOException On error reading or parsing one of the files.
+	 */
+	public static List<SimulationCamera> loadCameras(String dvdPlayersXml, String cameraControlFile) 
+		throws IOException
+	{
+		List<SimulationCamera> cameras = new ArrayList<SimulationCamera>();
+		
+		// XML document
+		try
+		{
+			Document newDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder()
+				.parse(new File(dvdPlayersXml));
+
+			Element rootElement = newDoc.getDocumentElement();		
+			
+			NodeList players   = rootElement.getElementsByTagName(CAMERA_TAGS.DVD_PLAYER.tag);
+			
+			for(int i = 0; i < players.getLength(); i++) 
+			{
+				SimulationCamera camera = new SimulationCamera();
+				
+				Element playerElement = (Element)players.item(i);
+						
+				Element cctvElement = (Element)playerElement.getElementsByTagName(CAMERA_TAGS.CCTV.tag).item(0);
+				camera.id = Integer.parseInt(cctvElement.getAttribute(CAMERA_TAGS.ID.tag));
+				switch(cctvElement.getAttribute(CAMERA_TAGS.DIRECTION.tag).charAt(0))
+				{
+					case 'N':
+						camera.direction = ROAD_DIRECTION.NORTH; 
+						break;
+					case 'E':
+						camera.direction = ROAD_DIRECTION.EAST;
+						break;
+					case 'S':
+						camera.direction = ROAD_DIRECTION.SOUTH;
+						break;
+					default:
+						camera.direction = ROAD_DIRECTION.WEST;
+						break;
+				}
+				
+				NodeList ranges = playerElement.getElementsByTagName(CAMERA_TAGS.RANGE.tag);		
+							
+				for(int j = 0; j < ranges.getLength(); j++) 
+				{
+					Element rangeElement = (Element)ranges.item(j);
+					
+					if (rangeElement.getAttribute(CAMERA_TAGS.TITLE.tag).contains(STOPPED_TITLE))
+					{
+				 		camera.minStoppedSpeed = 
+							Float.parseFloat(rangeElement.getAttribute(CAMERA_TAGS.MIN_SPEED.tag)); 
+						camera.maxStoppedSpeed = 
+							Float.parseFloat(rangeElement.getAttribute(CAMERA_TAGS.MAX_SPEED.tag)); 
+					}
+					else if (rangeElement.getAttribute(CAMERA_TAGS.TITLE.tag).contains(SLOW_TITLE))
+					{
+						camera.minSlowSpeed = 
+							Float.parseFloat(rangeElement.getAttribute(CAMERA_TAGS.MIN_SPEED.tag)); 
+						camera.maxSlowSpeed = 
+							Float.parseFloat(rangeElement.getAttribute(CAMERA_TAGS.MAX_SPEED.tag)); 
+					}
+					else if (rangeElement.getAttribute(CAMERA_TAGS.TITLE.tag).contains(FREE_FLOW_TITLE))
+					{
+						camera.minFreeFlowSpeed = 
+							Float.parseFloat(rangeElement.getAttribute(CAMERA_TAGS.MIN_SPEED.tag)); 
+						camera.maxFreeFlowSpeed = 
+							Float.parseFloat(rangeElement.getAttribute(CAMERA_TAGS.MAX_SPEED.tag)); 
+					}
+				}
+				
+				// Initialize Speed
+				camera.averageSpeedNE = camera.averageSpeedSW =
+					((camera.minStoppedSpeed + camera.maxStoppedSpeed) / 2);
+				
+				cameras.add(camera);
+			}		
+		}
+		catch (ParserConfigurationException pce)
+		{
+			throw new IOException(pce.toString());
+		}
+		catch (SAXException se)
+		{
+			throw new IOException(se.toString());
+		}
+		
+		// Camera Control File
+		Scanner f = new Scanner(new FileReader(cameraControlFile));
+		
+		// Throw away the first line
+		f.nextLine();
+		while (f.hasNextInt())
+		{
+			int id = f.nextInt();
+			
+			for (SimulationCamera camera : cameras)
+			{
+				if (camera.id == id)
+				{
+					// Route
+					camera.route = f.next();
+
+					// Direction
+					f.next();
+					
+					// Postmile
+					camera.postmile = f.nextFloat();
+					
+					break;
+				}
+			}
+			
+			// Ignore the rest
+			f.nextLine();
+		}
+		
+		return cameras;
+	}
+}
Index: /branches/trunk/src/paramsim/paramicssimulator/ParamicsSimulatorLogMessage.java
===================================================================
--- /branches/trunk/src/paramsim/paramicssimulator/ParamicsSimulatorLogMessage.java	(revision 82)
+++ /branches/trunk/src/paramsim/paramicssimulator/ParamicsSimulatorLogMessage.java	(revision 82)
@@ -0,0 +1,36 @@
+package paramsim.paramicssimulator;
+
+/** 
+ * A class which encapsulates a message to a Paramics Simulator log.
+ * Contains both the log the message is intended to be recieved by,
+ * and the message itself.
+ * 
+ * @author Greg Eddington
+ **/
+public class ParamicsSimulatorLogMessage 
+{
+	/** 
+	 * Enumeration of message logs
+	 * @author Greg Eddington
+	 **/
+	public static enum PARAMICS_SIMULATOR_LOG
+	{
+		PARAMICS_STATUS,
+		CAMERA_STATUS,
+		EXCHANGE,
+		ERROR
+	}
+	
+	/** The log message **/
+	public String message;
+	
+	/** The specific log **/
+	public PARAMICS_SIMULATOR_LOG log;
+	
+	/** Constructor **/
+	public ParamicsSimulatorLogMessage(PARAMICS_SIMULATOR_LOG log, String message)
+	{
+		this.message = message;
+		this.log = log;
+	}
+}
Index: /branches/trunk/src/paramsim/paramicssimulator/SimulationCamera.java
===================================================================
--- /branches/trunk/src/paramsim/paramicssimulator/SimulationCamera.java	(revision 82)
+++ /branches/trunk/src/paramsim/paramicssimulator/SimulationCamera.java	(revision 82)
@@ -0,0 +1,75 @@
+package paramsim.paramicssimulator;
+
+/**
+ * A class which encapsulates all information pertaining to a ParamicSimulator
+ * camera.
+ * 
+ * @author Greg Eddington
+ */
+public class SimulationCamera 
+{
+	/**
+	 * A road direction enumeration.
+	 * 
+	 * @author Greg Eddington
+	 */
+	public static enum ROAD_DIRECTION
+	{
+		/** North **/
+		NORTH("NB"),
+		
+		/** South **/
+		SOUTH("SB"),
+		
+		/** East **/
+		EAST("EB"),
+		
+		/** West **/
+		WEST("WB");
+		
+		/** The XML string of the field, used for updating camera_status.xml **/
+		public String xml;
+		
+		/** Constructor **/
+		private ROAD_DIRECTION(String str)
+		{
+			this.xml = str;
+		}
+	}
+	
+	/** Camera ID **/
+	public int id;
+	
+	/** The route the camera is watching **/
+	public String route;
+	
+	/** The route direction **/
+	public ROAD_DIRECTION direction;
+	
+	/** The postmile of the route **/
+	public float postmile;
+	
+	/** The average speed the camera is recording North or East **/
+	public float averageSpeedNE;
+	
+	/** The average speed the camera is recording South or West **/
+	public float averageSpeedSW;
+	
+	/** The minimum speed for the camera to show stopped footage **/
+	public float minStoppedSpeed;
+	
+	/** The maxmimum speed for the camera to show stopped footage **/
+	public float maxStoppedSpeed;
+	
+	/** The minimum speed for the camera to show slowed footage **/
+	public float minSlowSpeed;
+	
+	/** The maximum speed for the camera to show slowed footage **/
+	public float maxSlowSpeed;
+	
+	/** The minimum speed for the camera to show free flow footage **/
+	public float minFreeFlowSpeed;
+	
+	/** The maximum speed for the camera to show free flow footage **/
+	public float maxFreeFlowSpeed;
+}
Index: /branches/trunk/src/tmcsim/interfaces/SimulationManagerInterface.java
===================================================================
--- /branches/trunk/src/tmcsim/interfaces/SimulationManagerInterface.java	(revision 82)
+++ /branches/trunk/src/tmcsim/interfaces/SimulationManagerInterface.java	(revision 82)
@@ -0,0 +1,92 @@
+package tmcsim.interfaces;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.CADEnums.SCRIPT_STATUS;
+
+
+/**
+ * RMI Interface providing methods for the SimulationManager to be updated
+ * with current simulation data.  The Simulation Manager is notified
+ * when the simulation time changes, new Incidents and IncidentEvents
+ * occur, new Incidents are added to the simulation, and when the Script 
+ * and Paramics connection statuses change.
+ *
+ * @author Matthew Cechini
+ * @version $Revision: 1.3 $ $Date: 2006/06/06 20:46:41 $
+ */
+public interface SimulationManagerInterface extends Remote {
+
+    /**
+     * Notifies the SimulationManager when current simulation time changes.
+     *
+     * @param theTime The value (in seconds) of the current simulation time.
+     * @throws RemoteException if there is an error in the RMI communication.
+     */
+    public void tick(long theTime) throws RemoteException;
+    
+    /**
+     * Notifies the SimulationManager that a new IncidentEvent has occured for
+     * a current Incident.  
+     *
+     * @param logNumber The current log number being updated.
+     * @param theEvent The most recently occured incident event.
+     * @throws RemoteException if there is an error in the RMI communication
+     */
+    public void eventOccured(Integer logNumber, IncidentEvent theEvent) throws RemoteException;
+
+    /**
+     * Notifies the SimulationManager that an Incident has been added to the 
+     * simulation.
+     * 
+     * @param newIncident Incident that has been added.
+     * @throws RemoteException if there is an error in the RMI communication
+     */
+    public void incidentAdded(Incident newIncident) throws RemoteException;
+
+    /**
+     * Notifies the SimulationManager that an incident has begun.  This will
+     * occur if the user triggers an incident, or the incident occurs according
+     * to its assigned simulation time.  
+     * 
+     * @param logNumber The log number of the Incident that has started.
+     * @throws RemoteException if there is an error in the RMI communication
+     */
+    public void incidentStarted(Integer logNumber) throws RemoteException;
+    
+    /**
+     * Notifies the SimulationManager that an incident has been removed
+     * from the simulation.
+     * 
+     * @param logNumber The log number of the Incident that has been removed.
+     * @throws RemoteException if there is an error in the RMI communication
+     */ 
+    public void incidentRemoved(Integer logNumber) throws RemoteException;
+
+    /**
+     * Notifies the SimulationManager that the current status of the Script
+     * has changed.  Possible status values are determined in the SCRIPT_STATUS 
+     * enumeration.  
+     * 
+     * @see SCRIPT_STATUS
+     * @param newStatus Updated SCRIPT_STATUS.
+     * @throws RemoteException if there is an error in the RMI communication
+     */
+    public void setScriptStatus(SCRIPT_STATUS newStatus) throws RemoteException;
+
+    /**
+     * Notifies the SimulationManager that the current status of the Paramics
+     * connection has changed.  Possible status values are determined in the
+     * PARAMICS_STATUS enumeration.  
+     * 
+     * @see PARAMICS_STATUS
+     * @param newStatus Updated PARAMICS_STATUS.
+     * @throws RemoteException if there is an error in the RMI communication
+     */
+    public void setParamicsStatus(PARAMICS_STATUS newStatus) throws RemoteException;
+
+}
Index: /branches/trunk/src/tmcsim/interfaces/ParamicsControlInterface.java
===================================================================
--- /branches/trunk/src/tmcsim/interfaces/ParamicsControlInterface.java	(revision 82)
+++ /branches/trunk/src/tmcsim/interfaces/ParamicsControlInterface.java	(revision 82)
@@ -0,0 +1,45 @@
+package tmcsim.interfaces;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+import tmcsim.common.SimulationException;
+
+/**
+ * RMI interface to provide methods to control the Paramics connection.
+ * Provided functionality allows the connection to the remote Paramics
+ * Communicator to be established and dropped.  Also, the 
+ * loadParamicsNetwork() method sends a command to Paramics to begin
+ * loading a traffic network.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public interface ParamicsControlInterface extends Remote {
+
+    /**
+     *Establishes a connection to the remote Paramics Communicator.
+     *
+     * @throws RemoteException if there is an error in the RMI communication.
+     */
+    public void connectToParamics() throws RemoteException;
+
+
+    /**
+     * Drops the connection to the remote Paramics Communicator.
+     *
+     * @throws RemoteException if there is an error in the RMI communication.
+     */
+    public void disconnectFromParamics() throws RemoteException;
+
+
+    /**
+     * Sends a command to Paramics to begin loading a traffic network.
+     *
+     * @param networkID The unique indentifier for the network load request.
+     * @throws RemoteException if there is an error in the RMI communication.
+     * @throws SimulationException if there is an error loading the Paramics network.
+     */
+    public void loadParamicsNetwork(int networkID) throws RemoteException, SimulationException;
+    
+}
Index: /branches/trunk/src/tmcsim/interfaces/CoordinatorInterface.java
===================================================================
--- /branches/trunk/src/tmcsim/interfaces/CoordinatorInterface.java	(revision 82)
+++ /branches/trunk/src/tmcsim/interfaces/CoordinatorInterface.java	(revision 82)
@@ -0,0 +1,18 @@
+package tmcsim.interfaces;
+
+import java.rmi.Remote;
+
+import tmcsim.client.cadclientgui.data.CADData;
+
+/**
+ * The CoordinatorInterface extends from all interfaces that the
+ * Coordinator implements in order to provide remote method functionality.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public interface CoordinatorInterface extends SimulationControlInterface, 
+    SimulationStatusInterface, ParamicsControlInterface, CADInterface, Remote {
+
+
+}
Index: /branches/trunk/src/tmcsim/interfaces/SimulationControlInterface.java
===================================================================
--- /branches/trunk/src/tmcsim/interfaces/SimulationControlInterface.java	(revision 82)
+++ /branches/trunk/src/tmcsim/interfaces/SimulationControlInterface.java	(revision 82)
@@ -0,0 +1,144 @@
+package tmcsim.interfaces;
+
+import java.io.File;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+import tmcsim.cadmodels.CMSInfo;
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.common.ScriptException;
+
+/**
+ * RMI Interface providing methods for control of the simulation data.  
+ * This interface allows for registration of a remote SimulationManager.
+ * This object is notified of simulation information as the simulation
+ * runs.  Simulation control functionality includes starting, pausing, 
+ * resetting, and moving the repositioning the simulation.  The
+ * SimulationControlInterface also provides methods to load a new 
+ * script into the simulation, manually trigger incidents, delete
+ * current incidents, reschedule current incidents, and add new
+ * incidents.  The final control functionality allows new diversions
+ * to be applied to the simulation. 
+ *  
+ * @author Matthew Cechini
+ * @version
+ */
+public interface SimulationControlInterface extends Remote {
+
+    /**
+     * Registers a remote SimulationManager for callback.  Only one 
+     * SimulationManager can be connected at a time. The last one to 
+     * connect will be referenced in the callback RMI.
+     *
+     * @param simManInt Interface to the SimulationManager for callback RMI
+     * @throws RemoteException if there is an error in the RMI communication.
+     */
+    public void registerForCallback(SimulationManagerInterface simManInt)
+        throws RemoteException;
+
+    /**
+     * Unregisters a remote SimulationManager from callback.  The coordinator
+     * will cease calling that SimulationManager with the updated simulation data.
+     *
+     * @param simManInt Interface to the SimulationManager for callback RMI
+     * @throws RemoteException if there is an error in the RMI communication.
+     */
+    public void unregisterForCallback(SimulationManagerInterface simManInt)
+        throws RemoteException;
+    
+    /**
+     * Starts the simualation.  Simulation time begins.
+     *
+     * @throws RemoteException if there is an error in the RMI communication.
+     * @throws ScriptException if a script has not been loaded.
+     */
+    public void startSimulation() throws RemoteException, ScriptException;
+
+    /**
+     * Pauses the simulation.  Simulation time is suspended.
+     *
+     * @throws RemoteException if error occurs in RMI
+     */
+    public void pauseSimulation() throws RemoteException;
+
+    /**
+     * Reset the simulation.  Counters are reset and local lists
+     * of simulation objects are cleared.
+     *
+     * throws RemoteException if error occurs in RMI
+     */
+    public void resetSimulation() throws RemoteException;
+
+    /**
+     * Reposition the simulation to a new time mark.  After repositioning,
+     * all incidents and events will exist in the simulation data.
+     * 
+     * @param time The number of seconds to 'fast-forward' the simulation to.
+     * @throws RemoteException
+     */
+    public void gotoSimulationTime(long time) throws RemoteException;
+    
+    /**
+     * Loads a new script into the simulation.  Any existing script data
+     * is replaced by the new script data.
+     *
+     * @param scriptFile The script file to read into the coordinator
+     *
+     * @throws RemoteException if there is a problem in the RMI communication
+     * @throws ScriptException if there is an error in reading the script file
+     */
+    public void loadScriptFile(File scriptFile) throws RemoteException, ScriptException;
+    
+    /**
+     * Manually triggers an incident that has not yet occured in the simulation.
+     * 
+     * @param incidentNumber Integer value of the incident number that is to be
+     * manually triggered.
+     *
+     * @throws RemoteException if there is an error in the RMI communication.
+     * @throws ScriptException if the simulation has not been started, or if a
+     * script has not been loaded.
+     */
+    public void triggerIncident(Integer incidentNumber) throws RemoteException, ScriptException;
+
+    /**
+     * Deletes an incident that has not yet occured from the simulation.
+     *
+     * @param incidentNumber Integer value of the incident number that is to be manually triggered.
+     *
+     * @throws RemoteException if there is an error in the RMI communication.
+     * @throws ScriptException if the incident that is being deleted has already occurred.
+     */
+    public void deleteIncident(Integer incidentNumber) throws RemoteException, ScriptException;
+
+    /**
+     * Reschedule an incident that has not yet occured in the simulation.
+     *
+     * @param incidentNumber Integer value of the incident number that is to be rescheduled.
+     * @param newTime Value (in seconds) of the new time the incident is to be scheduled for.
+     *
+     * @throws RemoteException if there is an error in the RMI communication.
+     * @throws ScriptException if the new time for this incident has already passed in the simulation
+     */
+    public void rescheduleIncident(Integer incidentNumber, long newTime)
+        throws RemoteException, ScriptException;
+
+    /**
+     * Add a new incident into the current simulation.
+     *
+     * @param newIncident Incident that is to be added to the simulation.
+     * @throws RemoteException if there is an error in the RMI communication.
+     */
+    public void addIncident(Incident newIncident) throws RemoteException;
+
+    /**
+     * Applies a new set of diversions for a specific CMS.  The new CMSInfo
+     * object is passed on to the CMSDiversionDB and updated information sent
+     * to the Paramics Communicator.
+     *
+     * @param theDiversion The CMSDiversion object containing the diversion information for a CMS.
+     * @throws RemoteException if there is an error in the RMI communication
+     */
+    public void applyDiversions(CMSInfo theDiversion) throws RemoteException;
+    
+}
Index: /branches/trunk/src/tmcsim/interfaces/CADClientInterface.java
===================================================================
--- /branches/trunk/src/tmcsim/interfaces/CADClientInterface.java	(revision 82)
+++ /branches/trunk/src/tmcsim/interfaces/CADClientInterface.java	(revision 82)
@@ -0,0 +1,18 @@
+package tmcsim.interfaces;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+import tmcsim.client.cadclientgui.data.CADData;
+
+/**This interface exists for CADClient to communicate with Coordinator through the RMI. RMI requires that objects sent through implement
+ * an interface that extends Remote.
+ * @author Vincent
+ *
+ */
+
+public interface CADClientInterface extends Remote  {
+    
+    public void refresh() throws RemoteException;
+    
+}
Index: /branches/trunk/src/tmcsim/interfaces/CADInterface.java
===================================================================
--- /branches/trunk/src/tmcsim/interfaces/CADInterface.java	(revision 82)
+++ /branches/trunk/src/tmcsim/interfaces/CADInterface.java	(revision 82)
@@ -0,0 +1,313 @@
+package tmcsim.interfaces;
+
+import java.awt.List;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.util.LinkedList;
+
+import javax.swing.JList;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.client.cadclientgui.data.CADData;
+import tmcsim.client.cadclientgui.data.CardfileDataObject;
+import tmcsim.client.cadclientgui.data.CardfileList;
+import tmcsim.client.cadclientgui.data.ChangeLog;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.UNIT_TAGS;
+import tmcsim.client.cadclientgui.enums.CADScriptTags;
+import tmcsim.client.cadclientgui.enums.IncidentEnums;
+import tmcsim.client.cadclientgui.enums.UnitStatusEnums;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.*;
+
+public interface CADInterface extends Remote{
+
+    /**
+     * Registers a remote CADClient for callback.  
+     *
+     * @param client Interface to the CADClient for callback RMI
+     * @throws RemoteException if there is an error in the RMI communication.
+     */
+    public void registerForCallback(CADClientInterface client)
+        throws RemoteException;
+
+    /**
+     * Unregisters a remote CADClient from callback.  
+     * @param client Interface to the CADClient for callback RMI
+     * @throws RemoteException if there is an error in the RMI communication.
+     */
+    public void unregisterForCallback(CADClientInterface client)
+        throws RemoteException;
+    
+    /**
+     * Checks the CADData for an existing incident with id
+     * @param id the incident id
+     * @return true if CADData contains such an incident, otherwise false.
+     * @throws RemoteException
+     */
+    public boolean checkForValidIncidentID(int id) throws RemoteException;
+    
+    /**
+     * Uses an Incident's masterInc to lookup its ID.
+     * @param masterInc the Incident to look up
+     * @return the same Incident's ID, -1 if invalid masterInc
+     * @throws RemoteException
+     */
+    public int getIncidentId(String masterInc) throws RemoteException;
+    
+    /**
+     * Returns a table model out of CADData based on tag.
+     * @param tag a CADDataEnums tag
+     * @throws RemoteException
+     */
+    public DefaultTableModel getCadDataTable(TABLE tag) throws RemoteException;
+    
+    /**
+    * Returns the specified incident's table based on the tag.
+    * @param tag a CADDataEnums tag
+    * @param incidentId the incident's ID to look up
+    * @return
+    * @throws RemoteException
+    */
+   public DefaultTableModel getCadDataIncidentTable(INC_TABLE tag, int incidentId) throws RemoteException;
+   
+   /**
+    * Adds a row of data to a specified incident's table based on the tag.
+    * @param tag a CADDataEnums tag
+    * @param incidentId the incident's ID to look up
+    * @fields the row of fields to add to the specified table
+    * @throws RemoteException
+    */
+   public void addCadDataIncidentTable(INC_TABLE tag, int incidentId, String[] fields) throws RemoteException;
+    
+    /**
+     * Returns an object out of Incident based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public Object getCadDataIncVal(INC_VAL tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Set incidentId's field based on tag to value.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncVal(INC_VAL tag, int incidentId, String value) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentLocation based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncLoc(INC_LOC tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Set incidentId's field based on tag to value.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncLoc(INC_LOC tag, int incidentId, String value) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentCaller based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncCaller(INC_CALLER tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Set incidentId's field based on tag to value.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncCaller(INC_CALLER tag, int incidentId, String value) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentProblem based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncProblem(INC_PROBLEM tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Set incidentId's field based on tag to value.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncProblem(INC_PROBLEM tag, int incidentId, String value) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentGeneralInfo based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncGenInfo(INC_GEN_INFO tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Set incidentId's field based on tag to value.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncGenInfo(INC_GEN_INFO tag, int incidentId, String value) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentResponse based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncResp(INC_RESP tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Set incidentId's field based on tag to value.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncResp(INC_RESP tag, int incidentId, String value) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentAdditionalInfo based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncAddInfo(INC_ADD_INFO tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Set incidentId's field based on tag to value.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncAddInfo(INC_ADD_INFO tag, int incidentId, String value) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentActivities based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncActivities(INC_ACTIVITIES tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Set incidentId's field based on tag to value.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncActivities(INC_ACTIVITIES tag, int incidentId, String value) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentCallback based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncCallBack(INC_CALLBACK tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentEditLog based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncEditLog(INC_EDIT_LOG tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentInfo based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncInfo(INC_INFO tag, int incidentId) throws RemoteException;
+    
+    /**
+     * Returns a string out of IncidentTimes based on tag.
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncTimes(INC_TIMES tag, int incidentId) throws RemoteException; 
+    
+    /**
+     * Returns a CardfileList matching the tag.
+     */
+    public CardfileList getCardfileList(CARDFILE tag) throws RemoteException;
+    
+    /**
+     * Receives the fields of the ChangeLog in Cardfile.java and uses those fields
+     * to make changes to its own copy of the Cardfiledata.
+     */
+    public void editCardfile(ChangeLog log) throws RemoteException;
+    
+    /**
+     * Obtain a new unique ID for a cardfileDataObject.
+     */
+    public int obtainNewUniqueId() throws RemoteException;
+    
+    /**
+     * Returns the unitNum's status.
+     * @param unitNum the unitNum to look up
+     * @throws RemoteException
+     */
+    public UnitStatusEnums getCadDataUnitStatus(String unitNum) throws RemoteException;
+    
+    /**
+     * Returns a string field from Unit based on tag.
+     * @param tag a CADScriptTags tag
+     * @param unitNum the unitNum to look up
+     * @return A string value
+     * @throws RemoteException
+     */
+    public String getCadDataUnitValue(String unitNum, CADScriptTags.UNIT_TAGS tag) throws RemoteException;
+    
+    /**
+     * Sets a field from Unit based on tag.
+     * @param tag a CADScriptTags tag
+     * @param unitNum the unitNum to look up
+     * @param value the new value to be set
+     * @throws RemoteException
+     */
+    public void setCadDataUnitValue(String unitNum, UNIT_TAGS tag, Object value) throws RemoteException;
+    
+    /**
+     * Assigns a unit to the specified incident.
+     * @param unitNum the unitNum to look up
+     * @param id the incident id that this unit is assigned to.
+     * @throws RemoteException
+     */
+    public void setCadDataUnitAssignedId(String unitNum, int id) throws RemoteException;
+    
+    /**
+     * Adds a unit to the incident's list of assigned units.
+     * @param incidentId the incident
+     * @param assignedUnitNum the unit that's been assigned to the incident
+     * @throws RemoteException
+     */
+    public void addCadDataIncidentAssignedUnitNum(int incidentId, String assignedUnitNum) throws RemoteException;
+    
+    /**
+     * Sets the specified incident to the specified status.
+     * @param incidentId the incident
+     * @param status the status of the incident
+     * @throws RemoteException
+     */
+    public void setCadDataIncidentStatus(int incidentId, IncidentEnums status) throws RemoteException;
+    
+    /** 
+     * Returns a LinkedList containing entries that match the search string.
+     * @param search the string entry to be searched
+     * @return linked list of CardfileDataObjects matching search
+     */
+    public LinkedList<CardfileDataObject> getSearchList(String search) throws RemoteException;
+}
+
Index: /branches/trunk/src/tmcsim/interfaces/CADViewer.java
===================================================================
--- /branches/trunk/src/tmcsim/interfaces/CADViewer.java	(revision 82)
+++ /branches/trunk/src/tmcsim/interfaces/CADViewer.java	(revision 82)
@@ -0,0 +1,15 @@
+package tmcsim.interfaces;
+
+/**
+ * CADViewer specifies the behavior for classes that want to be Observers of the
+ * CADSimulator.
+ *
+ * @author jdalbey
+ */
+public interface CADViewer extends java.util.Observer
+{
+
+    public void setVisible(boolean state);
+
+    public void update(java.util.Observable obs, Object obj);
+}
Index: /branches/trunk/src/tmcsim/interfaces/SimulationStatusInterface.java
===================================================================
--- /branches/trunk/src/tmcsim/interfaces/SimulationStatusInterface.java	(revision 82)
+++ /branches/trunk/src/tmcsim/interfaces/SimulationStatusInterface.java	(revision 82)
@@ -0,0 +1,101 @@
+package tmcsim.interfaces;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import tmcsim.cadmodels.CMSInfo;
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.CADEnums.SCRIPT_STATUS;
+
+/**
+ * RMI Interface providing methods to get the current status information
+ * for the simulation.  This data includes a list of all Incidents 
+ * loaded into the simulation, all IncidentEvents that have
+ * previously occured, and the current simulation time.  The status of the 
+ * Script and Paramics connection, along with the current Paramics network
+ * loaded, are also through methods in this interface.  Diversion information 
+ * provided includes a list of all CMS ID strings and the CMSInfo objects 
+ * for these IDs.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public interface SimulationStatusInterface extends Remote {
+
+    /**
+     * Gets the list of all Incident objects in the current simulation.
+     *
+     * @return Vector of Incident current objects.
+     * @throws RemoteException if there is a problem in the RMI communication.
+     */
+    public Vector<Incident> getIncidentList() throws RemoteException;
+
+    /**
+     * Gets a map of IncidentEvents that have occured in this simulation.  The
+     * map keys are the log numbers for triggered Incidents.  Map values are 
+     * Vectors of the IncidentEvents that are triggered for each Incident.
+     *
+     * @return Map of IncidentEvent objects for the corresponding Incidents.
+     * @throws RemoteException if there is a problem in RMI Communication.
+     */
+    public TreeMap<Integer, Vector<IncidentEvent>> getTriggeredEvents() throws RemoteException;
+
+    /**
+     * Gets the current simulation time (in seconds).
+     *
+     * @return Value of current simulation time(in seconds).
+     * @throws RemoteException if there is a problem in RMI Communication
+     */
+    public long getCurrentSimulationTime() throws RemoteException;
+
+    /**
+     * Get the current status of the script.  
+     *
+     * @return SCRIPT_STATUS enumeration value.
+     * @throws RemoteException if there is a problem in RMI Communication.
+     * @see SCRIPT_STATUS
+     */
+    public SCRIPT_STATUS getScriptStatus() throws RemoteException;
+
+    /**
+     * Get the current status of the paramics connection.  
+     *
+     * @return PARAMICS_STATUS enumeration value.
+     * @throws RemoteException if there is a problem in RMI Communication.
+     * @see PARAMICS_STATUS
+     */
+    public PARAMICS_STATUS getParamicsStatus() throws RemoteException;
+
+    /**
+     * Get the value of the Paramics network that is loaded.
+     *
+     * @return Value of the Network ID loaded.  Returns -1 if no network is loaded.  *
+     * @throws RemoteException if there is an error in the RMI communication.
+     */
+    public int getParamicsNetworkLoaded() throws RemoteException;
+
+    /**
+     * Gets the current list of CMSInfo ID strings.
+     *
+     * @return Set of CMSInfo ID strings.
+     * @throws RemoteException if there is an error in the RMI communication
+     */
+    public TreeSet<String> getCMSIDs() throws RemoteException;
+    
+    /**
+     * Gets the current CMSInfo diversion object for the parameter unique
+     * CMS ID string.
+     * @param theCMSID A unique CMS ID string.
+     * @return The CMSInfo object found for the parameter ID.  Returns null
+     *         if an invalid ID string is given.
+     * @throws RemoteException if there is an error in the RMI communication
+     */
+    public CMSInfo getCMSDiversionInfo(String theCMSID) throws RemoteException;
+
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ImageRange.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ImageRange.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ImageRange.java	(revision 82)
@@ -0,0 +1,48 @@
+package tmcsim.cadsimulator.stillimagecontrol;
+
+/**
+ * ImageRange is a container class used within the CAD still image control.  
+ * It contains a minimum and maximum speed range and an associated image 
+ * file name to be shown.  The ImageController class uses the ImageRange 
+ * to determine which image is to be shown on the ATMS according to 
+ * current traffic speed.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+public class ImageRange {
+
+    /** Minimum speed for this range. */
+    public float minSpeed;
+
+    /** Maximum speed for this range. */
+    public float maxSpeed;
+    
+    /** Filename of the image to be shown for this range. */
+    public String fileName;
+
+    /**  
+     * Constructor.  Initialize member data with parameter values.
+     *
+     * @param min Minimum speed in range.
+     * @param max Maximum speed in range.
+     * @param file Filename if associated image file.
+     */
+    public ImageRange(float min, float max, String file) {
+        minSpeed = min;
+        maxSpeed = max;
+        fileName = file;
+    }
+    
+    /** 
+     * Tests if the parameter speed is >= the minimum speed and 
+     * < the maximum speed for this range.
+     *
+     * @param speed Speed value to test for inclusion in range.
+     * @return True if the parameter is within the range, false if not.
+     */     
+    public boolean isWithin(float speed) {
+        return speed >= minSpeed && speed < maxSpeed;
+    }       
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ImageIncident.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ImageIncident.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ImageIncident.java	(revision 82)
@@ -0,0 +1,31 @@
+package tmcsim.cadsimulator.stillimagecontrol;
+
+
+/**
+ * ImageIncident is a container class used within still image control.  This 
+ * class is used by the ImageController to determine which DVD title is to be 
+ * played when an incident is toggled.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+public class ImageIncident {
+
+    /** The incident log number. */
+    public int   incidentNumber;
+
+    /** Filename of the image to be shown for this range. */
+    public String fileName;
+    
+    /**  
+     * Construct.  Initialize member data with parameter values.
+     *
+     * @param incident Incident number.
+     * @param file Filename if associated image file.
+     */ 
+    public ImageIncident(int incident, String file) {
+        incidentNumber = incident;
+        fileName       = file;
+    }
+        
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ATMSCommunicator.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ATMSCommunicator.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ATMSCommunicator.java	(revision 82)
@@ -0,0 +1,152 @@
+package tmcsim.cadsimulator.stillimagecontrol;
+
+import java.rmi.RemoteException;
+import java.text.DateFormat;
+import java.util.Calendar;
+import java.util.StringTokenizer;
+
+/**
+ * ATMSCommunicator handles communication between the CAD Simulator and the ATMS
+ * Server. The funcationality provided includes querying the current time on the
+ * ATMS server and replacing images on the ATMS to model traffic flow changes.
+ * The ATMSCommunicator uses the plink.exe external application to establish an
+ * SSH communication with the ATMS server, which is used to execute commands
+ * remotely.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+public class ATMSCommunicator
+{
+
+    /**
+     * Connection user name.
+     */
+    protected String username;
+    /**
+     * Connection password.
+     */
+    protected String password;
+    /**
+     * ATMS Server Host name.
+     */
+    protected String viewerHost;
+    /**
+     * Absolute directory path for images.
+     */
+    protected String image_dir;
+    /**
+     * Base plink command string.
+     */
+    protected String plinkBaseCMD;
+    protected String remoteShellCmd;
+
+    /**
+     * Constructor.
+     */
+    public ATMSCommunicator(String host, String user, String pwd, String dir)
+    {
+        viewerHost = host;
+        username = user;
+        password = pwd;
+        image_dir = dir;
+        String osname = System.getProperty("os.name");
+        if (osname.startsWith("Windows"))
+        {
+            remoteShellCmd = "plink -l " + username + " -pw " + password + " " + viewerHost + " \"date\"";
+        }
+        else
+        {
+            remoteShellCmd = "date"; //sshpass -p " + password + " " + "ssh -t -l " + username + viewerHost + " date &";
+        }
+    }
+
+    /**
+     * Get the current ATMS server time as the number of seconds since Jan 1,
+     * 1970.
+     *
+     * @return Current time in seconds.
+     * @throws RemoteException If there is an exception in RMI communication.
+     */
+    public long getCurrentTime() throws Exception
+    {
+
+        Calendar currentCal = Calendar.getInstance();
+
+        Process timeProc = Runtime.getRuntime().exec(remoteShellCmd);
+        timeProc.waitFor();
+//        System.out.println("timeProc exit = " + timeProc.exitValue());
+//        byte[] procBytes = new byte[timeProc.getInputStream().available()];
+//        timeProc.getInputStream().read(procBytes);
+//        String returnString = new String(procBytes);
+//        System.out.println("timeProc returned: " + returnString);
+
+        if (timeProc.exitValue() == 0)
+        {
+            String tempToken = null;
+            byte[] dateBytes = new byte[timeProc.getInputStream().available()];
+            timeProc.getInputStream().read(dateBytes);
+
+            StringTokenizer spaceTok = new StringTokenizer(new String(dateBytes), " ");
+            while (spaceTok.hasMoreTokens())
+            {
+                tempToken = spaceTok.nextToken();
+
+                if (tempToken.indexOf(":") != -1)
+                {
+                    StringTokenizer colonTok = new StringTokenizer(new String(tempToken), ":");
+
+                    currentCal.set(Calendar.HOUR, Integer.parseInt(colonTok.nextToken()));
+                    currentCal.set(Calendar.MINUTE, Integer.parseInt(colonTok.nextToken()));
+                    currentCal.set(Calendar.SECOND, Integer.parseInt(colonTok.nextToken()));
+
+                    System.out.println("Time retreieved from ATRMS server: "
+                            + DateFormat.getDateTimeInstance().format(currentCal.getTime()));
+
+                }
+            }
+        }
+
+        return currentCal.getTimeInMillis();
+
+    }
+
+    /**
+     * Show a new image for an ATMS camera. The ATMS camera files are named
+     * <ATMS_Camera_ID>.xpm. If a camera file exists, delete it. Then copy the
+     * parameter file name to <ATMS_Camera_ID>.xpm. If the camera ID or new file
+     * does not exist, throw an exception.
+     *
+     * @param ATMS_cameraID ATMS indexed camera ID.
+     * @param fileName Filename to show.
+     * @throws RemoteException If there is an exception in RMI communication.
+     */
+    public void showImage(Integer ATMS_cameraID, String fileName) throws RemoteException
+    {
+
+        System.out.println("Showing CameraID " + ATMS_cameraID + ", with filename: " + fileName);
+        /*
+         Process imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"ls " + image_dir + "/cctvImage" + ATMS_cameraID + ".xpm\"");
+         imageProc.waitFor();
+
+         if(imageProc.exitValue() != 0) {
+         throw new Exception(image_dir + "/cctvImage" + ATMS_cameraID + ".xpm does not exist");
+         }
+
+         imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"ls " + image_dir + "/" + fileName + ".xpm\"");
+         imageProc.waitFor();
+
+         if(imageProc.exitValue() != 0) {
+         throw new Exception(image_dir + "/" + fileName + ".xpm does not exist");
+         }
+
+         imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"rm " + image_dir + "/cctvImage" + ATMS_cameraID + ".xpm\"");
+         imageProc.waitFor();
+
+         imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"cp " + image_dir + "/" + fileName + ".xpm" +
+         "   " + image_dir + "/" + "cctvImage" + ATMS_cameraID + ".xpm\"");
+         imageProc.waitFor();
+         */
+
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ImageController.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ImageController.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/stillimagecontrol/ImageController.java	(revision 82)
@@ -0,0 +1,199 @@
+package tmcsim.cadsimulator.stillimagecontrol;
+
+import java.util.Observable;
+import java.util.Vector;
+
+import tmcsim.cadsimulator.managers.ATMSManager;
+
+/**
+ * ImageController is used for controlling which images are shown on the ATMS 
+ * Server.  Communication with the ATMS server is performed through the
+ * ATMSManager.  
+ *
+ * The addRange() and addIncident() methods are used to register more images with
+ * the ImageController class.  The updateImage() and toggleIncident() methods are
+ * used to control which images are being shown.  An image will remain showing 
+ * until a new image is chosen through one of these methods. 
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+public class ImageController extends Observable  {
+    
+    /** Number of consecutive requests for change until the image will change. */
+    private static final int CHANGE_TOLERANCE = 2;
+    
+    /** ATMS CCTV unique ID. */
+    protected Integer atms_cctv_id      = null;
+
+    /** Vector of ImageRange objects handled by this controller. */
+    protected Vector<ImageRange> ranges = null;
+
+    /** Vector of ImageIncident objects handled by this controller. */
+    protected Vector<ImageIncident> incidents = null;
+    
+    /** Current range being shown.  Null if none have been shown. */
+    protected ImageRange currentRange = null;
+
+    /** Current incident iamge being shown.  Null if none have been shown. */
+    protected ImageIncident currentIncident = null;
+    
+    /** Boolean flag determining whether an incident is currently being shown. */
+    protected boolean isShowingIncident = false;
+    
+    /** 
+     * ImageRange object to cache the last "new range" that the controller
+     * has chosen as a result of a speed update.  This allows for a tolerance
+     * value to be used to control frequent title changes.  
+     */
+    protected ImageRange changeRange;
+    
+    /** 
+     * Count value to count the number of consecutive updates that
+     * result in the same ImageRange. 
+     */
+    protected int changeRangeCounter;   
+    
+    /** Manager used to handle communication with the ATMS. */
+    protected ATMSManager theATMSManager;
+    
+    /**
+     * Constructor.
+     * 
+     * @param cctv_id ATMS CCTV ID.
+     */
+    public ImageController(Integer cctv_id, ATMSManager atmsManager) {
+        theATMSManager = atmsManager;
+        
+        ranges       = new Vector<ImageRange>();
+        incidents    = new Vector<ImageIncident>();
+        atms_cctv_id = cctv_id;
+        
+        changeRange        = null;
+        changeRangeCounter = 0;
+    }
+    
+    /**  
+     * Add a new ImageRange to the local list.
+     * 
+     * @param newRange ImageRange to add.
+     */
+    public void addRange(ImageRange newRange) {
+        ranges.add(newRange);
+    }
+    
+    /**  
+     * Add a new ImageIncident to the local list.
+     * 
+     * @param newRange ImageIncident to add.
+     */ 
+    public void addIncident(ImageIncident newIncident) {
+        incidents.add(newIncident);
+    }
+    
+    /**
+     * Toggle the image controller to begin or stop showing the image associated
+     * with an incident.  The boolean parameter is used to designate whether the 
+     * incident is being toggled to start(true) or stop (false).  
+     * If the toggle flag is true, then the ImageIncident with log number equal 
+     * to the parameter log_num will be shown.  The currentIncident and 
+     * isShowingIncident member data objects are updated.  
+     *
+     * If the toggle flag is false, and the incident being toggled is shown,
+     * then it is stopped.
+     *
+     * @param log_num Incident log number to toggle.
+     * @param toggle Boolean flag.  True = start incident, false = stop incident.
+     * @throws Exception if the method is unable to toggle the incident.
+     */
+    public void toggleIncident(int log_num, boolean toggle) throws Exception {
+        if(toggle) {
+            for(ImageIncident incident : incidents) {
+                if(incident.incidentNumber == log_num) {
+                    currentIncident   = incident;                   
+                    isShowingIncident = true;
+                    
+                    showCurrentImage();
+                }
+            }
+        }
+        else if(currentIncident != null && currentIncident.incidentNumber == log_num) {
+            isShowingIncident = false;
+
+            showCurrentImage();
+        }
+        else {
+            throw new Exception("ImageController: Unable to toggle incident #" + log_num);
+        }
+    }   
+    
+    /**
+     * Update the image with a new traffic speed after the tolerance of
+     * range changes has been met.  If the parameter speed falls within a 
+     * different ImageRange than is being shown, remember the new range.  If this 
+     * new range was not detected during the last update, reset the change 
+     * counter to 0.  If this range was detected during the last update, 
+     * increment the change counter.  If the change counter is greater than
+     * the tolerance value specified, set the current range to the new range, 
+     * reset the change counter, and set the updated flag to true.  If the range
+     * has been updated, and an incident is not being shown, return true.  Else
+     * return false.
+     *
+     * @param newSpeed New traffic speed for this Image's camera location.
+     * @return True if a new ImageRange is to be shown, false if not.
+     */
+    public boolean updateImage(float newSpeed) {
+        
+        boolean updated    = false;
+        ImageRange newRange = null;
+        
+        for(ImageRange range : ranges) {
+            if(range.isWithin(newSpeed)) {
+                if(currentRange == null || !currentRange.equals(range)) {
+                    newRange = range;
+                    break;
+                }
+            }
+        }
+        
+        if(newRange == null) {
+            //do nothing
+        }
+        else if(changeRange == null || !changeRange.equals(newRange)) {
+            changeRange = newRange;
+            changeRangeCounter = 0;
+        }
+        else {
+            changeRangeCounter++;
+        }
+        
+        if(changeRangeCounter >= CHANGE_TOLERANCE) {
+            changeRangeCounter = 0;
+            currentRange       = changeRange;
+            updated            = true;
+        }
+        
+        
+        //even if the currentRange is updated, an incident trumps this
+        return updated & !isShowingIncident;
+    }
+    
+    /**
+     * This method shows a new image.  If the Image Controller is showing an incident,
+     * then the incident image will be shown.  Else, if an Image range has been found, 
+     * then it's image will be shown.  Image control is done through the ATMSCommunicator
+     * singleton instance.
+     *
+     * @throws Exception if the method is not able to play the current title.
+     */
+    public void showCurrentImage() throws Exception {
+        //TODO  THIS IS HACK??!!
+        if (isShowingIncident) {
+            theATMSManager.showImage(atms_cctv_id, currentIncident.fileName);
+        } else if (currentRange != null) {
+            theATMSManager.showImage(atms_cctv_id, currentRange.fileName);
+        }
+    }
+
+
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/managers/ATMSManager.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/managers/ATMSManager.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/managers/ATMSManager.java	(revision 82)
@@ -0,0 +1,107 @@
+package tmcsim.cadsimulator.managers;
+
+import java.io.FileInputStream;
+import java.rmi.RemoteException;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import tmcsim.cadsimulator.stillimagecontrol.ATMSCommunicator;
+
+/**
+ * ATMSManager is a CAD Simulator Manager used to handle all
+ * communication between the CAD Simulator and the ATMS server.
+ * Upon construction, the ATMSCommunicator is initialized with 
+ * information from the properties file.  This Object is used 
+ * to perform the specific communication functions to send and 
+ * receive data to/from the ATMS server.  Methods in this 
+ * Manager allow for the current ATMS server time to be queried
+ * and still images to be updated for display to ATMS clients.  
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+public class ATMSManager {
+
+    /** Error Logger. */
+    private static Logger atmsLogger = Logger.getLogger("tmcsim.cadsimulator.managers"); 
+    
+    /**
+     * Enumeration containing property names for Properties parsing.
+     * @author Matthew Cechini
+     */
+    private static enum ATMS_PROPERTIES {
+        /**  */
+        ATMS_HOST ("ATMSHost"), 
+        /**  */
+        USERNAME  ("Username"), 
+        /**  */
+        PASSWORD  ("Password"), 
+        /**  */
+        IMAGE_DIR ("ImageDir");
+
+        public String name;
+        
+        private ATMS_PROPERTIES(String n) {
+            name = n;
+        }
+    };  
+    
+    /** ATMSCommunicator Object used for communication to the ATMS server. */
+    private ATMSCommunicator theATMSCommunicator;
+    
+    /** Properties Object. */
+    private Properties atmsProperties = null;
+    
+    
+    /**
+     * Constructor.  Loads the Properties file and initializes the 
+     * ATMSCommunicator with the parsed data.
+     * 
+     * @param propertiesFile Target file path of properties file.
+     */
+    public ATMSManager(String propertiesFile) {
+        
+        try {
+            atmsProperties = new Properties();
+            atmsProperties.load(new FileInputStream(propertiesFile));
+            
+            theATMSCommunicator = new ATMSCommunicator(
+                    atmsProperties.getProperty(ATMS_PROPERTIES.ATMS_HOST.name),
+                    atmsProperties.getProperty(ATMS_PROPERTIES.USERNAME.name),
+                    atmsProperties.getProperty(ATMS_PROPERTIES.PASSWORD.name),
+                    atmsProperties.getProperty(ATMS_PROPERTIES.IMAGE_DIR.name));
+            
+        }
+        catch (Exception e) {
+            atmsLogger.logp(Level.SEVERE, "ATMSManager", "Constructor",
+                    "Exception in parsing properties file.", e);
+        } 
+    }
+    
+
+    /**
+     * Returns the current ATMS server time as the number of seconds since Jan 1, 1970.
+     * 
+     * @return Current time in seconds.
+     * @throws Exception if an exception occurs communicating to the ATMS server.
+     */
+    public long getCurrentTime() throws Exception {
+        return theATMSCommunicator.getCurrentTime();
+    }
+
+    /**
+     * Show a new image for an ATMS camera.  The ATMS camera files are named
+     * <ATMS_Camera_ID>.xpm.  If a camera file exists, delete it.  Then copy
+     * the parameter file name to <ATMS_Camera_ID>.xpm.  If the camera ID or 
+     * new file does not exist, throw an exception.     
+     * 
+     * @param ATMS_cameraID ATMS indexed camera ID.
+     * @param fileName Filename to show.
+     * @throws RemoteException if an exception occurs communicating to the ATMS server.
+     */
+    public void showImage(Integer ATMS_cameraID, String fileName) throws RemoteException {
+        theATMSCommunicator.showImage(ATMS_cameraID, fileName);
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/managers/ParamicsSimulationManager.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/managers/ParamicsSimulationManager.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/managers/ParamicsSimulationManager.java	(revision 82)
@@ -0,0 +1,331 @@
+package tmcsim.cadsimulator.managers;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import tmcsim.cadmodels.CMSInfo;
+import tmcsim.cadsimulator.Coordinator;
+import tmcsim.cadsimulator.paramicscontrol.ParamicsCameraStatusReader;
+import tmcsim.cadsimulator.paramicscontrol.ParamicsCommunicator;
+import tmcsim.cadsimulator.paramicscontrol.ParamicsIncidentWriter;
+import tmcsim.cadsimulator.paramicscontrol.ParamicsStatusReader;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.SimulationException;
+import tmcsim.common.XMLIncident;
+
+/**
+ * ParamicsSimulationManager is a CAD Simulator Manager used to handle all
+ * communication between the CAD Simulator and the remote ParamicsCommunicator.
+ * Upon construction all ParamicsReaders and ParamicsWriters are initialized
+ * with data parsed from the Properties file. When a connection is established
+ * the ParamicsStatusReader is registered to read Paramics Status updates. These
+ * updates are received through the updateParamicsStatus() method, which
+ * notifies the Coordinator of the new status. The loadParamicsNetwork() must be
+ * called to register the ParamicsIncidentWriter which will write the
+ * information to cause Paramics to begin loading a traffic network. When the
+ * status becomes LOADED, the ParamicsCameraStatusReader is registered and
+ * begins reading. All camera speed updates are received through the
+ * updateCameraInfo() method. The startSimulation(), resetSimulation(), and
+ * sendIncidentUpdate() methods are used to control the flow of Incident update
+ * information to Paramics. The updateIncident() and updateDiversion() methods
+ * are used to update the information that is sent to Paramics.
+ *
+ *
+ * @see PARAMICS_STATUS
+ * @author Matthew Cechini
+ * @version
+ */
+public class ParamicsSimulationManager
+{
+
+    /**
+     * Error logger.
+     */
+    private static Logger paramLogger = Logger.getLogger("tmcsim.cadsimulator.paramicscontrol");
+
+    /**
+     * Enumeration containing property names for Properties parsing.
+     *
+     * @author Matthew Cechini
+     */
+    private static enum PROPERTIES
+    {
+
+        PARAMICS_HOST("ParamicsCommHost"),
+        PARAMICS_PORT("ParamicsCommPort"),
+        INCIDENT_UPDATE_INT("IncidentUpdateInterval"),
+        INCIDENT_UPDATE_FILE("IncidentUpdateFile"),
+        PARAMICS_STATUS_INT("ParamicsStatusInterval"),
+        PARAMICS_STATUS_FILE("ParamicsStatusFile"),
+        CAMERA_STATUS_INT("CameraStatusInterval"),
+        CAMERA_STATUS_FILE("CameraStatusFile");
+        String name;
+
+        private PROPERTIES(String n)
+        {
+            name = n;
+        }
+    };
+    /**
+     * ParamicsCommunicator Object used for communication.
+     */
+    private ParamicsCommunicator theCommunicator;
+    /**
+     * Reference to the Coordinator Object.
+     */
+    private Coordinator theCoordinator;
+    /**
+     * Reference to the MediaManager Object.
+     */
+    private MediaManager theMediaMgr;
+    /**
+     * ParamicsIncidentWriter used to send incident updates to Paramics.
+     */
+    private ParamicsIncidentWriter paramicsIncidentWriter;
+    /**
+     * ParamicsStatusReader used to read status information from Paramics.
+     */
+    private ParamicsStatusReader paramicsStatusReader;
+    /**
+     * ParamicsCameraStatusReader used to read speed information from Paramics.
+     */
+    private ParamicsCameraStatusReader paramicsCameraStatusReader;
+    /**
+     * Properties file.
+     */
+    private Properties paramicsProperties;
+
+    /**
+     * Constructor. Loads the Properties file and initializes all Paramics
+     * Writers and Readers with the parsed data.
+     *
+     * @param propertiesFile Target file path of properties file.
+     * @param coor Coordinator Object.
+     * @param mediaMgr MediaManager Object.
+     */
+    public ParamicsSimulationManager(String propertiesFile, Coordinator coor, MediaManager mediaMgr)
+    {
+
+        try
+        {
+            paramicsProperties = new Properties();
+            paramicsProperties.load(new FileInputStream(propertiesFile));
+
+            theCoordinator = coor;
+            theMediaMgr = mediaMgr;
+
+            theCommunicator = new ParamicsCommunicator(this,
+                    paramicsProperties.getProperty(PROPERTIES.PARAMICS_HOST.name),
+                    Integer.parseInt(paramicsProperties.getProperty(
+                    PROPERTIES.PARAMICS_PORT.name).trim()));
+
+            paramicsIncidentWriter = new ParamicsIncidentWriter(Integer.parseInt(
+                    paramicsProperties.getProperty(PROPERTIES.INCIDENT_UPDATE_INT.name).trim()));
+            paramicsIncidentWriter.writerID = theCommunicator.nextID();
+            paramicsIncidentWriter.targetFile = paramicsProperties.getProperty(
+                    PROPERTIES.INCIDENT_UPDATE_FILE.name);
+
+            paramicsStatusReader = new ParamicsStatusReader(this);
+            paramicsStatusReader.readerID = theCommunicator.nextID();
+            paramicsStatusReader.interval = paramicsProperties.getProperty(
+                    PROPERTIES.PARAMICS_STATUS_INT.name).trim();
+            paramicsStatusReader.targetFile = paramicsProperties.getProperty(
+                    PROPERTIES.PARAMICS_STATUS_FILE.name);
+
+            paramicsCameraStatusReader = new ParamicsCameraStatusReader(this);
+            paramicsCameraStatusReader.readerID = theCommunicator.nextID();
+            paramicsCameraStatusReader.interval = paramicsProperties.getProperty(
+                    PROPERTIES.CAMERA_STATUS_INT.name).trim();
+            paramicsCameraStatusReader.targetFile = paramicsProperties.getProperty(
+                    PROPERTIES.CAMERA_STATUS_FILE.name);
+        } catch (Exception e)
+        {
+            paramLogger.logp(Level.SEVERE, "ParamicsSimulationManager",
+                    "Constructor", "Exception in parsing properties file.", e);
+        }
+
+    }
+
+    /**
+     * Returns whether a connection exists to the remote ParamicsCommunicator.
+     *
+     * @return true if a connection exists, false if not.
+     */
+    public boolean isConnected()
+    {
+        return theCommunicator.isConnected();
+    }
+
+    /**
+     * Returns the integer Network ID that has been loaded into Paramics.
+     *
+     * @return Network ID.
+     */
+    public int getParamicsNetworkLoaded()
+    {
+        return paramicsStatusReader.getNetworkID();
+    }
+
+    /**
+     * Returns the current status of the Paramics traffic modeler.
+     *
+     * @return Current PARAMICS_STATUS
+     */
+    public PARAMICS_STATUS getParamicsStatus()
+    {
+        return paramicsStatusReader.getStatus();
+    }
+
+    /**
+     * Updates the ParamicsIncidentWriter with new Incident information.
+     *
+     * @param xmlInc Updated Incident information.
+     */
+    public void updateIncident(XMLIncident xmlInc)
+    {
+        paramicsIncidentWriter.updateIncident(xmlInc);
+    }
+
+    /**
+     * Updates the ParamicsIncidentWriter with the new Diversion information.
+     *
+     * @param theDiversion Updated diversion information.
+     */
+    public void updateDiversion(CMSInfo theDiversion)
+    {
+        paramicsIncidentWriter.updateDiversion(theDiversion);
+    }
+
+    /**
+     * Notifies the ParamicsIncidentWriter to start the simulation.
+     */
+    public void startSimulation()
+    {
+        paramicsIncidentWriter.startSimulation();
+    }
+
+    /**
+     * Notifies the ParamicsIncidentWriter to reset the simulation.
+     */
+    public void resetSimulation()
+    {
+        paramicsIncidentWriter.resetSimulation();
+    }
+
+    /**
+     * Notifies the ParamicsIncidentWriter to send an Incident update.
+     *
+     * @param currentSimTime Current simulation time (in seconds).
+     */
+    public void sendIncidentUpdate(long currentSimTime)
+    {
+        paramicsIncidentWriter.sendUpdate(currentSimTime);
+    }
+
+    /**
+     * Establish a connection to the remote ParamicsCommunicator. Register the
+     * ParamicsStatusReader and update the current status to CONNECTED. If an
+     * exception occurs in connecting to the ParamicsCommunicator, update the
+     * current status to UNREACHABLE.
+     */
+    public void connectToParamics()
+    {
+        try
+        {
+            theCommunicator.connect();
+            theCommunicator.registerReader(paramicsStatusReader);
+
+            updateParamicsStatus(PARAMICS_STATUS.CONNECTED);
+        } catch (IOException ioe)
+        {
+            paramLogger.logp(Level.SEVERE, "Coordinator", "connectToParamics",
+                    "Communication error in connecting to Paramics.", ioe);
+
+            updateParamicsStatus(PARAMICS_STATUS.UNREACHABLE);
+        }
+    }
+
+    /**
+     * Close the connection to the remote ParamicsCommunicator. Unregister all
+     * Readers and Wrtiers from the ParamicsCommunicator. Reset the status
+     * information in the ParamicsStatusReader. Update the current status to
+     * DISCONNECTED.
+     */
+    public void disconnectFromParamics()
+    {
+
+        theCommunicator.disconnect();
+        theCommunicator.unregisterReader(paramicsStatusReader);
+        theCommunicator.unregisterWriter(paramicsIncidentWriter);
+        theCommunicator.unregisterReader(paramicsCameraStatusReader);
+
+        paramicsStatusReader.resetStatusInfo();
+
+        updateParamicsStatus(PARAMICS_STATUS.DISCONNECTED);
+    }
+
+    /**
+     * Updates the current paramics status. If the new status is LOADED, then
+     * notify the ParamicsIncidentWriter that the network has been loaded and
+     * register the ParamicsCameraStatusReader with the ParamicsCommunicator.
+     * Notify the Coordinator of all Paramics status updates.
+     *
+     * @param newStatus New Paramics status.
+     */
+    public void updateParamicsStatus(PARAMICS_STATUS newStatus)
+    {
+
+        //the network has finished loading
+        if (newStatus == PARAMICS_STATUS.LOADED)
+        {
+
+            paramicsIncidentWriter.networkLoaded();
+
+            theCommunicator.registerReader(paramicsCameraStatusReader);
+
+        } else if (newStatus == PARAMICS_STATUS.DROPPED)
+        {
+            paramLogger.logp(Level.WARNING, "Coordinator", "updateParamicsStatus",
+                    "Connection to Paramics has been dropped.");
+        }
+
+        theCoordinator.setParamicsStatus(newStatus);
+
+    }
+
+    /**
+     * If a connection has been made, register the ParamicsIncidentWriter and
+     * use it to notify Paramics of the Network ID to load.
+     *
+     * @param networkID Network ID to load.
+     * @throws SimulationException if a connection has not been made to the
+     * remote ParamicsCommunicator.
+     */
+    public void loadParamicsNetwork(int networkID) throws SimulationException
+    {
+
+        if (theCommunicator.isConnected())
+        {
+            theCommunicator.registerWriter(paramicsIncidentWriter);
+            paramicsIncidentWriter.loadNetwork(networkID);
+        } else
+        {
+            throw new SimulationException(SimulationException.PARAMICS_NOT_CONNECTED);
+        }
+    }
+
+    /**
+     * Receive updated camera speed information. Notify the MediaManager with
+     * the updated data.
+     *
+     * @param cameraID CCTV camera ID
+     * @param avgSpeed_NE Average speed of traffic flowing N or E
+     * @param avgSpeed_SW Average speed of traffic flowing S or W
+     */
+    public void updateCameraInfo(Integer cameraID, float avgSpeed_NE, float avgSpeed_SW)
+    {
+        theMediaMgr.updateCameraInfo(cameraID, avgSpeed_NE, avgSpeed_SW);
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/managers/SimulationControlManager.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/managers/SimulationControlManager.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/managers/SimulationControlManager.java	(revision 82)
@@ -0,0 +1,90 @@
+package tmcsim.cadsimulator.managers;
+
+import java.rmi.RemoteException;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import tmcsim.cadsimulator.Coordinator;
+import tmcsim.common.CADEnums.SCRIPT_STATUS;
+
+public class SimulationControlManager  {
+
+    /** 
+     * 
+     */
+    private class ClockTask extends TimerTask {     
+        public void run() {
+            currentSimTime++;
+            theCoordinator.tick();
+        }
+    }
+    
+    /** The SimulationTimer used to keep track of simulation time. */
+    private Timer simTimer = null;
+    
+    /**  */
+    private Coordinator theCoordinator;
+    
+        /**
+     * Boolean flag to designate whether the simulation has been started or not.
+     */    
+    private boolean simulationStarted;
+    
+    /**
+     * Object used to count the number of seconds that the simulation has run.
+     * The value is initialized to 0, and is reset to 0 every time a new simulation
+     * is loaded, or the current simulation is stopped and reset.
+     */
+    private long currentSimTime;    
+    
+    
+    public SimulationControlManager(Coordinator coor) {
+        
+        theCoordinator    = coor;       
+        simulationStarted = false;
+        currentSimTime    = 0;    
+    }
+    
+    public boolean simulationStarted() {
+        return simulationStarted;
+    }
+    
+    public long getCurrentSimTime() {
+        return currentSimTime;
+    }
+    
+    public void gotoSimulationTime(long newSimTime) {
+        currentSimTime = newSimTime;
+    }
+    
+    public void startSimulation() {
+            
+        simTimer = new Timer();     
+        simTimer.scheduleAtFixedRate(new ClockTask(), 0, 1000);
+        
+        simulationStarted = true;   
+        
+        theCoordinator.setScriptStatus(SCRIPT_STATUS.SCRIPT_RUNNING);
+    }
+    
+    public void pauseSimulation() {  
+        
+        if(simTimer != null)
+            simTimer.cancel();          
+            
+        simulationStarted = false;              
+        
+        theCoordinator.setScriptStatus(SCRIPT_STATUS.SCRIPT_PAUSED_STARTED);
+    }
+    
+    public void resetSimulation() throws RemoteException {      
+        
+        if(simTimer != null)
+            simTimer.cancel(); 
+         
+        currentSimTime = 0;              
+        
+        theCoordinator.setScriptStatus(SCRIPT_STATUS.SCRIPT_STOPPED_NOT_STARTED);
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/managers/IncidentManager.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/managers/IncidentManager.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/managers/IncidentManager.java	(revision 82)
@@ -0,0 +1,409 @@
+package tmcsim.cadsimulator.managers;
+
+import java.util.TreeMap;
+import java.util.Vector;
+
+import tmcsim.cadmodels.IncidentBoardModel_obj;
+import tmcsim.cadmodels.IncidentInquiryModel_obj;
+import tmcsim.cadmodels.IncidentSummaryModel_obj;
+import tmcsim.cadsimulator.CADSimulator;
+import tmcsim.cadsimulator.Coordinator;
+import tmcsim.cadsimulator.SoundPlayer;
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.common.ScriptException;
+
+/**
+ * IncidentManager is a CAD Simulator Manager containing the Incident data 
+ * that has been loaded and occured during the simulation.  The IncidentManager
+ * is used to load, remove, trigger, and reschedule Incidents in the simulation.  
+ * Methods are provided to clear all Incident data from the simulation and to reset
+ * the Incidents to begin a new simulation.  The IncidentBoard, IncidentInquiry, 
+ * IncidentSummary, and IncidentEvent object lists are viewable through accessor methods.
+ * The tick() method is called when the simulation time changes.  This method will then
+ * update all loaded Incidents. Any events that occur will be enqueued on the SoundPlayer.
+ * Any events that have completed are updated into the simulation data.  The Coordinator
+ * is notified when an Incident starts or is updated.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class IncidentManager {
+    
+    /** Reference to the Coordinator Object. */
+    private Coordinator theCoordinator;
+
+    /** Reference to the SoundPlayer Object. */
+    private SoundPlayer theSoundPlayer;
+    
+    /**
+     * Synchronization lock object used to avoid race conditions in accessing the
+     * incidentList Vector.
+     */
+    private Object lock = new Object();    
+    
+    /**
+     * Map containing a vector of IncidentEvent objects(values) that have 
+     * completed for each Incident log number(key).
+     */
+    private TreeMap<Integer, Vector<IncidentEvent>> completedEvents;       
+    
+    /**
+     * Vector of Incident objects that exist in the simulation.
+     */     
+    private Vector<Incident> incidentList;    
+    
+    /**
+     * Vector of IncidentBoardModel_obj objects containing the data for
+     * incident board messages.
+     */
+    private Vector<IncidentBoardModel_obj> IncidentBoardModelObjects;
+
+    /**
+     * Vector of IncidentInquiryModel_obj objects containing the data
+     * for incident inquiry requests.
+     */    
+    private Vector<IncidentInquiryModel_obj> IncidentInquiryModelObjects;
+
+    /**
+     * Vector of IncidentSummaryModel_obj objects containing the data 
+     * for incident summary requests.
+     */    
+    private Vector<IncidentSummaryModel_obj> IncidentSummaryModelObjects;
+    
+    /** Boolean flag to designate whether incidents are loaded. */
+    private boolean incidentsLoaded;
+    
+    
+    /**
+     * Constructor. Initialize data members.
+     * 
+     * @param coor Coordinator Object.
+     * @param soundPlayer SoundPlayer Object.
+     */
+    public IncidentManager(Coordinator coor, SoundPlayer soundPlayer) {
+        theCoordinator = coor;
+        theSoundPlayer = soundPlayer;
+        
+        incidentList                = new Vector<Incident>();
+        completedEvents             = new TreeMap<Integer, Vector<IncidentEvent>>();    
+        IncidentBoardModelObjects   = new Vector<IncidentBoardModel_obj>();
+        IncidentInquiryModelObjects = new Vector<IncidentInquiryModel_obj>();
+        IncidentSummaryModelObjects = new Vector<IncidentSummaryModel_obj>();
+        
+        incidentsLoaded = false;
+    }
+    
+    /**
+     * Returns whether Incidents have been loaded into the simulation.
+     * @return true if incidents are loaded, false if not.
+     */
+    public boolean areIncidentsLoaded() {
+        return incidentsLoaded;
+    }
+    
+    /**
+     * Clears IncidentBoard, IncidentInquiry, and IncidentSummary
+     * lists.  The IncidentEvent list is also cleared.  All
+     * Incidents are removed from the simulation and the 
+     * incidentsLoaded flag is reset to false.
+     */
+    public void clearIncidents() {
+        IncidentBoardModelObjects.clear();
+        IncidentInquiryModelObjects.clear();
+        IncidentSummaryModelObjects.clear();    
+        
+        incidentList.clear();
+            
+        completedEvents.clear();   
+
+        incidentsLoaded = false;
+    }
+    
+    /**
+     * Clears IncidentBoard, IncidentInquiry, and IncidentSummary
+     * lists.  The IncidentEvent list is also cleared.  All
+     * Incidents are reset, but not removed from the simulation.  The 
+     * incidentsLoaded flag is not changed.
+     */
+    public void resetIncidents() {
+        IncidentBoardModelObjects.clear();
+        IncidentInquiryModelObjects.clear();
+        IncidentSummaryModelObjects.clear();    
+        
+        for(Incident inc : incidentList) {
+            inc.resetSimulation();
+        }
+        
+        completedEvents.clear();        
+    }
+    
+    /**
+     * This method removes an Incident from the list of Incidents that
+     * have been loaded into the simulation.  The incidentsLoaded flag
+     * is updated accordingly to whether there are Incidents remaining.
+     * 
+     * @param incidentNumber Log number of Incident to remove.
+     * @throws ScriptException if the Incident has already occured.
+     */
+    public void deleteIncident(Integer incidentNumber) throws ScriptException {
+
+        synchronized (lock) {
+            Vector<Incident> incToRemove = new Vector<Incident>();
+
+            for (Incident inc : incidentList) {
+
+                if (inc.getLogNumber().compareTo(incidentNumber) == 0) {
+                    if (inc.hasOccured())
+                        throw new ScriptException(
+                                ScriptException.INCIDENT_ALREADY_STARTED);
+
+                    incToRemove.add(inc);
+                }
+            }
+
+            for (Incident inc : incToRemove)
+                incidentList.remove(inc);
+        }
+
+        incidentsLoaded = incidentList.size() > 0;
+    }
+
+    /**
+     * This method reschedules a loaded Incident to occur at a new simulation 
+     * time.
+     * 
+     * @param incidentNumber Log number of Incident to remove.
+     * @param newTime New simulation time for Incident to occur.
+     * @throws ScriptException if the Incident has already occured.
+     */
+    public void rescheduleIncident(Integer incidentNumber, long newTime)
+            throws ScriptException {
+
+        synchronized (lock) {
+
+            for (Incident inc : incidentList) {
+
+                if (inc.getLogNumber().equals(incidentNumber)) {
+                    if (inc.hasOccured()) {
+                        throw new ScriptException(
+                                ScriptException.INCIDENT_ALREADY_STARTED);
+                    }
+                    inc.setSecondsToStart(newTime);
+                }
+            }
+        }
+    }
+
+    /**
+     * This method adds a new Incident to the simulation.  The incidentsLoaded
+     * flag is set to true.
+     * 
+     * @param newIncident New Incident.
+     */
+    public void addIncident(Incident newIncident) {
+
+        synchronized (lock) {
+            incidentList.add(newIncident);
+            incidentsLoaded = true;
+        }
+    }
+
+    /**
+     * This method adds a list of new Incidents to the simulation.  The 
+     * incidentsLoaded flag is set to true.
+     * 
+     * @param newIncident New Incident.
+     */
+    public void addIncidents(Vector<Incident> vector) {
+
+        synchronized (lock) {
+            incidentList.addAll(vector);
+            incidentsLoaded = true;
+        }
+    }
+    
+    /**
+     * This method calls the tick() method on all loaded Incidents.  If the 
+     * clock tick causes IncidentEvents to be triggered, the events are 
+     * enqueued in the SoundPlayer.  If any IncidentEvents have completed,
+     * they are finalized with the current simulation and CAD time.  The local
+     * IncidentInquiry and IncidentSummary lists are updated with the completed
+     * IncidentEvent Objects and then the Coordinator is notified with the
+     * IncidentEvent.  
+     * 
+     * @param currentSimTime Current simulation time (in seconds).
+     */
+    public void tick(long currentSimTime) {
+        
+        for(Incident inc : incidentList) {
+
+            inc.tick(currentSimTime);
+            
+            //For all events that occur with this tick, enqueue them in the sound player.
+            for(IncidentEvent event : inc.getTriggeredEvents(currentSimTime)) {
+                theSoundPlayer.enqueueClip(event);   
+            }                   
+                
+            for(IncidentEvent event : inc.getCompletedEvents()) {
+                event.finalizeEvent(currentSimTime, CADSimulator.getCADTime());
+                updateIncident(inc.getLogNumber(), event);
+                theCoordinator.updateIncidentInGUI(inc.getLogNumber(), event);
+            }                       
+        }       
+    }
+    
+    /**
+     * This method forces an Incident to trigger.  If the Incident corresponding
+     * to the parameter log number has not occured it is manually triggered.
+     * 
+     * @param incidentNumber Log number of Incident to trigger.
+     * @param currentSimTime Current simulation time (in seconds).
+     */
+    public void triggerIncident(Integer incidentNumber, Long currentSimTime) {
+
+        for(Incident inc : incidentList) {
+            
+            if(inc.getLogNumber().equals(incidentNumber) 
+                && !inc.hasOccured()) {                                         
+
+                inc.manualTrigger(currentSimTime);
+            }   
+        }
+
+    }
+
+    /**
+     * This method updates the completed events, IncidentInquiry, and 
+     * IncidentSummary lists with the completed IncidentEvent Object.
+     * If the IncidentEvent is the first event in an Incident,
+     * notify the Coordinator that the Incident has started.
+     * Regardles of whether the IncidentEvent is first or not,
+     * notify the Coordinator that the Incident has been updated.
+     * 
+     * @param incidentNumber Log number of Incident to trigger.
+     * @param triggeredEvent Completed IncidentEvent.
+     */
+    public void updateIncident(Integer incidentNumber, IncidentEvent completedEvent) {
+
+        IncidentInquiryModel_obj targetIncident = null;
+        
+        if(completedEvents.containsKey(incidentNumber)) {
+            completedEvents.get(incidentNumber).add(completedEvent);
+        }
+        else {
+            Vector<IncidentEvent> temp = new Vector<IncidentEvent>();
+            temp.add(completedEvent);
+            
+            completedEvents.put(incidentNumber, temp);
+        }
+        
+        for(IncidentInquiryModel_obj iimo : IncidentInquiryModelObjects) {
+
+            if(iimo.getLogNumber().compareTo(incidentNumber) == 0) {
+                targetIncident = iimo;
+                
+                targetIncident.update(completedEvent.eventInfo);                
+                break;
+            }
+        }
+        
+        if(targetIncident == null) {
+            completedEvent.eventInfo.getHeader().logStatus    = "A";             
+            completedEvent.eventInfo.getHeader().incidentDate = CADSimulator.getCADDate().substring(0,4);  
+            completedEvent.eventInfo.getHeader().incidentTime = CADSimulator.getCADTime();
+            
+            targetIncident = new IncidentInquiryModel_obj(completedEvent.eventInfo);
+            IncidentInquiryModelObjects.add(targetIncident);    
+            IncidentSummaryModelObjects.add(new IncidentSummaryModel_obj(completedEvent.eventInfo.getHeader()));    
+            
+            theCoordinator.incidentStarted(completedEvent);     
+        }           
+            
+        theCoordinator.incidentUpdated(completedEvent);         
+    }
+    
+    /**
+     * Returns whether an Incident exists in the simulation with a log number
+     * that matches the parameter value.
+     * 
+     * @param incidentNumber Log number of Incident to trigger.
+     * @return true if Incident exists, false if not.
+     */
+    public boolean incidentExists(Integer incidentNumber) {
+        boolean found = false;
+        
+        for(IncidentInquiryModel_obj iimo : IncidentInquiryModelObjects) {
+            if(iimo.getLogNumber().compareTo(incidentNumber) == 0) {
+                found = true;
+                break;
+            }           
+        }
+
+        return found;
+    }
+    
+    /**
+     * Returns the Vector of Incidents loaded into the simulation.
+     * @return Vector of loaded Incidents.
+     */
+    public Vector<Incident> getIncidentList() {
+        return incidentList;
+    }
+    
+    /**
+     * Returns the map of triggered IncidentEvents referenced by eac
+     * Incident log number.
+     * 
+     * @return Map of triggered IncidentEvents for all Incidents.
+     */
+    public TreeMap<Integer, Vector<IncidentEvent>> getTriggeredEvents() {
+        return completedEvents;
+    }   
+    
+    /**
+     * Returns the list of all IncidentBoardModel_obj objects. 
+     *
+     * @returns A Vector of all IncidentBoardModel_obj objects.
+     */
+    public Vector<IncidentBoardModel_obj> getIncidentBoardModelObjects() {
+        return IncidentBoardModelObjects;               
+    }       
+    
+    /**
+     * Returns a list of all IncidentInquiryModel_obj objects that match the parameter
+     * Incident log number.
+     *
+     * @param logNumber The log number to get all incident inquiry data for.
+     * @returns A Vector of IncidentInquiryModel_obj objects.
+     */    
+    public Vector<IncidentInquiryModel_obj> getIncidentInquiryModelObjects(Integer logNumber) {
+        Vector<IncidentInquiryModel_obj> modelObjs = new Vector<IncidentInquiryModel_obj>();
+
+        synchronized(lock) {
+            
+            for(IncidentInquiryModel_obj iimo : IncidentInquiryModelObjects) {
+                
+                //Find the model object in the private vector of incidents that matches
+                //the incident in the parameter's model.
+                
+                if(iimo.getLogNumber().compareTo(logNumber) == 0) {
+                    modelObjs.add(iimo);
+                }
+            }    
+        }
+        
+
+        return modelObjs;
+    }    
+    
+    /**
+     * Returns the list of all IncidentSummaryModel_obj objects. 
+     *
+     * @returns A Vector of all IncidentSummaryModel_obj objects.
+     */
+    public Vector<IncidentSummaryModel_obj> getIncidentSummaryModelObjects() {
+        return IncidentSummaryModelObjects;
+    }      
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/managers/MediaManager.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/managers/MediaManager.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/managers/MediaManager.java	(revision 82)
@@ -0,0 +1,293 @@
+package tmcsim.cadsimulator.managers;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JOptionPane;
+import javax.swing.JWindow;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import tmcsim.cadsimulator.db.DVDPlayerDB;
+import tmcsim.cadsimulator.db.StillImagesDB;
+import tmcsim.cadsimulator.stillimagecontrol.ImageController;
+import tmcsim.cadsimulator.videocontrol.DVDController;
+import tmcsim.cadsimulator.videocontrol.DVDStatusUpdate;
+import tmcsim.cadsimulator.videocontrol.DVDTitleUpdate;
+import tmcsim.cadsimulator.viewer.model.CADSimulatorModel;
+import tmcsim.common.CCTVDirections;
+import tmcsim.common.CCTVInfo;
+
+/**
+ * MediaManager manages the control of media associated with the speed 
+ * information received from the ParamicsCommunicator.  The MediaManager
+ * instantiates the DVDPlayerDB and StillImageDB objects, which are initialized
+ * from XML data files to hold the information regarding which DVD titles and 
+ * Still Images are available for display.  Each title or image is associated
+ * with a specific speed range or Incident log number.  The triggerIncident()
+ * method is called to notify the MediaManager that incident media is to be 
+ * displayed.  The updateCameraInfo() method is called when speed information
+ * is received for a specific camera.  In both methods, a Controller object
+ * is found for the unique camera ID number.  This Controller is updated with
+ * the new speed data.  If the update causes a change in media to be displayed,
+ * the change is made.<br>
+ * <br>
+ * The MediaManager implements the Observer interface and observes the 
+ * DVDPlayerDB and StillImageDB for updates.  These updates are received, action
+ * is taken, and then the update is passed to the CADSimulatorViewer for display.
+ * 
+ * @see tmcsim.cadsimulator.viewer.CADSimulatorViewer
+ * @author Matthew Cechini
+ * @version
+ */
+public class MediaManager implements Observer {
+
+    /**  Error Logger. */
+    private static Logger mediaLogger = Logger.getLogger("tmcsim.simulator");
+    
+    /**
+     * Enumeration of property names.
+     * @author Matthew Cechini
+     */ 
+    private static enum MEDIA_PROPERTIES {
+        /** Filepath for xml file containing dvd control data. */
+        DVD_XML_FILE   ("DVDPlayerXML"),    
+        /** Filepath for xml file containing still image control data. */
+        IMAGE_XML_FILE ("StillImagesXML");
+        
+        public String name;
+        
+        private MEDIA_PROPERTIES(String n) {
+            name = n;
+        }
+    };  
+    
+    /** Instance of the DVD Player Database. */
+    private DVDPlayerDB theDVD_DB     = null;
+
+    /** Instance of the Still Image Database. */
+    private StillImagesDB theImage_DB = null;
+    
+    /** Reference to the CADSimulatorModel. */
+    private CADSimulatorModel theModel;
+
+    /** Properties object for the Media portion of the CAD. */
+    private Properties mediaProperties;
+    
+    
+    /**
+     * Constructor. The target properties file is loaded and the DVD and Still
+     * Image DB objects are initialized with the XML data files containing 
+     * the respective data.
+     * 
+     * @param propertiesFile File path for target properties file. 
+     * @param theATMSManager ATMSManager object.
+     * @param viewer CADSimulatorViewer object.
+     */
+    public MediaManager(String propertiesFile, ATMSManager theATMSManager, 
+            CADSimulatorModel model) {
+        theDVD_DB   = new DVDPlayerDB();        
+        theImage_DB = new StillImagesDB();
+        
+        theModel = model;
+
+        try {
+            mediaProperties = new Properties();
+            mediaProperties.load(new FileInputStream(new File(propertiesFile)));
+        }
+        catch (Exception e) {
+            mediaLogger.logp(Level.SEVERE, "MediaManager", "Constructor",
+                    "Exception in loading properties file.", e);
+        }
+        
+        // Load DVD Player Information from the XML file
+        try {
+            if (mediaProperties.getProperty(MEDIA_PROPERTIES.DVD_XML_FILE.name) != null) {
+                theDVD_DB.addObserver(this);
+                theDVD_DB.loadFromXML(DocumentBuilderFactory
+                                .newInstance().newDocumentBuilder()
+                                .parse(new File(mediaProperties.getProperty(
+                                        MEDIA_PROPERTIES.DVD_XML_FILE.name))));
+
+            }
+        } catch (Exception e) {
+            mediaLogger.logp(Level.SEVERE, "MediaManager", "Constructor",
+                    "Exception in parsing DVDPlayer xml file.", e);
+            
+             JOptionPane.showMessageDialog(new JWindow(), "An error occured " +
+                    "opening and parsing the DVD xml data file: " +
+                    mediaProperties.getProperty(MEDIA_PROPERTIES.DVD_XML_FILE.name),
+                    "Initialization Error", JOptionPane.WARNING_MESSAGE);
+        }
+
+        // Load Still Image Information from the XML file
+        try {
+            if (mediaProperties
+                    .getProperty(MEDIA_PROPERTIES.IMAGE_XML_FILE.name) != null) {
+                theImage_DB.addObserver(this);
+                theImage_DB.loadFromXML(DocumentBuilderFactory
+                                .newInstance().newDocumentBuilder()
+                                .parse(new File(mediaProperties.getProperty(
+                                        MEDIA_PROPERTIES.IMAGE_XML_FILE.name))),
+                                        theATMSManager);
+            }
+        } catch (Exception e) {
+            mediaLogger.logp(Level.SEVERE, "MediaManager", "Constructor",
+                    "Exception in parsing StillImages xml file.", e);
+            
+             JOptionPane.showMessageDialog(new JWindow(), "An error occured " +
+                    "opening and parsing the Image xml data file: " +
+                    mediaProperties.getProperty(MEDIA_PROPERTIES.IMAGE_XML_FILE.name),
+                    "Initialization Error", JOptionPane.WARNING_MESSAGE);
+        }           
+    }
+    
+    /**
+     * Observer method.  The update objects accepted and their associated 
+     * actions are shown below.<br>
+     * <br>
+     * <ul>
+     * <li>DVDStatusUpdate - If the update contains an exception, log the 
+     *     exception to the local logger.  The update object is then sent
+     *     to the CADSimulatorViewer for display.</li>
+     * <li>DVDTitleUpdate - The update object is sent
+     *     to the CADSimulatorViewer for display.</li>
+     * </ul>
+     */
+    public void update(Observable o, Object arg) {
+        if(arg instanceof DVDStatusUpdate) {
+            if(((DVDStatusUpdate)arg).exception != null) {
+                mediaLogger.logp(Level.SEVERE, "MediaManager", "update",
+                        "Exception from DVD Controller.", 
+                        ((DVDStatusUpdate)arg).exception);
+            }
+            theModel.updateDVDStatus((DVDStatusUpdate)arg);
+        }
+        else if(arg instanceof DVDTitleUpdate) {
+            theModel.updateDVDTitle((DVDTitleUpdate)arg);
+        }
+    }
+
+    /**
+     * This method triggers the DVD and Image Controllers for a specific camera
+     * to display an Incident title or image for the parameter Incident log
+     * number.
+     * 
+     * @param info Information of the CCTV Camera to display incident images.
+     * @param logNumber Log number of the Incident being triggered.
+     */
+    public void triggerIncident(CCTVInfo info, Integer logNumber) {
+        try {
+            DVDController dvdCntrl = theDVD_DB.getController(info.cctv_id, 
+                    info.direction);
+            
+            if(dvdCntrl != null) {  
+                dvdCntrl.toggleIncident(logNumber, info.toggle);
+            }
+        } catch (Exception e) {
+            mediaLogger.logp(Level.SEVERE, "MediaManager", "triggerIncident",
+                    "Exception in toggling an incident on the DVD controller.", e);
+        }
+        
+        try {
+            ImageController imageCntrl = theImage_DB.getController(info.cctv_id, info.direction);
+            
+            if(imageCntrl != null) { 
+                imageCntrl.toggleIncident(logNumber, info.toggle);
+            }
+        } catch (Exception e) {
+            mediaLogger.logp(Level.SEVERE, "MediaManager", "triggerIncident",
+                    "Exception in toggling an incident on the Image controller.", e);
+        }
+        
+    }
+    
+    /**
+     * This method receives updated speed information for a specific controller
+     * and updates the DVD Title and Still Image being currently displayed for 
+     * that camera.
+     * 
+     * @param cameraID CCTV camera ID
+     * @param avgSpeed_NE Average speed of traffic flowing N or E
+     * @param avgSpeed_SW Average speed of traffic flowing S or W
+     */
+    public void updateCameraInfo(Integer cameraID, float avgSpeed_NE, float avgSpeed_SW) {
+        updateDVD(cameraID, avgSpeed_NE, avgSpeed_SW);
+        updateStillImage(cameraID, avgSpeed_NE, avgSpeed_SW);
+    }
+    
+    /**
+     * This method accepts updated speed information for a specific DVD 
+     * player. The DVDController object corresponding to the parameter camera 
+     * ID is found and updated with the new speed.  If this update causes the 
+     * dvd controller to change titles, the new title is played.
+     *
+     * @param cameraID CCTV camera ID
+     * @param avgSpeed_NE Average speed of traffic flowing N or E
+     * @param avgSpeed_SW Average speed of traffic flowing S or W
+     */
+    protected void updateDVD(Integer cameraID, float avgSpeed_NE, float avgSpeed_SW) {
+            
+        for(CCTVDirections dir : CCTVDirections.values()) {
+            DVDController dvdCntrl = theDVD_DB.getController(cameraID, dir);
+            
+            //if Controller exists, update.
+            if(dvdCntrl != null) {                          
+                
+                if( ((dir == CCTVDirections.NORTH || dir == CCTVDirections.EAST) && 
+                     (dvdCntrl.updatePlayer(avgSpeed_NE)))  ||
+                    ((dir == CCTVDirections.SOUTH || dir == CCTVDirections.WEST) && 
+                     (dvdCntrl.updatePlayer(avgSpeed_SW)))) {
+                    
+                    try {
+                        dvdCntrl.playCurrentTitle();
+                    }
+                    catch (Exception e) {
+                        mediaLogger.logp(Level.SEVERE, "ParamicsCameraStatusReader", "updateDVD",
+                                "Exception in updating DVD player with new speed.", e);
+                    }
+                }           
+            }
+        }   
+    }
+
+    /** 
+     * This method accepts updated speed information for a specific CCTV camera.
+     * The ImageController object corresponding to the parameter camera ID
+     * is found and updated with the new speed.  If this update causes the image
+     * controller to change images, the new image is shown.
+     * 
+     * @param cameraID Unique CCTV camera ID
+     * @param avgSpeed_NE Average speed of traffic flowing N or E
+     * @param avgSpeed_SW Average speed of traffic flowing S or W
+     */
+    protected void updateStillImage(Integer cameraID, float avgSpeed_NE, float avgSpeed_SW) {
+        
+        for(CCTVDirections dir : CCTVDirections.values()) {
+            ImageController imageCntrl = theImage_DB.getController(cameraID, dir);
+            
+            //if Controller exists, update.
+            if(imageCntrl != null) {
+            
+                if( ((dir == CCTVDirections.NORTH || dir == CCTVDirections.EAST) && 
+                     (imageCntrl.updateImage(avgSpeed_NE)))  ||
+                    ((dir == CCTVDirections.SOUTH || dir == CCTVDirections.WEST) && 
+                     (imageCntrl.updateImage(avgSpeed_SW)))) {
+                    
+                    try {
+                        imageCntrl.showCurrentImage();
+                    }
+                    catch (Exception e) {
+                        mediaLogger.logp(Level.SEVERE, "ParamicsCameraStatusReader", "updateStillImage",
+                                "Exception in updating image controller with new speed.", e);
+                    }
+                }
+            }           
+        }       
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/CADSimulatorSocketHandler.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/CADSimulatorSocketHandler.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/CADSimulatorSocketHandler.java	(revision 82)
@@ -0,0 +1,87 @@
+package tmcsim.cadsimulator;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import tmcsim.common.SimulationException;
+
+
+/**
+ * CADSimulatorSocketHandler is used to accept socket connections from multiple
+ * CAD Clients.  At initialization, this class binds a ServerSocket to a specific
+ * port, passed in as a parameter.  This class is threaded, and when it is 'run',
+ * it begins accepting connections.  When a connection is made, a Socket is created
+ * for data communication with that client and a CADSimulatorClient thread
+ * is spun with connection to that socket.  This thread will continue to accept
+ * clients indefinitely.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:41 $ $Revision: 1.3 $
+ */
+public class CADSimulatorSocketHandler extends Thread {
+    
+    /** Error logger. */
+    private Logger socketLogger = Logger.getLogger("tmcsim.cadsimulator");
+
+    /** ServerSocket used to accept connections from clients. */
+    private ServerSocket serverSocket;    
+    
+    /**
+     * Constructor.  A ServerSocket is bound to the parameter port number.
+     *
+     * @param port Port number for ServerSocket binding.
+     * @throws SimulationException if an error occurs binding the ServerSocket.
+     */
+    public CADSimulatorSocketHandler(Integer port) throws SimulationException {
+    
+        try {   
+            serverSocket = new ServerSocket(port);
+            serverSocket.setSoTimeout(5000);  //delay for accept timeout(milliseconds)
+        } catch (IOException ioe) { 
+            throw new SimulationException(SimulationException.BINDING, ioe);
+        }
+    }   
+
+    /**
+     * While this thread is not interrupted, connection requests are continuously
+     * accepted from CAD Clients.  When a connection is accepted, a Socket is created,
+     * passed into the CADSimulatorClient's constructor, and then that new 
+     * Client thread is spun off, and the ServerSocket returns to accepting 
+     * more clients.  The CADSimulatorViewer is notified of a successful client
+     * conection after the Socket creating completes.  If there is an error in 
+     * establishing connection to a client, the ServerSocket will continue to 
+     * accept connections.
+     */
+    public void run() { 
+        
+        Socket clientSocket;
+        
+        while (!isInterrupted()) {
+            try 
+            {
+                clientSocket = serverSocket.accept();
+
+                CADSimulatorClient theTMClient = new CADSimulatorClient(clientSocket);
+                theTMClient.start();
+                //CADSimulator.theViewer.connectClient();
+            }     
+            catch(SocketTimeoutException ste) {}
+            catch(Exception e) {
+                socketLogger.logp(Level.SEVERE, "CADSimulatorSocketHandler", "run", 
+                        "Exception in creating a connection to a remote CAD Client.", e);
+            }
+        }
+        
+        try {
+            serverSocket.close();
+        }
+        catch (IOException ioe) {
+            socketLogger.logp(Level.SEVERE, "CADSimulatorSocketHandler", "run", 
+                    "Exception in closing socket.", ioe);
+        }
+    }   
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/package.html
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/package.html	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains the classes for the CAD Simulator
+  </body>
+</html>
Index: /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsStatusReader.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsStatusReader.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsStatusReader.java	(revision 82)
@@ -0,0 +1,155 @@
+package tmcsim.cadsimulator.paramicscontrol;
+
+import java.io.ByteArrayInputStream;
+import java.util.logging.Level;
+
+import javax.xml.parsers.SAXParserFactory;
+
+import org.w3c.dom.Node;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import tmcsim.cadsimulator.managers.ParamicsSimulationManager;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+
+/**
+ * ParamicsStatusReader extends from the Abstrct ParamicsReader to provide
+ * the methods necessary to read the Paramics Status file.  The receive()
+ * method is overloaded to parse the XML node for status information.
+ * The ParamicsSimulationManager is notified after each successful parse
+ * of a Paramics Status Node. 
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+public class ParamicsStatusReader extends ParamicsReader {
+    
+    /** Current Paramics Status. */
+    protected PARAMICS_STATUS currentStatus;
+    
+    /** Current Network ID that has been loaded. */
+    protected int currentNetwork;
+    
+    /** 
+     * Reference to the ParamicsSimulationManager used to send notifications 
+     * of Paramics status changes.
+     */
+    protected ParamicsSimulationManager paramicsSimMgr = null;  
+
+    /** SAX Handler that is used to parse the recieved Paramics Status Node. */
+    protected ParamicsStatusHandler psh = null; 
+    
+    
+    /**
+     * Constructor. Initialize Paramics Status to UNKNOWN and network loaded to -1.
+     *
+     * @param theParamSimMgr The ParamicsSimulationManager object.
+     */
+    public ParamicsStatusReader(ParamicsSimulationManager theParamSimMgr) {
+        paramicsSimMgr = theParamSimMgr;
+        
+        psh = new ParamicsStatusHandler();
+        
+        currentStatus  = PARAMICS_STATUS.UNKNOWN;
+        currentNetwork = -1;
+    }
+    
+    /** Get the current paramics status */
+    public PARAMICS_STATUS getStatus() { return currentStatus; }
+    
+    /**  Get the ID of the current paramics network. (Default: -1) */
+    public int getNetworkID() { return currentNetwork; }
+    
+    /**
+     * Reset the Paramics Status info.  The currentStatus will be set to UNKNOWN
+     * and the currentNetwork set to -1.
+     */
+    public void resetStatusInfo() {
+        currentStatus  = PARAMICS_STATUS.UNKNOWN;
+        currentNetwork = -1;
+    }
+    
+    /**
+     * This method parses the received XML Node with the local 
+     * ParamicsStatusHandler.  The parsed Paramics Status is sent to the 
+     * ParamicsSimulationManager.
+     */
+    public void receive(Node rxMessage) {
+        
+        try {           
+            if(rxMessage.getTextContent().length() > 0)
+                SAXParserFactory.newInstance().newSAXParser().parse(
+                        new ByteArrayInputStream(rxMessage.getTextContent().getBytes()), psh);  
+        }
+        catch (Exception e) {
+            paramLogger.logp(Level.SEVERE, "ParamicsStatusReader", "receive",
+                    "Exception in parsing received ParamicsCommMessage.", e);
+            paramLogger.logp(Level.INFO, "ParamicsStatusReader", "receive",
+                    "Invalid received bytes", rxMessage.getTextContent().getBytes());           
+        }
+                
+        paramicsSimMgr.updateParamicsStatus(currentStatus);
+    }
+    
+    /**
+     * Internal SAX Handler used to parse the Camera Status Document read by
+     * the remote Status Reader.  The schema for this document is: <br/>
+     *
+     * <Paramics>
+     *    <Network_Status/>    ("LOADING", "WARMING", or "LOADED")
+     *    <Network_ID/>         (integer network ID)
+     * </Paramics>
+     */ 
+    protected class ParamicsStatusHandler extends DefaultHandler {  
+    
+
+        /** String XML creation.  Tag contains information for the paramics status. */
+        private final String NETWORK_STATUS = "Network_Status";
+        
+        /** String XML creation.  Tag contains information for the loaded paramics network id. */
+        private final String NETWORK_ID     = "Network_ID";
+        
+        private StringBuffer parsedValue = new StringBuffer();
+        
+        public void startDocument() {               
+
+        }   
+        
+        public void characters(char[] ch, int start, int length) {
+            parsedValue.append(new String(ch, start, length).trim());       
+        }
+        
+        public void endElement(String uri, String localName, String qName)  {
+            
+            if(qName.equals(NETWORK_STATUS)) { 
+            
+                currentStatus = PARAMICS_STATUS.UNKNOWN;
+                for(PARAMICS_STATUS val : PARAMICS_STATUS.values()) {
+                    if(val.toString().equals(parsedValue.toString())) 
+                        currentStatus = val;
+                }
+            }
+            else if(qName.equals(NETWORK_ID)) { 
+                currentNetwork = Integer.parseInt(parsedValue.toString()); 
+            }
+            
+            parsedValue.setLength(0);
+
+        }   
+        
+        public void error(SAXParseException e) {
+            paramLogger.logp(Level.SEVERE, "ParamicsStatusReader:ParamicsStatusHandler", 
+                    "error", "Error in parsing received ParamicsCommMessage.", e);
+        }
+        
+        public void fatalError(SAXParseException e) {
+            paramLogger.logp(Level.SEVERE, "ParamicsStatusReader:ParamicsStatusHandler", 
+                    "error", "Fatal error in parsing received ParamicsCommMessage.", e);
+        }
+        
+        public void warning(SAXParseException e) {
+            paramLogger.logp(Level.WARNING, "ParamicsStatusReader:ParamicsStatusHandler", 
+                    "error", "Warning in parsing received ParamicsCommMessage.", e);
+        }       
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsIncidentWriter.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsIncidentWriter.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsIncidentWriter.java	(revision 82)
@@ -0,0 +1,527 @@
+package tmcsim.cadsimulator.paramicscontrol;
+
+import java.util.Iterator;
+import java.util.TreeMap;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import tmcsim.cadmodels.CMSInfo;
+import tmcsim.common.XMLIncident;
+
+/**
+ * ParamicsIncidentWriter extends from ParamicsWriter to manage the current 
+ * simulation data and transmit update XML Document messages to the 
+ * ParamicsCommunicator for simulation control.  The updateIncident() and 
+ * updateDiversion() methods are used to notify this class of changes in current 
+ * incidents and diversions.  This data is converted to an XML Document and 
+ * transmitted to the ParamicsCommunicator everytime the sendUpdate() method is 
+ * called.  This method will not transmit simulation updates until a network is 
+ * loaded.  To load a network, call the loadNetwork() method to transmit the 
+ * registration information to paramics, and when paramics has finished warming up, 
+ * call the networkLoaded() method to begin update transmission.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:40 $ $Revision: 1.4 $
+ */
+public class ParamicsIncidentWriter extends ParamicsWriter {
+
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        /** CAD incident update. */
+        CAD_DATA      ("CAD_DATA"),
+        /** Basic update information. */
+        BASIC         ("Basic"),
+        /** Current simulation incidents. */
+        CAD_INCIDENTS ("CAD_Incidents"),
+        /** Current simulation data. */
+        SIMULATION_DATA ("Simulation_Data"),
+        /** Current CMS diversions. */
+        MANAGEMENT    ("Management"),
+        /** Current communications interval. */
+        COMM_INTERVAL ("Comm_Interval"),
+        /** Current loaded paramics network. */
+        NETWORK_ID    ("Network_ID"),
+        /** Boolean value of whether the simulation has started. */
+        SIMULATION    ("Simulation"),
+        /** Boolean value of whether an incident is current active. */
+        INCIDENT      ("Incident"),
+        /** Current CAD simulation time. */
+        CAD_CLOCK     ("CAD_clock"),
+        /** Current simulation speed. */
+        SIM_SPEED       ("Simulation_speed"),
+        /** Current CAD clock hours value. */
+        HOUR            ("hour"),
+        /** Current CAD clock minutes value. */
+        MINUTE          ("minute"),
+        /** Current CAD clock seconds value. */
+        SECOND          ("second");
+        
+        /** Tag name */
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+
+    }
+        
+    
+    /** Flag to designate whether a network has been loaded */
+    private boolean networkLoaded = false;
+    
+    /** Flag to designate whether the simulation is running. */
+    private boolean simulation   = false;
+    
+    /** Flag to designate whether incidents have occured in the simulation. */
+    private boolean incident     = false;
+    
+    /** Flag to designate whether CMS diversions have been set. */
+    private boolean management   = false;
+    
+    /** Loaded Paramics network ID. */
+    private int     networkID    = 1;
+        
+    /** Communications interval for paramics to read incident status files. (in seconds) */
+    private int     commInterval = 0;
+    
+    /** Current simulation speed */
+    private int     speed        = 0;
+    
+    /** Current simulation time. */
+    private long    simTime      = 0;
+
+    /**
+     * A map containing XMLIncident objects for each incident that is being updated.
+     */
+    private TreeMap<String, XMLIncident> incidentsMap;
+    
+    /**
+     * A map containing the current active CMS diversions.
+     */
+    private TreeMap<String, CMSInfo> diversionsMap;         
+    
+    /**
+     * A Map containing queued Incident Events.  It is possible to queue one incident event
+     * per incident. This happens if an incident update is received, but the previous has not
+     * been transmitted yet.  The new updated is queued until the current is transmitted.  There
+     * is a possibility that more than one incident event can be received and added to the map, and 
+     * the first would be lost.  This would be inidcative of other problems, or bad script creation.
+     * Either increase the interval frequencyl, or make more time in script between events.
+     */
+    private TreeMap<String, XMLIncident> queuedIncidentEvents;
+    
+
+    /**
+     * Constructor.  Initializes private members.
+     * 
+     * @param interval Number of seconds beetween transmission of XML update.
+     */ 
+    public ParamicsIncidentWriter(Integer interval) {
+        super();
+        
+        commInterval = interval;
+
+        incidentsMap         = new TreeMap<String, XMLIncident>();
+        diversionsMap        = new TreeMap<String, CMSInfo>();      
+        queuedIncidentEvents = new TreeMap<String, XMLIncident>();  
+    
+    }
+    
+    /**
+     * This method sets the local network ID to the parameter value and sends
+     * an updated XML message to load the network.
+     * 
+     * @param newID Paramics network id.
+     */
+    public void loadNetwork(int newID) {
+        networkID = newID;
+
+        transmitXMLUpdate();
+    }
+    
+    /**
+     * Updates the networkLoaded flag to true.
+     */
+    public void networkLoaded() {
+        networkLoaded = true;
+    }
+    
+    /**
+     * Set the simulation started flag to true.  If a network has been
+     * loaded, send an update to the ParamicsCommunicator.
+     */
+    public void startSimulation() {
+        
+        simulation = true;
+
+        if(networkLoaded) {
+            sendUpdate(0);      
+        }
+    }
+    
+    /**
+     * This method resets current simulation data.  All maps of incident data
+     * are cleared.  The incident, simulation, and management flags are set to 
+     * false.  If a network has been previously loaded, send an update to the 
+     * ParamicsCommunicator.
+     */
+    public void resetSimulation() {
+        
+        incidentsMap.clear();
+        diversionsMap.clear();      
+        queuedIncidentEvents.clear();
+
+        simulation = false;
+        incident   = false;
+        management = false;     
+        
+        if(networkLoaded) {
+            sendUpdate(0);
+        }
+    }   
+    
+    /**
+     * This method is transmits an XML update object to the ParamicsCommunicator
+     * if a network has ben loaded.  After the update object has been formed and 
+     * sent, the incident list is updated to remove all cleared Incidents.
+     * Any queued IncidentEvents are placed into the map of incidents that will 
+     * be used for update creation.  The incident flag is set to true if there
+     * are still ongoing incidents, false if not.
+     */ 
+    public void sendUpdate(long simulationTime) {
+        simTime = simulationTime;       
+
+        if(!networkLoaded) return;      
+                
+        transmitXMLUpdate();
+    
+        updateIncidentList();
+        
+        for(String key : queuedIncidentEvents.keySet()) {
+            incidentsMap.put(key, queuedIncidentEvents.remove(key));
+        }
+        
+        incident = incidentsMap.size() != 0;
+        
+    }
+    
+    /**
+     * This method updates the map of XMLIncident objects that are used for 
+     * updating the Paramics modeler.  If the parameter XMLIncident is not 
+     * currently in the local map of incidents, add it.  If it is in the 
+     * map of incidents, queue the new XMLIncident to be processed later.  
+     * Set the incident flag to true to signify that an incident exists in the 
+     * system.
+     * 
+     * @param newXML The XMLIncident object that will be used to update
+     *               an existing incident.
+     */
+    public void updateIncident(XMLIncident newXML) {
+        
+        if(incidentsMap.get(newXML.getIdentifier()) == null ) {  
+            incidentsMap.put(newXML.getIdentifier(), newXML);               
+        }
+        else {
+             queuedIncidentEvents.put(newXML.getIdentifier(), newXML);
+        }       
+
+        incident = true;                
+    }
+    
+    /**
+     * This method updates the map of CMSInfo diversion objects that are used
+     * for updating the Paramics modeler.  If the diversion is being cleared, 
+     * remove it from the map of diversions.  If it is not being cleared, 
+     * update the map with the new CMSInfo object. Set the management flag to be 
+     * true if there are diversions remaining, false if not.
+     * 
+     * @param theDiversion A new CMSDiversion object containing new diversion info.
+     */
+    public void updateDiversion(CMSInfo theDiversion) {
+                
+        if(theDiversion.isCleared())
+            diversionsMap.remove(theDiversion.cmsID);
+        else
+            diversionsMap.put(theDiversion.cmsID, theDiversion);
+            
+        management = diversionsMap.size() > 0;  
+    
+    }   
+    
+    /**
+     * Update the current map of incidents. If an incident
+     * has been cleared, remove it from the list.  Otherwise,
+     * call its update() method to set its status to ON_GOING.
+     *
+     * Set the incident flag to true if there are incidents still
+     * in the incident map, false if not.
+     */
+    private void updateIncidentList() {
+        
+        Iterator<XMLIncident> incIter = incidentsMap.values().iterator();
+        
+        while(incIter.hasNext()) {
+            XMLIncident inc = incIter.next();
+            
+            if(inc.isCleared()) 
+                incIter.remove();
+            else
+                inc.update();
+        }
+        
+        incident = incidentsMap.size() != 0;
+    }
+    
+    
+    /**
+     * Creates an XML Document containing all Paramics update information.  
+     * This XML object will then be written to the parent class' writeXML method
+     * for transmission to the Paramics Communicator.  Helper methods are used 
+     * to create each individual section.  The simulation, incident, and 
+     * diversion secions will only appear if they are currently active in the 
+     * simulation.  The format of the resulting XML object is as follows:<br>
+     * <br>
+     * <CAD_DATA><br>
+     *    <Basic><br>
+     *       <Comm_Interval/><br/>
+     *       <Network_ID/><br/>
+     *       <Simulation/><br/>
+     *       <Incident/><br/>
+     *    </Basic>
+     *
+     *    <Simulation_Data>
+     *       <Simulation_speed/><br/>
+     *       <CAD_clock><br/>
+     *          <hour/><br/>
+     *          <minute/><br/>
+     *          <second/><br/>
+     *          <Location><br/>
+     *       </CAD_clock><br/>
+     *    </Simulation_Data>
+     *    
+     *    <CAD_Incidents>
+     *       <Incident><br/>
+     *          <Identifier/><br/>
+     *          <Status/><br/>
+     *          <Location><br/>
+     *              <Route/><br/>
+     *              <Direction/><br/>
+     *              <Location_type/><br/>
+     *              <Postmile/><br/>
+     *          </Location><br/>
+     *          <Incident_type/><br/>
+     *          <Lanes><br/>
+     *             <Lane_number/><br/>
+     *             ...
+     *          </Lanes><br/>
+     *       </Incident><br/>
+     *       ...
+     *    </CAD_Incidents>   
+     *    
+     *    <Management>
+     *       <Diversion>
+     *          <Diversion_path>
+     *             <Identifier/>
+     *             <Percentage/>
+     *          <Diversion_path>
+     *          ...
+     *       </Diversion>
+     *       ...
+     *    </Management>
+     *  
+     * </CAD_DATA>
+     * 
+     */
+    private void transmitXMLUpdate() {
+
+        try {
+            
+            Document theDoc = DocumentBuilderFactory.newInstance()
+                .newDocumentBuilder().newDocument();
+            
+            Element cadDataElement = theDoc.createElement(XML_TAGS.CAD_DATA.tag);
+            theDoc.appendChild(cadDataElement);
+            
+            //***** BASIC *****//
+            writeBasicXML(cadDataElement);      
+            
+            //***** SIMULATION *****//
+            if(simulation)
+                writeSimulationXML(cadDataElement);
+            
+            
+            //***** INCIDENTS *****//
+            if(incident)
+                writeIncidents(cadDataElement);             
+            
+            
+            //***** MANAGEMENT *****//
+            if(management)
+                writeManagement(cadDataElement);
+            
+            writeXML(theDoc);
+            
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    
+    /**
+     * Appends the <Basic> XML Element to the parameter Element root.
+     * The format for this section is as follows:<br>
+     * 
+     * <Basic>
+     *    <Comm_Interval/><br/>
+     *    <Network_ID/><br/>
+     *    <Simulation/><br/>
+     *    <Incident/><br/>
+     * </Basic>
+     * 
+     * @param currElem XML Element to use as a root.
+     */
+    private void writeBasicXML(Element currElem) {      
+                    
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element basicElem = theDoc.createElement(XML_TAGS.BASIC.tag);
+        currElem.appendChild(basicElem);
+
+        Element intervalElement = theDoc.createElement(XML_TAGS.COMM_INTERVAL.tag);
+        intervalElement.appendChild(theDoc.createTextNode( String.valueOf(commInterval)));
+        basicElem.appendChild(intervalElement);
+
+        Element networkElement = theDoc.createElement(XML_TAGS.NETWORK_ID.tag);
+        networkElement.appendChild(theDoc.createTextNode(String.valueOf(networkID)));
+        basicElem.appendChild(networkElement);
+
+        Element simElement = theDoc.createElement(XML_TAGS.SIMULATION.tag);
+        simElement.appendChild(theDoc.createTextNode(String.valueOf(simulation).toUpperCase()));
+        basicElem.appendChild(simElement);
+
+        Element incidentElement = theDoc.createElement(XML_TAGS.INCIDENT.tag);
+        incidentElement.appendChild(theDoc.createTextNode(String.valueOf(incident).toUpperCase()));
+        basicElem.appendChild(incidentElement);
+
+    }
+    
+    /**
+     * Appends the <Simulation_Data> XML Element to the parameter Element root.
+     * The format for this section is as follows:<br>
+     * 
+     * <Simulation_Data>
+     *    <Simulation_speed/><br/>
+     *    <CAD_clock><br/>
+     *       <hour/><br/>
+     *       <minute/><br/>
+     *       <second/><br/>
+     *       <Location><br/>
+     *    </CAD_clock><br/>
+     * </Simulation_Data>
+     * 
+     * @param currElem XML Element to use as a root.
+     */
+    private void writeSimulationXML(Element currElem) {
+
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element simDataElem = theDoc.createElement(XML_TAGS.SIMULATION_DATA.tag);
+        currElem.appendChild(simDataElem);
+
+        Element speedElement = theDoc.createElement(XML_TAGS.SIM_SPEED.tag);
+        speedElement.appendChild(theDoc.createTextNode(String.valueOf(speed)));
+        simDataElem.appendChild(speedElement);    
+
+        Element clockElement = theDoc.createElement(XML_TAGS.CAD_CLOCK.tag);
+        simDataElem.appendChild(clockElement); 
+
+        Element hourElement = theDoc.createElement(XML_TAGS.HOUR.tag);
+        hourElement.appendChild(theDoc.createTextNode(String.valueOf(6 + (long)simTime/3600)));
+        clockElement.appendChild(hourElement); 
+
+        Element minuteElement = theDoc.createElement(XML_TAGS.MINUTE.tag);
+        minuteElement.appendChild(theDoc.createTextNode(String.valueOf((long)((simTime%3600)/60))));
+        clockElement.appendChild(minuteElement); 
+
+        Element secondElement = theDoc.createElement(XML_TAGS.SECOND.tag);
+        secondElement.appendChild(theDoc.createTextNode(String.valueOf((long)(simTime%60))));
+        clockElement.appendChild(secondElement);    
+
+    }
+    
+    /**
+     * Appends the <Simulation_Data> XML Element to the parameter Element root.
+     * This is done by converting all current XMLIncident objects
+     * to their XML output.  The format for this section is as follows:<br>
+     * 
+     * <CAD_Incidents>
+     *    <Incident><br/>
+     *       <Identifier/><br/>
+     *       <Status/><br/>
+     *       <Location><br/>
+     *           <Route/><br/>
+     *           <Direction/><br/>
+     *           <Location_type/><br/>
+     *           <Postmile/><br/>
+     *       </Location><br/>
+     *       <Incident_type/><br/>
+     *       <Lanes><br/>
+     *          <Lane_number/><br/>
+     *          ...
+     *       </Lanes><br/>
+     *    </Incident><br/>
+     *    ...
+     * </CAD_Incidents>
+     * 
+     * @param currElem XML Element to use as a root.
+     */
+    private void writeIncidents(Element currElem) {
+
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element incidentElem = theDoc.createElement(XML_TAGS.CAD_INCIDENTS.tag);
+        currElem.appendChild(incidentElem);
+
+        for(XMLIncident incident : incidentsMap.values()) {
+            incident.toXML(incidentElem);
+        }
+
+    }
+
+    /**
+     * Appends the <Simulation_Data> XML Element to the parameter Element root.
+     * This is done by converting all current CMS Diversion objects
+     * to their XML output.  The format for this section is as follows:<br>
+     * 
+     * <Management>
+     *    <Diversion>
+     *       <Diversion_path>
+     *          <Identifier/>
+     *          <Percentage/>
+     *       <Diversion_path>
+     *       ...
+     *    </Diversion>
+     *    ...
+     * </Management>
+     * 
+     * @param currElem XML Element to use as a root.
+     */
+    private void writeManagement(Element currElem) {
+
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element mgmtElem = theDoc.createElement(XML_TAGS.MANAGEMENT.tag);
+        currElem.appendChild(mgmtElem);
+
+        for(CMSInfo div : diversionsMap.values()) {
+            div.toXML(mgmtElem);
+        }                       
+    }
+        
+}
+
Index: /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsWriter.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsWriter.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsWriter.java	(revision 82)
@@ -0,0 +1,69 @@
+package tmcsim.cadsimulator.paramicscontrol;
+
+import java.util.Observable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import tmcsim.common.CADProtocol.PARAMICS_ACTIONS;
+import tmcsim.common.CADProtocol.PARAMICS_COMM_TAGS;
+
+/**
+ * ParamicsWriter is an abstract class to define objects that may
+ * write data to the Paramics Communicator.  Each ParamicsWriter
+ * is identified by a unique id and has a target file that will be 
+ * written to.  This file may be a file name or relative path, which
+ * will become relative to the target location of the remote Paramics
+ * Communicator.  All implementing Writers call the writeXML() method
+ * to transmit messages to the ParamicsCommunicator.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public abstract class ParamicsWriter extends Observable {
+
+    /** Error Logger. */
+    private static Logger paramLogger = Logger.getLogger("tmcsim.cadsimulator.paramicscontrol");
+    
+    /** Unique identifier for writer. */
+    public String writerID   = null;
+    
+    /** Target file writer will write to. */
+    public String targetFile = null;
+        
+    /**
+     * This method adopts the parameter message data Document into 
+     * a new document that has tags for the writer's id, the action 
+     * (WRITE_FILE) being performed.  This new Document is then sent 
+     * to the observing ParamicsCommunicator for transmission.
+     * 
+     * @param xmlDoc Output Document containing message data.
+     */
+    public void writeXML(Document xmlDoc) {
+        
+        try {
+            Document writerDoc = DocumentBuilderFactory.newInstance()
+                .newDocumentBuilder().newDocument();
+            
+            Element writerElem = writerDoc.createElement(PARAMICS_COMM_TAGS.WRITER.tag);
+            writerElem.setAttribute(PARAMICS_COMM_TAGS.ID.tag, writerID.toString());
+            writerElem.setAttribute(PARAMICS_COMM_TAGS.ACTION.tag,
+                    PARAMICS_ACTIONS.WRITE_FILE.action);
+            
+            writerElem.appendChild(writerDoc.adoptNode(xmlDoc.getDocumentElement()));
+        
+            writerDoc.appendChild(writerElem);      
+                    
+            setChanged();
+            notifyObservers(writerDoc);
+        } catch(Exception e) {
+            paramLogger.logp(Level.SEVERE, "ParamicsWriter", "writeXML", 
+                    "Exception in writing XML for writer " + writerID, e);
+        }
+            
+    };
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsCameraStatusReader.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsCameraStatusReader.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsCameraStatusReader.java	(revision 82)
@@ -0,0 +1,140 @@
+package tmcsim.cadsimulator.paramicscontrol;
+
+import java.io.ByteArrayInputStream;
+import java.util.logging.Level;
+
+import javax.xml.parsers.SAXParserFactory;
+
+import org.w3c.dom.Node;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import tmcsim.cadsimulator.managers.ParamicsSimulationManager;
+
+
+/**
+ * ParamicsCameraStatusReader extends from the Abstract ParamicsReader to 
+ * provide the methods necessary to read the Paramics Camrea Status file.
+ * The receive() method is overloaded to parse the XML node for camrea status 
+ * information.  The ParamicsSimulationManager is notified after each 
+ * successful parse of a camera status update. 
+ * 
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:40 $ $Revision: 1.4 $
+ */
+public class ParamicsCameraStatusReader extends ParamicsReader {
+    
+    /** 
+     * Reference to the ParamicsSimulationManager used to send notifications 
+     * of camera status changes.
+     */
+    private ParamicsSimulationManager paramicsSimMgr;
+    
+    /** A SAX Handler that is used to parse received Camera Status Node. */
+    protected CameraStatusHandler csh = null;
+    
+    /**
+     * Constructor.
+     * 
+     * @param theParamSimMgr The ParamicsSimulationManager object.
+     */
+    public ParamicsCameraStatusReader(ParamicsSimulationManager theParamSimMgr) {
+        paramicsSimMgr = theParamSimMgr;        
+        csh            = new CameraStatusHandler();
+    }
+    
+    /**
+     * This method parses the received XML node with the local CameraStatusHandler.
+     * All updated camera information is sent to the ParamicsSimulationManager.
+     */
+    public void receive(Node rxMessage) {
+        
+        try {           
+            if(rxMessage.getTextContent().length() > 0) {
+                SAXParserFactory.newInstance().newSAXParser().parse(
+                        new ByteArrayInputStream(rxMessage.getTextContent().getBytes()), csh);
+            }
+        }
+        catch (Exception e) {
+            paramLogger.logp(Level.SEVERE, "ParamicsCameraStatusReader", "receive",
+                    "Exception in parsing received ParamicsCommMessage.", e);
+            paramLogger.logp(Level.INFO, "ParamicsCameraStatusReader", "receive",
+                    "Invalid received bytes", rxMessage.getTextContent().getBytes());
+        }
+    }
+    
+
+    /**
+     * Internal SAX Handler used to parse the Camera Status Document read by
+     * the remote Status Reader.  The schema for this document is: <br/>
+     *
+     * <Camera_Status>  <br>
+     *     <Camera>  <br>
+     *        <Identifier/> <br>
+     *        <Route/> <br>
+     *        <Direction/> <br>
+     *        <Postmile/> <br>
+     *        <Ave_Speed_NE/> <br>
+     *        <Ave_Speed_SW/> <br>
+     *     </Camera>  <br>
+     * </Camera_Status> <br>
+     */ 
+    protected class CameraStatusHandler extends DefaultHandler {    
+
+        private final String CAMERA       = "Camera";
+        private final String CAMERA_ID    = "Identifier";
+        private final String ROUTE        = "Route";
+        private final String DIRECTION    = "Direction";        
+        private final String POSTMILE     = "Postmile";
+        private final String AVG_SPEED_NE = "Ave_Speed_NE";
+        private final String AVG_SPEED_SW = "Ave_Speed_SW";
+
+        private StringBuffer parsedValue  = new StringBuffer();
+        
+        Integer cameraID  = new Integer(-1);
+        String route      = "";
+        String direction  = "";
+        float postmile    = 0.0f;
+        float avgSpeed_NE = 0.0f;
+        float avgSpeed_SW = 0.0f;
+        
+        
+        public void startDocument() {   
+        }   
+        
+        public void characters(char[] ch, int start, int length) {
+            parsedValue.append(new String(ch, start, length).trim());   
+        }
+        
+        public void endElement(String uri, String localName, String qName)  {
+            
+            if(qName.equals(CAMERA_ID)) { cameraID = Integer.parseInt(parsedValue.toString()); }
+            else if(qName.equals(ROUTE)) { route = parsedValue.toString(); }
+            else if(qName.equals(DIRECTION)) { direction = parsedValue.toString(); }
+            else if(qName.equals(POSTMILE)) { postmile = Float.parseFloat(parsedValue.toString()); }
+            else if(qName.equals(AVG_SPEED_NE)) { avgSpeed_NE = Float.parseFloat(parsedValue.toString()); }
+            else if(qName.equals(AVG_SPEED_SW)) { avgSpeed_SW = Float.parseFloat(parsedValue.toString()); }
+            else if(qName.equals(CAMERA)) { 
+                paramicsSimMgr.updateCameraInfo(cameraID, avgSpeed_NE, avgSpeed_SW);
+            }
+            
+            parsedValue.setLength(0);
+        }   
+        
+        public void error(SAXParseException e) {
+            paramLogger.logp(Level.SEVERE, "ParamicsCameraStatusReader:CameraStatusHandler", 
+                    "error", "Error in parsing received ParamicsCommMessage.", e);
+        }
+        
+        public void fatalError(SAXParseException e) {
+            paramLogger.logp(Level.SEVERE, "ParamicsCameraStatusReader:CameraStatusHandler", 
+                    "error", "Fatal error in parsing received ParamicsCommMessage.", e);
+        }
+        
+        public void warning(SAXParseException e) {
+            paramLogger.logp(Level.WARNING, "ParamicsCameraStatusReader:CameraStatusHandler", 
+                    "error", "Warning in parsing received ParamicsCommMessage.", e);
+        }       
+    }   
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsCommunicator.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsCommunicator.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsCommunicator.java	(revision 82)
@@ -0,0 +1,415 @@
+package tmcsim.cadsimulator.paramicscontrol;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import tmcsim.cadsimulator.managers.ParamicsSimulationManager;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.CADProtocol.PARAMICS_ACTIONS;
+import tmcsim.common.CADProtocol.PARAMICS_COMM_TAGS;
+
+/**
+ * The ParamicsCommunicator is a singleton object used to handle communication
+ * between the CADSimulator and the remote ParamicsCommunicator.  A socket 
+ * connection is established to the ParamicsCommunicator, and all data is read 
+ * and written through the socket.  ParamicsWriters and ParamicsReaders are 
+ * registered with this object to read and write specific data to and from files
+ * on the remote ParamicsCommunicator machine.  The remote ParamicsCommunicator
+ * is notified of this registeration (and unregistration) process so there is a
+ * direct correlation between registered objects in both Communicators.  After a
+ * ParamicsReader is registered, any messages received from the remotely
+ * created reader are sent to the local ParamicsReader object.  After a writer is 
+ * registered, this object is set as an Observer.  When message are to be sent,
+ * they are received through the update() method and transmitted to the remote
+ * ParamicsCommunicator.    
+ * 
+ * @author 
+ * @version
+ */
+public class ParamicsCommunicator extends Thread implements Observer {
+    
+    /** Error Logger. */
+    private Logger paramLogger = Logger.getLogger("tmcsim.cadsimulator.paramicscontrol");
+    
+    /** Remote Paramics Communicator host name. */
+    private static String paramicsHost   = null;
+    
+    /** Remote Paramics Communicator port. */
+    private static Integer paramicsPort  = null;
+
+    /** Instance of the Coordinator to update with Paramics status */
+    private ParamicsSimulationManager theController = null;
+    
+    /** private used for communication with the remote Paramics Communicator. */
+    private Socket paramicsSocket = null;
+    
+    /** Input stream for reading from socket. */
+    private ObjectInputStream in     = null;
+    
+    /** Output stream for writing to the socket. */
+    private ObjectOutputStream out = null;
+    
+    /** Map of all registered paramics readers, indexed by a unique  id. */
+    private TreeMap<String, ParamicsReader> paramicsReaders = null;
+
+    /** Map of all registered paramics writers, indexed by a unique  id. */
+    private TreeMap<String, ParamicsWriter> paramicsWriters = null; 
+    
+    /** 
+     * Boolean flag to designate whether a connection to the remote
+     * Paramics Communicator is established.
+     */ 
+    private boolean connected = false;
+    
+    /** Counter for assigning unique ids. */
+    private int nextIdentifier = 0;     
+    
+
+    /**
+     * Constructor.  Initialize member data.
+     */
+    public ParamicsCommunicator(ParamicsSimulationManager cntrl, 
+            String newHost, Integer newPort) {
+
+        theController  = cntrl;
+        paramicsHost   = newHost;
+        paramicsPort   = newPort;   
+        
+        paramicsReaders = new TreeMap<String, ParamicsReader>();
+        paramicsWriters = new TreeMap<String, ParamicsWriter>();
+            
+    }
+    
+    /**
+     * Returns the next unique identifier that may be used for a ParamicsWriter or
+     * ParamicsReader.
+     * @return int Next unique identifier value
+     */
+    public String nextID() {
+        return String.valueOf(nextIdentifier++);
+    }
+    
+    
+    /**
+     * Method connects to host and port where the remote paramics communicator 
+     * has connected.  Input and Output streams are created on the new Socket
+     * connection.  A RESET message is sent transmitted on the socket and this
+     * thread is started.  
+     */
+    public void connect() throws IOException {
+        
+        try {
+            paramicsSocket = new Socket();
+            paramicsSocket.setSoTimeout(5000);
+            paramicsSocket.connect(new InetSocketAddress(paramicsHost, paramicsPort));
+
+            //** out must be performed before in to unlock for connected socket **//
+            out = new ObjectOutputStream(paramicsSocket.getOutputStream());
+            in  = new ObjectInputStream(paramicsSocket.getInputStream());
+        }
+        catch (IOException e) {
+            paramicsSocket.close();
+            
+            paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", "connect()", 
+                    "Exception in creating input and output streams on socket.", e);
+            
+            throw new IOException("IOException in connecting to Paramics Socket");
+        }
+
+        connected = true;
+        
+        reset();
+        
+        if(getState() == State.NEW)
+            start();
+        
+    }
+    
+    /**
+     * This thread is interrupted and if a conenction has been made, 
+     * it is closed after transmitting a RESET message.
+     */
+    public void disconnect() {
+        interrupt();
+        
+        if(!connected)
+            return;     
+        
+        reset();
+        
+        cleanup();      
+                        
+    }
+
+    
+    /**
+     * Returns status of connection to remote Paramics Communicator.
+     * @return True if a connection is established, false if not.
+     */
+    public boolean isConnected() { 
+        return connected; 
+    }
+    
+    /**
+     * While a connection is established to the remote paramics communicator,
+     * read messages from the input stream.  Get the ParamicsReader from the
+     * local list whose unique ID matches that of the message sender, and call
+     * the receive() method on that reader.
+     */
+    public void run() {
+        
+        while(connected) {
+            try {               
+                Document rxMessage = (Document)in.readObject();
+                Element docElement = rxMessage.getDocumentElement();
+
+                String readerID         = docElement.getAttribute(PARAMICS_COMM_TAGS.ID.tag);               
+                ParamicsReader rxReader = paramicsReaders.get(readerID);
+                
+                if(rxReader != null) {
+                    rxReader.receive(docElement.getChildNodes().item(0));
+                }
+            }   
+            catch(SocketTimeoutException ste) {
+                //just try again
+            }       
+            catch (Exception e) {
+                paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", "run()", 
+                        "Exception in reading from the socket.", e);
+                cleanup();
+                
+                theController.updateParamicsStatus(PARAMICS_STATUS.DROPPED);
+            }
+        }       
+    }
+    
+    /**
+     * Observer/Observable update method.  The Paramics Communicator observers
+     * registered ParamicsWriters.  When messages are to be sent, they are sent
+     * through this method.  All messages are ParamicsCommMessage objects.  Send 
+     * these messages to the write() method for transmission on the socket.
+     */
+    public void update(Observable o, Object arg) {      
+        write((Document)arg);               
+    }
+    
+    
+    /**
+     * If a connection has been established, transmit a message to
+     * register the reader, and add it to the local list of
+     * ParamicsReaders.
+     * 
+     * @param reader The new registering ParamicsReader.
+     */
+    public void registerReader(ParamicsReader reader) {
+        if(connected && !paramicsReaders.containsKey(reader.readerID)) {
+            
+            try {
+                Document readerDoc = DocumentBuilderFactory.newInstance()
+                    .newDocumentBuilder().newDocument();
+        
+                Element readerElem = readerDoc.createElement(PARAMICS_COMM_TAGS.READER.tag);
+                readerElem.setAttribute(PARAMICS_COMM_TAGS.ID.tag, reader.readerID);
+                readerElem.setAttribute(PARAMICS_COMM_TAGS.ACTION.tag, 
+                        PARAMICS_ACTIONS.REGISTER.action);
+                
+                Element intElem = readerDoc.createElement(PARAMICS_COMM_TAGS.INTERVAL.tag);
+                intElem.appendChild(readerDoc.createTextNode(reader.interval));
+                readerElem.appendChild(intElem);    
+                
+                Element fileElem = readerDoc.createElement(PARAMICS_COMM_TAGS.TARGET_FILE.tag);
+                fileElem.appendChild(readerDoc.createTextNode(reader.targetFile));
+                readerElem.appendChild(fileElem);
+        
+                readerDoc.appendChild(readerElem);          
+                    
+                write(readerDoc);
+
+                paramicsReaders.put(reader.readerID, reader);
+            }
+            catch (Exception e) {
+                paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", 
+                        "registerReader", "Exception in registering reader.", e);
+            }       
+        }
+    }
+    
+    /**
+     * If a connection has been established, transmit a message to
+     * unregister the reader, and remove it from the local list of
+     * ParamicsReaders.
+     * 
+     * @param reader The unregistering ParamicsReader.
+     */
+    public void unregisterReader(ParamicsReader reader) {
+        if(connected && paramicsReaders.containsKey(reader.readerID)) {
+            
+            try {
+                Document readerDoc = DocumentBuilderFactory.newInstance()
+                    .newDocumentBuilder().newDocument();
+        
+                Element readerElem = readerDoc.createElement(PARAMICS_COMM_TAGS.READER.tag);
+                readerElem.setAttribute(PARAMICS_COMM_TAGS.ID.tag, reader.readerID);
+                readerElem.setAttribute(PARAMICS_COMM_TAGS.ACTION.tag, 
+                        PARAMICS_ACTIONS.UNREGISTER.action);
+        
+                readerDoc.appendChild(readerElem);          
+                    
+                write(readerDoc);
+
+                paramicsReaders.remove(reader.readerID);
+            }
+            catch (Exception e) {
+                paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", 
+                        "unregisterReader", "Exception in unregistering reader.", e);
+            }           
+        }
+    }
+    
+    /**
+     * If a connection has been established, transmit a message to
+     * register the writer, and add it to the local list of
+     * ParamicsWriters.  This object is set as an observer to the
+     * registering writer.
+     * 
+     * @param writer The new registering ParamicsWriter.
+     */
+    public void registerWriter(ParamicsWriter writer) {
+        
+        if(connected && !paramicsWriters.containsKey(writer.writerID)) {
+            try {
+                Document writerDoc = DocumentBuilderFactory.newInstance()
+                    .newDocumentBuilder().newDocument();
+        
+                Element writerElem = writerDoc.createElement(PARAMICS_COMM_TAGS.WRITER.tag);
+                writerElem.setAttribute(PARAMICS_COMM_TAGS.ID.tag, writer.writerID);
+                writerElem.setAttribute(PARAMICS_COMM_TAGS.ACTION.tag,
+                        PARAMICS_ACTIONS.REGISTER.action);
+                
+                Element fileElem = writerDoc.createElement(PARAMICS_COMM_TAGS.TARGET_FILE.tag);
+                fileElem.appendChild(writerDoc.createTextNode(writer.targetFile));
+                writerElem.appendChild(fileElem);
+        
+                writerDoc.appendChild(writerElem);          
+                    
+                write(writerDoc);
+
+                
+                paramicsWriters.put(writer.writerID, writer);
+                
+                writer.addObserver(this);
+            }
+            catch (Exception e) {
+                paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", 
+                        "registerWriter", "Exception in registering writer.", e);
+            }           
+        }   
+    }
+    
+    /**
+     * If a connection has been established, transmit a message to
+     * unregister the writer, and remove it from the local list of
+     * ParamicsWriters.  This object is removed as an Observer
+     * from the unregistering writer.
+     * 
+     * @param writer The unregistering ParamicsWriter.
+     */
+    public void unregisterWriter(ParamicsWriter writer) {
+        if(connected && paramicsWriters.containsKey(writer.writerID)) {
+            
+            try {
+                Document writerDoc = DocumentBuilderFactory.newInstance()
+                    .newDocumentBuilder().newDocument();
+        
+                Element writerElem = writerDoc.createElement(PARAMICS_COMM_TAGS.WRITER.tag);
+                writerElem.setAttribute(PARAMICS_COMM_TAGS.ID.tag, writer.writerID);
+                writerElem.setAttribute(PARAMICS_COMM_TAGS.ACTION.tag, 
+                        PARAMICS_ACTIONS.UNREGISTER.action);
+        
+                writerDoc.appendChild(writerElem);          
+                    
+                write(writerDoc);
+                    
+                paramicsWriters.remove(writer.writerID);
+                
+                writer.deleteObserver(this);
+            }
+            catch (Exception e) {
+                paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", 
+                        "unregisterWriter", "Exception in unregistering writer.", e);
+            }
+        }   
+    }   
+    
+    protected void reset() {
+        
+        try {
+            Document resetDoc = DocumentBuilderFactory.newInstance()
+                .newDocumentBuilder().newDocument();
+        
+            Element resetElem = resetDoc.createElement(PARAMICS_COMM_TAGS.RESET.tag);
+        
+            resetDoc.appendChild(resetElem);        
+                
+            write(resetDoc);
+        }
+        catch (Exception e) {
+            paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", 
+                    "reset", "Exception in reseting.", e);
+        }
+
+    }
+    
+    /**
+     * Close the input and output streams and the socket.  Clear the lists
+     * of readers and writers, and set the connection flag to false.
+     */
+    protected void cleanup() {
+        
+        try {out.close();} catch (Exception e) {}
+        try {in.close();} catch (Exception e) {}
+        try {paramicsSocket.close();} catch (Exception e) {}
+        
+        paramicsReaders.clear();
+        paramicsWriters.clear();
+        connected = false;  
+    }   
+    
+    /**
+     * Write the parameter ParamicsCommMessage to the output stream.  Flush 
+     * the stream to be sure all data is transmitted.
+     * 
+     * @param message The message to transmit.
+     */
+    protected synchronized void write(Document output) {
+        
+        try {
+            out.writeObject(output);
+            out.flush();        
+        }
+        catch (Exception e) {
+            paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", "write", 
+                    "Exception in writing to the socket.", e);
+            cleanup();          
+            
+            theController.updateParamicsStatus(PARAMICS_STATUS.DROPPED);
+        }
+        
+    }
+
+        
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsReader.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsReader.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/paramicscontrol/ParamicsReader.java	(revision 82)
@@ -0,0 +1,34 @@
+package tmcsim.cadsimulator.paramicscontrol;
+
+import java.util.logging.Logger;
+
+import org.w3c.dom.Node;
+
+/**
+ * ParamicsReader is an abstract class to define objects that may
+ * read data from the Paramics Communicator.  Each ParamicsWriter
+ * is identified by a unique id.  The reader is assigned a target file 
+ * that will be read from and the duration (in seconds) between reads.
+ * All implementing Readers must implement the receive() method to 
+ * parse the XML data that is received from the ParamicsCommunicator.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public abstract class ParamicsReader {
+    
+    /** Error Logger */
+    protected static Logger paramLogger = Logger.getLogger("tmcsim.cadsimulator.paramicscontrol");
+    
+    /** Unique identifier for the reader. */
+    public String readerID   = null;
+
+    /** Interval (in seconds) between reads. */
+    public String interval   = null;
+    
+    /** Target file being read by the ParamicsCommunicator. */
+    public String targetFile = null;
+    
+    /** Abstract method to receive a XML Node object containing message data.*/
+    public abstract void receive(Node rxMessage);
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/SimulationStatusPanel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/SimulationStatusPanel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/SimulationStatusPanel.java	(revision 82)
@@ -0,0 +1,403 @@
+package tmcsim.cadsimulator.viewer;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.util.Observable;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EtchedBorder;
+import javax.swing.border.TitledBorder;
+import tmcsim.cadsimulator.viewer.model.CADSimulatorStatus;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.CADEnums.SCRIPT_STATUS;
+
+/**
+ * SimulationStatusPanel is a GUI object used for displaying information for the
+ * current simulation. This information includes:
+ *
+ * <ul>
+ * <li>Current simulation time.</li>
+ * <li>Current simulation status.</li>
+ * <li>Number of remote CAD Clients connected.</li>
+ * <li>Status of Simulation Manager connection.</li>
+ * <li>Status of Paramics connection.</li>
+ * <li>Paramics Network Loaded</li>
+ * <li>Information log messages.</li>
+ * <li>Error log messages</li>
+ * </ul>
+ *
+ * @author Matthew Cechini, jdalbey
+ * @version
+ */
+@SuppressWarnings("serial")
+public class SimulationStatusPanel extends JPanel
+{
+
+    /**
+     * Refresh this view
+     *
+     * @param obs the Observable we are watching
+     */
+    public void refresh(Observable obs)
+    {
+        CADSimulatorStatus status = (CADSimulatorStatus) obs;
+        termConnectedTF.setText(String.valueOf(status.getNumClients()));
+        String yesno = "No";
+        // Should we show yes or no?
+        if (status.isSimManagerConnected())
+        {
+            yesno = "Yes";
+        }
+        managerConnectedTF.setText(yesno);
+        simulationClockLabel.setText(status.getCurrentTime());
+        setScriptStatus(status.getScriptStatus());
+        setParamicsStatus(status.getParamicsStatus());
+
+        String netText = status.getParmicsNetworkID();
+        if (netText.length() == 0)
+        {
+            netText = "None";
+        }
+        setParamicsNetworkLoaded(netText);
+
+        String msgOut = status.getInfoMessages();
+        infoMessagesTA.setText(msgOut);
+        errorMessagesTA.setText(status.getErrorMessages());
+    }
+    /**
+     * Count of how many CAD clients have connected.
+     */
+    private int numClientsConnected = 0;
+
+    /**
+     * Constructor. Initialize GUI Objects. Register the logging handler to
+     * listen for log records from all loggers that exist in the
+     * "tmcsim.cadsimulator" package structure.
+     */
+    public SimulationStatusPanel()
+    {
+
+        initTimeAndStatus();
+        initAdditionalInfo();
+        initMessagesPanes();
+
+        //  errorHandler = new SimulatorErrorHandler();
+        //  Logger.getLogger("tmcsim.cadsimulator").addHandler(errorHandler);
+
+        cadSimulatorViewerBox = Box.createVerticalBox();
+        cadSimulatorViewerBox.add(simulationTimeAndStatusBox);
+        cadSimulatorViewerBox.add(additionalInfoBox);
+        cadSimulatorViewerBox.add(infoMessagesPane);
+        cadSimulatorViewerBox.add(errorMessagesPane);
+
+        add(cadSimulatorViewerBox);
+    }
+
+    /**
+     * This method is called within the CADSimulator whenever an error occurs.
+     * The message is then displayed to the user in the "Error Messages" portion
+     * of the CAD Simulator Viewer. Invoke method with null parameter to clear
+     * messages.
+     *
+     * @param errorMessage String message that will be displayed
+     */
+    protected void displayError(String errorMessage)
+    {
+        // Do we clear or append?
+        if (errorMessage == null)
+        {
+            errorMessagesTA.setText("");
+        }
+        else
+        {
+            errorMessagesTA.append(errorMessage + "\n");
+        }
+    }
+
+    /**
+     * Method is called to display the current status of the simulation.
+     *
+     * @param newStatus Current status of simulation. The following table
+     * describes each possible status and what is displayed. Each status code is
+     * found as a public static int in the Coordinator Class.
+     *
+     * <table cellpadding="2" cellspacing="2" border="1" style="text-align:
+     * left; width: 250px;">
+     * <tbody>
+     * <tr>
+     * <th>Status<br></th>
+     * <th>Actions Taken<br></th>
+     * </tr>
+     * <tr>
+     * <td>NO_SCRIPT<br></td>
+     * <td>Set the simulation status text to a black "No Script". <br></td>
+     * </tr>
+     * <tr>
+     * <td>SCRIPT_STOPPED_NOT_STARTED<br></td>
+     * <td>Set the simulation status text to a red "Ready". <br></td>
+     * </tr>
+     * <tr>
+     * <td>SCRIPT_PAUSED_STARTED<br></td>
+     * <td>Set the simulation status text to a red "Paused". <br></td>
+     * </tr>
+     * <tr>
+     * <td>SCRIPT_RUNNING<br></td>
+     * <td>Set the simulation status text to a green "Running". <br></td>
+     * </tr>
+     * <tr>
+     * <td>ATMS_SYNCHRONIZATION<br></td>
+     * <td>Set the simulation status text to an orange "Synchronizing".
+     * <br></td>
+     * </tr>
+     * </tbody>
+     * </table>
+     */
+    private void setScriptStatus(SCRIPT_STATUS newStatus)
+    {
+        // Display text based on status value
+        switch (newStatus)
+        {
+            case NO_SCRIPT:
+                simulationStatusText.setText("No Script");
+                simulationStatusText.setForeground(Color.BLACK);
+                break;
+
+            case SCRIPT_STOPPED_NOT_STARTED:
+                simulationStatusText.setText("Ready");
+                simulationStatusText.setForeground(Color.RED);
+                break;
+
+            case SCRIPT_PAUSED_STARTED:
+                simulationStatusText.setText("Paused");
+                simulationStatusText.setForeground(Color.RED);
+                break;
+
+            case SCRIPT_RUNNING:
+                simulationStatusText.setText("Running");
+                simulationStatusText.setForeground(Color.GREEN);
+                break;
+            case ATMS_SYNCHRONIZATION:
+                simulationStatusText.setText("Synchronizing");
+                simulationStatusText.setForeground(Color.ORANGE);
+                break;
+
+        }
+    }
+
+    /**
+     * Method is called when a connection to paramics is made or dropped.
+     *
+     * @param newStatus The status denoting whether a connection has been made
+     * or dropped.
+     */
+    private void setParamicsStatus(PARAMICS_STATUS newStatus)
+    {
+        // Display text based on status value
+        switch (newStatus)
+        {
+            case CONNECTED:
+                paramicsConnectedTF.setText("Yes");
+                break;
+            case DISCONNECTED:
+                paramicsConnectedTF.setText("No");
+                break;
+        }
+    }
+
+    /**
+     * Method is called when a paramics network is loaded.
+     *
+     * @param networkID Unique ID for Paramics network that has been loaded.
+     */
+    private void setParamicsNetworkLoaded(String networkID)
+    {
+        networkLoadedTF.setText(networkID);
+    }
+
+    /**
+     * Initialize Time and Status GUI Components
+     */
+    private void initTimeAndStatus()
+    {
+
+        simulationTime = new JPanel();
+        simulationClock = new JPanel();
+        simulationStatus = new JLabel("Simulation Status");
+        simulationStatusText = new JLabel("No Script");
+        simulationStatusText.setName("simulationStatusText");
+
+        simulationTime.setLayout(new BorderLayout());
+        simulationClock.setPreferredSize(new Dimension(100, 60));
+        simulationTimeAndStatusBox = new Box(BoxLayout.X_AXIS);
+        simulationStatusBox = new Box(BoxLayout.Y_AXIS);
+        simulationTimeBox = new Box(BoxLayout.Y_AXIS);
+        simulationClockBox = new Box(BoxLayout.X_AXIS);
+
+        simulationStatus.setAlignmentX(Box.CENTER_ALIGNMENT);
+        simulationStatusText.setAlignmentX(Box.CENTER_ALIGNMENT);
+        simulationStatusText.setName("simulationStatusText");
+
+        TitledBorder title = BorderFactory.createTitledBorder(
+                BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Status");
+        title.setTitleJustification(TitledBorder.LEFT);
+        simulationStatusBox.setBorder(title);
+
+        simulationStatusBox.setMaximumSize(new Dimension(140, 60));
+        simulationStatusBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+
+        simulationStatusBox.add(Box.createHorizontalStrut(120));
+        simulationStatusBox.add(Box.createVerticalGlue());
+        simulationStatusBox.add(simulationStatusText);
+        simulationStatusBox.add(Box.createVerticalGlue());
+
+        simulationClockLabel = new JLabel("0:00:00");
+        simulationClockLabel.setFont(new Font("Geneva", Font.BOLD, 70));
+        simulationClockLabel.setName("simulationClockLabel");
+        simulationClockLabel.setForeground(Color.BLACK);
+        simulationClockLabel.setBackground(Color.BLACK);
+        simulationClockBox.setForeground(Color.BLACK);
+        simulationClockBox.setBackground(Color.BLACK);
+        simulationClockBox.add(simulationClockLabel);
+        simulationClockBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+        simulationTimeBox.add(simulationClockBox);
+
+        simulationTimeAndStatusBox.add(Box.createHorizontalStrut(20));
+        simulationTimeAndStatusBox.add(simulationTimeBox);
+        simulationTimeAndStatusBox.add(Box.createHorizontalStrut(20));
+        simulationTimeAndStatusBox.add(simulationStatusBox);
+        simulationTimeAndStatusBox.add(Box.createHorizontalStrut(20));
+    }
+
+    /**
+     * Initialize Additional Info Label GUI Components
+     */
+    private void initAdditionalInfo()
+    {
+
+        terminalsConnectedLabel = new JLabel("Connected CAD Terminals: ");
+        termConnectedTF = new JTextField("   " + String.valueOf(numClientsConnected));
+        termConnectedTF.setEditable(false);
+        termConnectedTF.setName("termConnectedTF");
+
+        termConnectedBox = new Box(BoxLayout.X_AXIS);
+        termConnectedBox.add(terminalsConnectedLabel);
+        termConnectedBox.add(Box.createHorizontalGlue());
+        termConnectedBox.add(termConnectedTF);
+
+
+        managerConnectedLabel = new JLabel("Simulation Manager Connected: ");
+        managerConnectedTF = new JTextField("  No");
+        managerConnectedTF.setEditable(false);
+        managerConnectedTF.setName("managerConnectedTF");
+
+        managerConnectedBox = new Box(BoxLayout.X_AXIS);
+        managerConnectedBox.add(managerConnectedLabel);
+        managerConnectedBox.add(Box.createHorizontalGlue());
+        managerConnectedBox.add(managerConnectedTF);
+
+
+        paramicsConnectedLabel = new JLabel("Connected to Paramics: ");
+        paramicsConnectedTF = new JTextField("  No");
+        paramicsConnectedTF.setEditable(false);
+        paramicsConnectedTF.setName("paramicsConnectedTF");
+
+        paramicsConnectedBox = new Box(BoxLayout.X_AXIS);
+        paramicsConnectedBox.add(paramicsConnectedLabel);
+        paramicsConnectedBox.add(Box.createHorizontalGlue());
+        paramicsConnectedBox.add(paramicsConnectedTF);
+
+
+        networkLoadedLabel = new JLabel("Network Loaded: ");
+        networkLoadedTF = new JTextField("None");
+        networkLoadedTF.setEditable(false);
+        networkLoadedTF.setName("networkLoadedTF");
+
+        networkLoadedBox = new Box(BoxLayout.X_AXIS);
+        networkLoadedBox.add(networkLoadedLabel);
+        networkLoadedBox.add(Box.createHorizontalGlue());
+        networkLoadedBox.add(networkLoadedTF);
+
+
+        additionalInfoBox = new Box(BoxLayout.Y_AXIS);
+        additionalInfoBox.setMinimumSize(new Dimension(300, 150));
+
+        additionalInfoBox.add(Box.createVerticalStrut(10));
+        additionalInfoBox.add(termConnectedBox);
+        additionalInfoBox.add(Box.createVerticalStrut(10));
+        additionalInfoBox.add(managerConnectedBox);
+        additionalInfoBox.add(Box.createVerticalStrut(10));
+        additionalInfoBox.add(paramicsConnectedBox);
+        additionalInfoBox.add(Box.createVerticalStrut(10));
+        additionalInfoBox.add(networkLoadedBox);
+        additionalInfoBox.add(Box.createVerticalStrut(20));
+
+
+    }
+
+    /**
+     * Initialize Info & Error Messages GUI Components
+     */
+    private void initMessagesPanes()
+    {
+
+        infoMessagesTA = new JTextArea(6, 30);
+        infoMessagesTA.setEditable(false);
+        infoMessagesTA.setName("infoMessagesTA");
+        infoMessagesTA.setLineWrap(true);
+        infoMessagesTA.setWrapStyleWord(true);
+        infoMessagesPane = new JScrollPane(infoMessagesTA);
+        infoMessagesPane.setPreferredSize(new Dimension(300, 100));
+        infoMessagesPane.setName("infoMessagesPane");
+        infoMessagesPane.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Info Messages"));
+        infoMessagesPane.setName("infoMessagesPane");
+
+        errorMessagesTA = new JTextArea(6, 30);
+        errorMessagesTA.setForeground(Color.RED);
+        errorMessagesTA.setEditable(false);
+        errorMessagesTA.setName("errorMessagesTA");
+        errorMessagesTA.setLineWrap(true);
+        errorMessagesTA.setWrapStyleWord(true);
+        errorMessagesPane = new JScrollPane(errorMessagesTA);
+        errorMessagesPane.setPreferredSize(new Dimension(300, 150));
+        errorMessagesPane.setName("errorMessagesPane");
+        errorMessagesPane.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Error Messages"));
+
+    }
+    private Box additionalInfoBox;
+    private Box termConnectedBox;
+    private Box managerConnectedBox;
+    private Box paramicsConnectedBox;
+    private Box networkLoadedBox;
+    private Box cadSimulatorViewerBox;
+    private Box simulationTimeAndStatusBox;
+    private Box simulationStatusBox;
+    private Box simulationTimeBox;
+    private Box simulationClockBox;
+    private JLabel managerConnectedLabel;
+    private JLabel paramicsConnectedLabel;
+    private JLabel simulationStatus;
+    private JLabel simulationClockLabel;
+    private JLabel simulationStatusText;
+    private JLabel terminalsConnectedLabel;
+    private JLabel networkLoadedLabel;
+    private JPanel simulationTime;
+    private JPanel simulationClock;
+    private JTextField managerConnectedTF;
+    private JTextField paramicsConnectedTF;
+    private JTextField termConnectedTF;
+    private JTextField networkLoadedTF;
+    private JScrollPane infoMessagesPane;
+    private JScrollPane errorMessagesPane;
+    private JTextArea infoMessagesTA;
+    private JTextArea errorMessagesTA;
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/CADSimulatorViewer.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/CADSimulatorViewer.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/CADSimulatorViewer.java	(revision 82)
@@ -0,0 +1,192 @@
+package tmcsim.cadsimulator.viewer;
+
+import java.awt.AWTEvent;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.util.Observable;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JTabbedPane;
+import javax.swing.KeyStroke;
+import tmcsim.cadsimulator.viewer.actions.ExitAction;
+import tmcsim.cadsimulator.viewer.model.CADMediaStatus;
+import tmcsim.cadsimulator.viewer.model.CADSimulatorStatus;
+import tmcsim.interfaces.CADViewer;
+
+/**
+ * This class provides a GUI to view current status information for the CAD
+ * Simulator.
+ *
+ * @see SimulationStatusPanel
+ * @see MediaStatusPanel
+ * @author Matthew Cechini
+ * @version $Revision: 1.3 $ $Date: 2006/06/06 20:46:41 $
+ */
+@SuppressWarnings("serial")
+public class CADSimulatorViewer extends JFrame implements CADViewer
+{
+
+    /**
+     * Panel to display simulation information.
+     */
+    private SimulationStatusPanel simulationPanel;
+    /**
+     * Panel to display media control information.
+     */
+    private MediaStatusPanel mediaPanel;
+    /**
+     * Panel to display configuration files.
+     */
+    private ConfigStatusPanel configPanel;
+
+    /**
+     * Constructor.
+     */
+    public CADSimulatorViewer()
+    {
+        super();
+        setTitle("CAD Simulator " + getAppVersion());
+
+        initComponents();
+    }
+
+    /**
+     * Read the version number from the application properties. The file
+     * 'application.properties' is generated by build.xml.
+     *
+     * @return a version string obtained from application.properties file, or
+     * "Version: unknown" if an IOerror prevents us from reading the file.
+     */
+    private String getAppVersion()
+    {
+        String propfilename = "/tmcsim/application.properties";
+        String propKey = "Application.revision";
+        String version = "unknown";
+        try
+        {
+            Properties props = new Properties();
+            props.load(this.getClass().getResourceAsStream(propfilename));
+            version = (String) props.get(propKey);
+        } catch (IOException ex)
+        {
+            Logger.getLogger("tmcsim/cadsimulator").log(Level.SEVERE,
+                    "CADSimulatorView.getAppVersion()."
+                    + " IOError reading " + propfilename);
+        } catch (NullPointerException npe)
+        {
+            Logger.getLogger("tmcsim/cadsimulator").log(Level.SEVERE,
+                    "CADSimulatorView.getAppVersion().load."
+                    + " Missing file: " + propfilename);
+        }
+        return "revision: " + version;
+    }
+
+    /**
+     * Method calls the processEvent() method with a WINDOW_CLOSING WindowEvent
+     * to start the application closing process.
+     */
+    public void closeViewer()
+    {
+        processEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
+    }
+
+    /**
+     * Overloads the processEvent method. If the AWTEvent is a WINDOW_CLOSING
+     * event, prompt the user to confirm the action. If confirmed, close the
+     * application.
+     */
+    protected void processEvent(AWTEvent evt)
+    {
+
+        if (evt.getID() == WindowEvent.WINDOW_CLOSING)
+        {
+//            int option = JOptionPane.showConfirmDialog(null,
+//                    "Closing the CAD Simulator will stop the current "
+//                    + "simulation.  Do you wish to continue exiting?",
+//                    "Confirm Exit",
+//                    JOptionPane.YES_NO_OPTION);
+//
+//            if (option != JOptionPane.NO_OPTION)
+//            {
+            System.exit(0);
+//            }
+        }
+    }
+
+    /**
+     * Initialize GUI Components
+     */
+    private void initComponents()
+    {
+
+
+        simulationPanel = new SimulationStatusPanel();
+        mediaPanel = new MediaStatusPanel();
+        configPanel = new ConfigStatusPanel();
+
+        cadSimTabbedPane = new JTabbedPane();
+        cadSimTabbedPane.addTab("Status", simulationPanel);
+        cadSimTabbedPane.addTab("Media", mediaPanel);
+        cadSimTabbedPane.addTab("Config", configPanel);
+
+        add(cadSimTabbedPane);
+
+        menubar = new JMenuBar();
+
+        fileMenu = new JMenu("File");
+        fileMenu.setMnemonic(KeyEvent.VK_F);
+        menubar.add(fileMenu);
+
+        exitMenuItem = new JMenuItem(new ExitAction(this));
+        exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(
+                KeyEvent.VK_X, ActionEvent.ALT_MASK));
+        fileMenu.add(exitMenuItem);
+
+        javax.swing.JMenu helpMenu = new javax.swing.JMenu("Help");
+        javax.swing.JMenuItem aboutItem = new javax.swing.JMenuItem("About");
+
+        aboutItem.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                String ver = "";//RevisionNumber.getString();
+                JOptionPane.showMessageDialog(rootPane, "Version: " + ver, "About", JOptionPane.INFORMATION_MESSAGE);
+            }
+        });
+        helpMenu.add(aboutItem);
+        menubar.add(helpMenu);
+
+        setJMenuBar(menubar);
+
+        setPreferredSize(new Dimension(500, 575));
+        pack();
+        setResizable(true);
+        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+    }
+    private JTabbedPane cadSimTabbedPane;
+    private JMenuBar menubar;
+    private JMenu fileMenu;
+    private JMenuItem exitMenuItem;
+
+    @Override
+    public void update(Observable obs, Object obj)
+    {
+        if (obs instanceof CADSimulatorStatus)
+        {
+            simulationPanel.refresh(obs);
+        }
+        if (obs instanceof CADMediaStatus)
+        {
+            mediaPanel.refresh(obs);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/ConfigStatusPanel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/ConfigStatusPanel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/ConfigStatusPanel.java	(revision 82)
@@ -0,0 +1,101 @@
+package tmcsim.cadsimulator.viewer;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.*;
+import java.nio.file.FileSystems;
+import java.nio.file.Path;
+
+import javax.swing.*;
+
+
+/**
+ * ConfigStatusPanel is a GUI object used for displaying the current configuration files.
+ * 
+ * @author Drew Miller
+ * @version
+ */
+@SuppressWarnings("serial")
+public class ConfigStatusPanel extends JPanel {
+    
+	private String[] configFileNames = {
+			"cad_simulator_config.properties", 
+			"cad_simulator_media_config.properties", 
+			"cad_simulator_paramics_config.properties",
+			"cad_simulator_smoketest_config.properties"
+			};
+	private JTextArea view;
+    /**
+     * Constructor.  Initialize data and GUI components.
+     */
+    public ConfigStatusPanel() {        
+        initComponents();
+    }
+    
+    private String getFileContent(Path pathToFile) throws IOException {
+    	BufferedReader br = new BufferedReader(new FileReader(pathToFile.toString()));
+    	String content = null;
+    	String line = null;
+    	while((line = br.readLine()) != null) {
+    		content += line + "\n";
+    	}
+    	return content;
+    }
+    
+    private Path getPathToFile(String fileName) {
+    	Path p = FileSystems.getDefault().getPath("config", fileName); 
+    	return p;
+    }
+   
+	private void changeView(Path pathToFileName) {
+		try {
+        	view.setText(getFileContent(pathToFileName));
+        	view.setCaretPosition(view.getDocument().getLength());
+        } catch (IOException e) {
+        	System.out.println("Error in setting text.");
+        }
+	}
+    private void setupComboBox(JPanel container) {
+        JComboBox selectMenu = new JComboBox(configFileNames);
+        selectMenu.addActionListener(new ActionListener() {
+        	public void actionPerformed(ActionEvent e) {
+        		JComboBox b = (JComboBox)e.getSource();
+        		System.out.println(b.getSelectedItem());
+        		Path p = getPathToFile(b.getSelectedItem().toString());
+        		changeView(p);
+        	}
+
+        });
+        container.add(selectMenu);
+    }
+    
+    private void setupTextView(JPanel container) {
+        view = new JTextArea(15, 30);
+        view.setEditable(false);
+        view.setLineWrap(true);
+        view.setWrapStyleWord(true);
+        Path p = FileSystems.getDefault().getPath("config", configFileNames[0]);
+        try {
+        	view.setText(getFileContent(p));
+        } catch (IOException e) {
+        	System.out.println("Error in setting text.");
+        }
+        container.add(view);
+    }
+    /**
+     * Initialize GUI components.
+     */
+    private void initComponents() {
+        configTab = new JPanel(new FlowLayout(FlowLayout.CENTER));
+        configTab.setPreferredSize(new Dimension(400, 400));
+        setupComboBox(configTab);
+        setupTextView(configTab);
+
+        add(configTab);
+    }
+    
+    
+    private JPanel configTab;
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/DVDInfoPanel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/DVDInfoPanel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/DVDInfoPanel.java	(revision 82)
@@ -0,0 +1,161 @@
+package tmcsim.cadsimulator.viewer;
+
+import java.awt.Dimension;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import tmcsim.cadsimulator.videocontrol.DVDStatusUpdate;
+import tmcsim.cadsimulator.videocontrol.DVDTitleUpdate;
+import tmcsim.cadsimulator.viewer.model.DVDStatusTableModel;
+import tmcsim.cadsimulator.viewer.model.DVDTitleTableModel;
+
+/**
+ * DVDInfoPanel is a GUI component used in the CADSimulatorViewer. The panel
+ * displays information regarding the DVD player's connection information. One
+ * table on the panel shows all DVD title that have been played or repeated. A
+ * second table shows all DVD status updates that have been received from the
+ * controller.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class DVDInfoPanel extends JPanel
+{
+
+    /**
+     * DVD player connection info.
+     */
+    public final String connInfo;
+    /**
+     * Table model for the title table.
+     */
+    private DVDTitleTableModel titleTableModel;
+    /**
+     * Table to display DVD title plays and repeats.
+     */
+    private JTable titleTable;
+    /**
+     * Table model for the Status table.
+     */
+    private DVDStatusTableModel statusTableModel;
+    /**
+     * Table to display DVD status updates.
+     */
+    private JTable statusTable;
+
+    /**
+     * Constructor. Initialize the panel GUI components.
+     *
+     * @param connectionInfo DVD player connection info.
+     */
+    public DVDInfoPanel(String connectionInfo)
+    {
+        connInfo = connectionInfo;
+
+        initComponents();
+    }
+
+    /**
+     * This method updates the DVD status table with the new update object.
+     *
+     * @param update Update DVD Status update.
+     */
+    public void updateDVDStatus(DVDStatusUpdate update)
+    {
+        statusTableModel.addStatusUpdate(update);
+    }
+
+    /**
+     * This method updates the DVD title table with the new update object.
+     *
+     * @param update Update DVD Status update.
+     */
+    public void updateDVDTitle(DVDTitleUpdate update)
+    {
+        titleTableModel.addTitleUpdate(update);
+    }
+
+    /**
+     * Initialize the GUI components.
+     */
+    private void initComponents()
+    {
+
+        connInfoLbl = new JLabel("Connection Info:");
+        connInfoLbl.setAlignmentX(Box.LEFT_ALIGNMENT);
+        connInfoTF = new JTextField(connInfo);
+        connInfoTF.setColumns(30);
+        connInfoTF.setAlignmentX(Box.LEFT_ALIGNMENT);
+        connInfoTF.setEditable(false);
+
+        Box connInfoBox = Box.createVerticalBox();
+        connInfoBox.add(connInfoLbl);
+        connInfoBox.add(connInfoTF);
+        connInfoBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+
+        titleTableModel = new DVDTitleTableModel();
+        titleTable = new JTable(titleTableModel);
+        titleTable.getTableHeader().setReorderingAllowed(false);
+
+        for (int c = 0; c < titleTable.getColumnCount(); c++)
+        {
+            titleTable.getColumnModel().getColumn(c).setMinWidth(
+                    titleTableModel.getColumnMinWidth(c));
+            titleTable.getColumnModel().getColumn(c).setMaxWidth(
+                    titleTableModel.getColumnMaxWidth(c));
+            titleTable.getColumnModel().getColumn(c).setPreferredWidth(
+                    titleTableModel.getColumnPrefWidth(c));
+            titleTable.getColumnModel().getColumn(c).setResizable(true);
+        }
+
+        titlePane = new JScrollPane();
+        titlePane.setAlignmentX(Box.CENTER_ALIGNMENT);
+        //titlePane.setMinimumSize(new Dimension(,));
+        titlePane.setPreferredSize(new Dimension(425, 225));
+        titlePane.setViewportView(titleTable);
+        titlePane.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createRaisedBevelBorder(), "Title Updates"));
+
+        statusTableModel = new DVDStatusTableModel();
+        statusTable = new JTable(statusTableModel);
+        statusTable.getTableHeader().setReorderingAllowed(false);
+
+        for (int c = 0; c < statusTable.getColumnCount(); c++)
+        {
+            statusTable.getColumnModel().getColumn(c).setMinWidth(
+                    statusTableModel.getColumnMinWidth(c));
+            statusTable.getColumnModel().getColumn(c).setMaxWidth(
+                    statusTableModel.getColumnMaxWidth(c));
+            statusTable.getColumnModel().getColumn(c).setPreferredWidth(
+                    statusTableModel.getColumnPrefWidth(c));
+            statusTable.getColumnModel().getColumn(c).setResizable(true);
+        }
+
+        statusPane = new JScrollPane();
+        statusPane.setAlignmentX(Box.CENTER_ALIGNMENT);
+        //statusPane.setMinimumSize(new Dimension(,));
+        statusPane.setPreferredSize(new Dimension(425, 150));
+        statusPane.setViewportView(statusTable);
+        statusPane.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createRaisedBevelBorder(), "Status Updates"));
+
+        Box panelBox = Box.createVerticalBox();
+        panelBox.add(connInfoBox);
+        panelBox.add(Box.createVerticalStrut(10));
+        panelBox.add(titlePane);
+        panelBox.add(Box.createVerticalStrut(10));
+        panelBox.add(statusPane);
+        panelBox.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+        add(panelBox);
+    }
+    private JScrollPane titlePane;
+    private JScrollPane statusPane;
+    private JLabel connInfoLbl;
+    private JTextField connInfoTF;
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/CADConsoleViewer.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/CADConsoleViewer.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/CADConsoleViewer.java	(revision 82)
@@ -0,0 +1,127 @@
+package tmcsim.cadsimulator.viewer;
+
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.Observable;
+import tmcsim.cadsimulator.viewer.model.CADSimulatorModel;
+import tmcsim.cadsimulator.viewer.model.CADSimulatorStatus;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import static tmcsim.common.CADEnums.SCRIPT_STATUS.ATMS_SYNCHRONIZATION;
+import static tmcsim.common.CADEnums.SCRIPT_STATUS.NO_SCRIPT;
+import static tmcsim.common.CADEnums.SCRIPT_STATUS.SCRIPT_PAUSED_STARTED;
+import static tmcsim.common.CADEnums.SCRIPT_STATUS.SCRIPT_RUNNING;
+import static tmcsim.common.CADEnums.SCRIPT_STATUS.SCRIPT_STOPPED_NOT_STARTED;
+import tmcsim.interfaces.CADViewer;
+
+/**
+ * This class provides a console to view current status information for the CAD
+ * Simulator.
+ *
+ * @see SimulationStatusPanel
+ * @see MediaStatusPanel
+ * @author Matthew Cechini
+ * @version $Revision: 1.3 $ $Date: 2006/06/06 20:46:41 $
+ */
+@SuppressWarnings("serial")
+public class CADConsoleViewer implements CADViewer
+{
+
+    /**
+     * Simulation model
+     */
+    private CADSimulatorModel cadstatus;
+    private PrintWriter display;
+
+    /**
+     * Constructor.
+     */
+    public CADConsoleViewer()
+    {
+        display = new PrintWriter(System.out, true);
+    }
+
+    public void setWriter(Writer writer)
+    {
+        display = new PrintWriter(writer, true);
+    }
+
+    public void setVisible(boolean state)
+    {
+        display.print("--- CAD Simulator ---\n");
+        display.print("Elapsed Simulation Time     : 0:00:00\n");
+        display.print("Status                      : No Script\n");
+        display.print("Connected CAD Terminals     : 0\n");
+        display.print("Simulation Manager Connected: No\n");
+        display.print("Connected to Paramics       : No\n");
+        display.print("Network Loaded              : None\n");
+        display.print("-- Info Messages --\n\n");
+        display.println("-- Error Messages --\n");
+    }
+
+    /**
+     * Method calls the processEvent() method with a WINDOW_CLOSING WindowEvent
+     * to start the application closing process.
+     */
+    public void closeViewer()
+    {
+        System.exit(0);
+    }
+
+    @Override
+    public void update(Observable obs, Object obj)
+    {
+        if (obs instanceof CADSimulatorStatus)
+        {
+            CADSimulatorStatus cadstatus = (CADSimulatorStatus) obs;
+            display.println("--- CAD Simulator ---");
+            display.println("Elapsed Simulation Time     : " + cadstatus.getCurrentTime());
+            String statusTxt = "No Script";
+            switch (cadstatus.getScriptStatus())
+            {
+                case NO_SCRIPT:
+                    statusTxt = "No Script";
+                    break;
+                case SCRIPT_STOPPED_NOT_STARTED:
+                    statusTxt = "Ready";
+                    break;
+                case SCRIPT_PAUSED_STARTED:
+                    statusTxt = "Paused";
+                    break;
+                case SCRIPT_RUNNING:
+                    statusTxt = "Running";
+                    break;
+                case ATMS_SYNCHRONIZATION:
+                    statusTxt = "Synchronizing";
+                    break;
+            }
+            display.println("Status                      : " + statusTxt);
+            display.println("Connected CAD Terminals     : " + cadstatus.getNumClients());
+            String yesno = "No";
+            if (cadstatus.isSimManagerConnected())
+            {
+                yesno = "Yes";
+            }
+            display.println("Simulation Manager Connected: " + yesno);
+            statusTxt = "No";
+            if (cadstatus.getParamicsStatus().equals(PARAMICS_STATUS.CONNECTED))
+            {
+                statusTxt = "Yes";
+            }
+            display.println("Connected to Paramics       : " + statusTxt);
+            String idTxt = "None";
+            if (cadstatus.getParmicsNetworkID().length() > 0)
+            {
+                idTxt = cadstatus.getParmicsNetworkID();
+            }
+            display.println("Network Loaded              : " + idTxt);
+            display.println("-- Info Messages --");
+            display.println(cadstatus.getInfoMessages());
+            display.println("-- Error Messages --");
+            display.println(cadstatus.getErrorMessages());
+        }
+//        if (obs instanceof CADMediaStatus)
+//        {
+//            mediaPanel.refresh(obs);
+//        }
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/actions/ExitAction.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/actions/ExitAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/actions/ExitAction.java	(revision 82)
@@ -0,0 +1,41 @@
+package tmcsim.cadsimulator.viewer.actions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import tmcsim.cadsimulator.viewer.CADSimulatorViewer;
+
+/**
+ * Abstract action to exit the CADSimulator. When the action is performed the
+ * CADSimulatorView.closeViewer() method is called.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class ExitAction extends AbstractAction
+{
+
+    /**
+     * Reference to the CADSimulatorViewer.
+     */
+    private CADSimulatorViewer theViewer;
+
+    public ExitAction(CADSimulatorViewer viewer)
+    {
+        super("Exit");
+
+        theViewer = viewer;
+    }
+
+    public void actionPerformed(ActionEvent arg0)
+    {
+        //theViewer.closeViewer();
+        /* closeViewer() will prompt the user for confirmation.
+         * 26 Apr 2016 I'm tired of seeing the confirmation message,
+         * so if the user chooses File>Exit, assume they intend to exit
+         * and don't ask for confirmation.  If they click window close
+         * button, they will still get the confirmation prompt. jdalbey
+         */
+        System.exit(0);
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/model/CADSimulatorModel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/model/CADSimulatorModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/model/CADSimulatorModel.java	(revision 82)
@@ -0,0 +1,133 @@
+package tmcsim.cadsimulator.viewer.model;
+
+import java.util.Observer;
+import tmcsim.cadsimulator.videocontrol.DVDStatusUpdate;
+import tmcsim.cadsimulator.videocontrol.DVDTitleUpdate;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.CADEnums.SCRIPT_STATUS;
+
+/**
+ * CADSimulatorModel represents the state of the Simulation at any point in
+ * time. It is comprised of CADSimulatorStatus and CADMediaStatus.
+ *
+ * @author jdalbey
+ * @version $Revision: 1.3 $ $Date: 2006/06/06 20:46:41 $
+ */
+@SuppressWarnings("serial")
+public class CADSimulatorModel
+{
+
+    private CADSimulatorStatus simStatus;
+    private CADMediaStatus mediaStatus;
+
+    /**
+     * Constructor.
+     */
+    public CADSimulatorModel()
+    {
+        simStatus = new CADSimulatorStatus();
+        mediaStatus = new CADMediaStatus();
+    }
+
+    /**
+     * Make all of our delegates observers of the given view.
+     *
+     * @param view Someone that wants to observe us
+     */
+    public void addObserver(Observer view)
+    {
+//        super.addObserver(view);
+        simStatus.addObserver(view);
+        mediaStatus.addObserver(view);
+    }
+
+    /**
+     * @see SimulationStatusPanel
+     */
+    public void connectClient()
+    {
+        simStatus.connectClient();
+    }
+
+    /**
+     * @see SimulationStatusPanel
+     */
+    public void disconnectClient()
+    {
+        simStatus.disconnectClient();
+    }
+
+    /**
+     * Accessor to current number of clients.
+     *
+     * @return number of connected clients
+     */
+    public int getNumClients()
+    {
+        return simStatus.getNumClients();
+    }
+
+    /**
+     * @see SimulationStatusPanel
+     */
+    public void setSimManagerStatus(boolean connection)
+    {
+        simStatus.setSimManagerStatus(connection);
+    }
+
+    /**
+     * @see SimulationStatusPanel
+     */
+    public boolean isSimManagerConnected()
+    {
+        return simStatus.isSimManagerConnected();
+    }
+
+    /**
+     * @see SimulationStatusPanel
+     */
+    public void setTime(long seconds)
+    {
+        simStatus.setTime(seconds);
+    }
+
+    /**
+     * @see SimulationStatusPanel
+     */
+    public void setScriptStatus(SCRIPT_STATUS newStatus)
+    {
+        simStatus.setScriptStatus(newStatus);
+    }
+
+    /**
+     * @see SimulationStatusPanel
+     */
+    public void setParamicsStatus(PARAMICS_STATUS newStatus)
+    {
+        simStatus.setParamicsStatus(newStatus);
+    }
+
+    /**
+     * @see SimulationStatusPanel
+     */
+    public void setParamicsNetworkLoaded(String networkID)
+    {
+        simStatus.setParamicsNetworkLoaded(networkID);
+    }
+
+    /**
+     * @see MediaStatusPanel
+     */
+    public void updateDVDStatus(DVDStatusUpdate update)
+    {
+        mediaStatus.updateDVDStatus(update);
+    }
+
+    /**
+     * @see MediaStatusPanel
+     */
+    public void updateDVDTitle(DVDTitleUpdate update)
+    {
+        mediaStatus.updateDVDTitle(update);
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/model/DVDTitleTableModel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/model/DVDTitleTableModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/model/DVDTitleTableModel.java	(revision 82)
@@ -0,0 +1,248 @@
+package tmcsim.cadsimulator.viewer.model;
+
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.cadsimulator.videocontrol.DVDTitleUpdate;
+
+/**
+ * DVDStatusTableModel extends from DefaultTableModel to display 
+ * DVDStatusUpdates that are received from a DVDController.  The
+ * addStatusUpdate() method is used to add new update objects.
+ * The table may be cleared through the clearModelData() method.
+ * 
+ * @author Matthew
+ * @version
+ */
+@SuppressWarnings("serial")
+public class DVDTitleTableModel extends DefaultTableModel {
+    
+    
+    /**
+     * Enumeration containing column information for all columns shown in the 
+     * DVDTitle table.
+     * @author Matthew Cechini
+     */ 
+    public static enum TITLE_COLUMNS {
+        TIME_COL           ("Time", 0, 60, 100, 80),
+        UPDATE_INFO_COL    ("Title Info", 1, 140, 400, 420);
+        
+        public String colName;
+        public int colNum;
+        public int colMinWidth;
+        public int colMaxWidth;
+        public int colPrefWidth;
+        
+        private TITLE_COLUMNS (String name, int num, int min, int max, int pref) {
+            colName      = name;
+            colNum       = num;
+            colMinWidth  = min;
+            colMaxWidth  = max;
+            colPrefWidth = pref;
+        }
+        
+        public static int colCount() {
+            return values().length;
+        }
+        
+        public static String columnName(int num) {
+            
+            for(TITLE_COLUMNS column : TITLE_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colName;
+            }
+            
+            return "";
+        }
+        
+        public static int columnMinWidth(int num) {
+            
+            for(TITLE_COLUMNS column : TITLE_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMinWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnMaxWidth(int num) {
+            
+            for(TITLE_COLUMNS column : TITLE_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMaxWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnPrefWidth(int num) {
+            
+            for(TITLE_COLUMNS column : TITLE_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colPrefWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static TITLE_COLUMNS fromColNum(int column) {
+            for(TITLE_COLUMNS c : TITLE_COLUMNS.values()) {
+                if(c.colNum == column)
+                    return c;
+            }
+            
+            return TIME_COL;
+        }
+    }  
+
+    /** 
+     * Container class to hold information displayed in the table.
+     * @author Matthew Cechini
+     */     
+    private class TitleUpdateInfo {
+
+        /** Formatted time text of when the title update was received. */
+        public String time;
+
+        /** Text for title update. */
+        public String titleUpdate;
+        
+        public TitleUpdateInfo(String t, String u) {
+            time        = t;
+            titleUpdate = u;
+        }
+    }
+
+    /** List of data displayed in the table. */
+    private List<TitleUpdateInfo> title_update_list;
+
+    /** DateFormat object used to format time formatted text for display. */
+    private DateFormat timeFormatter;
+
+    
+    /** Constructor.  Intialize the DateFormat object. */
+    public DVDTitleTableModel() {
+        title_update_list = new ArrayList<TitleUpdateInfo>();
+        timeFormatter     = DateFormat.getTimeInstance(DateFormat.SHORT);
+    }
+
+    public int getRowCount() {
+        if(title_update_list == null) {
+            return 0;
+        }
+        else
+            return title_update_list.size();
+    }
+
+    public int getColumnCount() {
+        return TITLE_COLUMNS.colCount();
+    }
+    
+    public int getColumnMinWidth(int c){
+        return TITLE_COLUMNS.columnMinWidth(c);
+    }
+
+
+    public int getColumnMaxWidth(int c){
+        return TITLE_COLUMNS.columnMaxWidth(c);
+    }
+
+
+    public int getColumnPrefWidth(int c){
+        return TITLE_COLUMNS.columnPrefWidth(c);
+    }
+    
+    
+    public Object getValueAt(int row, int col) {
+        switch (TITLE_COLUMNS.fromColNum(col)) {
+            case TIME_COL:
+                return title_update_list.get(row).time;
+            case UPDATE_INFO_COL:
+                return title_update_list.get(row).titleUpdate; 
+            default:
+                return "";
+        }        
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void setValueAt(Object value, int row, int col) {
+        switch (TITLE_COLUMNS.fromColNum(col)) {
+        /*
+            case NAME_COL:
+                reader_list.get(row).readerName;
+            case ADDRESS_COL:
+                reader_list.get(row).readerAddress;
+            case READER_TYPE_COL:
+                reader_list.get(row).readerFullType;
+            case CONN_TYPE_COL:
+                reader_list.get(row).connType;
+            default:
+                return "";
+        */
+        }        
+    }    
+
+    public String getColumnName(int col) {
+        return TITLE_COLUMNS.columnName(col);
+    }
+
+    public Class<?> getColumnClass(int c) {
+        return getValueAt(0, c).getClass();
+    }
+    
+    public boolean isCellEditable(int row, int col) {
+        return false;
+    }
+    
+    /**
+     * This method adds a new title update to the table.  If the title has
+     * been repeated, the text will be "Repeating title #<Number> <Addl Info>".
+     * If the title is being played for the first time, the text will be 
+     * "Playing title #<Number> <Addl Info>".  If the title is being played 
+     * for an incident, the <Addl Info> will be "for Incident #<Number>".
+     * Else, the title is being played for a speed range and the <Addl Info>
+     * will be "for Range <Min Speed> - <Max Speed> mph (<duration> secs)".
+     * 
+     * @param update New update object.
+     */    
+    public void addTitleUpdate(DVDTitleUpdate update) {
+       
+        StringBuffer updateBuf = new StringBuffer();
+        
+        if(update.isRepeat)
+            updateBuf.append("Repeating title #");
+        else
+            updateBuf.append("Playing title #");        
+        
+        if(update.isPlayingIncident) {
+            updateBuf.append(update.currentIncident.dvdTitle + " for Incident #");
+            updateBuf.append(update.currentIncident.incidentNumber);
+        }
+        else {
+            updateBuf.append(update.currentRange.dvdTitle + " for Range ");
+            updateBuf.append(update.currentRange.minSpeed + " - ");
+            updateBuf.append(update.currentRange.maxSpeed + " mph");
+        }
+        
+        title_update_list.add(new TitleUpdateInfo(
+                timeFormatter.format(new Date()), 
+                updateBuf.toString()));
+        
+        fireTableChanged(new TableModelEvent(this));
+    }
+    
+    /** 
+     * Remove all Status Updates from the table's data.
+     */     
+    public void clearModelData() {
+        title_update_list.clear();
+        fireTableChanged(new TableModelEvent(this));
+    }   
+
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/model/DVDStatusTableModel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/model/DVDStatusTableModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/model/DVDStatusTableModel.java	(revision 82)
@@ -0,0 +1,241 @@
+package tmcsim.cadsimulator.viewer.model;
+
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.cadsimulator.videocontrol.DVDStatusUpdate;
+
+
+/**
+ * DVDStatusTableModel extends from DefaultTableModel to display 
+ * DVDStatusUpdates that are received from a DVDController.  The
+ * addStatusUpdate() method is used to add new update objects.
+ * The table may be cleared through the clearModelData() method.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class DVDStatusTableModel extends DefaultTableModel {
+
+    /**
+     * Enumeration containing column information for all columns shown in the 
+     * DVDStatus table.
+     * @author Matthew Cechini
+     */
+    public static enum STATUS_COLUMNS {
+        TIME_COL           ("Time", 0, 60, 100, 80),
+        UPDATE_INFO_COL    ("Status Info", 1, 140, 400, 420);
+        
+        public String colName;
+        public int colNum;
+        public int colMinWidth;
+        public int colMaxWidth;
+        public int colPrefWidth;
+        
+        private STATUS_COLUMNS (String name, int num, int min, int max, int pref) {
+            colName      = name;
+            colNum       = num;
+            colMinWidth  = min;
+            colMaxWidth  = max;
+            colPrefWidth = pref;
+        }
+        
+        public static int colCount() {
+            return values().length;
+        }
+        
+        public static String columnName(int num) {
+            
+            for(STATUS_COLUMNS column : STATUS_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colName;
+            }
+            
+            return "";
+        }
+        
+        public static int columnMinWidth(int num) {
+            
+            for(STATUS_COLUMNS column : STATUS_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMinWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnMaxWidth(int num) {
+            
+            for(STATUS_COLUMNS column : STATUS_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMaxWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnPrefWidth(int num) {
+            
+            for(STATUS_COLUMNS column : STATUS_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colPrefWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static STATUS_COLUMNS fromColNum(int column) {
+            for(STATUS_COLUMNS c : STATUS_COLUMNS.values()) {
+                if(c.colNum == column)
+                    return c;
+            }
+            
+            return TIME_COL;
+        }
+    }  
+    
+    
+    /** 
+     * Container class to hold information displayed in the table.
+     * @author Matthew Cechini
+     */ 
+    private class StatusUpdateInfo {
+        
+        /** Formatted time text of when the status update was received. */
+        public String time;
+
+        /** Text of status update. */
+        public String statusText;
+        
+        public StatusUpdateInfo(String t, String s) {
+            time       = t;
+            statusText = s;
+        }
+    }
+    
+
+    /** List of data displayed in the table. */
+    private List<StatusUpdateInfo> status_update_list;
+
+    /** DateFormat object used to format time formatted text for display. */
+    private DateFormat timeFormatter;
+
+    
+    /** Constructor.  Intialize the DateFormat object. */
+    public DVDStatusTableModel() {
+        status_update_list = new ArrayList<StatusUpdateInfo>();
+        timeFormatter      = DateFormat.getTimeInstance(DateFormat.SHORT);
+    }
+
+    public int getRowCount() {
+        if(status_update_list == null) {
+            return 0;
+        }
+        else
+            return status_update_list.size();
+    }
+
+    public int getColumnCount() {
+        return STATUS_COLUMNS.colCount();
+    }
+    
+    public int getColumnMinWidth(int c){
+        return STATUS_COLUMNS.columnMinWidth(c);
+    }
+
+
+    public int getColumnMaxWidth(int c){
+        return STATUS_COLUMNS.columnMaxWidth(c);
+    }
+
+
+    public int getColumnPrefWidth(int c){
+        return STATUS_COLUMNS.columnPrefWidth(c);
+    }
+    
+    public Object getValueAt(int row, int col) {
+        switch (STATUS_COLUMNS.fromColNum(col)) {
+            case TIME_COL:
+                return status_update_list.get(row).time;
+            case UPDATE_INFO_COL:
+                return status_update_list.get(row).statusText; 
+            default:
+                return "";
+        }        
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void setValueAt(Object value, int row, int col) {
+        switch (STATUS_COLUMNS.fromColNum(col)) {
+        /*
+            case NAME_COL:
+                reader_list.get(row).readerName;
+            case ADDRESS_COL:
+                reader_list.get(row).readerAddress;
+            case READER_TYPE_COL:
+                reader_list.get(row).readerFullType;
+            case CONN_TYPE_COL:
+                reader_list.get(row).connType;
+            default:
+                return "";
+        */
+        }        
+    }    
+
+    public String getColumnName(int col) {
+        return STATUS_COLUMNS.columnName(col);
+    }
+
+    public Class<?> getColumnClass(int c) {
+        return getValueAt(0, c).getClass();
+    }
+
+    public boolean isCellEditable(int row, int col) {
+        return false;
+    }
+    
+    /**
+     * This method adds a new status update to the table.  If the parameter
+     * update contains an exception, the status text will be "Exception: 
+     * <Message>".  The status text will be "Connected" or "Disconnected" 
+     * depending on the value of the isConnected data member.  The current
+     * time is used to time stamp the received update.
+     * 
+     * @param update New update object.
+     */
+    public void addStatusUpdate(DVDStatusUpdate update) {
+       
+        StringBuffer updateBuf = new StringBuffer();
+        
+        if(update.exception != null) {
+            updateBuf.append("Exception: " + update.exception.getMessage());
+        }
+        else if(update.isConnected) {
+            updateBuf.append("Connected");
+        }
+        else {
+            updateBuf.append("Disconnected");
+        }
+        
+        status_update_list.add(new StatusUpdateInfo(
+                timeFormatter.format(new Date()), 
+                updateBuf.toString()));
+        
+        fireTableChanged(new TableModelEvent(this));
+    }
+    
+    /** 
+     * Remove all Status Updates from the table's data.
+     */       
+    public void clearModelData() {
+        status_update_list.clear();
+        fireTableChanged(new TableModelEvent(this));
+    }   
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/model/CADMediaStatus.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/model/CADMediaStatus.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/model/CADMediaStatus.java	(revision 82)
@@ -0,0 +1,85 @@
+package tmcsim.cadsimulator.viewer.model;
+
+import java.util.Iterator;
+import java.util.Observable;
+import java.util.TreeMap;
+import tmcsim.cadsimulator.videocontrol.DVDStatusUpdate;
+import tmcsim.cadsimulator.videocontrol.DVDTitleUpdate;
+import tmcsim.cadsimulator.viewer.DVDInfoPanel;
+
+/**
+ * CADMediaStatus is the status of the DVD connections created by the CAD
+ * Simulator. All status and title updates are sent to the corresponding
+ * DVDInfoPanel. The DVDs are referenced by connection info, which is unique to
+ * each DVD player.
+ *
+ * @author jdalbey
+ */
+@SuppressWarnings("serial")
+public class CADMediaStatus extends Observable
+{
+
+    /**
+     * Map of DVDInfoPanels(values) referenced by a DVD's connection info(key).
+     */
+    private TreeMap<String, DVDInfoPanel> dvdPanels = null;
+
+    /**
+     * Constructor. Initialize data and GUI components.
+     */
+    public CADMediaStatus()
+    {
+
+        dvdPanels = new TreeMap<String, DVDInfoPanel>();
+    }
+
+    /**
+     * Updates the current DVDInfoPanel with the status update. If a panel does
+     * not current exist, create one and add a new tab.
+     *
+     * @param update DVD status update.
+     */
+    public void updateDVDStatus(DVDStatusUpdate update)
+    {
+        if (dvdPanels.get(update.connectionInfo) == null)
+        {
+            dvdPanels.put(update.connectionInfo, new DVDInfoPanel(
+                    update.connectionInfo));
+        }
+
+
+        dvdPanels.get(update.connectionInfo).updateDVDStatus(update);
+        setChanged();
+        notifyObservers();
+
+    }
+
+    public DVDInfoPanel getInfoPanel(String connectionInfo)
+    {
+        return dvdPanels.get(connectionInfo);
+    }
+
+    /**
+     * Updates the current DVDInfoPanel with the title update. If a panel does
+     * not current exist, create one and add a new tab.
+     *
+     * @param update DVD title update.
+     */
+    public void updateDVDTitle(DVDTitleUpdate update)
+    {
+        if (dvdPanels.get(update.connectionInfo) == null)
+        {
+            dvdPanels.put(update.connectionInfo, new DVDInfoPanel(update.connectionInfo));
+        }
+
+        dvdPanels.get(update.connectionInfo).updateDVDTitle(update);
+        setChanged();
+        notifyObservers();
+
+    }
+
+    public Iterator<DVDInfoPanel> getDVDlist()
+    {
+        return dvdPanels.values().iterator();
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/model/CADSimulatorStatus.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/model/CADSimulatorStatus.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/model/CADSimulatorStatus.java	(revision 82)
@@ -0,0 +1,320 @@
+package tmcsim.cadsimulator.viewer.model;
+
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+import tmcsim.common.CADEnums;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+
+/**
+ * SimulatorStatus represents the status of the current simulation. This
+ * information includes:
+ *
+ * <ul>
+ * <li>Current simulation time.</li>
+ * <li>Current simulation status.</li>
+ * <li>Number of remote CAD Clients connected.</li>
+ * <li>Status of Simulation Manager connection.</li>
+ * <li>Status of Paramics connection.</li>
+ * <li>Paramics Network Loaded</li>
+ * <li>Information log messages.</li>
+ * <li>Error log messages</li>
+ * </ul>
+ *
+ * @author jdalbey
+ * @version 0.1
+ */
+@SuppressWarnings("serial")
+public class CADSimulatorStatus extends java.util.Observable
+{
+
+    /**
+     * Count of how many CAD clients have connected.
+     */
+    private int numClientsConnected;
+    /**
+     * Is the Simulation Manager connected?
+     */
+    private boolean simMgrStatus;
+    /**
+     * The current state of the script this simulation has loaded.
+     */
+    private CADEnums.SCRIPT_STATUS scriptState;
+    /**
+     * The current simulation elapsed time.
+     */
+    private long currentTime;
+    /**
+     * The current state of the connectio to paramics
+     */
+    private PARAMICS_STATUS paramicsConnectionStatus;
+    /**
+     * ID of currently loaded paramics network
+     */
+    private String networkID;
+    /**
+     * Logging ErrorHandler.
+     */
+    private SimulatorErrorHandler errorHandler;
+    private StringBuffer infoMessages;
+    private StringBuffer errorMessages;
+
+    /**
+     * Constructor. Initialize GUI Objects. Register the logging handler to
+     * listen for log records from all loggers that exist in the
+     * "tmcsim.cadsimulator" package structure.
+     */
+    public CADSimulatorStatus()
+    {
+        errorHandler = new SimulatorErrorHandler();
+        Logger.getLogger("tmcsim.cadsimulator").addHandler(errorHandler);
+        scriptState = CADEnums.SCRIPT_STATUS.NO_SCRIPT;
+        paramicsConnectionStatus = PARAMICS_STATUS.DISCONNECTED;
+        networkID = "";
+        numClientsConnected = 0;
+        infoMessages = new StringBuffer();
+        errorMessages = new StringBuffer();
+    }
+
+    public String getInfoMessages()
+    {
+        return infoMessages.toString();
+    }
+
+    public String getErrorMessages()
+    {
+        return errorMessages.toString();
+    }
+
+    /**
+     * Method is called when a CAD Client disconnects from the CAD Simulator.
+     * The displayed number of connected clients is incremented by one.
+     */
+    public void connectClient()
+    {
+        numClientsConnected += 1;
+        setChanged();
+        notifyObservers();
+
+        //termConnectedTF.setText(String.valueOf(numClientsConnected));
+    }
+
+    /**
+     * Method is called when a CAD Client disconnects from the CAD Simulator.
+     * The displayed number of connected clients is decremented by one.
+     */
+    public void disconnectClient()
+    {
+        if (numClientsConnected > 0)
+        {
+            numClientsConnected--;
+        }
+        setChanged();
+        notifyObservers();
+
+        //termConnectedTF.setText(String.valueOf(numClientsConnected));
+    }
+
+    /**
+     * Accessor to current number of clients.
+     *
+     * @return number of connected clients
+     */
+    public int getNumClients()
+    {
+        return numClientsConnected;
+    }
+
+    /**
+     * Method is called when Simulation Manager connects or disconnects.
+     *
+     * @param connection True if simulation manager is connected, false if not.
+     */
+    public void setSimManagerStatus(boolean connection)
+    {
+        simMgrStatus = connection;
+        setChanged();
+        notifyObservers();
+
+        //managerConnectedTF.setText("Yes");
+    }
+
+    /**
+     * Accessor to Sim Mgr connection status
+     *
+     * @return number of connected clients
+     */
+    public boolean isSimManagerConnected()
+    {
+        return simMgrStatus;
+    }
+
+    /**
+     * Method called to convert current simulation time (parameter long value)
+     * to a string of format H:MM:SS. Time is then updated on GUI.
+     *
+     * @param seconds Long value of current time
+     */
+    public void setTime(long seconds)
+    {
+        currentTime = seconds;
+        setChanged();
+        notifyObservers();
+    }
+
+    public String getCurrentTime()
+    {
+        String time = new String();
+        long timeSegment;
+        long seconds = currentTime;
+        timeSegment = seconds / 3600;
+        time += String.valueOf(timeSegment) + ":";
+
+        seconds = seconds % 3600;
+
+        timeSegment = seconds / 60;
+        if (timeSegment < 10)
+        {
+            time += "0";
+        }
+
+        time += String.valueOf(timeSegment) + ":";
+        seconds = seconds % 60;
+
+        timeSegment = seconds;
+        if (timeSegment < 10)
+        {
+            time += "0";
+        }
+
+        time += String.valueOf(timeSegment);
+        return time;
+        //simulationClockLabel.setText(time);
+
+    }
+
+    /**
+     * Method is called to display the current status of the simulation.
+     *
+     * @param newStatus Current status of simulation. The following table
+     * describes each possible status and what is displayed. Each status code is
+     * found as a public static int in the Coordinator Class.
+     *
+     * <table cellpadding="2" cellspacing="2" border="1" style="text-align:
+     * left; width: 250px;">
+     * <tbody>
+     * <tr>
+     * <th>Status<br></th>
+     * <th>Actions Taken<br></th>
+     * </tr>
+     * <tr>
+     * <td>NO_SCRIPT<br></td>
+     * <td>Set the simulation status text to a black "No Script". <br></td>
+     * </tr>
+     * <tr>
+     * <td>SCRIPT_STOPPED_NOT_STARTED<br></td>
+     * <td>Set the simulation status text to a red "Ready". <br></td>
+     * </tr>
+     * <tr>
+     * <td>SCRIPT_PAUSED_STARTED<br></td>
+     * <td>Set the simulation status text to a red "Paused". <br></td>
+     * </tr>
+     * <tr>
+     * <td>SCRIPT_RUNNING<br></td>
+     * <td>Set the simulation status text to a green "Running". <br></td>
+     * </tr>
+     * <tr>
+     * <td>ATMS_SYNCHRONIZATION<br></td>
+     * <td>Set the simulation status text to an orange "Synchronizing".
+     * <br></td>
+     * </tr>
+     * </tbody>
+     * </table>
+     */
+    public void setScriptStatus(CADEnums.SCRIPT_STATUS newStatus)
+    {
+        scriptState = newStatus;
+        setChanged();
+        notifyObservers();
+    }
+
+    public CADEnums.SCRIPT_STATUS getScriptStatus()
+    {
+        return scriptState;
+    }
+
+    /**
+     * Method is called when a connection to paramics is made or dropped.
+     *
+     * @param newStatus The status denoting whether a connection has been made
+     * or dropped.
+     */
+    public void setParamicsStatus(CADEnums.PARAMICS_STATUS newStatus)
+    {
+        paramicsConnectionStatus = newStatus;
+        setChanged();
+        notifyObservers();
+    }
+
+    public CADEnums.PARAMICS_STATUS getParamicsStatus()
+    {
+        return paramicsConnectionStatus;
+    }
+
+    /**
+     * Method is called when a paramics network is loaded.
+     *
+     * @param networkID Unique ID for Paramics network that has been loaded.
+     */
+    public void setParamicsNetworkLoaded(String networkID)
+    {
+        this.networkID = networkID;
+        setChanged();
+        notifyObservers();
+    }
+
+    public String getParmicsNetworkID()
+    {
+        return networkID;
+    }
+
+    /**
+     * Logging Handler to listen for Information and Error messages logged for
+     * the CAD Simulator. Received LogRecords are displayed in the info or error
+     * message Text Area.
+     *
+     * @author Matthew Cechini
+     */
+    private class SimulatorErrorHandler extends Handler
+    {
+
+        public void close() throws SecurityException
+        {
+        }
+
+        public void flush()
+        {
+        }
+
+        public void publish(LogRecord rec)
+        {
+            StringBuffer msgBuffer = new StringBuffer();
+
+            msgBuffer.append(rec.getSourceClassName() + "."
+                    + rec.getSourceMethodName() + " = "
+                    + rec.getMessage());
+            // which panel to display in
+            if (rec.getLevel() == Level.INFO)
+            {
+                infoMessages.append(msgBuffer);
+            }
+            else
+            {
+                errorMessages.append(msgBuffer);
+            }
+            setChanged();
+            notifyObservers();
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/viewer/MediaStatusPanel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/viewer/MediaStatusPanel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/viewer/MediaStatusPanel.java	(revision 82)
@@ -0,0 +1,118 @@
+package tmcsim.cadsimulator.viewer;
+
+import java.util.Iterator;
+import java.util.Observable;
+import java.util.TreeMap;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import tmcsim.cadsimulator.videocontrol.DVDStatusUpdate;
+import tmcsim.cadsimulator.videocontrol.DVDTitleUpdate;
+import tmcsim.cadsimulator.viewer.model.CADMediaStatus;
+
+/**
+ * MediaStatusPanel is a GUI object used for displaying information for DVD
+ * connections created by the CAD Simulator. Tabs for each DVD are created and
+ * information is displayed on a DVDInfoPanel. All status and title updates are
+ * sent to the corresponding DVDInfoPanel. The DVDs are referenced by connection
+ * info, which is unique to each DVD player.
+ *
+ * @author jdalbey
+ */
+@SuppressWarnings("serial")
+public class MediaStatusPanel extends JPanel
+{
+
+    /**
+     * Map of DVDInfoPanels(values) referenced by a DVD's connection info(key).
+     */
+    private TreeMap<String, DVDInfoPanel> dvdPanels = null;
+
+    /**
+     * Constructor. Initialize data and GUI components.
+     */
+    public MediaStatusPanel()
+    {
+
+        dvdPanels = new TreeMap<String, DVDInfoPanel>();
+
+        initComponents();
+    }
+
+    public void refresh(Observable obs)
+    {
+        CADMediaStatus status = (CADMediaStatus) obs;
+        Iterator<DVDInfoPanel> iter = status.getDVDlist();
+        // Remove existing tabs before adding them all back
+        mediaTabs.removeAll();
+        // add a new tab for each dvd panel
+        while (iter.hasNext())
+        {
+            DVDInfoPanel item = iter.next();
+            mediaTabs.addTab(
+                    "DVD " + (Integer.parseInt(item.connInfo
+                    .substring(item.connInfo
+                    .indexOf(":") + 1)) % 3000),
+                    dvdPanels.get(item.connInfo));
+        }
+//            mediaTabs.addTab(
+//                    "DVD " + (Integer.parseInt(update.connectionInfo
+//                    .substring(update.connectionInfo
+//                    .indexOf(":") + 1)) % 3000),
+//                    dvdPanels.get(update.connectionInfo));
+
+    }
+
+    /**
+     * Updates the current DVDInfoPanel with the status update. If a panel does
+     * not current exist, create one and add a new tab.
+     *
+     * @param update DVD status update.
+     */
+    public void updateDVDStatus(DVDStatusUpdate update)
+    {
+        if (dvdPanels.get(update.connectionInfo) == null)
+        {
+            dvdPanels.put(update.connectionInfo, new DVDInfoPanel(
+                    update.connectionInfo));
+
+            mediaTabs.addTab(
+                    "DVD " + (Integer.parseInt(update.connectionInfo
+                    .substring(update.connectionInfo
+                    .indexOf(":") + 1)) % 3000),
+                    dvdPanels.get(update.connectionInfo));
+        }
+
+
+        dvdPanels.get(update.connectionInfo).updateDVDStatus(update);
+    }
+
+    /**
+     * Updates the current DVDInfoPanel with the title update. If a panel does
+     * not current exist, create one and add a new tab.
+     *
+     * @param update DVD title update.
+     */
+    public void updateDVDTitle(DVDTitleUpdate update)
+    {
+        if (dvdPanels.get(update.connectionInfo) == null)
+        {
+            dvdPanels.put(update.connectionInfo, new DVDInfoPanel(update.connectionInfo));
+
+            mediaTabs.addTab("DVD " + dvdPanels.size(),
+                    dvdPanels.get(update.connectionInfo));
+        }
+
+        dvdPanels.get(update.connectionInfo).updateDVDTitle(update);
+    }
+
+    /**
+     * Initialize GUI components.
+     */
+    private void initComponents()
+    {
+        mediaTabs = new JTabbedPane();
+
+        add(mediaTabs);
+    }
+    private JTabbedPane mediaTabs;
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/CADScreenManager.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/CADScreenManager.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/CADScreenManager.java	(revision 82)
@@ -0,0 +1,985 @@
+
+package tmcsim.cadsimulator;
+
+
+import java.rmi.RemoteException;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.StringTokenizer;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import tmcsim.cadmodels.BlankScreenModel;
+import tmcsim.cadmodels.CADRoutedMessage;
+import tmcsim.cadmodels.CADScreenModel;
+import tmcsim.cadmodels.IncidentBoardModel;
+import tmcsim.cadmodels.IncidentBoardModel_obj;
+import tmcsim.cadmodels.IncidentInquiryDetails;
+import tmcsim.cadmodels.IncidentInquiryModel;
+import tmcsim.cadmodels.IncidentInquiryModel_obj;
+import tmcsim.cadmodels.IncidentSummaryModel;
+import tmcsim.cadmodels.IncidentSummaryModel_obj;
+import tmcsim.cadmodels.RoutedMessageModel;
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.common.ObserverMessage;
+import tmcsim.common.CADEnums.CADScreenNum;
+import tmcsim.common.CADEnums.CADScreenType;
+import tmcsim.common.CADEnums.CAD_ERROR;
+import tmcsim.common.CADEnums.CAD_KEYS;
+import tmcsim.common.CADProtocol.CAD_FIELD_CODES;
+import tmcsim.common.CADProtocol.DATA_TAGS;
+
+
+/**
+ * CADScreenManager is used to contain the current information for all four 
+ * CAD screens that are available on a CAD Client.  The CADScreenManager
+ * uniquely identifies a CAD Client with a unique CAD Position number and User 
+ * ID.  The CADScreenManager object keeps track of the number of routed 
+ * messages received and the screen update map.<br>
+ * <br>
+ * The CADScreenManager object observers the Coordinator for any updates to 
+ * the simulation data. Whenever there is an event in the simulation, the 
+ * CADScreenManager object determines if the update is relevant for this CAD 
+ * position and the currently displayed CAD screens.<br>
+ * <br> 
+ * CADScreenManager handles all CAD commands, either through the receiveCommand() 
+ * method or series of screen request methods.
+ * 
+ * A timer is instantiated to update the remote CAD client with the current 
+ * time at each minute.
+ * 
+ * @author Matthew Cechini 
+ * @version $Revision: 1.5 $ $Date: 2006/06/06 20:46:41 $
+ */
+public class CADScreenManager extends Observable implements Observer {
+
+    
+    /**
+     * The CADScreenTimer is a timer task that calls the updateTime()
+     * method everytime it expires.  This timer is used to keep the
+     * CAD time current on the CAD screen.
+     */
+    private class CADScreenTimer extends TimerTask {
+        public void run() {
+            updateTime();
+        }
+    }       
+        
+    /** Reference to the Coordinator object. */
+    private Coordinator theCoordinator;
+    
+    /** The current value of the CAD terminal's position. */
+    private int CADPosition;    
+
+    /** Unique CAD User ID for this set of CAD Screens. */
+    private String CADUserID;
+    
+    /** The current CAD Screen number. */    
+    private CADScreenNum currentCADScreenNum; 
+        
+    /**
+     * Map of the CAD Screens.  The map's values are the CADScreenNum enumeration values,
+     * which reference the current CADScreenModel object values.
+     */
+    private TreeMap<CADScreenNum, CADScreenModel> CADScreensMap;
+    
+    /** 
+     * Map of CAD Screen updates.  The map's values are a boolean signifying whether there
+     * is an update available for each CAD screen, keyed by the CADScreenNum objects. 
+     */
+    private TreeMap<CADScreenNum, Boolean> CADScreenUpdates;
+        
+    /** Map of CADRoutedMessages that have been received to this CAD terminal, and whether
+     *  the message has been read. */
+    private TreeMap<CADRoutedMessage, Boolean> messageMap = null;
+    
+    /**
+     * Constructor.  Initialize CADScreen windows.  All screens are initialized 
+     * to a blank screen.  The CADScreenUpdates map is also initialized with each
+     * cad screen number being set to having a false update value.
+     * The CADScreenTimer is created and scheduled to call the updateTime() 
+     * method every minute to increment the current CAD time.
+     */  
+    public CADScreenManager(Coordinator coor) {
+        
+        theCoordinator = coor;
+        
+        CADPosition = 0;
+        CADUserID   = "A00000";
+        currentCADScreenNum = CADScreenNum.ONE;
+    
+        CADScreensMap    = new TreeMap<CADScreenNum, CADScreenModel>();
+        CADScreenUpdates = new TreeMap<CADScreenNum, Boolean>();
+
+        CADScreenNum screenNum = CADScreenNum.ONE;
+
+        CADScreensMap.put(screenNum, new BlankScreenModel(screenNum));
+        CADScreenUpdates.put(screenNum, false);
+        screenNum = screenNum.next();
+        
+        CADScreensMap.put(screenNum, new BlankScreenModel(screenNum)); 
+        CADScreenUpdates.put(screenNum, false);
+        screenNum = screenNum.next();
+        
+        CADScreensMap.put(screenNum, new BlankScreenModel(screenNum)); 
+        CADScreenUpdates.put(screenNum, false);
+        screenNum = screenNum.next();
+        
+        CADScreensMap.put(screenNum, new BlankScreenModel(screenNum)); 
+        CADScreenUpdates.put(screenNum, false);
+        screenNum = screenNum.next();       
+
+        CADScreenModel.theCADTime = CADSimulator.getCADTime();
+        CADScreenModel.theCADDate = CADSimulator.getCADDate();  
+            
+        messageMap = new TreeMap<CADRoutedMessage, Boolean>();     
+
+        Date d = new Date();
+        long delay = (60 - ((d.getTime() / 1000) % 60)) * 1000;
+
+        Timer timer             = new Timer();  
+        CADScreenTimer cadTimer = new CADScreenTimer();   
+        timer.scheduleAtFixedRate(cadTimer, new Date(d.getTime() + delay), (long)1000 * 60);        
+        
+    }
+
+    /**
+     * Called by the timer at the beginning of every minute.  When this method 
+     * is called, notify observers with the new time.
+     */  
+    protected void updateTime() {
+        CADScreenModel.theCADTime = CADSimulator.getCADTime();
+        
+        setChanged();
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.TIME_UPDATE, 
+                CADSimulator.getCADTime()));
+    }   
+ 
+    /**
+     * Returns the current CAD model after updating it with any new screen 
+     * updates and messages.
+     * 
+     * @return The current CAD model object.
+     */
+    public CADScreenModel getCurrentCADModel() {
+
+        updateCADModel();
+        
+        return currentCADModel();   
+    }
+    
+    /**
+     * Set the CAD position for this terminal.  
+     * @param position The new CAD position.
+     */  
+    public void setCADPosition(int position) {  
+        CADPosition = position; 
+    }
+    
+    /**
+     * Set the CAD user id for this terminal.
+     * @param userID The new CAD user id.
+     */
+    public void setCADUserID(String userID) {
+        CADUserID = userID;
+    }
+    
+    /**
+     * Updates the current CAD model with the number of routed messages
+     * that have been received by this terminal, and the current 
+     * update map.
+     */
+    private void updateCADModel() {
+        currentCADModel().numberRoutedMessages = messageMap.size();
+        currentCADModel().unreadMessages = messageMap.values().contains(new Boolean(false));
+        currentCADModel().screenUpdateMap.putAll(CADScreenUpdates);
+    }
+    
+    /**
+     * A helper method to reduce code.  The CADScreenModel object for the
+     * current CAD screen is returned from the CADScreensMap.
+     * @return The current CADScreenModel object.
+     */
+    private CADScreenModel currentCADModel() {
+        
+        return CADScreensMap.get(currentCADScreenNum);
+    }
+    
+    /**
+     * Returns the log info for this terminal in the following format: XXXYYYYY.
+     * XXX is the cad position, left zero padded. YYYYYY is the CAD user id.   
+     * @return Log info string.
+     */
+    private String getLogInfo() {
+        StringBuffer logInfoBuf = new StringBuffer();
+        
+        while(Integer.toString(CADPosition).length() + logInfoBuf.length() < 3) 
+            logInfoBuf.append("0");
+        
+        logInfoBuf.append(CADPosition);
+        logInfoBuf.append(CADUserID);
+        
+        return logInfoBuf.toString();
+    }
+    
+    /**
+     * This method receives ObserverMessage updates.  The message types that
+     * are responded to are:
+     * 
+     * INCIDENT_SUMMARY - Update all CADScreenManager that are showing the 
+     *                    SA_INCIDENT_SUMMARY screen.  Add the parameter
+     *                    object to the screen's model object, update the 
+     *                    CADScreenUpdates map, update the current model,
+     *                    and notify observers that there is a screen update.
+     * 
+     * INCIDENT_INQUIRY - Update all CADScreenManager that are showing the 
+     *                    II_INCIDENT_INQUIRY screen with the same log number
+     *                    as the parameter model object.  Add the parameter
+     *                    object to the screen's model object, update the 
+     *                    CADScreenUpdates map, update the current model,
+     *                    and notify observers that there is a screen update.
+     * 
+     * INCIDENT_BOARD - Update all CADScreenManager that are showing the 
+     *                    IB_INCIDENT_BOARD screen.  Add the parameter
+     *                    object to the screen's model object, update the 
+     *                    CADScreenUpdates map, update the current model,
+     *                    and notify observers that there is a screen update.
+     * 
+     * ROUTED_MESSAGE - Only respond to this update if the routed message
+     *                  has been routed to this CAD terminal posision.
+     *                  Update all CADScreenManager that are showing the 
+     *                  TO_ROUTED_MESSAGE screen.  Add the parameter
+     *                  object to the screen's model object, update the current model,
+     *                  and notify observers that there is a new routed message.
+     * 
+     * RESET_SIMULATION - Reset the CADScreensMap to contain the BlankScreenModel
+     *                    for all CADScreenManager, reset all screen updates to false, 
+     *                    and notify observers to refresh the view.  Update the
+     *                    current CAD model and notify observers of the screen
+     *                    update.  Finally, reset the current screen to screen ONE,
+     *                    and notify observers to refresh.
+     */
+    public void update(Observable o, Object arg) {
+        
+        ObserverMessage oMessage = (ObserverMessage)arg;
+        boolean updatedModel = false;
+        
+        switch(oMessage.type) {
+            case INCIDENT_SUMMARY:
+                
+                for(CADScreenModel model : CADScreensMap.values()) {
+                    if(model.getType() == CADScreenType.SA_INCIDENT_SUMMARY) {                          
+
+                        model.addModelObject(oMessage.value);
+                        updatedModel = true;
+                        
+                        CADScreenUpdates.put(model.getScreenNum(), true);
+                    }
+                }
+        
+                if(updatedModel) {      
+                    updateCADModel();
+                    
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.SCREEN_UPDATE, 
+                            CADScreenModel.updateMapToString(currentCADModel().screenUpdateMap))); 
+                }
+            
+                break;
+                                                
+            case INCIDENT_INQUIRY:
+
+                for(CADScreenModel model : CADScreensMap.values()) {
+                    if(model.getType() == CADScreenType.II_INCIDENT_INQUIRY) {                          
+
+                        if(((IncidentInquiryModel)model).logNumMatches(((IncidentInquiryModel_obj)oMessage.value))) {
+                            model.addModelObject(oMessage.value);
+                            updatedModel = true;
+
+                            CADScreenUpdates.put(model.getScreenNum(), true);
+                        }
+                    }
+                }
+                
+                if(updatedModel) {
+                    updateCADModel();
+                    
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.SCREEN_UPDATE, 
+                            CADScreenModel.updateMapToString(currentCADModel().screenUpdateMap))); 
+                    
+                    
+                }
+                break;
+                
+            case INCIDENT_BOARD:
+            
+                for(CADScreenModel model : CADScreensMap.values()) {
+                    if(model.getType() == CADScreenType.IB_INCIDENT_BOARD) {                        
+
+                        model.addModelObject(oMessage.value);           
+                        updatedModel = true;
+                    }
+                }
+            
+                if(updatedModel) {
+                    updateCADModel();
+                    
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.SCREEN_UPDATE, 
+                            CADScreenModel.updateMapToString(currentCADModel().screenUpdateMap))); 
+                }
+                
+                break;              
+
+            case ROUTED_MESSAGE:
+            
+                if(((CADRoutedMessage)oMessage.value).toPosition == CADPosition) { 
+                    messageMap.put((CADRoutedMessage)oMessage.value, false); 
+                    
+                    for(CADScreenNum screen : CADScreensMap.keySet()) {
+                        if(CADScreensMap.get(screen).getType() == CADScreenType.TO_ROUTED_MESSAGE) {
+                            ((RoutedMessageModel)CADScreensMap.get(screen)).addModelObject(oMessage.value);                                     
+                        }
+                    }
+                    
+                    updateCADModel();
+
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.ROUTED_MESSAGE, null));
+
+                }
+                
+                break;
+
+            case RESET_SIMULATION:
+                
+                for(CADScreenNum num : CADScreensMap.keySet()) {
+                    CADScreensMap.put(num, new BlankScreenModel(num));  
+
+                    currentCADScreenNum = num;
+                    CADScreenUpdates.put(num, false);
+                    
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+                }
+
+                updateCADModel();               
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.SCREEN_UPDATE, 
+                        CADScreenModel.updateMapToString(currentCADModel().screenUpdateMap))); 
+
+                //reset back to screen one
+                currentCADScreenNum = CADScreenNum.ONE;
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+                break;
+        }
+    }
+    
+
+    /**
+     * Set the command line in the current CAD model.
+     * 
+     * @param cmdLine New command line text.
+     */
+    public void receiveCommandLine(String cmdLine) {
+        getCurrentCADModel().commandLine = cmdLine;
+    }
+  
+   /**
+    * Receive a command from the CAD Client.  This method determines which 
+    * command was pushed, and then takes the correct action, determining 
+    * if the current CAD Screen needs update.  Each command that is pressed 
+    * is referenced by the keycode for the associated key.  These key codes 
+    * are defined in the CADProtocol class.  The following table shows the
+    * CAD Command and action.
+    *
+    *<table cellpadding="2" cellspacing="2" border="1"
+    * style="text-align: left; width: 250px;">
+    *  <tbody>
+    *    <tr>
+    *      <th>CAD Protocol Command<br></th>
+    *      <th>Action Taken<br></th>
+    *    </tr>
+    *    <tr>
+    *      <td>CYCLE</td>
+    *      <td>Set the currentCADScreenNum to the next screen number, set the screen update
+    *          value to false, update the current model, and notify observers to refresh the view.
+    *      </td>
+    *    </tr>
+    *    <tr>
+    *      <td>REFRESH</td>
+    *      <td>Set the screen update value to false, update the current model, 
+    *          and notify observers to refresh the view.</td>
+    *    </tr>
+    *    <tr>
+    *      <td>NEXT_QUEUE</td>
+    *      <td>If this terminal has not received any messages, do nothing.  If 
+    *          messages have been received, and the current CADScreen is 
+    *          showing the TO_ROUTED_MESSAGE screen, then call the model's 
+    *          nextQueue() method and notify observers to refresh their view.  
+    *          If messages have been received, but the current screen is not 
+    *          showing a routed message, then set the current cad screen model 
+    *          to the RoutedMessageModel with the received list of messages and 
+    *          notify observers.  Update the message map to show that the 
+    *          message has been viewd.  Update the unreadMessages flag to 
+    *          designate whether unread messages still exist for this CAD 
+    *          position.  Notify observers with the updated routed message info.</td>
+    *    </tr>
+    *    <tr>
+    *      <td>DELETE_QUEUE<br></td>
+    *      <td>If this terminal has not received any messages, do nothing.  
+    *          If the current CADScreen is showing a routed message, get the 
+    *          current message.  Remove this message from the current message map.
+    *          Also remove the message from all RoutedMessageModels that are 
+    *          being shown in a CAD Screen by calling the deleteQueue() method. 
+    *          Notify observers to refresh their view. 
+    *      </td>
+    *    </tr>
+    *    <tr>
+    *      <td>PREV_QUEUE<br></td>
+    *      <td>If this terminal has not received any messages, do nothing.  
+    *          If messages have been received, and the current CADScreen is 
+    *          showing the TO_ROUTED_MESSAGE screen, then call the model's 
+    *          prevQueue() method and notify observers to refresh their view.  
+    *          If messages have been received, but the current screen is not 
+    *          showing a routed message, then set the current cad screen model 
+    *          to the RoutedMessageModel with the received list of messages and 
+    *          notify observers.  Update the message map to show that the 
+    *          message has been viewd.  Update the unreadMessages flag to 
+    *          designate whether unread messages still exist for this CAD 
+    *          position.  Notify observers with the updated routed message info.
+    *      </td>
+    *    </tr>
+    *    <tr>
+    *      <td>SCREEN_CLEAR<br></td>
+    *      <td>Set the current model to the BlankScreenModel and notify observers
+    *          to refresh the view.</td>
+    *   </tr>
+    *  </tbody>
+    *</table>
+    *
+    *
+    * @param receivedCommand Integer value of the key that was pressed by client.
+    * @return true if the current CAD Screen needs updating.
+    */
+   public void receiveCommand(CAD_KEYS key) {
+      
+      switch (key) {
+       
+        case CYCLE: 
+           
+            currentCADScreenNum = currentCADScreenNum.next();   
+
+            CADScreenUpdates.put(currentCADScreenNum, false);
+                        
+            updateCADModel();
+            
+            setChanged();
+            notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+            break;
+            
+        case REFRESH:           
+
+            CADScreenUpdates.put(currentCADScreenNum, false);
+            
+            updateCADModel();
+            
+            setChanged();
+            notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+            break;
+
+        case  NEXT_QUEUE:
+
+            if(messageMap.size() > 0) {
+                if(currentCADModel().getType() == CADScreenType.TO_ROUTED_MESSAGE) {
+                    ((RoutedMessageModel)currentCADModel()).nextQueue();
+                }
+                else {
+                    LinkedList<CADRoutedMessage> messages = new LinkedList<CADRoutedMessage>();
+                    messages.addAll(messageMap.keySet());
+                    
+                    CADScreensMap.put(currentCADScreenNum, new RoutedMessageModel(
+                            currentCADScreenNum, messages));                    
+                }
+                
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+
+                
+                messageMap.put(((RoutedMessageModel)currentCADModel()).getCurrentMessage(), true);
+                currentCADModel().unreadMessages = messageMap.values().contains(new Boolean(false));
+
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.ROUTED_MESSAGE, null));
+            }
+
+            break;
+
+        case  DELETE_QUEUE:  
+
+            if(messageMap.size() > 0) {
+
+                if(currentCADModel().getType() == CADScreenType.TO_ROUTED_MESSAGE) {
+                    
+                    CADRoutedMessage delMsg = ((RoutedMessageModel)currentCADModel()).getCurrentMessage();
+                    
+                    messageMap.remove(delMsg);
+                    
+                    for(CADScreenNum screen : CADScreensMap.keySet()) {
+                        if(CADScreensMap.get(screen).getType() == CADScreenType.TO_ROUTED_MESSAGE) {
+                            ((RoutedMessageModel)CADScreensMap.get(screen)).deleteQueue(delMsg);
+                        }
+                    }                       
+
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null)); 
+                }
+            }
+            break;
+
+ 
+        case  PREV_QUEUE:                         
+            if(messageMap.size() > 0) {
+                if(currentCADModel().getType() == CADScreenType.TO_ROUTED_MESSAGE) {
+                    ((RoutedMessageModel)currentCADModel()).prevQueue();
+                }
+                else {
+                    LinkedList<CADRoutedMessage> messages = new LinkedList<CADRoutedMessage>();
+                    messages.addAll(messageMap.keySet());
+                    
+                    CADScreensMap.put(currentCADScreenNum, new RoutedMessageModel(
+                            currentCADScreenNum, messages));        
+
+                }
+                
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+
+
+                messageMap.put(((RoutedMessageModel)currentCADModel()).getCurrentMessage(), true);
+                currentCADModel().unreadMessages = messageMap.values().contains(new Boolean(false));
+                
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.ROUTED_MESSAGE, null));
+            }
+            break;
+
+        case  SCREEN_CLEAR: 
+            CADScreensMap.put(currentCADScreenNum, new BlankScreenModel(currentCADScreenNum));   
+            
+            setChanged();
+            notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+            break;
+        }
+
+    }   
+    
+    /**
+     * Handles a request for the current screen to show the IB_INCIDENT_BOARD screen.  
+     * Create a new IncidentBoardModel object and set its data with the Incident Board
+     * model data from the Coordinator.  Put the new model object into the CADScreensMap
+     * and notify observers to refresh the view.
+     * 
+     * There are no additional tokens that are read from the parameter node 
+     * when this command is received.
+     * 
+     * @param root (Not used)
+     */
+    public void incidentBoardRequest(Element root) {
+
+        IncidentBoardModel tempIB = new IncidentBoardModel(currentCADScreenNum);                        
+                    
+        //update with new information                   
+        for(IncidentBoardModel_obj ibmo : theCoordinator.getIncidentBoardModelObjects()) {
+            tempIB.addModelObject(ibmo);
+        }
+            
+        CADScreensMap.put(currentCADScreenNum, tempIB); 
+        CADScreenUpdates.put(currentCADScreenNum, false);
+            
+        setChanged();
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+
+    }
+    
+    /**
+     * Handles a request to update an existing incident.  The parameter XML node is parsed
+     * for the incident update data.  The following is an example of the received XML element.
+     * 
+     * <UPDATE_INCIDENT LOG_NUM="">
+     *    <DETAILS/> 
+     * </UPDATE_INCIDENT>
+     * 
+     * If the LOG_NUM attribute contains a value, then the user is attempting to update
+     * an incident that may or may not be currently viewed.  If this value does not
+     * match any current incidents, notify the observers with an INVALID_LOG error message.<br>
+     *
+     * If the LOG_NUM attribute is empty, then the user is attempting to modify the incident
+     * on the current screen.  If the current screen is not an II_INCIDENT_INQUIRY, then
+     * notify the observers with A NO_LOG_NUMBER error message. 
+     * 
+     * If the UPDATE_INCIDENT node contains <DETAILS> elements, parse the text content for
+     * each of these detail elements, creating IncidentInquiryDetails objects and adding
+     * them to a IncidentInquiryModel_obj, which is then sent to the Coordinator to update
+     * the incident.
+     * 
+     * If the ROOT node does not contain any <DETAILS> elements, then notify observers
+     * with an UNAUTH_CMD error message.
+     * 
+     * @param root XML document element containing incident update request data.
+     */ 
+    public void incidentUpdateRequest(Element root) {
+
+        /* UI.  or UI.###
+         * If it's a UI. check if we're in an II screen, if not error
+         * If UI.### add it to the log... can we check against what current log we're looking at???
+         * if so, we need to update it....
+         */              
+                
+        //ascertain if the next token is a number, if so, we're updating a specific log, else 
+        //updating the current log(assuming we're looking at one)
+        
+        IncidentInquiryModel_obj newIIobj = new IncidentInquiryModel_obj(CADPosition);
+            
+        String  parsedLogNumber = null;
+        Integer logNumber       = null;
+
+        NodeList detailList  = null;        
+        
+        parsedLogNumber = root.getAttribute(DATA_TAGS.LOG_NUM.tag);     
+        
+        if(parsedLogNumber.length() > 0) { //UI.### Format
+        
+            logNumber = Integer.parseInt(parsedLogNumber);
+            
+            //if doesn't exist, send INVALID_LOG error
+            if(!theCoordinator.incidentExists(logNumber)) {
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,
+                                                    CAD_ERROR.INVALID_LOG.message));    
+                                                    
+                return;     
+                                                    
+            }
+
+        }
+        else {  //UI. format
+            
+            //not looking at II, error
+            if(currentCADModel().getType() != CADScreenType.II_INCIDENT_INQUIRY) {                  
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,
+                                                        CAD_ERROR.NO_LOG_NUM.message));
+                return;
+            }
+            //looking at II, continue to update
+            else { 
+                logNumber = ((IncidentInquiryModel)currentCADModel()).getLogNumber();                               
+            }                       
+        }
+        
+        //TODO more than just details...
+        
+        detailList = root.getElementsByTagName(CAD_FIELD_CODES.DETAILS.fullName);       
+        if(detailList.getLength() > 0) {
+            for(int i = 0; i < detailList.getLength(); i++) {
+                Node detailNode = detailList.item(i);           
+                newIIobj.getDetails().add(new IncidentInquiryDetails(
+                        getLogInfo(), detailNode.getTextContent(), 
+                        Boolean.parseBoolean(detailNode.getAttributes().getNamedItem(
+                                DATA_TAGS.SENSITIVE.tag).getNodeValue())));
+            }
+            
+            newIIobj.setLogNumber(logNumber);           
+            
+            theCoordinator.commandLineUpdate(newIIobj);
+        }   
+        else {
+            setChanged();
+            notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,
+                                                CAD_ERROR.UNAUTH_CMD.message)); 
+            return;
+        }
+        
+    }
+    
+    /**
+     * Handles a request for the current screen to show the II_INCIDENT_INQUIRY screen.  
+     * The parameter XML node is parsed for the incident inquiry data.  The following 
+     * is an example of the received XML element.  <br>
+     * 
+     * <INCIDENT_INQUIRY>###</INCIDENT_INQUIRY> <br>
+     * 
+     * Parse the text content of the INCIDENT_INQUIRY node for the incident number that 
+     * is being inquired for.  If this incident does not exist, notify observers with an
+     * INVALID_LOG error message.  If the incident does exist, create a new 
+     * IncidentInquiryModel object and set its data with the Incident Inquiry 
+     * model data from the Coordinator.  Put the new model object into the CADScreensMap
+     * and notify observers to refresh the view.
+     * 
+     * @param root XML document element containing incident inquiry request data.
+     */ 
+    public void incidentInquiryRequest(Element root) {
+
+        Integer incidentNum = Integer.parseInt(root.getTextContent());
+                        
+        if(theCoordinator.incidentExists(incidentNum)) {
+                
+            IncidentInquiryModel tempII = new IncidentInquiryModel(currentCADScreenNum, incidentNum);
+            
+            for(IncidentInquiryModel_obj iimo : 
+                theCoordinator.getIncidentInquiryModelObjects(incidentNum))  {                          
+                tempII.addModelObject(iimo);
+            }
+                            
+            CADScreensMap.put(currentCADScreenNum, tempII);   
+            CADScreenUpdates.put(currentCADScreenNum, false);
+                
+            setChanged();
+            notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));             
+
+        }
+        else {
+            setChanged();
+            notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,
+                                                CAD_ERROR.INVALID_LOG.message));
+        }
+    }
+    
+    /**
+     * Handles a request for the current screen to show the SA_SUMMARY_BOARD screen. 
+     * Create a new IncidentSummaryModel object and set its data with the Incident Summary
+     * model data from the Coordinator.  Put the new model object into the CADScreensMap
+     * and notify observers to refresh the view.
+     * 
+     * @param root (not used)
+     */ 
+    public void incidentSummaryRequest(Element root) {
+        
+        IncidentSummaryModel tempSA = new IncidentSummaryModel(currentCADScreenNum);
+                
+        for(IncidentSummaryModel_obj ismo : 
+            theCoordinator.getIncidentSummaryModelObjects()) 
+                tempSA.addModelObject(ismo);    
+                
+        CADScreensMap.put(currentCADScreenNum, tempSA);  
+        CADScreenUpdates.put(currentCADScreenNum, false);
+        
+        setChanged();
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));                   
+
+    }
+    
+    /**
+     * (EI) - Enter Incident<br>
+     * 
+     * TODO  work on this.
+     */
+    public void enterIncidentRequest(Element root) {        
+
+        try {
+            Incident newIncident   = null;
+            IncidentEvent newEvent = null;;
+            
+            Long currentSimTime     = 0L;
+            Integer logNumber       = new Integer(0);
+            
+            NodeList detailList  = null;                    
+    
+            newEvent = new IncidentEvent(0);        
+    
+            detailList = root.getElementsByTagName(CAD_FIELD_CODES.DETAILS.fullName);       
+            if(detailList.getLength() > 0) {
+                for(int i = 0; i < detailList.getLength(); i++) {
+                    Node detailNode = detailList.item(i);           
+                    newEvent.eventInfo.getDetails().add(new IncidentInquiryDetails(getLogInfo(), 
+                            detailNode.getTextContent(),
+                            Boolean.parseBoolean(detailNode.getAttributes().getNamedItem(
+                                    DATA_TAGS.SENSITIVE.tag).getNodeValue())));
+                }               
+            }   
+            else {
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,
+                                                    CAD_ERROR.UNAUTH_CMD.message)); 
+                return;
+            }           
+            
+            for(Incident incident : theCoordinator.getIncidentList()) {
+                if(incident.getLogNumber() > logNumber)
+                    logNumber = incident.getLogNumber(); 
+            }
+            logNumber++;
+
+            currentSimTime = theCoordinator.getCurrentSimulationTime();
+    
+            newIncident = new Incident(logNumber, "", currentSimTime);
+            newIncident.addEvent(newEvent);
+            
+            //theCoordinator.addIncident(newIncident);      
+            
+        }
+        catch (RemoteException re) { /*we're not remote*/ }
+
+                    
+        setChanged();
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+
+    }
+
+    /**
+     * Handles a request to send a routed message.  The parameter XML node is 
+     * parsed for the routed message data. The following is an example of 
+     * the received XML element.
+     * 
+     * <ROUTED_MESSAGE>
+     *    <DESTINATION/> 
+     *    <MESSAGE/>
+     * </ROUTED_MESSAGE>
+     * 
+     * Parse the DESTINATION element for the CAD Position to receive the message.
+     * If a DESTINATION element does not exist, then notify observers with an UNAUTH_CMD 
+     * error message.
+     * 
+     * Parse the MESSAGE element for the message text.  If the MESSAGE element
+     * does not exist, then notify observers with an UNAUTH_CMD error message.
+     * 
+     * The parsed destination may be a comma-delimited string of CAD positions.
+     * Tokenize through the parsed string for all destinations and route a message
+     * to each of them with a new RoutedMessage object sent to the Coordinator.
+     * 
+     * Notify observers to refresh their current view.  If the current screen is an
+     * II_INCIDENT_INQUIRY, then a detail is to be added to the log.  Create
+     * an IncidentInquiryModel_obj and send it to the Coordinator as a command
+     * line update.
+     * 
+     * @param root XML document element containing incident update request data.
+     */ 
+    public void routedMessageRequest(Element root) { 
+
+        
+        String parsed_dest = "";
+        String message     = "";
+        
+        StringTokenizer destTok = null;
+        Vector<Integer> destinations = new Vector<Integer>();
+        boolean messageSent = false;
+        
+                
+        NodeList destList = root.getElementsByTagName(DATA_TAGS.DESTINATION.tag);
+        
+        if(destList.getLength() > 0) {
+            Node destNode = destList.item(0);               
+            parsed_dest   = destNode.getTextContent();
+        }   
+        else {
+            setChanged();
+            notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,
+                                                CAD_ERROR.UNAUTH_CMD.message));
+            return;
+        }           
+        
+
+        NodeList messageList = root.getElementsByTagName(DATA_TAGS.MESSAGE.tag);
+        
+        if(messageList.getLength() > 0) {
+            Node messageNode = messageList.item(0);             
+            message = messageNode.getTextContent();         
+        }   
+        else {
+            setChanged();
+            notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,
+                                                CAD_ERROR.UNAUTH_CMD.message));
+            return;
+        }                   
+        
+        destTok = new StringTokenizer(parsed_dest, ",");
+        
+        while(destTok.hasMoreTokens()) {
+            
+            try {
+                destinations.add(Integer.parseInt(destTok.nextToken()));
+            }
+            catch (NumberFormatException nfe) {
+                setChanged();
+                notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,
+                            CAD_ERROR.UNAUTH_CMD.message)); 
+                return;
+            }
+        }
+        
+        for(int dest : destinations) {
+            
+            if(CADPosition != dest) {
+
+                CADRoutedMessage newMessage = new CADRoutedMessage(CADPosition,
+                           dest, 
+                           message, 
+                           false);
+                
+                theCoordinator.routeMessage(newMessage);        
+                
+                messageSent = true;
+
+            }
+        }
+        setChanged();
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+        
+
+        setChanged();
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,
+                "0146: Routed message to " + parsed_dest + "."));
+        
+        
+        //If we sent a message and are looking at a CAD log, add a DETAIL as well
+        if(messageSent && getCurrentCADModel().getType() == CADScreenType.II_INCIDENT_INQUIRY) {
+            IncidentInquiryModel_obj newIIobj = new IncidentInquiryModel_obj(CADPosition);
+                        
+            newIIobj.getDetails().add(new IncidentInquiryDetails(getLogInfo(), message, true));             
+            newIIobj.setLogNumber(((IncidentInquiryModel)getCurrentCADModel()).getLogNumber());
+                
+            theCoordinator.commandLineUpdate(newIIobj);         
+        }
+
+    }
+    
+    /**
+     * Handles a request to log off the terminal.  All screens are reset with 
+     * a BlankScreenModel.  The current screen number is set to ONE.  All 
+     * screen updates and messages are cleared.  The model is then updated
+     * and Observers are notified ot refresh the view.
+     * 
+     * @param root (not used)
+     */
+    public void terminalOffRequest() {
+
+        for(CADScreenNum num : CADScreensMap.keySet()) {
+            CADScreensMap.put(num, new BlankScreenModel(num));
+        }
+            
+        currentCADScreenNum = CADScreenNum.ONE;
+        
+        CADScreenUpdates.clear();
+        
+        messageMap.clear();
+        
+        updateCADModel();
+        
+        setChanged();
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.REFRESH_VIEW, null));
+        
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/Coordinator.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/Coordinator.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/Coordinator.java	(revision 82)
@@ -0,0 +1,2437 @@
+package tmcsim.cadsimulator;
+
+import java.io.File;
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.Observer;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.table.DefaultTableModel;
+import javax.xml.parsers.SAXParserFactory;
+import tmcsim.cadmodels.CADRoutedMessage;
+import tmcsim.cadmodels.CMSInfo;
+import tmcsim.cadmodels.IncidentBoardModel_obj;
+import tmcsim.cadmodels.IncidentInquiryModel_obj;
+import tmcsim.cadmodels.IncidentInquiryUnitsAssigned;
+import tmcsim.cadmodels.IncidentSummaryModel_obj;
+import tmcsim.cadsimulator.db.CMSDiversionDB;
+import tmcsim.cadsimulator.managers.ATMSManager;
+import tmcsim.cadsimulator.managers.IncidentManager;
+import tmcsim.cadsimulator.managers.MediaManager;
+import tmcsim.cadsimulator.managers.ParamicsSimulationManager;
+import tmcsim.cadsimulator.managers.SimulationControlManager;
+import tmcsim.cadsimulator.viewer.model.CADSimulatorModel;
+import tmcsim.client.cadclientgui.CardfileReader;
+import tmcsim.client.cadclientgui.ScriptHandler;
+import tmcsim.client.cadclientgui.data.CADData;
+import tmcsim.client.cadclientgui.data.CardfileData;
+import tmcsim.client.cadclientgui.data.CardfileDataObject;
+import tmcsim.client.cadclientgui.data.CardfileList;
+import tmcsim.client.cadclientgui.data.ChangeLog;
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.client.cadclientgui.data.Unit;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.CARDFILE;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.EditCommand;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_ACTIVITIES;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_ADD_INFO;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_CALLBACK;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_CALLER;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_EDIT_LOG;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_GEN_INFO;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_INFO;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_LOC;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_PROBLEM;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_RESP;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_TABLE;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_TIMES;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_VAL;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.TABLE;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.UNIT_TAGS;
+import tmcsim.client.cadclientgui.enums.IncidentEnums;
+import tmcsim.client.cadclientgui.enums.UnitStatusEnums;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.CADEnums.SCRIPT_STATUS;
+import tmcsim.common.ObserverMessage;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.common.XMLIncident;
+import tmcsim.interfaces.CADClientInterface;
+import tmcsim.interfaces.CoordinatorInterface;
+import tmcsim.interfaces.SimulationManagerInterface;
+
+/**
+ * Coordinator is used to control and manage interactions between all CAD
+ * Simulator Managers. The Coordinator is also registered as an RMI Object to
+ * allow remote control and access to simulation data. A
+ * SimulationManagerInterface Object is used to provide communication to a
+ * remotely connected SimulationManager. Observers may register with the
+ * Coordinator to listen for simulation data updates.
+ *
+ * @see ATMSManager
+ * @see IncidentManager
+ * @see MediaManager
+ * @see ParamicsSimulationManager
+ * @see SimulationControlManager
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class Coordinator extends UnicastRemoteObject
+        implements CoordinatorInterface
+{
+    /**
+     * Error logger.
+     */
+    private Logger coorLogger = Logger.getLogger("tmcsim.cadsimulator");
+    /**
+     * List of all Observers that have been registered with the Coordinator. Due
+     * to being a remote object, Coordinator cannot extend the Observable class.
+     * Therefore, the list is managed manually.
+     */
+    private Vector<Observer> observerList = null;
+    /**
+     * Interface object for RMI communication with the Simulation Manager. Only
+     * one Simulation Manager may be connected at a time. When there is no
+     * connected Manager, this object is set to null.
+     */
+    private static SimulationManagerInterface managerInt = null;
+    private static LinkedList<CADClientInterface> clientList;
+    private static CADData cadData;
+    private static CardfileData cardfileData;
+    private CADSimulatorModel cadModel;
+
+    /**
+     * Constructor. Call UnicastRemoteObject constructor and call
+     * initializeSimulation.
+     *
+     * @throws RemoteException
+     */
+    public Coordinator(CADSimulatorModel model) throws RemoteException
+    {
+        super();
+        cadModel = model;
+        clientList = new LinkedList<CADClientInterface>();
+        cadData = new CADData();
+        cardfileData = new CardfileData();
+        try
+        {
+            CardfileReader cfr = new CardfileReader("scripts/Cardfile.xml", cardfileData);
+        } catch (Exception e)
+        {
+            System.out.println("Could not load cardfile script");
+        }
+
+        observerList = new Vector<Observer>();
+    }
+
+    /** Dependency Injection for testing */
+    void setCadData(CADData theData)
+    {
+        cadData = theData;
+    }
+    
+    public void registerForCallback(CADClientInterface client) throws RemoteException
+    {
+        clientList.add(client);
+        cadModel.connectClient();
+    }
+
+    public void unregisterForCallback(CADClientInterface client) throws RemoteException
+    {
+        clientList.remove(client);
+        cadModel.disconnectClient();
+    }
+
+    public void registerForCallback(SimulationManagerInterface simManInt) throws RemoteException
+    {
+        managerInt = simManInt;
+        cadModel.setSimManagerStatus(true);
+    }
+
+    public void unregisterForCallback(SimulationManagerInterface simManInt) throws RemoteException
+    {
+        managerInt = null;
+        cadModel.setSimManagerStatus(false);
+    }
+
+    public void startSimulation() throws RemoteException, ScriptException
+    {
+
+        if (!CADSimulator.theIncidentMgr.areIncidentsLoaded())
+        {
+            throw new ScriptException(ScriptException.NO_SCRIPT_LOADED);
+        }
+        else if (CADSimulator.theParamicsSimMgr.isConnected())
+        {
+            Runnable startRun = new Runnable()
+            {
+                public void run()
+                {
+                    try
+                    {
+                        setScriptStatus(SCRIPT_STATUS.ATMS_SYNCHRONIZATION);
+
+                        /* I have NO idea why this is needed. Why does it get the time from the remote
+                         * ATMS server instead of just our system time? Why does it need to sleep?
+                         * Is some process happening on the ATMS side that we need to wait for?
+                         */
+                        long currentATMSTime = CADSimulator.theATMSMgr.getCurrentTime();
+                        /* Seems like it waits 0-30 seconds, depending on what the time is on
+                         * the ATMS server.  Does something happen every 30 seconds over there?
+                         * Was it trying to make the Paramics time the same?
+                         */
+                        long sleepTime = ((60 * 1000) - (currentATMSTime % (60 * 1000))) % (30 * 1000);
+
+//                        coorLogger.logp(Level.INFO, "Coordinator", "StartSimulation",
+//                                "Sleeping for " + sleepTime / 1000 + " seconds.");
+                        // not needed   Thread.sleep(sleepTime);
+
+                        //currentATMSTime += sleepTime;
+                        //ParamicsCommunicator.getInstance().serverTime.setTimeInMillis(currentATMSTime);
+                    } catch (Exception e)
+                    {
+                        setScriptStatus(SCRIPT_STATUS.SCRIPT_RUNNING);
+
+                        coorLogger.logp(Level.SEVERE, "Coordinator", "StartSimulation:run",
+                                "Unable to connect to ATMS server.", e);
+                    } finally
+                    {
+                        CADSimulator.theSimulationCntrlMgr.startSimulation();
+                        CADSimulator.theParamicsSimMgr.startSimulation();
+                        CADSimulator.theSoundPlayer.setAudioEnabled(true);
+                    }
+                }
+            };
+
+            Thread startThread = new Thread(startRun);
+            startThread.start();
+        }
+        else
+        {
+            CADSimulator.theSimulationCntrlMgr.startSimulation();
+            CADSimulator.theSoundPlayer.setAudioEnabled(true);
+        }
+    }
+
+    public void pauseSimulation() throws RemoteException
+    {
+        CADSimulator.theSimulationCntrlMgr.pauseSimulation();
+        CADSimulator.theSoundPlayer.setAudioEnabled(false);
+    }
+
+    public void resetSimulation() throws RemoteException
+    {
+
+        CADSimulator.theIncidentMgr.resetIncidents();
+        cadData.resetSimulation();
+
+        CADSimulator.theSoundPlayer.setAudioEnabled(false);
+        CADSimulator.theSoundPlayer.deQueueAll();
+
+        cadModel.setTime(0);
+
+        setScriptStatus(SCRIPT_STATUS.SCRIPT_STOPPED_NOT_STARTED);
+
+        CMSDiversionDB.getInstance().resetDiversions();
+
+        CADSimulator.theSimulationCntrlMgr.resetSimulation();
+        CADSimulator.theParamicsSimMgr.resetSimulation();
+
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.RESET_SIMULATION, null));
+
+    }
+
+    public void gotoSimulationTime(final long newSimTime) throws RemoteException
+    {
+
+        boolean audioWasEnabled = CADSimulator.theSoundPlayer.getAudioEnabled();
+
+        CADSimulator.theSoundPlayer.setAudioEnabled(false);
+
+        long tempTime = 0;
+        while (tempTime < newSimTime)
+        {
+            tempTime++;
+
+            CADSimulator.theIncidentMgr.tick(tempTime);
+        }
+        CADSimulator.theSoundPlayer.setAudioEnabled(audioWasEnabled);
+
+
+        CADSimulator.theSimulationCntrlMgr.gotoSimulationTime(newSimTime);
+
+        Runnable gotoRun = new Runnable()
+        {
+            public void run()
+            {
+                cadModel.setTime(newSimTime);
+
+                if (managerInt != null)
+                {
+                    try
+                    {
+                        managerInt.tick(newSimTime);
+                    } catch (RemoteException re)
+                    {
+                        //Simulation Manager has disappeared
+                        managerInt = null;
+                        cadModel.setSimManagerStatus(false);
+
+                        coorLogger.logp(Level.SEVERE, "Coordinator", "gotoSimulationTime:run",
+                                "Connection to Simulation Manager has been dropped.", re);
+                    }
+                }
+            }
+        };
+
+        Thread gotoThread = new Thread(gotoRun);
+        gotoThread.start();
+
+    }
+
+    /**
+     * Sets the current script status. A thread is started to notify the
+     * CADSimulatorViewer and SimulationManager with the new status.
+     */
+    public void setScriptStatus(final SCRIPT_STATUS status)
+    {
+
+        Runnable updateRun = new Runnable()
+        {
+            public void run()
+            {
+
+                cadModel.setScriptStatus(status);
+
+                if (managerInt != null)
+                {
+                    try
+                    {
+                        managerInt.setScriptStatus(status);
+                    } catch (RemoteException re)
+                    {
+                        //Simulation Manager has disappeared
+                        managerInt = null;
+                        cadModel.setSimManagerStatus(false);
+
+                        coorLogger.logp(Level.SEVERE, "Coordinator", "setScriptStatus:run",
+                                "Connection to Simulation Manager has been dropped.", re);
+                    }
+                }
+            }
+        };
+
+        Thread updateThread = new Thread(updateRun);
+        updateThread.start();
+    }
+
+    /**
+     * Sets the current paramics status. A thread is started to notify the
+     * CADSimulatorViewer and SimulationManager with the new status.
+     */
+    public void setParamicsStatus(final PARAMICS_STATUS status)
+    {
+
+        Runnable updateRun = new Runnable()
+        {
+            public void run()
+            {
+                cadModel.setParamicsStatus(status);
+                // Is the update for network loaded event?
+                // Fixes defect where network ID is never displayed.
+                if (status == PARAMICS_STATUS.LOADED)
+                {
+                    try
+                    {
+                        // Then we need to tell the model it has a new network ID
+                        int currentNetwork = getParamicsNetworkLoaded();
+                        cadModel.setParamicsNetworkLoaded("" + currentNetwork);
+                    } catch (RemoteException ex)
+                    {
+                        coorLogger.logp(Level.SEVERE, "Coordinator", "setParamicsStatus:run",
+                                "Unable to get current network loaded", ex);
+                    }
+                }
+
+                if (managerInt != null)
+                {
+                    try
+                    {
+                        managerInt.setParamicsStatus(status);
+                    } catch (RemoteException re)
+                    {
+                        //Simulation Manager has disappeared
+                        managerInt = null;
+                        cadModel.setSimManagerStatus(false);
+
+                        coorLogger.logp(Level.SEVERE, "Coordinator", "setParamicsStatus:run",
+                                "Connection to Simulation Manager has been dropped.", re);
+                    }
+                }
+            }
+        };
+
+        Thread updateThread = new Thread(updateRun);
+        updateThread.start();
+
+    }
+
+    public void connectToParamics() throws RemoteException
+    {
+        CADSimulator.theParamicsSimMgr.connectToParamics();
+    }
+
+    public void disconnectFromParamics() throws RemoteException
+    {
+        CADSimulator.theParamicsSimMgr.disconnectFromParamics();
+    }
+
+    public void loadParamicsNetwork(int networkID) throws RemoteException, SimulationException
+    {
+        CADSimulator.theParamicsSimMgr.loadParamicsNetwork(networkID);
+    }
+
+    public PARAMICS_STATUS getParamicsStatus() throws RemoteException
+    {
+        return CADSimulator.theParamicsSimMgr.getParamicsStatus();
+    }
+
+    public int getParamicsNetworkLoaded() throws RemoteException
+    {
+        return CADSimulator.theParamicsSimMgr.getParamicsNetworkLoaded();
+    }
+
+    public long getCurrentSimulationTime() throws RemoteException
+    {
+        return CADSimulator.theSimulationCntrlMgr.getCurrentSimTime();
+    }
+
+    public void triggerIncident(Integer incidentNumber) throws RemoteException, ScriptException
+    {
+
+        if (!CADSimulator.theSimulationCntrlMgr.simulationStarted())
+        {
+            throw new ScriptException(ScriptException.SIM_NOT_STARTED);
+        }
+        else if (!CADSimulator.theIncidentMgr.areIncidentsLoaded())
+        {
+            throw new ScriptException(ScriptException.NO_SCRIPT_LOADED);
+        }
+
+        CADSimulator.theIncidentMgr.triggerIncident(incidentNumber,
+                CADSimulator.theSimulationCntrlMgr.getCurrentSimTime());
+    }
+
+    public void deleteIncident(Integer incidentNumber) throws RemoteException, ScriptException
+    {
+        CADSimulator.theIncidentMgr.deleteIncident(incidentNumber);
+
+        if (CADSimulator.theIncidentMgr.getIncidentList().size() == 0)
+        {
+            setScriptStatus(SCRIPT_STATUS.NO_SCRIPT);
+        }
+
+        if (managerInt != null)
+        {
+            try
+            {
+                managerInt.incidentRemoved(incidentNumber);
+            } catch (RemoteException re)
+            {
+                //Simulation Manager has disappeared
+                managerInt = null;
+                cadModel.setSimManagerStatus(false);
+
+                coorLogger.logp(Level.SEVERE, "Coordinator", "deleteIncident",
+                        "Connection to Simulation Manager has been dropped.", re);
+            }
+        }
+    }
+
+    public void rescheduleIncident(Integer incidentNumber, long newTime)
+            throws RemoteException, ScriptException
+    {
+
+        if (newTime < CADSimulator.theSimulationCntrlMgr.getCurrentSimTime())
+        {
+            throw new ScriptException(ScriptException.TIME_PASSED);
+        }
+
+        CADSimulator.theIncidentMgr.rescheduleIncident(incidentNumber, newTime);
+    }
+
+    public void addIncident(Incident newIncident) throws RemoteException
+    {
+
+        CADSimulator.theIncidentMgr.addIncident(newIncident);
+
+        if (managerInt != null)
+        {
+            try
+            {
+                managerInt.incidentAdded(newIncident);
+            } catch (RemoteException re)
+            {
+                //Simulation Manager has disappeared
+                managerInt = null;
+                cadModel.setSimManagerStatus(false);
+
+                coorLogger.logp(Level.SEVERE, "Coordinator", "addIncident",
+                        "Connection to Simulation Manager has been dropped.", re);
+            }
+        }
+    }
+
+    public void loadScriptFile(File scriptFile) throws RemoteException, ScriptException
+    {
+
+
+        try
+        {
+            CADSimulator.theIncidentMgr.clearIncidents();
+            cadData.clearData();
+
+            ScriptHandler sh = new ScriptHandler();
+
+            SAXParserFactory.newInstance().newSAXParser().parse(scriptFile, sh);
+
+            cadData.setIncidentsFromXML(sh.getIncidents());
+            cadData.setUnitsFromXML(sh.getUnits());
+            refreshClients();
+            CADSimulator.theIncidentMgr.addIncidents(sh.getIncidents());
+
+            resetSimulation();
+        } catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+
+    }
+
+    public Vector<Incident> getIncidentList() throws RemoteException
+    {
+        return CADSimulator.theIncidentMgr.getIncidentList();
+    }
+
+    public TreeMap<Integer, Vector<IncidentEvent>> getTriggeredEvents() throws RemoteException
+    {
+        return CADSimulator.theIncidentMgr.getTriggeredEvents();
+    }
+
+    public SCRIPT_STATUS getScriptStatus() throws RemoteException
+    {
+        if (CADSimulator.theIncidentMgr.areIncidentsLoaded())
+        {
+            if (CADSimulator.theSimulationCntrlMgr.simulationStarted())
+            {
+                return SCRIPT_STATUS.SCRIPT_RUNNING;
+            }
+            else
+            {
+                for (Incident inc : CADSimulator.theIncidentMgr.getIncidentList())
+                {
+                    if (inc.hasOccured() == true)
+                    {
+                        return SCRIPT_STATUS.SCRIPT_PAUSED_STARTED;
+                    }
+                }
+                return SCRIPT_STATUS.SCRIPT_STOPPED_NOT_STARTED;
+            }
+        }
+        return SCRIPT_STATUS.NO_SCRIPT;
+    }
+
+    /**
+     * Route a message to a CAD terminal. If the new message is an incident
+     * update, the current message text will be the requested incident's log
+     * number. Set the message's text to the XML representation of the requested
+     * IncidentInquiry object. Notify observers with the new message.
+     *
+     * @param newMessage Routed message received from CAD Client.
+     */
+    public void routeMessage(CADRoutedMessage newMessage)
+    {
+
+        //if this is an incidentUpdate
+        /*
+         * TODO  Is this a priority??
+         if(newMessage.incidentUpdate) {
+         IncidentInquiryModel tempII = new IncidentInquiryModel(
+         newMessage.fromPosition,
+         CADScreenNum.ONE,
+         Integer.parseInt(newMessage.message));
+
+         for(IncidentInquiryModel_obj iimo : getIncidentInquiryModelObjects(
+         Integer.parseInt(newMessage.message))) {
+         tempII.addModelObject(iimo);
+         }
+
+         XMLWriter tempWriter = new XMLWriter();
+         tempII.toXML(tempWriter);
+         newMessage.message = tempWriter.getString();
+         }
+         */
+
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.ROUTED_MESSAGE,
+                newMessage));
+
+    }
+
+    public TreeSet<String> getCMSIDs() throws RemoteException
+    {
+        return new TreeSet<String>(CMSDiversionDB.getInstance().getAllDiversions().keySet());
+    }
+
+    public CMSInfo getCMSDiversionInfo(String theCMSID) throws RemoteException
+    {
+        return CMSDiversionDB.getInstance().getDiversion(theCMSID);
+    }
+
+    public void applyDiversions(CMSInfo theDiversion) throws RemoteException
+    {
+        CMSDiversionDB.getInstance().updateDiversions(theDiversion);
+        CADSimulator.theParamicsSimMgr.updateDiversion(theDiversion);
+    }
+
+    /**
+     * Method updates the simulation with the new Incident information. The
+     * parameter IncidentInquiryModel_obj Object is used to create a new
+     * IncidentEvent Object which is finalized and sent to the IncidentManager
+     * for simulation updating.
+     *
+     * @param update IncidentInquiryModel_obj containing CAD line update
+     * @see IncidentManager
+     */
+    public void commandLineUpdate(IncidentInquiryModel_obj modelInfo)
+    {
+
+        long currentSimTime = CADSimulator.theSimulationCntrlMgr.getCurrentSimTime();
+
+        IncidentEvent triggeredEvent = new IncidentEvent(currentSimTime);
+        triggeredEvent.eventInfo = modelInfo;
+
+        triggeredEvent.finalizeEvent(currentSimTime, CADSimulator.getCADTime());
+
+        CADSimulator.theIncidentMgr.updateIncident(modelInfo.getLogNumber(), triggeredEvent);
+
+        updateIncidentInGUI(modelInfo.getLogNumber(), triggeredEvent);
+
+    }
+
+    /**
+     * If the Simulation has started, spawn a thread to update the
+     * CADSimulatorViewer, SimulationManager, and IncidentManager with the new
+     * simulation time. If the current time is a 30 second interval, notify the
+     * ParamicsControlManager to send an IncidentUpdate.
+     *
+     * @see SimulationControlManager
+     * @see ParamicsControlManager
+     * @see IncidentManager
+     */
+    public void tick()
+    {
+        if (CADSimulator.theSimulationCntrlMgr.simulationStarted())
+        {
+
+            final long currentSimTime = CADSimulator.theSimulationCntrlMgr.getCurrentSimTime();
+
+            Runnable timeRun = new Runnable()
+            {
+                public void run()
+                {
+                    cadModel.setTime(currentSimTime);
+
+                    //send an update every 30 seconds
+                    if (currentSimTime % 30 == 0)
+                    {
+                        CADSimulator.theParamicsSimMgr.sendIncidentUpdate(currentSimTime);
+                    }
+
+                    if (managerInt != null)
+                    {
+                        try
+                        {
+                            managerInt.tick(currentSimTime);
+                        } catch (RemoteException re)
+                        {
+                            //Simulation Manager has disappeared
+                            managerInt = null;
+                            cadModel.setSimManagerStatus(false);
+
+                            coorLogger.logp(Level.SEVERE, "Coordinator", "tick:run",
+                                    "Connection to Simulation Manager has been dropped.", re);
+                        }
+                    }
+
+                    CADSimulator.theIncidentMgr.tick(currentSimTime);
+                }
+            };
+
+            Thread timeThread = new Thread(timeRun);
+            timeThread.start();
+        }
+    }
+
+    /**
+     * Method notifies observers with an IncidentSummaryModel_obj to signify
+     * that a new Incident has started. Then spawn a thread to notify the
+     * SimulationManager with the Incident's log number has started.
+     *
+     * @param completedEvent Completed IncidentEvent.
+     */
+    public void incidentStarted(final IncidentEvent completedEvent)
+    {
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.INCIDENT_SUMMARY,
+                new IncidentSummaryModel_obj(completedEvent.eventInfo.getHeader())));
+
+        incidentStartedInGUI(completedEvent.eventInfo.getLogNumber());
+
+        Runnable startRun = new Runnable()
+        {
+            public void run()
+            {
+                if (managerInt != null)
+                {
+                    try
+                    {
+                        managerInt.incidentStarted(completedEvent.eventInfo.getLogNumber());
+                    } catch (RemoteException re)
+                    {
+                        //Simulation Manager has disappeared
+                        managerInt = null;
+                        cadModel.setSimManagerStatus(false);
+
+                        coorLogger.logp(Level.SEVERE, "Coordinator", "updateIncidents",
+                                "Connection to Simulation Manager has been dropped.", re);
+                    }
+                }
+            }
+        };
+
+        Thread startThread = new Thread(startRun);
+        startThread.start();
+    }
+
+    /**
+     * Method notifies observers with the IncidentEvent Object to signify that a
+     * new IncidentEvent has completed. All XMLIncident Objects in the completed
+     * IncidentEvent is sent to the ParamicsControlManager for transmission to
+     * Paramics. All CCTVInfo Objects are sent to the MediaManager for media
+     * control. A thread is then spawned to notify the SimulationManager with
+     * the completed IncidentEvent.
+     *
+     * @param completedEvent Completed IncidentEvent.
+     * @see ParamicsControlManager
+     * @see MediaManager
+     */
+    public void incidentUpdated(final IncidentEvent completedEvent)
+    {
+        notifyObservers(new ObserverMessage(ObserverMessage.messageType.INCIDENT_INQUIRY,
+                completedEvent.eventInfo));
+
+        for (XMLIncident xmlInc : completedEvent.XMLIncidents)
+        {
+            CADSimulator.theParamicsSimMgr.updateIncident(xmlInc);
+        }
+
+
+        /*for(CCTVInfo info : completedEvent.cctvInfos) {
+         CADSimulator.theMediaMgr.triggerIncident(info,
+         completedEvent.eventInfo.getLogNumber());
+         }*/
+
+        Runnable displayRun = new Runnable()
+        {
+            public void run()
+            {
+                if (managerInt != null)
+                {
+                    try
+                    {
+                        managerInt.eventOccured(
+                                completedEvent.eventInfo.getLogNumber(),
+                                completedEvent);
+                    } catch (RemoteException re)
+                    {
+                        //Simulation Manager has disappeared
+                        managerInt = null;
+                        cadModel.setSimManagerStatus(false);
+
+                        coorLogger.logp(Level.SEVERE, "Coordinator", "updateIncidents:run",
+                                "Connection to Simulation Manager has been dropped.", re);
+                    }
+                }
+            }
+        };
+
+        Thread displayThread = new Thread(displayRun);
+        displayThread.start();
+    }
+
+    /**
+     * @see IncidentManager
+     */
+    public boolean incidentExists(Integer logNumber)
+    {
+        return CADSimulator.theIncidentMgr.incidentExists(logNumber);
+    }
+
+    /**
+     * @see IncidentManager
+     */
+    public Vector<IncidentBoardModel_obj> getIncidentBoardModelObjects()
+    {
+        return CADSimulator.theIncidentMgr.getIncidentBoardModelObjects();
+    }
+
+    /**
+     * @see IncidentManager
+     */
+    public Vector<IncidentInquiryModel_obj> getIncidentInquiryModelObjects(Integer logNumber)
+    {
+        return CADSimulator.theIncidentMgr.getIncidentInquiryModelObjects(logNumber);
+    }
+
+    /**
+     * @see IncidentManager
+     */
+    public Vector<IncidentSummaryModel_obj> getIncidentSummaryModelObjects()
+    {
+        return CADSimulator.theIncidentMgr.getIncidentSummaryModelObjects();
+    }
+
+    /**
+     * Adds an observer to the list of observers.
+     *
+     * @param o New observer object.
+     */
+    public void addObserver(Observer o)
+    {
+        observerList.add(o);
+    }
+
+    /**
+     * Removes an observer from the list of observers. If the observer is not
+     * found, this method returns false, else true is returned for a successful
+     * removal.
+     *
+     * @param o Observer to be removed.
+     * @returns True if remove was successful, false if not.
+     */
+    public boolean removeObserver(Observer o)
+    {
+        return observerList.remove(o);
+    }
+
+    /**
+     * Notify all registered observers with the parameter ObserverMessage
+     * object.
+     *
+     * @param newMsg The ObserverMessage to be sent.
+     */
+    private void notifyObservers(ObserverMessage newMsg)
+    {
+        for (Observer o : observerList)
+        {
+            o.update(null, newMsg);
+        }
+    }
+
+    public void refreshClients() throws RemoteException
+    {
+        for (int i = 0; i < clientList.size(); i++)
+        {
+            clientList.get(i).refresh();
+        }
+    }
+
+    /**
+     * Checks the CADData for an existing incident with id
+     *
+     * @param id the incident id
+     * @return true if CADData contains such an incident, otherwise false.
+     * @throws RemoteException
+     */
+    public boolean checkForValidIncidentID(int id) throws RemoteException
+    {
+        return cadData.checkForValidId(id);
+    }
+
+    /**
+     * Uses an Incident's masterInc to lookup its ID.
+     *
+     * @param masterInc the Incident to look up
+     * @return the same Incident's ID, -1 if invalid masterInc
+     * @throws RemoteException
+     */
+    public int getIncidentId(String masterInc) throws RemoteException
+    {
+        return cadData.getIncidentId(masterInc);
+    }
+
+    /**
+     * Returns a table model out of CADData based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @throws RemoteException
+     */
+    public DefaultTableModel getCadDataTable(TABLE tag) throws RemoteException
+    {
+        if (tag.equals(TABLE.ASSIGNED_INCIDENTS))
+        {
+            return cadData.tableForAssignedIncidents();
+        }
+        else if (tag.equals(TABLE.UNIT_STATUS))
+        {
+            return cadData.tableForUnitStatus();
+        }
+        else if (tag.equals(TABLE.PENDING_INCIDENTS))
+        {
+            return cadData.tableForPendingIncidents();
+        }
+        else if (tag.equals(TABLE.INCIDENT_EDITOR))
+        {
+            return cadData.tableForIncidentEditor();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataTable");
+        }
+    }
+
+    /**
+     * Returns the specified incident's table based on the tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @return
+     * @throws RemoteException
+     */
+    public DefaultTableModel getCadDataIncidentTable(INC_TABLE tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_TABLE.COMMENTS_NOTES))
+        {
+            Incident myIncident = cadData.getIncident(incidentId);
+            if (myIncident == null) return new DefaultTableModel();
+            return myIncident.getCommentsNotesTable();
+        }
+        return null;
+    }
+
+    /**
+     * Adds a row of data to a specified incident's table based on the tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @fields the row of fields to add to the specified table
+     * @throws RemoteException
+     */
+    public void addCadDataIncidentTable(INC_TABLE tag, int incidentId, String[] fields) throws RemoteException
+    {
+        if (tag.equals(INC_TABLE.COMMENTS_NOTES))
+        {
+            cadData.getIncident(incidentId).addToCommentsNotesTable(fields);
+        }
+    }
+
+    /**
+     * Adds a row to the specified data table based on the incoming fields.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void addCadDataTableRow(TABLE tag, String field1, String field2, String field3, String field4) throws RemoteException
+    {
+    }
+
+    /**
+     * Returns an object out of Incident based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public Object getCadDataIncVal(INC_VAL tag, int incidentId) throws RemoteException
+    {
+        Incident current = cadData.getIncident(incidentId);
+        if (current != null)
+        {
+            if (tag.equals(INC_VAL.LOG_NUM))
+            {
+                return current.getLogNum();
+            }
+            else if (tag.equals(INC_VAL.MASTER_INC))
+            {
+                return current.getMasterInc();
+            }
+            else if (tag.equals(INC_VAL.OAU))
+            {
+                return current.getOau();
+            }
+            else if (tag.equals(INC_VAL.P))
+            {
+                return current.getP();
+            }
+            else if (tag.equals(INC_VAL.DESCRIPTION))
+            {
+                return current.getDescription();
+            }
+            else if (tag.equals(INC_VAL.RP))
+            {
+                return current.getRp();
+            }
+            else if (tag.equals(INC_VAL.RP_TYPE))
+            {
+                return current.getRpType();
+            }
+            else if (tag.equals(INC_VAL.ALI))
+            {
+                return current.getAli();
+            }
+            else if (tag.equals(INC_VAL.MEDIA))
+            {
+                return current.getMedia();
+            }
+            else
+            {
+                throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncVal");
+            }
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    /**
+     * Set incidentId's field based on tag to value.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncVal(INC_VAL tag, int incidentId, String value) throws RemoteException
+    {
+        if (tag.equals(INC_VAL.OAU))
+        {
+            cadData.getIncident(incidentId).setOau(value);
+        }
+        else if (tag.equals(INC_VAL.P))
+        {
+            cadData.getIncident(incidentId).setP(value);
+        }
+        else if (tag.equals(INC_VAL.DESCRIPTION))
+        {
+            cadData.getIncident(incidentId).setDescription(value);
+        }
+        else if (tag.equals(INC_VAL.RP))
+        {
+            cadData.getIncident(incidentId).setRp(value);
+        }
+        else if (tag.equals(INC_VAL.RP_TYPE))
+        {
+            cadData.getIncident(incidentId).setRpType(value);
+        }
+        else if (tag.equals(INC_VAL.ALI))
+        {
+            cadData.getIncident(incidentId).setAli(value);
+        }
+        else if (tag.equals(INC_VAL.MEDIA))
+        {
+            cadData.getIncident(incidentId).setMedia(value);
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.setCadDataIncVal");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentLocation based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncLoc(INC_LOC tag, int incidentId) throws RemoteException
+    {
+        Incident current = cadData.getIncident(incidentId);
+        if (current != null)
+        {
+            if (tag.equals(INC_LOC.ADDRESS))
+            {
+                return current.getIncidentLocation().getAddress();
+            }
+            else if (tag.equals(INC_LOC.LOC))
+            {
+                return current.getIncidentLocation().getLoc();
+            }
+            else if (tag.equals(INC_LOC.CITY))
+            {
+                return current.getIncidentLocation().getCity();
+            }
+            else if (tag.equals(INC_LOC.COUNTY))
+            {
+                return current.getIncidentLocation().getCounty();
+            }
+            else if (tag.equals(INC_LOC.STATE))
+            {
+                return current.getIncidentLocation().getState();
+            }
+            else if (tag.equals(INC_LOC.ZIP))
+            {
+                return current.getIncidentLocation().getZip();
+            }
+            else if (tag.equals(INC_LOC.BEAT))
+            {
+                return current.getIncidentLocation().getBeat();
+            }
+            else if (tag.equals(INC_LOC.AREA))
+            {
+                return current.getIncidentLocation().getArea();
+            }
+            else if (tag.equals(INC_LOC.SECTOR))
+            {
+                return current.getIncidentLocation().getSector();
+            }
+            else if (tag.equals(INC_LOC.SECTOR_CODE))
+            {
+                return current.getIncidentLocation().getSectorCode();
+            }
+            else if (tag.equals(INC_LOC.DIVISION))
+            {
+                return current.getIncidentLocation().getDivision();
+            }
+            else if (tag.equals(INC_LOC.APT))
+            {
+                return current.getIncidentLocation().getApt();
+            }
+            else if (tag.equals(INC_LOC.BUILDING))
+            {
+                return current.getIncidentLocation().getBuilding();
+            }
+            else if (tag.equals(INC_LOC.CROSS_ST))
+            {
+                return current.getIncidentLocation().getCrossSt();
+            }
+            else if (tag.equals(INC_LOC.LAW))
+            {
+                return current.getIncidentLocation().getLaw();
+            }
+            else if (tag.equals(INC_LOC.FIRE))
+            {
+                return current.getIncidentLocation().getFire();
+            }
+            else if (tag.equals(INC_LOC.EMS))
+            {
+                return current.getIncidentLocation().getEms();
+            }
+            else
+            {
+                throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncLoc");
+            }
+        }
+        else
+        {
+            return "";
+        }
+    }
+
+    /**
+     * Set incidentId's field based on tag to value.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncLoc(INC_LOC tag, int incidentId, String value) throws RemoteException
+    {
+        Incident current = cadData.getIncident(incidentId);
+        if (current != null)
+        {
+            if (tag.equals(INC_LOC.ADDRESS))
+            {
+                current.getIncidentLocation().setAddress(value);
+            }
+            else if (tag.equals(INC_LOC.LOC))
+            {
+                current.getIncidentLocation().setLoc(value);
+            }
+            else if (tag.equals(INC_LOC.CITY))
+            {
+                current.getIncidentLocation().setCity(value);
+            }
+            else if (tag.equals(INC_LOC.COUNTY))
+            {
+                current.getIncidentLocation().setCounty(value);
+            }
+            else if (tag.equals(INC_LOC.STATE))
+            {
+                current.getIncidentLocation().setState(value);
+            }
+            else if (tag.equals(INC_LOC.ZIP))
+            {
+                current.getIncidentLocation().setZip(value);
+            }
+            else if (tag.equals(INC_LOC.BEAT))
+            {
+                current.getIncidentLocation().setBeat(value);
+            }
+            else if (tag.equals(INC_LOC.AREA))
+            {
+                current.getIncidentLocation().setArea(value);
+            }
+            else if (tag.equals(INC_LOC.SECTOR))
+            {
+                current.getIncidentLocation().setSector(value);
+            }
+            else if (tag.equals(INC_LOC.SECTOR_CODE))
+            {
+                current.getIncidentLocation().setSectorCode(value);
+            }
+            else if (tag.equals(INC_LOC.DIVISION))
+            {
+                current.getIncidentLocation().setDivision(value);
+            }
+            else if (tag.equals(INC_LOC.APT))
+            {
+                current.getIncidentLocation().setApt(value);
+            }
+            else if (tag.equals(INC_LOC.BUILDING))
+            {
+                current.getIncidentLocation().setBuilding(value);
+            }
+            else if (tag.equals(INC_LOC.CROSS_ST))
+            {
+                current.getIncidentLocation().setCrossSt(value);
+            }
+            else if (tag.equals(INC_LOC.LAW))
+            {
+                current.getIncidentLocation().setLaw(value);
+            }
+            else if (tag.equals(INC_LOC.FIRE))
+            {
+                current.getIncidentLocation().setFire(value);
+            }
+            else if (tag.equals(INC_LOC.EMS))
+            {
+                current.getIncidentLocation().setEms(value);
+            }
+            else
+            {
+                throw new RemoteException("Wrong Enum sent into Coordinator.setCadDataIncLoc");
+            }
+        }
+        else
+        {
+            return;
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentCaller based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncCaller(INC_CALLER tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_CALLER.TYPE))
+        {
+            return cadData.getIncident(incidentId).getIncidentCaller().getCallerType();
+        }
+        else if (tag.equals(INC_CALLER.NAME))
+        {
+            return cadData.getIncident(incidentId).getIncidentCaller().getCallerName();
+        }
+        else if (tag.equals(INC_CALLER.PHONE))
+        {
+            return cadData.getIncident(incidentId).getIncidentCaller().getPhone();
+        }
+        else if (tag.equals(INC_CALLER.EXT))
+        {
+            return cadData.getIncident(incidentId).getIncidentCaller().getExt();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncCaller");
+        }
+    }
+
+    /**
+     * Set incidentId's field based on tag to value.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncCaller(INC_CALLER tag, int incidentId, String value) throws RemoteException
+    {
+        if (tag.equals(INC_CALLER.TYPE))
+        {
+            cadData.getIncident(incidentId).getIncidentCaller().setCallerType(value);
+        }
+        else if (tag.equals(INC_CALLER.NAME))
+        {
+            cadData.getIncident(incidentId).getIncidentCaller().setCallerName(value);
+        }
+        else if (tag.equals(INC_CALLER.PHONE))
+        {
+            cadData.getIncident(incidentId).getIncidentCaller().setPhone(value);
+        }
+        else if (tag.equals(INC_CALLER.EXT))
+        {
+            cadData.getIncident(incidentId).getIncidentCaller().setExt(value);
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.setCadDataIncCaller");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentProblem based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncProblem(INC_PROBLEM tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_PROBLEM.PROBLEM))
+        {
+            return cadData.getIncident(incidentId).getProblem().getProblem();
+        }
+        else if (tag.equals(INC_PROBLEM.CODE))
+        {
+            return cadData.getIncident(incidentId).getProblem().getProblemCode();
+        }
+        else if (tag.equals(INC_PROBLEM.PRIORITY))
+        {
+            return cadData.getIncident(incidentId).getProblem().getPriority();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncProblem");
+        }
+    }
+
+    /**
+     * Set incidentId's field based on tag to value.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncProblem(INC_PROBLEM tag, int incidentId, String value) throws RemoteException
+    {
+        if (tag.equals(INC_PROBLEM.PROBLEM))
+        {
+            cadData.getIncident(incidentId).getProblem().setProblem(value);
+        }
+        else if (tag.equals(INC_PROBLEM.CODE))
+        {
+            cadData.getIncident(incidentId).getProblem().setProblemCode(value);
+        }
+        else if (tag.equals(INC_PROBLEM.PRIORITY))
+        {
+            cadData.getIncident(incidentId).getProblem().setPriority(value);
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.setCadDataIncProblem");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentGeneralInfo based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncGenInfo(INC_GEN_INFO tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_GEN_INFO.JURISDICTION))
+        {
+            return cadData.getIncident(incidentId).getGenInfo().getJurisdiction();
+        }
+        else if (tag.equals(INC_GEN_INFO.ALARM))
+        {
+            return cadData.getIncident(incidentId).getGenInfo().getAlarm();
+        }
+        else if (tag.equals(INC_GEN_INFO.AGY))
+        {
+            return cadData.getIncident(incidentId).getGenInfo().getAgy();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncGenInfo");
+        }
+    }
+
+    /**
+     * Set incidentId's field based on tag to value.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncGenInfo(INC_GEN_INFO tag, int incidentId, String value) throws RemoteException
+    {
+        if (tag.equals(INC_GEN_INFO.JURISDICTION))
+        {
+            cadData.getIncident(incidentId).getGenInfo().setJurisdiction(value);
+        }
+        else if (tag.equals(INC_GEN_INFO.ALARM))
+        {
+            cadData.getIncident(incidentId).getGenInfo().setAlarm(value);
+        }
+        else if (tag.equals(INC_GEN_INFO.AGY))
+        {
+            cadData.getIncident(incidentId).getGenInfo().setAgy(value);
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.setCadDataIncGenInfo");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentResponse based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncResp(INC_RESP tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_RESP.PLAN))
+        {
+            return cadData.getIncident(incidentId).getResponse().getPlan();
+        }
+        else if (tag.equals(INC_RESP.AREA))
+        {
+            return cadData.getIncident(incidentId).getResponse().getArea();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncResp");
+        }
+    }
+
+    /**
+     * Set incidentId's field based on tag to value.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncResp(INC_RESP tag, int incidentId, String value) throws RemoteException
+    {
+        if (tag.equals(INC_RESP.PLAN))
+        {
+            cadData.getIncident(incidentId).getResponse().setPlan(value);
+        }
+        else if (tag.equals(INC_RESP.AREA))
+        {
+            cadData.getIncident(incidentId).getResponse().setArea(value);
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.setCadDataIncResp");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentAdditionalInfo based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncAddInfo(INC_ADD_INFO tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_ADD_INFO.TYPE))
+        {
+            return cadData.getIncident(incidentId).getAdditionalInfo().getType();
+        }
+        else if (tag.equals(INC_ADD_INFO.TYPE_CODE))
+        {
+            return cadData.getIncident(incidentId).getAdditionalInfo().getTypeCode();
+        }
+        else if (tag.equals(INC_ADD_INFO.MACHINE))
+        {
+            return cadData.getIncident(incidentId).getAdditionalInfo().getMachine();
+        }
+        else if (tag.equals(INC_ADD_INFO.CALL_STATUS))
+        {
+            return cadData.getIncident(incidentId).getAdditionalInfo().getCallStatus();
+        }
+        else if (tag.equals(INC_ADD_INFO.CALL_TAKER_EXT))
+        {
+            return cadData.getIncident(incidentId).getAdditionalInfo().getCallTakerExt();
+        }
+        else if (tag.equals(INC_ADD_INFO.ALARM_LEVEL))
+        {
+            return cadData.getIncident(incidentId).getAdditionalInfo().getAlarmLevel();
+        }
+        else if (tag.equals(INC_ADD_INFO.ROTATION_PROVIDER_AREA))
+        {
+            return cadData.getIncident(incidentId).getAdditionalInfo().getRotationProviderArea();
+        }
+        else if (tag.equals(INC_ADD_INFO.COMMENT))
+        {
+            return cadData.getIncident(incidentId).getAdditionalInfo().getComment();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncAddInfo");
+        }
+    }
+
+    /**
+     * Set incidentId's field based on tag to value.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncAddInfo(INC_ADD_INFO tag, int incidentId, String value) throws RemoteException
+    {
+        if (tag.equals(INC_ADD_INFO.TYPE))
+        {
+            cadData.getIncident(incidentId).getAdditionalInfo().setType(value);
+        }
+        else if (tag.equals(INC_ADD_INFO.TYPE_CODE))
+        {
+            cadData.getIncident(incidentId).getAdditionalInfo().setTypeCode(value);
+        }
+        else if (tag.equals(INC_ADD_INFO.MACHINE))
+        {
+            cadData.getIncident(incidentId).getAdditionalInfo().setMachine(value);
+        }
+        else if (tag.equals(INC_ADD_INFO.CALL_STATUS))
+        {
+            cadData.getIncident(incidentId).getAdditionalInfo().setCallStatus(value);
+        }
+        else if (tag.equals(INC_ADD_INFO.CALL_TAKER_EXT))
+        {
+            cadData.getIncident(incidentId).getAdditionalInfo().setCallTakerExt(value);
+        }
+        else if (tag.equals(INC_ADD_INFO.ALARM_LEVEL))
+        {
+            cadData.getIncident(incidentId).getAdditionalInfo().setAlarmLevel(value);
+        }
+        else if (tag.equals(INC_ADD_INFO.ROTATION_PROVIDER_AREA))
+        {
+            cadData.getIncident(incidentId).getAdditionalInfo().setRotationProviderArea(value);
+        }
+        else if (tag.equals(INC_ADD_INFO.COMMENT))
+        {
+            cadData.getIncident(incidentId).getAdditionalInfo().setComment(value);
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.setCadDataIncAddInfo");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentActivities based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncActivities(INC_ACTIVITIES tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_ACTIVITIES.VEHICLE))
+        {
+            return cadData.getIncident(incidentId).getActivities().getVehicle();
+        }
+        else if (tag.equals(INC_ACTIVITIES.ACTIVITY))
+        {
+            return cadData.getIncident(incidentId).getActivities().getActivity();
+        }
+        else if (tag.equals(INC_ACTIVITIES.LOCATION))
+        {
+            return cadData.getIncident(incidentId).getActivities().getLocation();
+        }
+        else if (tag.equals(INC_ACTIVITIES.COMMENT))
+        {
+            return cadData.getIncident(incidentId).getActivities().getComment();
+        }
+        else if (tag.equals(INC_ACTIVITIES.DISP))
+        {
+            return cadData.getIncident(incidentId).getActivities().getDisp();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncActivities");
+        }
+    }
+
+    /**
+     * Set incidentId's field based on tag to value.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public void setCadDataIncActivities(INC_ACTIVITIES tag, int incidentId, String value) throws RemoteException
+    {
+        if (tag.equals(INC_ACTIVITIES.VEHICLE))
+        {
+            cadData.getIncident(incidentId).getActivities().setVehicle(value);
+        }
+        else if (tag.equals(INC_ACTIVITIES.ACTIVITY))
+        {
+            cadData.getIncident(incidentId).getActivities().setActivity(value);
+        }
+        else if (tag.equals(INC_ACTIVITIES.LOCATION))
+        {
+            cadData.getIncident(incidentId).getActivities().setLocation(value);
+        }
+        else if (tag.equals(INC_ACTIVITIES.COMMENT))
+        {
+            cadData.getIncident(incidentId).getActivities().setComment(value);
+        }
+        else if (tag.equals(INC_ACTIVITIES.DISP))
+        {
+            cadData.getIncident(incidentId).getActivities().setDisp(value);
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.setCadDataIncActivities");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentCallback based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncCallBack(INC_CALLBACK tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_CALLBACK.INITIAL))
+        {
+            return cadData.getIncident(incidentId).getCallBacks().getInitial();
+        }
+        else if (tag.equals(INC_CALLBACK.COMMENT))
+        {
+            return cadData.getIncident(incidentId).getCallBacks().getComment();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncCallBack");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentEditLog based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncEditLog(INC_EDIT_LOG tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_EDIT_LOG.EDIT))
+        {
+            return cadData.getIncident(incidentId).getEditLog().getEdit();
+        }
+        else if (tag.equals(INC_EDIT_LOG.REASON))
+        {
+            return cadData.getIncident(incidentId).getEditLog().getReason();
+        }
+        else if (tag.equals(INC_EDIT_LOG.CHANGE_BY))
+        {
+            return cadData.getIncident(incidentId).getEditLog().getChangeBy();
+        }
+        else if (tag.equals(INC_EDIT_LOG.TERMINAL))
+        {
+            return cadData.getIncident(incidentId).getEditLog().getTerminal();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncEditLog");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentInfo based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncInfo(INC_INFO tag, int incidentId) throws RemoteException
+    {
+        if (tag.equals(INC_INFO.CALL_INITIATED))
+        {
+            return cadData.getIncident(incidentId).getInfo().getCallInit();
+        }
+        else if (tag.equals(INC_INFO.CALL_TAKEN))
+        {
+            return cadData.getIncident(incidentId).getInfo().getCallTaken();
+        }
+        else if (tag.equals(INC_INFO.TIME_IN_Q))
+        {
+            return cadData.getIncident(incidentId).getInfo().getTimeInQ();
+        }
+        else if (tag.equals(INC_INFO.LAST_UPDATED))
+        {
+            return cadData.getIncident(incidentId).getInfo().getLastUpdated();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataIncInfo");
+        }
+    }
+
+    /**
+     * Returns a string out of IncidentTimes based on tag.
+     *
+     * @param tag a CADDataEnums tag
+     * @param incidentId the incident's ID to look up
+     * @throws RemoteException
+     */
+    public String getCadDataIncTimes(INC_TIMES tag, int incidentId) throws RemoteException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /**
+     * Returns a CardfileList matching the tag.
+     */
+    public CardfileList getCardfileList(CARDFILE tag) throws RemoteException
+    {
+        if (tag.equals(CARDFILE.COASTAL_DIVISION_UNITS))
+        {
+            return cardfileData.getCoastalDivisionUnitList();
+        }
+        else if (tag.equals(CARDFILE.POLICE_SHERIFF_CORONER))
+        {
+            return cardfileData.getPoliceSheriffCoronerList();
+        }
+        else if (tag.equals(CARDFILE.COURTS))
+        {
+            return cardfileData.getCourtsList();
+        }
+        else if (tag.equals(CARDFILE.PUBLIC_TRANSPORTATION))
+        {
+            return cardfileData.getPublicTransportationList();
+        }
+        else if (tag.equals(CARDFILE.GG_OTHER))
+        {
+            return cardfileData.getGgOtherList();
+        }
+        else if (tag.equals(CARDFILE.MY_MISC))
+        {
+            return cardfileData.getMyMiscList();
+        }
+        else if (tag.equals(CARDFILE.SL_MISC))
+        {
+            return cardfileData.getSlMiscList();
+        }
+        else if (tag.equals(CARDFILE.VT_MISC))
+        {
+            return cardfileData.getVlMiscList();
+        }
+        else if (tag.equals(CARDFILE.CHP_OFFICES))
+        {
+            return cardfileData.getChpOfficesList();
+        }
+        else if (tag.equals(CARDFILE.STATE_AGENCIES_FACILITIES))
+        {
+            return cardfileData.getStateAgenciesFacilitiesList();
+        }
+        else if (tag.equals(CARDFILE.GOVERNMENT_OFFICIALS))
+        {
+            return cardfileData.getGovernmentOfficialsList();
+        }
+        else if (tag.equals(CARDFILE.FEDERAL_AGENCIES))
+        {
+            return cardfileData.getFederalAgenciesList();
+        }
+        else if (tag.equals(CARDFILE.RANCHES_LIVESTOCK))
+        {
+            return cardfileData.getRanchesLivestockList();
+        }
+        else if (tag.equals(CARDFILE.FIRE_EMS))
+        {
+            return cardfileData.getFireEmsList();
+        }
+        else if (tag.equals(CARDFILE.JAILS))
+        {
+            return cardfileData.getJailsList();
+        }
+        else if (tag.equals(CARDFILE.HOSPITALS_MED_CENTERS))
+        {
+            return cardfileData.getHospitalsMedCentersList();
+        }
+        else if (tag.equals(CARDFILE.TOW_COMPANIES))
+        {
+            return cardfileData.getTowCompaniesList();
+        }
+        else if (tag.equals(CARDFILE.CALTRANS))
+        {
+            return cardfileData.getCalTransList();
+        }
+        else if (tag.equals(CARDFILE.COUNTY_ROADS))
+        {
+            return cardfileData.getCountyRoadsList();
+        }
+        else if (tag.equals(CARDFILE.UTILITIES))
+        {
+            return cardfileData.getUtilitiesList();
+        }
+        else if (tag.equals(CARDFILE.ANIMAL_CONTROL))
+        {
+            return cardfileData.getAnimalControlList();
+        }
+        else if (tag.equals(CARDFILE.AIRPORTS))
+        {
+            return cardfileData.getAirportsList();
+        }
+        else if (tag.equals(CARDFILE.CREDIT_CARDS))
+        {
+            return cardfileData.getCreditCardsList();
+        }
+        else if (tag.equals(CARDFILE.GG_CRISIS_SHELTERS))
+        {
+            return cardfileData.getGgCrisisSheltersList();
+        }
+        else if (tag.equals(CARDFILE.RANGES))
+        {
+            return cardfileData.getRangesList();
+        }
+        else if (tag.equals(CARDFILE.HOTLINES))
+        {
+            return cardfileData.getHotlinesList();
+        }
+        else if (tag.equals(CARDFILE.HWY_PATROLS_OOS))
+        {
+            return cardfileData.getHwyPatrolsOosList();
+        }
+        else if (tag.equals(CARDFILE.PARKS_RECREATION))
+        {
+            return cardfileData.getParksRecreationList();
+        }
+        else if (tag.equals(CARDFILE.SHELTERS))
+        {
+            return cardfileData.getSheltersList();
+        }
+        else if (tag.equals(CARDFILE.SL_COUNTY_SERVICES))
+        {
+            return cardfileData.getSlCountyServicesList();
+        }
+        else if (tag.equals(CARDFILE.SL_RESOURCES))
+        {
+            return cardfileData.getSlResourcesList();
+        }
+        else if (tag.equals(CARDFILE.TRUCK_TIRE_REPAIR))
+        {
+            return cardfileData.getTruckTireRepairList();
+        }
+        else if (tag.equals(CARDFILE.MCC_EMPLOYEES))
+        {
+            return cardfileData.getMccEmployeesList();
+        }
+        else if (tag.equals(CARDFILE.GATE_ACCESS_CODES))
+        {
+            return cardfileData.getGateAccessCodesList();
+        }
+        else if (tag.equals(CARDFILE.VT_CALL_SIGNS))
+        {
+            return cardfileData.getVtCallSignsList();
+        }
+        else if (tag.equals(CARDFILE.SLCC_EMPLOYEES))
+        {
+            return cardfileData.getSlccEmployeesList();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.getCardfileList");
+        }
+    }
+
+    /**
+     * Receives the fields of the ChangeLog in Cardfile.java and uses those
+     * fields to make changes to its own copy of the Cardfiledata.
+     */
+    public void editCardfile(ChangeLog log) throws RemoteException
+    {
+
+        CardfileList selectedList;
+
+        if (log.listTitle.equals(CARDFILE.COASTAL_DIVISION_UNITS.tag))
+        {
+            selectedList = cardfileData.getCoastalDivisionUnitList();
+        }
+        else if (log.listTitle.equals(CARDFILE.POLICE_SHERIFF_CORONER.tag))
+        {
+            selectedList = cardfileData.getPoliceSheriffCoronerList();
+        }
+        else if (log.listTitle.equals(CARDFILE.COURTS.tag))
+        {
+            selectedList = cardfileData.getCourtsList();
+        }
+        else if (log.listTitle.equals(CARDFILE.PUBLIC_TRANSPORTATION.tag))
+        {
+            selectedList = cardfileData.getPublicTransportationList();
+        }
+        else if (log.listTitle.equals(CARDFILE.GG_OTHER.tag))
+        {
+            selectedList = cardfileData.getGgOtherList();
+        }
+        else if (log.listTitle.equals(CARDFILE.MY_MISC.tag))
+        {
+            selectedList = cardfileData.getMyMiscList();
+        }
+        else if (log.listTitle.equals(CARDFILE.SL_MISC.tag))
+        {
+            selectedList = cardfileData.getSlMiscList();
+        }
+        else if (log.listTitle.equals(CARDFILE.VT_MISC.tag))
+        {
+            selectedList = cardfileData.getVlMiscList();
+        }
+        else if (log.listTitle.equals(CARDFILE.CHP_OFFICES.tag))
+        {
+            selectedList = cardfileData.getChpOfficesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.STATE_AGENCIES_FACILITIES.tag))
+        {
+            selectedList = cardfileData.getStateAgenciesFacilitiesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.GOVERNMENT_OFFICIALS.tag))
+        {
+            selectedList = cardfileData.getGovernmentOfficialsList();
+        }
+        else if (log.listTitle.equals(CARDFILE.FEDERAL_AGENCIES.tag))
+        {
+            selectedList = cardfileData.getFederalAgenciesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.RANCHES_LIVESTOCK.tag))
+        {
+            selectedList = cardfileData.getRanchesLivestockList();
+        }
+        else if (log.listTitle.equals(CARDFILE.FIRE_EMS.tag))
+        {
+            selectedList = cardfileData.getFireEmsList();
+        }
+        else if (log.listTitle.equals(CARDFILE.JAILS.tag))
+        {
+            selectedList = cardfileData.getJailsList();
+        }
+        else if (log.listTitle.equals(CARDFILE.HOSPITALS_MED_CENTERS.tag))
+        {
+            selectedList = cardfileData.getHospitalsMedCentersList();
+        }
+        else if (log.listTitle.equals(CARDFILE.TOW_COMPANIES.tag))
+        {
+            selectedList = cardfileData.getTowCompaniesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.CALTRANS.tag))
+        {
+            selectedList = cardfileData.getCalTransList();
+        }
+        else if (log.listTitle.equals(CARDFILE.COUNTY_ROADS.tag))
+        {
+            selectedList = cardfileData.getCountyRoadsList();
+        }
+        else if (log.listTitle.equals(CARDFILE.UTILITIES.tag))
+        {
+            selectedList = cardfileData.getUtilitiesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.ANIMAL_CONTROL.tag))
+        {
+            selectedList = cardfileData.getAnimalControlList();
+        }
+        else if (log.listTitle.equals(CARDFILE.AIRPORTS.tag))
+        {
+            selectedList = cardfileData.getAirportsList();
+        }
+        else if (log.listTitle.equals(CARDFILE.CREDIT_CARDS.tag))
+        {
+            selectedList = cardfileData.getCreditCardsList();
+        }
+        else if (log.listTitle.equals(CARDFILE.GG_CRISIS_SHELTERS.tag))
+        {
+            selectedList = cardfileData.getGgCrisisSheltersList();
+        }
+        else if (log.listTitle.equals(CARDFILE.RANGES.tag))
+        {
+            selectedList = cardfileData.getRangesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.HOTLINES.tag))
+        {
+            selectedList = cardfileData.getHotlinesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.HWY_PATROLS_OOS.tag))
+        {
+            selectedList = cardfileData.getHwyPatrolsOosList();
+        }
+        else if (log.listTitle.equals(CARDFILE.PARKS_RECREATION.tag))
+        {
+            selectedList = cardfileData.getParksRecreationList();
+        }
+        else if (log.listTitle.equals(CARDFILE.SHELTERS.tag))
+        {
+            selectedList = cardfileData.getSheltersList();
+        }
+        else if (log.listTitle.equals(CARDFILE.SL_COUNTY_SERVICES.tag))
+        {
+            selectedList = cardfileData.getSlCountyServicesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.SL_RESOURCES.tag))
+        {
+            selectedList = cardfileData.getSlResourcesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.TRUCK_TIRE_REPAIR.tag))
+        {
+            selectedList = cardfileData.getTruckTireRepairList();
+        }
+        else if (log.listTitle.equals(CARDFILE.MCC_EMPLOYEES.tag))
+        {
+            selectedList = cardfileData.getMccEmployeesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.GATE_ACCESS_CODES.tag))
+        {
+            selectedList = cardfileData.getGateAccessCodesList();
+        }
+        else if (log.listTitle.equals(CARDFILE.VT_CALL_SIGNS.tag))
+        {
+            selectedList = cardfileData.getVtCallSignsList();
+        }
+        else if (log.listTitle.equals(CARDFILE.SLCC_EMPLOYEES.tag))
+        {
+            selectedList = cardfileData.getSlccEmployeesList();
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.editCardfileDataObject");
+        }
+
+        CardfileDataObject cfdo = cardfileData.getCardfileDataObject(selectedList, log.id);
+        if (cfdo != null && log.command.equals(EditCommand.NAME))
+        {
+            cfdo.setName(log.newValue);
+            selectedList.resort(cardfileData.getCardfileDataIndex(selectedList, log.id));
+        }
+        else if (cfdo != null && log.command.equals(EditCommand.ADDRESS))
+        {
+            cfdo.setAddress(log.newValue);
+        }
+        else if (cfdo != null && log.command.equals(EditCommand.CITY))
+        {
+            cfdo.setCity(log.newValue);
+        }
+        else if (cfdo != null && log.command.equals(EditCommand.STATE))
+        {
+            cfdo.setState(log.newValue);
+        }
+        else if (cfdo != null && log.command.equals(EditCommand.ZIP))
+        {
+            cfdo.setZip(log.newValue);
+        }
+        else if (cfdo != null && log.command.equals(EditCommand.PHONE1))
+        {
+            cfdo.setPhone1(log.newValue);
+        }
+        else if (cfdo != null && log.command.equals(EditCommand.PHONE2))
+        {
+            cfdo.setPhone2(log.newValue);
+        }
+        else if (cfdo != null && log.command.equals(EditCommand.FAX))
+        {
+            cfdo.setFax(log.newValue);
+        }
+        else if (log.command.equals(EditCommand.OBJECT_DELETE))
+        {
+            selectedList.removeDataObject(cardfileData.getCardfileDataIndex(selectedList, log.id));
+        }
+        else if (log.command.equals(EditCommand.OBJECT_ADD))
+        {
+            selectedList.addDataObject(log.newCardfileObject);
+        }
+        else if (log.command.equals(EditCommand.TABLE_ADD))
+        {
+            if (cfdo != null)
+            {
+                cfdo.addComment(log.tableFields);
+            }
+        }
+        else if (log.command.equals(EditCommand.TABLE_DELETE))
+        {
+            if (cfdo != null)
+            {
+                cfdo.removeComment(log.timeStamp);
+            }
+        }
+        else
+        {
+        }
+
+
+    }
+
+    /**
+     * Obtain a new unique ID for a cardfileDataObject.
+     */
+    public int obtainNewUniqueId() throws RemoteException
+    {
+        return cardfileData.obtainNewUniqueId();
+    }
+
+    /**
+     * Returns a value from Unit based on tag.
+     *
+     * @param unitNum the unitNum to look up
+     * @throws RemoteException
+     */
+    public UnitStatusEnums getCadDataUnitStatus(String unitNum) throws RemoteException
+    {
+        // Validate input parameter
+        if (unitNum.equals(""))
+        {
+            coorLogger.logp(Level.INFO, "Coordinator", "getCadDataUnitStatus",
+                        "Unitnum parameter is blank.", "Error");
+            return UnitStatusEnums.NotAssignable;
+        }
+        else
+        {
+            Unit desiredUnit = cadData.getUnit(unitNum);
+            // If it exists
+            if (desiredUnit != null)
+            {
+                // Fetch and return its status (an enum)
+                return desiredUnit.getUnitStatus();
+            }
+            else
+            {
+                return UnitStatusEnums.NotAssignable;
+            }
+        }
+    }
+
+    /**
+     * Returns a string field from Unit based on tag.
+     *
+     * @param tag a CADScriptTags tag
+     * @param unitNum the unitNum to look up
+     * @return a string value
+     * @throws RemoteException
+     */
+    public String getCadDataUnitValue(String unitNum, UNIT_TAGS tag) throws RemoteException
+    {
+        // Fetch unit, given it's string representation
+        Unit desiredUnit = cadData.getUnit(unitNum);
+        // If it exists
+        if (desiredUnit != null)
+        {
+            if (tag.equals(UNIT_TAGS.MASTER_INC_NUM))
+            {
+                return desiredUnit.getMasterInc();
+            }
+            else if (tag.equals(UNIT_TAGS.STATUS))
+            {
+                return desiredUnit.getStatus();
+            }
+            else if (tag.equals(UNIT_TAGS.OOS))
+            {
+                return desiredUnit.getOos();
+            }
+            else if (tag.equals(UNIT_TAGS.TYPE))
+            {
+                return desiredUnit.getType();
+            }
+            else if (tag.equals(UNIT_TAGS.CURR_LOC))
+            {
+                return desiredUnit.getCurrentLocation();
+            }
+            else if (tag.equals(UNIT_TAGS.DESTINATION))
+            {
+                return desiredUnit.getDestination();
+            }
+            else if (tag.equals(UNIT_TAGS.MISC_INFO))
+            {
+                return desiredUnit.getMisc();
+            }
+            else if (tag.equals(UNIT_TAGS.STACK))
+            {
+                return desiredUnit.getStack();
+            }
+            else if (tag.equals(UNIT_TAGS.AREA))
+            {
+                return desiredUnit.getArea();
+            }
+            else if (tag.equals(UNIT_TAGS.OFFICER))
+            {
+                return desiredUnit.getOfficer();
+            }
+            else if (tag.equals(UNIT_TAGS.BADGE_NUM))
+            {
+                return desiredUnit.getBadge();
+            }
+            else if (tag.equals(UNIT_TAGS.TIMER))
+            {
+                return desiredUnit.getTimerInString();
+            }
+            else if (tag.equals(UNIT_TAGS.OFFICE))
+            {
+                return desiredUnit.getOffice();
+            }
+            else if (tag.equals(UNIT_TAGS.P))
+            {
+                return desiredUnit.getP();
+            }
+            else if (tag.equals(UNIT_TAGS.AGY))
+            {
+                return desiredUnit.getAgy();
+            }
+            else if (tag.equals(UNIT_TAGS.ALIAS))
+            {
+                return desiredUnit.getAlias();
+            }
+            else
+            {
+                throw new RemoteException("Wrong Enum sent into Coordinator.getCadDataUnitValue");
+            }
+        }
+        else
+        {
+            coorLogger.logp(Level.INFO, "Coordinator", "getCadDataUnitValue",
+                    "Desired unit not found: " + unitNum
+                    + ". Proceeding with empty string value.", "Error");
+            return "";
+        }
+    }
+
+    /**
+     * Sets a field from Unit based on tag.
+     *
+     * @param tag a CADScriptTags tag
+     * @param unitNum the unitNum to look up
+     * @param value the new value to be set
+     * @throws RemoteException
+     */
+    public void setCadDataUnitValue(String unitNum, UNIT_TAGS tag, Object value) throws RemoteException
+    {
+        if (tag.equals(UNIT_TAGS.MASTER_INC_NUM))
+        {
+            cadData.getUnit(unitNum).setMasterInc((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.STATUS))
+        {
+            cadData.getUnit(unitNum).setStatus((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.OOS))
+        {
+            cadData.getUnit(unitNum).setOos((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.TYPE))
+        {
+            cadData.getUnit(unitNum).setType((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.CURR_LOC))
+        {
+            cadData.getUnit(unitNum).setCurrentLocation((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.DESTINATION))
+        {
+            cadData.getUnit(unitNum).setDestination((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.MISC_INFO))
+        {
+            cadData.getUnit(unitNum).setMisc((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.STACK))
+        {
+            cadData.getUnit(unitNum).setStack((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.AREA))
+        {
+            cadData.getUnit(unitNum).setArea((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.OFFICER))
+        {
+            cadData.getUnit(unitNum).setOfficer((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.BADGE_NUM))
+        {
+            cadData.getUnit(unitNum).setBadge((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.UNIT_STATUS))
+        {
+            cadData.getUnit(unitNum).setUnitStatus((UnitStatusEnums) value);
+        }
+        else if (tag.equals(UNIT_TAGS.OFFICE))
+        {
+            cadData.getUnit(unitNum).setOffice((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.P))
+        {
+            cadData.getUnit(unitNum).setP((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.AGY))
+        {
+            cadData.getUnit(unitNum).setAgy((String) value);
+        }
+        else if (tag.equals(UNIT_TAGS.ALIAS))
+        {
+            cadData.getUnit(unitNum).setAlias((String) value);
+        }
+        else
+        {
+            throw new RemoteException("Wrong Enum sent into Coordinator.setCadDataUnitValue");
+        }
+    }
+
+    /**
+     * Assigns a unit to the specified incident.
+     *
+     * @param unitNum the unitNum to look up
+     * @param id the incident id that this unit is assigned to.
+     * @throws RemoteException
+     */
+    public void setCadDataUnitAssignedId(String unitNum, int id) throws RemoteException
+    {
+        cadData.getUnit(unitNum).setAssignedIncidentId(id);
+    }
+
+    /**
+     * Adds a unit to the incident's list of assigned units.
+     *
+     * @param incidentId the incident
+     * @param assignedUnitNum the unit that's been assigned to the incident
+     * @throws RemoteException
+     */
+    public void addCadDataIncidentAssignedUnitNum(int incidentId, String assignedUnitNum) throws RemoteException
+    {
+        cadData.getIncident(incidentId).addAssignedUnitNum(assignedUnitNum);
+    }
+
+    /**
+     * Sets the specified incident to the specified status.
+     *
+     * @param incidentId the incident
+     * @param status the status of the incident
+     * @throws RemoteException
+     */
+    public void setCadDataIncidentStatus(int incidentId, IncidentEnums status) throws RemoteException
+    {
+        cadData.getIncident(incidentId).setIncidentStatus(status);
+    }
+
+    /**
+     * Returns a LinkedList containing entries that match the search string.
+     *
+     * @param search the string entry to be searched
+     * @return linked list of CardfileDataObjects matching search
+     */
+    public LinkedList<CardfileDataObject> getSearchList(String search) throws RemoteException
+    {
+        return cardfileData.getSearchList(search);
+    }
+
+    /**
+     * Updates the server database so clients can view additional informations
+     * as events complete
+     *
+     * @param incidentNumber the incident in which the event occurred
+     * @return completedEvent IncidentEvent with information to be added to
+     * server database
+     */
+    public void updateIncidentInGUI(Integer incidentNumber, IncidentEvent completedEvent)
+    {
+        updateDetailsInGUI(incidentNumber, completedEvent);
+        updateUnitsInGUI(incidentNumber, completedEvent);
+    }
+
+    /**
+     * Updates the server database so clients can view details as events
+     * complete
+     *
+     * @param incidentNumber the incident in which the event occurred
+     * @return completedEvent IncidentEvent with details to be added to server
+     * database
+     */
+    public void updateDetailsInGUI(Integer incidentNumber, IncidentEvent completedEvent)
+    {
+        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
+        DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
+        for (int i = 0; i < completedEvent.eventInfo.getDetails().size(); i++)
+        {
+            String[] fields =
+            {
+                dateFormat.format(new Date()),
+                timeFormat.format(new Date()),
+                "", "", completedEvent.eventInfo.getDetails().elementAt(i).details
+            };
+
+            try
+            {
+                addCadDataIncidentTable(INC_TABLE.COMMENTS_NOTES, incidentNumber, fields);
+            } catch (RemoteException e)
+            {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * Updates the server database so clients can view unit updates as events
+     * complete
+     *
+     * @param incidentNumber the incident in which the event occurred
+     * @return completedEvent IncidentEvent with unit updates to be added to
+     * server database
+     */
+    public void updateUnitsInGUI(Integer incidentNumber, IncidentEvent completedEvent)
+    {
+        for (int i = 0; i < completedEvent.eventInfo.getUnits().size(); i++)
+        {
+            IncidentInquiryUnitsAssigned unit = completedEvent.eventInfo.getUnits().get(i);
+            if (unit.statusType.equals("ENRT"))
+            {
+                cadData.unitAssignedToIncident(unit.beat, incidentNumber, unit.isPrimary);
+            }
+            else if (unit.statusType.equals("1097"))
+            {
+                cadData.unitArrivedAtIncidentScene(unit.beat, incidentNumber, unit.isPrimary);
+            }
+            else if (unit.statusType.equals("1098"))
+            {
+                cadData.unitAvailable(unit.beat);
+            }
+        }
+    }
+
+    /**
+     * Sets the specified incidentNumber to viewable in the GUI.
+     *
+     * @param incidentNumber the number of the Incident started
+     */
+    public void incidentStartedInGUI(Integer incidentNumber)
+    {
+        Date date = new Date();
+        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+        cadData.getIncident(incidentNumber).setLogTime(dateFormat.format(date));
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/SoundPlayer.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/SoundPlayer.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/SoundPlayer.java	(revision 82)
@@ -0,0 +1,293 @@
+package tmcsim.cadsimulator;
+
+import jaco.mp3.player.MP3Player;
+import java.applet.*;
+import java.io.File;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+
+/**
+ * SoundPlayer is used to play audio files associated with IncidentEvents that
+ * occur during a simulation. When the SoundPlayer has been enabled audio clips
+ * are enqueued by calling the enqueueClip() method. The audio files are played
+ * in order of receipt and when finished, the IncidentEvent is notified. Audio
+ * playing may be disabled or enabled through the setAudioEnabled() method.
+ * Disabling audio will cause a currently playing audio clip to stop and be
+ * requeued at the front of the queue. Re-enabling the audio will then continue
+ * playing all queued clips. The deQueueAll() method is used to clear the list
+ * of audio clips that have been queued.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version Date: 2006/06/06 20:46:41
+ * @author Nicolas Russo modified to play mp3 audio.
+ * @version 2016.07.03
+ */
+public class SoundPlayer extends Thread
+{
+
+    /**
+     * Error Logger.
+     */
+    private Logger soundLogger = Logger.getLogger("tmcsim.cadsimulator");
+    /**
+     * The base location that wav files are referenced from
+     */
+    private String baseAudioDir = "";
+    /**
+     * The private vector of audioClips used during a simulation
+     */
+    private Vector<AudioClipInfo> enqueuedClips = null;
+    /**
+     * The audio clip that is currently being played by the AudioPlayer.
+     */
+    private AudioClipInfo currentClip = null;
+    /**
+     * Audio stream for playing audio files.
+     */
+    private AudioClip clip = null;
+    private MP3Player mp3Player = null;
+    /**
+     * Flag to designate when an audio file is playing. This prevents multiple
+     * audio files from being played simultaneously. Flag is initialized to
+     * false.
+     */
+    private boolean audioPlaying = false;
+    /**
+     * Flag to designate whether audio playing is enabled. If audio is disabled,
+     * then enquque events will be ignored. Flag is initialized to false.
+     */
+    private boolean audioEnabled = false;
+    /**
+     * Timer used to pause audio player during an audio file.
+     */
+    private Timer timer = null;
+
+    /**
+     * Inner class used to contain the audio file's name and duration.
+     */
+    private class AudioClipInfo
+    {
+
+        String fileName;
+        int duration;
+        IncidentEvent theEvent;
+
+        AudioClipInfo(IncidentEvent ie)
+        {
+            fileName = ie.waveFile;
+            duration = ie.waveLength;
+            theEvent = ie;
+        }
+
+        AudioClipInfo(String name, int dur)
+        {
+            fileName = name;
+            duration = dur;
+            theEvent = null;
+        }
+
+        public void wavePlayed()
+        {
+            if (theEvent != null)
+            {
+                theEvent.wavePlayed();
+            }
+        }
+    }
+
+    /**
+     * Constructor. Establish the base file path for wav file referencing.
+     *
+     * @param wavFilePath Pathname for where the simulation wav files will be
+     * referenced.
+     */
+    public SoundPlayer(String baseFilePath)
+    {
+        baseAudioDir = baseFilePath;
+        audioPlaying = false;
+        audioEnabled = true;
+        timer = new Timer();
+        enqueuedClips = new Vector<AudioClipInfo>();
+    }
+
+    /**
+     * Add a audioClipInfo object to the audioClips Vector. The enqueued audio
+     * file will play when all previously enqueued audio files have been played.
+     * If audio is not enabled, the clip will not be queued, and the incident
+     * event will be notified that the audio clip has finished playing to allow
+     * the simulation to continue.
+     *
+     * @param ie The Incident Event to enqueue to the current list of events.
+     */
+    public void enqueueClip(IncidentEvent ie)
+    {
+
+        if (audioEnabled)
+        {
+            synchronized (enqueuedClips)
+            {
+                enqueuedClips.add(new AudioClipInfo(ie));
+            }
+        }
+        else
+        {
+            ie.wavePlayed();
+        }
+    }
+
+    /**
+     * Method called when user presses reset in simulation. All queued events
+     * need to be deQueued.
+     */
+    public void deQueueAll()
+    {
+        synchronized (enqueuedClips)
+        {
+            enqueuedClips.clear();
+        }
+    }
+
+    /**
+     * Get the current audio enabled status.
+     *
+     * @return True if enabled, false if disabled.
+     */
+    public boolean getAudioEnabled()
+    {
+        return audioEnabled;
+    }
+
+    /**
+     * Set the current audio enabled status. A false value will cause all
+     * enqueue events to be ignored. A currently playing audio file will be
+     * stopped and requeued. All other queued events will remain in the queue.
+     *
+     * @param enable True if enabling, false if disabling.
+     */
+    public void setAudioEnabled(boolean enable)
+    {
+
+        if (!enable)
+        {
+            timer.cancel();
+            if (clip != null)
+            {
+                clip.stop();
+            }
+            if (mp3Player != null)
+            {
+                mp3Player.stop();
+            }
+
+            if (currentClip != null)
+            {
+                enqueuedClips.add(0, currentClip);
+            }
+
+            audioPlaying = false;
+        }
+
+        audioEnabled = enable;
+    }
+
+    /**
+     * Method declaration for the Thread.run() method. While this thread is not
+     * interrupted, check if there are enqueued audio files. If so, remove the
+     * first one(FIFO) create an AudioClip object, and play the audio file. A
+     * timer tis then started for the duration of the audio file. When the timer
+     * expires the audioPlaying flag is reset to false and the corresponding
+     * incident event is notified of the audio file's completion.
+     */
+    public void run()
+    {
+        AudioClipInfo theClip = null;
+
+        while (!isInterrupted())
+        {
+
+            synchronized (enqueuedClips)
+            {
+                if (enqueuedClips.size() > 0 && !audioPlaying && audioEnabled)
+                {
+                    theClip = enqueuedClips.remove(0);
+                }
+            }
+
+            //if nothing to play, wait a second
+            if (theClip == null)
+            {
+                try
+                {
+                    Thread.sleep(1000);
+                } catch (Exception e)
+                {
+                }
+            }
+            else
+            {
+
+                try
+                {
+
+                    if (theClip.duration > 0)
+                    {
+                        String filename = baseAudioDir + theClip.fileName;
+                        String fileExt = filename.substring(filename.lastIndexOf('.'));
+                        File audioFile = new File(filename);
+
+                        if (audioFile.exists() && fileExt.equals(".mp3"))
+                        {
+                            mp3Player = new MP3Player(audioFile);
+                            mp3Player.play();
+                        }
+                        else if (audioFile.exists() && fileExt.equals(".wav"))
+                        {
+                            clip = Applet.newAudioClip(audioFile.toURI().toURL());
+                            clip.play();
+                        }
+                        else
+                        {
+                            throw new Exception();
+                        }
+                    }
+
+                    currentClip = theClip;
+                    audioPlaying = true;
+
+                    timer = new Timer();
+                    timer.schedule(new TimerTask()
+                    {
+                        public void run()
+                        {
+                            clipPlayed();
+                            audioPlaying = false;
+                        }
+                    }, theClip.duration * 1000);
+
+                    theClip = null;
+                } catch (Exception e)
+                {
+                    soundLogger.logp(Level.WARNING, "SoundPlayer", "run",
+                            "Unable to play audio file: " + baseAudioDir + theClip.fileName, e);
+
+                    theClip.theEvent.wavePlayed();
+                    theClip = null;
+                    timer.cancel();
+                }
+            }
+        }
+    }
+
+    /**
+     * Called when audio file finishes playing. Notifies the corresponding
+     * Incident Event that its audio file has finished playing.
+     */
+    private void clipPlayed()
+    {
+        currentClip.wavePlayed();
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/db/CCTVInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/db/CCTVInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/db/CCTVInfo.java	(revision 82)
@@ -0,0 +1,40 @@
+package tmcsim.cadsimulator.db;
+
+import tmcsim.common.CCTVDirections;
+
+/**
+ * CCTVInfo is a container class to hold a CCTV camera's id and direction.
+ */
+public class CCTVInfo implements Comparable<CCTVInfo> {
+    
+    /** CCTV Camera ID */
+    public int id;
+    
+    /** CCTV Camera Direction */
+    public CCTVDirections dir;
+    
+    public CCTVInfo(int newID, CCTVDirections newDir) {
+        id  = newID;
+        dir = newDir;
+    }
+
+    /**
+     * Determines equality by comparing id and direction.
+     */     
+    public boolean equals(Object o) {
+        return id == ((CCTVInfo)o).id &&
+               dir == ((CCTVInfo)o).dir;
+    }       
+
+    /** 
+     * If id is equal, compare according to direction, else compare id's.
+     */     
+    public int compareTo(CCTVInfo o ) {
+        if(id == o.id) {
+            return dir.compareTo(o.dir);
+        }
+        else {
+            return new Integer(id).compareTo(o.id);
+        }
+    }           
+}   
Index: /branches/trunk/src/tmcsim/cadsimulator/db/CMSDiversionDB.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/db/CMSDiversionDB.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/db/CMSDiversionDB.java	(revision 82)
@@ -0,0 +1,188 @@
+package tmcsim.cadsimulator.db;
+
+import java.util.TreeMap;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import tmcsim.cadmodels.CMSInfo;
+
+/**
+ * CMSDiversionDB is a singleton object that acts as a database containing 
+ * the CMS Diversion information.  The initial data is read in from an XML 
+ * file.  This object is accessed to get current CMS diversion information
+ * and to be updated with new diversions as they are set by the user.  
+ * Diversions may be reset to their original values (0) through the
+ * resetDiversions() method. 
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/14 00:12:38 $ $Revision: 1.4 $
+ */
+public class CMSDiversionDB {
+
+    /**
+     * Enumeration containing XML tag names used to parse the XML
+     * document containing information about CMS diversion control.
+     * @author Matthew Cechini
+     */
+    private static enum CMS_DB_TAGS {   
+        /** This is the top level tag. */
+        CMS           ("CMS"),
+        /** Individual diversion data. */
+        DIVERSION     ("DIVERSION"),
+        /** CMS ID. */
+        ID            ("ID"),
+        /** CMS Postmile. */
+        POSTMILE      ("POSTMILE"),
+        /** Diversion initial route. */
+        INIT_ROUTE    ("INIT_ROUTE"),
+        /** Diversion original path. */
+        ORIG_PATH     ("ORIG_PATH"),
+        /** Diversion new path. */
+        NEW_PATH      ("NEW_PATH"),
+        /** Diversion path. */
+        DIV_PATH      ("DIV_PATH"), 
+        /** Max diversion percentage. */
+        MAX_DIVERSION ("MAX_DIVERSION");
+        
+        /** XML Tag name. */
+        public String tag;
+        
+        private CMS_DB_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    /** The CMSDiversionDB Singleton. */
+    private static CMSDiversionDB theDB;
+    
+    /**
+     * The map of all CMSInfo Objects (value), referenced by a 
+     * CMS ID String(key).
+     */
+    private TreeMap<String, CMSInfo> diversionMap = null;
+    
+    
+    /** Constructor.  Initialize the diversion map. */
+    private CMSDiversionDB() {
+        diversionMap = new TreeMap<String, CMSInfo>();  
+    }
+    
+    /**
+     * Get the current instance of the CMS Diversion DB.  Construct the
+     * singleton if it has not yete been constructed.
+     */
+    public synchronized static CMSDiversionDB getInstance() {
+        
+        if(theDB == null)
+            theDB = new CMSDiversionDB();
+            
+        return theDB;
+    }
+    
+    /**
+     * Load the CMS Diversion map from an xml document, adhering to the 
+     * following schema: <br/>
+     * <CMS><br/>
+     *      <ID/><br/>
+     *      <POSTMILE/><br/>
+     *      <INIT_ROUTE/><br/>
+     *      <DIVERSION><br/>
+     *           <ORIG_PATH/><br/>
+     *           <NEW_PATH/><br/>
+     *           <DIV_PATH/><br/>
+     *           <MAX_DIVERSION/><br/>
+     *      </DIVERSION><br/>
+     *      
+     *      <DIVERSION/>...<br/>
+     * </CMS>
+     */
+    public void loadFromXML(Document newDoc) {
+        
+        Element rootElement      = newDoc.getDocumentElement();
+        Element cmsElement       = null;
+        Element diversionElement = null;
+        NodeList diversions      = null;
+        
+        CMSInfo cmsInfo = null;
+        String  cmsID   = null;
+        
+        
+        NodeList cms_signs  = rootElement.getElementsByTagName(CMS_DB_TAGS.CMS.tag);
+        
+        for(int i = 0; i < cms_signs.getLength(); i++) {
+            
+            cmsElement = (Element)cms_signs.item(i);
+            
+            cmsID = cmsElement.getElementsByTagName(CMS_DB_TAGS.ID.tag).item(0)
+                    .getTextContent();
+            
+            cmsInfo = diversionMap.get(cmsID);
+            
+            if (cmsInfo == null) {
+                cmsInfo = new CMSInfo(cmsID, new Float(cmsElement
+                        .getElementsByTagName(CMS_DB_TAGS.POSTMILE.tag).item(0)
+                        .getTextContent()), cmsElement.getElementsByTagName(
+                        CMS_DB_TAGS.INIT_ROUTE.tag).item(0).getTextContent());
+            }                   
+            
+            //parse diversions for CMS
+            diversions = cmsElement.getElementsByTagName(CMS_DB_TAGS.DIVERSION.tag);
+
+            for(int j = 0; j < diversions.getLength(); j++) {
+
+                diversionElement = (Element)diversions.item(j);
+                
+                cmsInfo.addNewDiversion(
+                        diversionElement.getElementsByTagName(CMS_DB_TAGS.ORIG_PATH.tag).item(0).getTextContent(),
+                        diversionElement.getElementsByTagName(CMS_DB_TAGS.NEW_PATH.tag).item(0).getTextContent(),
+                        diversionElement.getElementsByTagName(CMS_DB_TAGS.DIV_PATH.tag).item(0).getTextContent(),
+                        new Integer(diversionElement.getElementsByTagName(CMS_DB_TAGS.MAX_DIVERSION.tag).item(0).getTextContent()));
+                    
+            }
+            
+            diversionMap.put(cmsInfo.cmsID, cmsInfo);
+            
+        }               
+    }
+    
+    /**
+     * Get the current diversion information for the Diversion ID
+     *
+     * @param ID CMS ID key to get the corresponding CMSInfo object.
+     * @returns A CMSInfo object containing diversion info.  Returns null if the
+     * parameter ID does not exist.
+     */
+    public CMSInfo getDiversion(String ID) {
+        return diversionMap.get(ID);
+    }       
+    
+    /**
+     * Update the current diversions with the new CMSInfo object 
+     * by putting the parameter CMSInfo object into the local map.
+     * 
+     * @param theDiversion CMSInfo object containing updated diversions.
+     */
+    public void updateDiversions(CMSInfo theDiversion) {
+        diversionMap.put(theDiversion.cmsID, theDiversion);
+    }
+
+    /**
+     * Reset all CMSInfo objects.
+     */
+    public void resetDiversions() {
+        for(CMSInfo cms : diversionMap.values()) {
+            cms.reset();
+        }
+    }
+    
+    /**
+     * Get the CMS Diversion map.
+     *
+     * @returns The CMSInfo map.
+     */
+    public TreeMap<String, CMSInfo> getAllDiversions() {
+        return diversionMap;
+    }           
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/db/CADUserDB.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/db/CADUserDB.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/db/CADUserDB.java	(revision 82)
@@ -0,0 +1,116 @@
+package tmcsim.cadsimulator.db;
+
+import java.util.TreeMap;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import tmcsim.common.ScriptException;
+
+/**
+ * (Not used)
+ * @author Matthew Cechini
+ * @version
+ */
+public class CADUserDB {
+
+    public static enum PERMISSION_LEVEL { 
+        TMC     ("TMC"), 
+        CHP     ("CHP"),
+        UNKNOWN ("");
+    
+        private String level;
+    
+        private PERMISSION_LEVEL(String l) {
+            level = l;
+        }
+        
+        public static PERMISSION_LEVEL fromString(String l) {
+            for(PERMISSION_LEVEL pLevel : values()) {
+                if(pLevel.level.equals(l))
+                    return pLevel;
+            }
+            
+            return UNKNOWN;
+        }
+        
+    };
+    
+    private static enum DVD_TAGS {
+        
+        /** Top level tag. */
+        CAD_USERS  ("CAD_USERS"),
+        /** CAD User info. */   
+        USER       ("USER"),
+        /** User ID. */ 
+        ID         ("ID"),
+        /** DVD player address. */
+        PERMISSION ("PERMISSION_LEVEL");
+        
+        public String tag;
+        
+        private DVD_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /** Error Logger. */
+    //private Logger userLogger = Logger.getLogger("tmcsim.cadsimulator.db");
+    
+    private TreeMap<String, PERMISSION_LEVEL> userPermissionsMap;
+    
+    public CADUserDB() {
+        userPermissionsMap = new TreeMap<String, PERMISSION_LEVEL>();
+    }
+    
+    public PERMISSION_LEVEL getUserPermissionLevel(String userID) {
+        //exists??
+        
+        return userPermissionsMap.get(userID);
+    }
+    /**
+     * Load the DVD Player map from an xml document, adhering to the 
+     * following schema: <br>
+     * <DVD_PLAYERS> <br>
+     *   <DVD_PLAYER type="" host="" port="">
+     *      <CCTV id="" dir=""/>
+     *      <INCIDENT log_num="" title="" duration=""/>
+     *      <RANGE min_speed="" max_speed="" title="" duration=""/>
+     (   </DVD_PLAYER>
+     *</DVD_PLAYERS> <br>
+     *
+     * @param newDoc The XML document containing the DVD player 
+     *               registration information.
+     * @throws ScriptException if there is an error in parsing the node.
+     */
+    public void loadFromXML(Document newDoc) throws ScriptException {
+        
+        //temporary variables
+        Element rootElement       = newDoc.getDocumentElement();                
+        Element userElement       = null;
+        Element idElement         = null;
+        Element permissionElement = null;
+        
+        String userID             = null;
+        PERMISSION_LEVEL pLevel   = null;
+        
+        NodeList users = rootElement.getElementsByTagName(DVD_TAGS.USER.tag);
+    
+        for(int i = 0; i < users.getLength(); i++) {
+        
+            userElement = (Element)users.item(i);
+                                
+            idElement = (Element)userElement.getFirstChild();
+            userID    = idElement.getTextContent();
+            
+            permissionElement = (Element)idElement.getNextSibling();
+            pLevel            = PERMISSION_LEVEL.fromString(permissionElement.getTextContent());
+
+            if(pLevel != PERMISSION_LEVEL.UNKNOWN)
+                userPermissionsMap.put(userID, pLevel);
+            
+        }               
+        
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/db/DVDPlayerDB.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/db/DVDPlayerDB.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/db/DVDPlayerDB.java	(revision 82)
@@ -0,0 +1,234 @@
+package tmcsim.cadsimulator.db;
+
+
+import java.io.IOException;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import tmcsim.cadsimulator.videocontrol.DVDController;
+import tmcsim.cadsimulator.videocontrol.DVDIncident;
+import tmcsim.cadsimulator.videocontrol.DVDRange;
+import tmcsim.common.CCTVDirections;
+import tmcsim.common.ScriptException;
+
+/**
+ * DVDPlayerDB acts as a database containing the information 
+ * for each dvd player and the cameras whose playback is found on that 
+ * player.  The "Database" of dvd players and information is created by
+ * calling the loadFromXML() method with a valid XML document.  DVD players
+ * are "queried" according to the corresponding CCTV camera ID and direction
+ * whose video is represented on that DVD.  
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 22:33:20 $ $Revision: 1.4 $
+ */
+public class DVDPlayerDB extends Observable implements Observer {   
+
+    /** Error Logger. */
+    private static Logger dvdLogger = Logger.getLogger("tmcsim.cadsimulator.db");
+    
+    /**
+     * Enumeration containing XML tag names used to parse the XML
+     * document containing information about DVD Title control.
+     * @author Matthew Cechini
+     */
+    private static enum DVD_TAGS {      
+        /** Top level tag. */
+        DVD_PLAYERS ("DVD_PLAYERS"),
+        /** DVD player info. */ 
+        DVD_PLAYER ("DVD_PLAYER"),
+        /** DVD player type. */ 
+        TYPE         ("type"),
+        /** DVD player address. */
+        HOST         ("host"),
+        /** DVD player port. */
+        PORT         ("port"),
+        /** CCTV camera info. */
+        CCTV         ("CCTV"),
+        /** CCTV camera id. */
+        ID           ("id"),
+        /** CCTV camera direction. */
+        DIRECTION    ("dir"),
+        /** Incident title info. */
+        INCIDENT     ("INCIDENT"),
+        /** Log number of an incident title. */
+        LOG_NUM      ("log_num"),       
+        /** Speed range mapping to a title number. */
+        RANGE        ("RANGE"),
+        /** Minimum speed in a range. */
+        MIN_SPEED    ("min_speed"),
+        /** Maximum speed in a range. */
+        MAX_SPEED    ("max_speed"),
+        /** Title name. */
+        TITLE        ("title");
+        
+        /** XML Tag Name */
+        public String tag;
+        
+        private DVD_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+
+    /**
+     * The map containing all current CCTV Camera IDs(key) and the corresponding 
+     * DVD Controller(value) that have been registered with the system.
+     */
+    private TreeMap<CCTVInfo, DVDController> dvdPlayerMap = null;
+    
+    /**
+     * Constructor.  Initialize the DVD Controller map.
+     */
+    public DVDPlayerDB() {
+        dvdPlayerMap = new TreeMap<CCTVInfo, DVDController>();  
+    }
+
+    /**
+     * Implementation of the Observer update() method.  All received update
+     * objects are sent to Observers of this DB.
+     */
+    public void update(Observable o, Object arg) {
+        setChanged();
+        notifyObservers(arg);
+    }
+    
+    /**
+     * Load the DVD map from an xml document, adhering to the 
+     * following schema.  When parsing has finished, the map of 
+     * DVDController and CCTVInfo objects will contain objects 
+     * representing all control objects specified in the XML.  
+     * A connection to each DVD controller will be automatically
+     * started after parsing has completed.<br>
+     * 
+     * <DVD_PLAYERS> <br>
+     *   <DVD_PLAYER type="" host="" port="">
+     *      <CCTV id="" dir=""/>
+     *      <INCIDENT log_num="" title="" duration=""/>
+     *      <RANGE min_speed="" max_speed="" title="" duration=""/>
+     (   </DVD_PLAYER>
+     *</DVD_PLAYERS> <br>
+     *
+     * @param newDoc The XML document containing the DVD player 
+     *               registration information.
+     * @throws ScriptException if there is an error in parsing the node.
+     */
+    public void loadFromXML(Document newDoc) throws ScriptException {
+        
+        //temporary variables
+        Element rootElement     = newDoc.getDocumentElement();              
+        Element playerElement   = null;
+        Element cctvElement     = null;
+        Element rangeElement    = null;
+        Element incidentElement = null;
+        
+        Integer cctvID                = null;
+        CCTVDirections  cctvDirection = null;
+        DVDController theController   = null;
+        
+        NodeList players   = rootElement.getElementsByTagName(DVD_TAGS.DVD_PLAYER.tag);
+        NodeList ranges    = null;
+        NodeList incidents = null;
+        
+    
+        for(int i = 0; i < players.getLength(); i++) {
+        
+            playerElement = (Element)players.item(i);
+            
+            try {
+                theController = (DVDController)Class.forName(
+                    "tmcsim.cadsimulator.videocontrol." + playerElement.getAttribute(
+                            DVD_TAGS.TYPE.tag)).newInstance();
+                theController.addObserver(this);
+            }
+            catch (Exception e) {
+                dvdLogger.logp(Level.SEVERE, "DVDPlayerDB", "loadFromXML", 
+                        "Error in instantiating DVD Controller", e);
+                continue;
+            }
+            
+            theController.setConnectionInfo(playerElement.getAttribute(
+                    DVD_TAGS.HOST.tag),
+                    Integer.parseInt(playerElement.getAttribute(
+                            DVD_TAGS.PORT.tag)));
+                    
+            cctvElement   = (Element)playerElement.getElementsByTagName(
+                    DVD_TAGS.CCTV.tag).item(0);
+            cctvID        = Integer.parseInt(cctvElement.getAttribute(
+                    DVD_TAGS.ID.tag));
+            cctvDirection = CCTVDirections.fromChar(cctvElement.getAttribute(
+                    DVD_TAGS.DIRECTION.tag).charAt(0));
+            
+            ranges    = playerElement.getElementsByTagName(DVD_TAGS.RANGE.tag);     
+            incidents = playerElement.getElementsByTagName(DVD_TAGS.INCIDENT.tag);
+                        
+            for(int j = 0; j < ranges.getLength(); j++) {
+                rangeElement = (Element)ranges.item(j);
+                
+                theController.addRange(new DVDRange(
+                        Float.parseFloat(rangeElement.getAttribute(
+                                DVD_TAGS.MIN_SPEED.tag)),
+                        Float.parseFloat(rangeElement.getAttribute(
+                                DVD_TAGS.MAX_SPEED.tag)),
+                        Integer.parseInt(rangeElement.getAttribute(
+                                DVD_TAGS.TITLE.tag))));
+            }
+            
+            for(int j = 0; j < incidents.getLength(); j++) {
+                incidentElement = (Element)incidents.item(j);
+                
+                theController.addIncident(new DVDIncident(
+                        Integer.parseInt(incidentElement.getAttribute(
+                                DVD_TAGS.LOG_NUM.tag)),
+                        Integer.parseInt(incidentElement.getAttribute(
+                                DVD_TAGS.TITLE.tag))));
+            }
+            
+            dvdPlayerMap.put(new CCTVInfo(cctvID, cctvDirection), theController);
+            
+        }               
+        
+        //Thread the connection of DVD controllers so that initialization does not hang.
+        Runnable connect = new Runnable() {
+
+            public void run() {
+                for(DVDController controller : dvdPlayerMap.values()) {
+                    try {
+                        controller.connect();
+                    }
+                    catch (IOException ioe) {
+                        dvdLogger.logp(Level.SEVERE, "DVDPlayerDB", "loadFromXML:runnable", 
+                                "IOException in connecting DVD " + 
+                                controller.getConnectionInfo(), ioe);
+                    }   
+                }           
+            }                       
+        };
+        
+        Thread connectThread = new Thread(connect);
+        connectThread.start();
+    }
+
+    /**
+     * Gets the DVDController for a registered camera.  DVDControllers
+     * are referenced by the Camera ID and direction.
+     *
+     * @param cctv_id CCTV camera id
+     * @param dir CCTV camera direction
+     * 
+     * @return Returns the DVDController object corresponding with the parameter 
+     * camera values.  Returns null if no corresponding DVD Controller is found.
+     */ 
+    public DVDController getController(Integer cctv_id, CCTVDirections dir) {
+        return dvdPlayerMap.get(new CCTVInfo(cctv_id, dir));
+    }
+    
+        
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/db/StillImagesDB.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/db/StillImagesDB.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/db/StillImagesDB.java	(revision 82)
@@ -0,0 +1,184 @@
+package tmcsim.cadsimulator.db;
+
+import java.util.Observable;
+import java.util.Observer;
+import java.util.TreeMap;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import tmcsim.cadsimulator.managers.ATMSManager;
+import tmcsim.cadsimulator.stillimagecontrol.ImageController;
+import tmcsim.cadsimulator.stillimagecontrol.ImageIncident;
+import tmcsim.cadsimulator.stillimagecontrol.ImageRange;
+import tmcsim.common.CCTVDirections;
+import tmcsim.common.ScriptException;
+
+/**
+ * StilImagesDB acts as a repository for all StillImage data read during 
+ * initialization.  An xml file read at startup details which CCTV cameras 
+ * will be monitored during the simulator.  An ImageController object is 
+ * created for each camera, uniquely identified by an ID and direction.
+ * Each camera is also registered with a list of speed ranges and/or incidents 
+ * for which the ImageController will perform needed action to swap images on 
+ * the ATMS server.
+ * 
+ * TODO Observer/Observable 
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class StillImagesDB extends Observable implements Observer {
+
+    /**
+     * Enumeration containing XML tag names used to parse the XML
+     * document containing information about Still Image control.
+     * @author Matthew Cechini
+     */
+    private static enum IMAGE_DB_TAGS { 
+        /** This is the top level tag. */
+        STILL_IMAGES ("STILL_IMAGES"),
+        /** CCTV camera. */
+        CCTV         ("CCTV"),
+        /** CCTV camera unique id number. */
+        CCTV_ID      ("id"),
+        /** CCTV camera unique id string on ATMS server. */ 
+        ATMS_CCTV_ID ("atms_id"),
+        /** CCTV camera direction value. */ 
+        DIRECTION    ("dir"),
+        /** Speed range for associated image. */
+        RANGE        ("RANGE"),
+        /** Minimum value of speed range. */
+        MIN_SPEED    ("min_speed"),
+        /** Maximum value of speed range. */
+        MAX_SPEED    ("max_speed"), 
+        /** Incident associated image. */
+        INCIDENT     ("INCIDENT"),  
+        /** Log number for incident. */
+        LOG_NUM      ("log_num"),
+        /** Image filename. */
+        FILENAME     ("filename");
+
+        /** XML Tag name. */
+        public String tag;
+        
+        private IMAGE_DB_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    
+    /**
+     * The map containing all current CCTV Camera IDs(key) and the corresponding 
+     * Still Image Controller(value) that have been registered with the system.
+     */
+    private TreeMap<CCTVInfo, ImageController> stillImageMap = null;
+    
+    /**
+     * Constructor.  Initialize the map of ImageControllers.
+     */
+    public StillImagesDB() {
+        stillImageMap = new TreeMap<CCTVInfo, ImageController>();   
+    }
+    
+    /**
+     * Implementation of the Observer update() method.  All received update
+     * objects are sent to Observers of this DB.
+     */
+    public void update(Observable o, Object arg) {
+        setChanged();
+        notifyObservers(arg);
+    }
+    
+    /**
+     * Load the Still Images map from an xml document, adhering to the 
+     * following schema.  When parsing has finished, the map of 
+     * ImageController and CCTVInfo objects will contain objects 
+     * representing all control objects specified in the XML<br>
+     *
+     * <STILL_IMAGES> <br>
+     *   <IMAGE_PLAYER type="" username="" pwd="" host="" basedir ="">
+     *     <CCTV id="" atms_id="" dir="">
+     *       <RANGE min_speed="" max_speed="" filename=""/>
+     *       <INCIDENT log_num="" filename=""/>
+     *     </CCTV>
+     *   </IMAGE_PLAYER>
+     *</STILL_IMAGES> <br>
+     *
+     * @throws ScriptException if there is an error in parsing the Node.
+     */
+    public void loadFromXML(Document newDoc, ATMSManager theATMSManager) 
+        throws ScriptException 
+    {
+        
+        Element rootElement     = newDoc.getDocumentElement();
+        Element cameraElement   = null;
+        Element rangeElement    = null;
+        Element incidentElement = null;
+
+        NodeList cameras   = rootElement.getElementsByTagName(
+                IMAGE_DB_TAGS.CCTV.tag);
+        NodeList ranges    = null;
+        NodeList incidents = null;
+        
+        Integer cctvID                = null;
+        Integer ATMS_cctvID           = null;
+        CCTVDirections  cctvDirection = null;
+        ImageController theController = null;
+        
+        //for all CCTV camera elements, parse out data
+        for(int j = 0; j < cameras.getLength(); j++) {      
+            cameraElement = (Element)cameras.item(j);
+            
+            cctvID        = Integer.parseInt(cameraElement.getAttribute(
+                    IMAGE_DB_TAGS.CCTV_ID.tag));
+            ATMS_cctvID   = Integer.parseInt(cameraElement.getAttribute(
+                    IMAGE_DB_TAGS.ATMS_CCTV_ID.tag));
+            cctvDirection = CCTVDirections.fromChar(cameraElement.getAttribute(
+                    IMAGE_DB_TAGS.DIRECTION.tag).charAt(0));
+                                    
+            ranges    = cameraElement.getElementsByTagName(
+                    IMAGE_DB_TAGS.RANGE.tag);
+            incidents = cameraElement.getElementsByTagName(
+                    IMAGE_DB_TAGS.INCIDENT.tag);
+            
+            theController = new ImageController(ATMS_cctvID, theATMSManager);
+                        
+            for(int k = 0; k < ranges.getLength(); k++) {
+                rangeElement = (Element)ranges.item(k);
+                
+                theController.addRange(new ImageRange(
+                        Float.parseFloat(rangeElement.getAttribute(
+                                IMAGE_DB_TAGS.MIN_SPEED.tag)), 
+                        Float.parseFloat(rangeElement.getAttribute(
+                                IMAGE_DB_TAGS.MAX_SPEED.tag)), 
+                        rangeElement.getAttribute(
+                                IMAGE_DB_TAGS.FILENAME.tag)));
+            }
+            
+            for(int k = 0; k < incidents.getLength(); k++) {
+                incidentElement = (Element)incidents.item(k);
+                
+                theController.addIncident(new ImageIncident( 
+                        Integer.parseInt(incidentElement.getAttribute(
+                                IMAGE_DB_TAGS.LOG_NUM.tag)), 
+                        incidentElement.getAttribute(
+                                IMAGE_DB_TAGS.FILENAME.tag)));
+            }           
+            
+            stillImageMap.put(new CCTVInfo(cctvID, cctvDirection), theController);
+        }           
+    }   
+    
+    /**
+     * Gets the ImageController associated with the parameter CCTV_ID number and direction.
+     * 
+     * @param cctv_id Integer value of the CCTV camera.
+     * @param dir Direction value of the CCTV camera.
+     * @return ImageController object for CCTV_ID and direction, or null if no object is found.
+     */
+    public ImageController getController(Integer cctv_id, CCTVDirections dir) {
+        return stillImageMap.get(new CCTVInfo(cctv_id, dir));
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/CADSimulatorClient.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/CADSimulatorClient.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/CADSimulatorClient.java	(revision 82)
@@ -0,0 +1,448 @@
+package tmcsim.cadsimulator;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.Socket;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import tmcsim.common.CADProtocol;
+import tmcsim.common.ObserverMessage;
+import tmcsim.common.CADEnums.CAD_KEYS;
+import tmcsim.common.CADProtocol.CAD_CLIENT_CMD;
+import tmcsim.common.CADProtocol.CAD_COMMANDS;
+import tmcsim.common.CADProtocol.CAD_SIMULATOR_CMD;
+
+
+/**
+ * CADSimulatorClient handles communication between the CAD Simulator and 
+ * remote CAD Clients.  Each instance of this class communicates with 
+ * a CAD Client through a socket.  The run() method continuously checks to see 
+ * if data has been received from the client.  If there is data, it is parsed,
+ * and the resulting action is performed by the CADScreenManager.  See the
+ * receiveObject() method description for more information.  The 
+ * CADSimulatorClient is set up as an Observer of the CADScreenManager to listen 
+ * for ObserverMessage objects.  For each object received, the appropriate
+ * action is taken, resulting in data being transmitted to the CAD Client.
+ * See the update() method description for more information.  The 
+ * CADScreenManager is set up as an observer of the Coordinator to listen
+ * for simulation data updates.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/14 00:12:38 $ $Revision: 1.5 $
+ */
+public class CADSimulatorClient extends Thread implements Observer {
+    
+    /** Error Logger. */
+    private static Logger cadLogger = Logger.getLogger("tmcsim.cadsimulator");
+    
+    /** CADScreenManager object containing the data for managing the CAD Client's view information. */
+    private CADScreenManager screenManager;
+    
+    /** Socket used for communication with the CAD Client. */
+    private Socket theSocket;
+    
+    /** ObjectOutputStream for writing objects to the socket. */
+    private ObjectOutputStream out;
+    
+    /** ObjectInputStream for reading objects from the socket. */
+    private ObjectInputStream in;
+    
+    /**
+     * Constructor.  A CADScreenManager is instantiated to manage the output
+     * transmitted to the remote CAD Client.  This object is set up as an
+     * observer to that manager to listen for data that will be transmitted
+     * across the socket.  The CADScreenManager is set up as an observer
+     * of the Coordinator.  At construction, streams are created to handle
+     * reading and writing to the Socket.  When complete, the sendScreenRefresh()
+     * method is called to initialize the client.
+     * 
+     *
+     * @param newSocket The socket to use for data transmission
+     * @throws IOException if there is an error in getting the output or input streams
+     * from the socket.
+     */
+    CADSimulatorClient(Socket newSocket) throws IOException{
+        
+        screenManager = new CADScreenManager(CADSimulator.theCoordinator);      
+        CADSimulator.theCoordinator.addObserver(screenManager);
+        screenManager.addObserver(this);
+        
+        
+        theSocket = newSocket;        
+        out       = new ObjectOutputStream(theSocket.getOutputStream());
+        in        = new ObjectInputStream(theSocket.getInputStream());   
+   
+        //initialize the CAD client
+        sendScreenRefresh();
+    }
+    
+    /**
+     * Method declaration for the Thread.run() method.  While the thread is not 
+     * interrupted, read Objects from the socket and call the receiveObject()
+     * method to parse the data.  If there is an IOException in communicating
+     * with the client, interrupt this thread and close the streams and Socket.
+     */
+    public void run() {
+        
+        try { 
+        
+            while(!isInterrupted()) {
+                receiveObject(in.readObject());         
+            }
+        } 
+        catch (ClassCastException cce) {
+            cce.printStackTrace();
+        }
+        catch (ClassNotFoundException cnfe) {
+            cnfe.printStackTrace();
+        }
+        catch (IOException ioe) {                   
+            cadLogger.logp(Level.SEVERE, "CADSimulatorClient", "run", 
+                    "Error in reading from Client socket: " + 
+                    theSocket.getInetAddress() + ", proceeding.\n", ioe);
+            
+            //disconnectClient();
+        }
+    }
+    
+    /**
+     * This method is called to disconnect from the remote CAD Client.
+     * This object's thread is interrupted and the streams and socket
+     * are closed.  This object is removed as an observer of the 
+     * CADScreenManager and the CADScreenManager is removed as an 
+     * observer of the Coordinator.  The viewer is then notified
+     * of a disconnecting client.
+     */
+    protected void disconnectClient() {
+        this.interrupt();
+        
+        try { out.close(); } catch (Exception e) {}
+        try { in.close(); } catch (Exception e) {}
+        try { theSocket.close(); } catch (Exception e) {}
+
+        screenManager.deleteObserver(this);
+        CADSimulator.theCoordinator.removeObserver(screenManager);
+        //CADSimulator.theViewer.disconnectClient();
+    }
+    
+    
+
+    /**
+     * Observer method.  The update argument is cast to an ObserverMessage 
+     * object and the message type is used to define the action taken by the
+     * CADSimulatorClient.  Command messages are created in the form of XML
+     * Document. The root Element name is value from the CAD_SIMULATOR_CMD 
+     * enumeration.  The root text content is the value Object from the
+     * received Observer argument. 
+     * 
+     * The following table describes the messages sent for the ObserverMessage 
+     * types.<br>
+     * 
+     *<table cellpadding="2" cellspacing="2" border="1"
+    * style="text-align: left; width: 250px;">
+    *  <tbody>
+    *    <tr>
+    *      <th>Observer Message Type<br></th>
+    *      <th>Command Message Type<br></th>
+    *      <th>Data Content<br></th>
+    *    </tr>
+    *    <tr>
+    *      <td>SCREEN_UPDATE<br></td>
+    *      <td>UPDATE_STATUS</td>
+    *      <td>Screen update map String.</td>
+    *    </tr>
+    *    <tr>
+    *      <td>TIME_UPDATE<br></td>
+    *      <td>UPDATE_TIME</td>
+    *      <td>CAD time String.  (HHMM)</td>
+    *    </tr>
+    *    <tr>
+    *      <td>ROUTED_MESSAGE<br></td>
+    *      <td>UPDATE_MSG_COUNT</td>
+    *      <td>Number of messages.</td>
+    *    </tr>
+    *    <tr>
+    *      <td><br></td>
+    *      <td>UPDATE_MSG_UNREAD</td>
+    *      <td>Boolean flag to designate unread messages.</td>
+    *    </tr>
+    *    <tr>
+    *      <td>CAD_INFO_MESSAGE<br></td>
+    *      <td>CAD_INFO</td>
+    *      <td></td>
+    *    </tr>
+    *    <tr>
+    *      <td>REFRESH_VIEW<br></td>
+    *      <td>UPDATE_SCREEN</td>
+    *      <td>Current CAD model XML data.</td>
+    *    </tr>    
+    *  </tbody>
+    *</table>
+     *
+     * @see ObserverMessage
+     * @see CAD_SIMULATOR_CMD
+     */ 
+    public void update(Observable o, Object arg) {
+        
+        ObserverMessage oMessage = (ObserverMessage)arg;
+        CAD_SIMULATOR_CMD simCmd = null;
+        
+        switch(oMessage.type) {
+            case SCREEN_UPDATE:
+                simCmd = CAD_SIMULATOR_CMD.UPDATE_STATUS;
+                break;
+                        
+            case TIME_UPDATE:
+                simCmd = CAD_SIMULATOR_CMD.UPDATE_TIME;
+                break;
+                
+            case ROUTED_MESSAGE:
+                sendRoutedMessageUpdate();
+                break;
+                
+            case CAD_INFO_MESSAGE:
+                simCmd = CAD_SIMULATOR_CMD.CAD_INFO;
+                break;      
+                
+            case REFRESH_VIEW:
+                sendScreenRefresh();
+                break;
+        }
+        
+
+        if(simCmd != null) {
+            try {
+                
+                Document cmdDoc = DocumentBuilderFactory.newInstance()
+                        .newDocumentBuilder().newDocument();
+                cmdDoc.appendChild(cmdDoc.createElement(
+                        simCmd.type));
+                cmdDoc.getDocumentElement().appendChild(
+                        cmdDoc.createTextNode(oMessage.value.toString()));
+                transmitCommand(cmdDoc);
+    
+            } catch (Exception e) {
+                cadLogger.logp(Level.SEVERE, "CADSimulatorClient", "update", 
+                        "Error in transmitting a command to client.", e);
+            }           
+        }
+        
+    }
+    
+    /**
+     * This method acts as a helper method to create a XML Document
+     * update messages with the number of routed messages and 
+     * whether there are unread messages for this client.  These
+     * two messages are sent separately due to the defined
+     * command protocol.
+     */
+    private void sendRoutedMessageUpdate() {
+
+        try {           
+            Document cmdDoc = DocumentBuilderFactory.newInstance()
+                .newDocumentBuilder().newDocument();
+            Element docElem = cmdDoc.createElement(
+                    CAD_SIMULATOR_CMD.UPDATE_MSG_COUNT.type);
+            docElem.appendChild(cmdDoc
+                    .createTextNode(String.valueOf(screenManager
+                            .getCurrentCADModel().numberRoutedMessages)));
+            cmdDoc.appendChild(docElem);
+            transmitCommand(cmdDoc);
+            
+
+            cmdDoc = DocumentBuilderFactory.newInstance()
+                .newDocumentBuilder().newDocument();
+            docElem = cmdDoc.createElement(
+                    CAD_SIMULATOR_CMD.UPDATE_MSG_UNREAD.type);
+            docElem.appendChild(cmdDoc
+                    .createTextNode(String.valueOf(screenManager
+                            .getCurrentCADModel().unreadMessages)));
+            cmdDoc.appendChild(docElem);
+            transmitCommand(cmdDoc);            
+
+        } catch (Exception e) {
+            cadLogger.logp(Level.SEVERE, "CADSimulatorClient", 
+                    "sendRoutedMessageUpdate", 
+                    "Error in transmitting a command to client.", e);
+        }   
+    }
+    
+    /**
+     * This method acts as a helper method to create an XML Document
+     * update message with the current CAD Model's XML information.
+     */
+    private void sendScreenRefresh() {
+        
+        try {           
+            Document cmdDoc = DocumentBuilderFactory.newInstance()
+                    .newDocumentBuilder().newDocument();
+            Element docElem = cmdDoc.createElement(
+                    CAD_SIMULATOR_CMD.UPDATE_SCREEN.type);
+            
+            screenManager.getCurrentCADModel().toXML(docElem);
+            
+            cmdDoc.appendChild(docElem);
+            transmitCommand(cmdDoc);
+
+        } catch (Exception e) {
+            cadLogger.logp(Level.SEVERE, "CADSimulatorClient", 
+                    "sendScreenRefresh", 
+                    "Error in transmitting a command to client.", e);
+        }               
+    }
+    
+    /**
+     * This method parses the data that has been received on the socket.  The
+     * Data is cast to an XML Document and the root element determines the
+     * data content.  The possible root elements and the corresponding action
+     * are explained below. <br>
+     * <code>
+     * -----------<br>
+     * TERMINAL_REGISTER<br>
+     * 
+     * The CAD position and user ID are parsed from the Element and these 
+     * values are sent to the CADScreenManager for use.<br>
+     * -----------<br>
+     * SAVE_COMMAND_LINE<br>
+     * 
+     * The current command line text is parsed from the Element and sent
+     * to the CADScreenManager for user.
+     * <br>
+     * -----------<br>
+     * TERMINAL_CMD_LINE<br>
+     * The CAD command is parsed from the Element and converted to a 
+     * CAD_CLIENT_CMD enumeration that is used to call the correct
+     * method in the CADScreenManager to perform the command.
+     * <br>
+     * -----------<br>
+     * TERMINAL_FUNCTION<br>
+     * 
+     * The key value is parsed from the Element and converted to a CAD_KEYS
+     * enumeration that is sent to the CADScreenManager to perform the
+     * associated action.
+     * <br>
+     * -----------<br>
+     * TERMINATE<br>
+     * 
+     * <br>
+     * -----------<br>
+     * </code>
+     * @param receivedData String of data received on the socket.
+     *
+     * @see CADProtocol
+     */
+    private void receiveObject(Object rxData) throws IOException {
+        
+        try {   
+            
+            Element root  = ((Document)rxData).getDocumentElement();
+        
+            switch(CAD_CLIENT_CMD.fromString(root.getNodeName())) {
+            
+                case TERMINAL_REGISTER:
+                    Node positionNode = root.getChildNodes().item(0);
+                    screenManager.setCADPosition(Integer.parseInt(positionNode.getTextContent()));
+                    
+                    Node userIDNode   = root.getChildNodes().item(1);
+                    screenManager.setCADUserID(userIDNode.getTextContent());                            
+                    break;          
+                 
+                case SAVE_COMMAND_LINE:
+                    screenManager.receiveCommandLine(root.getTextContent());
+                    break;
+                case TERMINAL_CMD_LINE:
+                    
+                    Node commandNode = root.getChildNodes().item(0);
+
+                    switch(CAD_COMMANDS.fromFullName(commandNode.getNodeName())) {
+                        case INCIDENT_BOARD:
+                            screenManager.incidentBoardRequest((Element)commandNode);
+                            break;
+                        case INCIDENT_UPDATE:       
+                            screenManager.incidentUpdateRequest((Element)commandNode);
+                            break;
+                        case INCIDENT_INQUIRY:                  
+                            screenManager.incidentInquiryRequest((Element)commandNode);
+                            break;
+                        case INCIDENT_SUMMARY:              
+                            screenManager.incidentSummaryRequest((Element)commandNode);
+                            break;
+                        case ROUTED_MESSAGE:            
+                            screenManager.routedMessageRequest((Element)commandNode);
+                            break;
+                        case ENTER_INCIDENT:            
+                            screenManager.enterIncidentRequest((Element)commandNode);
+                            break;
+                        case TERMINAL_OFF:              
+                            screenManager.terminalOffRequest();
+                            break;
+                        case APP_CLOSE:             
+                            
+                            try {
+                                Document cmdDoc = DocumentBuilderFactory.newInstance()
+                                        .newDocumentBuilder().newDocument();
+                                cmdDoc.appendChild(cmdDoc.createElement(CAD_SIMULATOR_CMD.
+                                        APP_CLOSE.type));                               transmitCommand(cmdDoc);
+                    
+                            } catch (Exception e) {
+                                cadLogger.logp(Level.SEVERE, "CADSimulatorClient", "update", 
+                                        "Error in transmitting a command to client.", e);
+                            }   
+
+                            //disconnectClient();
+                            break;
+                        case UNKNOWN:
+                            //TODO
+                            break;
+                    }
+                    break;
+            
+                case TERMINAL_FUNCTION:             
+                    screenManager.receiveCommand(CAD_KEYS.fromValue(
+                            root.getTextContent().substring(
+                                    0, root.getTextContent().indexOf(":")),                         
+                            new Integer(root.getTextContent().substring(
+                                    root.getTextContent().indexOf(":") + 1))));
+                    break;
+            }     
+        }
+        catch (ClassCastException cce) {
+            cadLogger.logp(Level.SEVERE, "CADSimulatorClient", 
+                    "receiveObject", 
+                    "Incorrect object received from client.", cce);
+        }
+    }   
+    
+    /**
+     * This method transmits the Document command message to the remote 
+     * CAD Client.  If an exception occurs in writing to the socket, an 
+     * Exception is thrown and socket communication is closed.
+     *
+     * @param data The data being transmitted
+     * @throws IOException if there is an exception in writing to the socket.
+     */
+    private void transmitCommand(Document data) throws IOException {
+  
+        try {
+            out.writeObject(data);
+            out.flush();
+        } catch (IOException ioe) {
+            cadLogger.logp(Level.SEVERE, "CADSimulatorClient", 
+                    "transmitCommand",  "Error writing to Client socket: " + 
+                    theSocket.getInetAddress() + ", continuing.\n", ioe);
+
+            //disconnectClient();
+        }
+            
+    }
+}  
Index: /branches/trunk/src/tmcsim/cadsimulator/CADSimulator.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/CADSimulator.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/CADSimulator.java	(revision 82)
@@ -0,0 +1,425 @@
+package tmcsim.cadsimulator;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.rmi.Naming;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.util.Calendar;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JOptionPane;
+import javax.swing.JWindow;
+import javax.swing.UIManager;
+import javax.xml.parsers.DocumentBuilderFactory;
+import tmcsim.cadsimulator.db.CMSDiversionDB;
+import tmcsim.cadsimulator.managers.ATMSManager;
+import tmcsim.cadsimulator.managers.IncidentManager;
+import tmcsim.cadsimulator.managers.MediaManager;
+import tmcsim.cadsimulator.managers.ParamicsSimulationManager;
+import tmcsim.cadsimulator.managers.SimulationControlManager;
+import tmcsim.cadsimulator.viewer.model.CADSimulatorModel;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CADViewer;
+
+/**
+ * CADSimulator is main class for the CAD Simulator application. At construction
+ * the Coordinator, CoordinatorViewer, and all CAD Simulator Managers are
+ * initialized and data relationships are established. Simulation control is
+ * managed through the Coordinator and Managers. The CADSimulator contains the
+ * instances of all Manager Objects that are used to control the Simulation flow
+ * of data.<br>
+ * <br>
+ *
+ * The CADSimulator is initialized with a properties file containing the
+ * following data items:<br>
+ * <code>
+ * -----------------------------------------------------------------------------<br>
+ * CADClientPort The port number to use for remote CAD Client connections.<br>
+ * CoordinatorRMIPort The port number to use for binding the Coordinator.<br>
+ * CMSDiversionXML The filepath for the xml file containing initialization data
+ * for the Diversion "database." AudioFileLocation The root directory path where
+ * audio files are referenced from.<br>
+ * ParamicsProperties The filepath for the properties file to initialize the
+ * ParamicsControlManager.<br>
+ * ATMSProperties The filepath for the properties file to initialize the
+ * ATMSManager.<br>
+ * MediaProperties The filepath for the properties file to initialize the
+ * MediaManager.<br>
+ * ErrorFile The filename of the error file used for logging errors.<br>
+ * ----------------------------------------------------------------------------<br>
+ * Example File:<br>
+ * CADClientPort = 4444<br>
+ * CoordinatorRMIPort = 4445<br>
+ * CMSDiversionXML = ../data/cmsdiversions.xml<br>
+ * AudioFileLocation = ../audio/<br>
+ * ParamicsProperties = ../config/paramics.properties<br>
+ * ATMSProperties = ../config/atms.properties<br>
+ * MediaProperties = ../config/media.properties<br>
+ * ErrorFile = cad_sim_error.xml<br>
+ * </code>
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu) jdalbey
+ * @version $Date: 2009/04/17 16:27:46 $ $Revision: 1.5 $
+ */
+public class CADSimulator
+{
+
+    private static final String CONFIG_FILE_NAME = "cad_simulator_config.properties";
+    /**
+     * Error logger.
+     */
+    private static Logger cadSimLogger = Logger.getLogger("tmcsim.cadsimulator");
+
+    /**
+     * Enumeration containing properties name values. See CADSimulator class
+     * description for more information.
+     *
+     * @author Matthew
+     * @see CADSimulator
+     */
+    private static enum CAD_PROPERTIES
+    {
+
+        /**
+         * RMI port to accept CAD Client connections.
+         */
+        CLIENT_PORT("CADClientPort"),
+        /**
+         * RMI port to bind the Coordinator to for RMI communication.
+         */
+        COOR_RMI_PORT("CoordinatorRMIPort"),
+        CAD_RMI_PORT("CADRmiPort"),
+        /**
+         * Filepath for xml file containing diversion data.
+         */
+        CMS_XML_FILE("CMSDiversionXML"),
+        /**
+         * Filepath for xml file containing dvd control data.
+         */
+        DVD_XML_FILE("DVDPlayerXML"),
+        /**
+         * Filepath for xml file containing still image control data.
+         */
+        IMAGE_XML_FILE("StillImagesXML"),
+        /**
+         * Root directory path where audio files are referenced from.
+         */
+        AUDIO_LOCATION("AudioFileLocation"),
+        /**
+         * Filepath for the properties file to initialize the media manager.
+         */
+        MEDIA_PROP_FILE("MediaProperties"),
+        /**
+         * Filepath for the properties file to initialize the paramics control
+         * manager.
+         */
+        PARAMICS_PROP_FILE("ParamicsProperties"),
+        /**
+         * Filepath for the properties file to initialize the atms manager.
+         */
+        ATMS_PROP_FILE("ATMSProperties"),
+        /**
+         * Class name of desired user interface.
+         */
+        USER_INTERFACE("UserInterface");
+        public String name;
+
+        private CAD_PROPERTIES(String nam)
+        {
+            name = nam;
+        }
+    };
+    /**
+     * CADSimulatorViewer instance.
+     */
+    protected static CADViewer theViewer;
+    //protected static CADSimulatorViewer theViewer;
+    //protected static CADConsoleViewer theConsole;
+    protected static CADSimulatorModel theModel;
+    /**
+     * Coordinator instance.
+     */
+    protected static Coordinator theCoordinator;
+    /**
+     * SoundPlayer instance.
+     */
+    protected static SoundPlayer theSoundPlayer = null;
+    /**
+     * SimulationControlManager instance.
+     */
+    protected static SimulationControlManager theSimulationCntrlMgr = null;
+    /**
+     * ParamicsSimulationManager instance.
+     */
+    protected static ParamicsSimulationManager theParamicsSimMgr = null;
+    /**
+     * IncidentManager instance.
+     */
+    protected static IncidentManager theIncidentMgr = null;
+    /**
+     * MediaManager instance.
+     */
+    protected static MediaManager theMediaMgr = null;
+    /**
+     * ATMSManager instance.
+     */
+    protected static ATMSManager theATMSMgr = null;
+    /**
+     * Properties file for the CADSimulator.
+     */
+    private Properties cadSimulatorProperties;
+
+    /**
+     * Constructor. Load the Properties file and initialize all CAD Simulator
+     * Managers and establish Manager data relationships. A
+     * CADSimulatorSocketHandler is instantiated and started to being listening
+     * for remote CAD connections. The CMSDiversionDB is initialized with the
+     * XML data(incomplete design).
+     *
+     * @param propertiesFile Filename of CAD Simulator properties file.
+     * @throws SimulationException if there is an error in initializing the CAD
+     * Simulator.
+     */
+    public CADSimulator(String propertiesFile) throws SimulationException
+    {
+
+        try
+        {
+            cadSimulatorProperties = new Properties();
+            cadSimulatorProperties.load(new FileInputStream(propertiesFile));
+            cadSimLogger.logp(Level.INFO, "CADSimulator", "Constructor",
+                    "Properties loaded from " + propertiesFile);
+        } catch (Exception e)
+        {
+            cadSimLogger.logp(Level.SEVERE, "CADSimulator", "Constructor",
+                    "Exception in reading properties file.", e);
+
+            throw new SimulationException(SimulationException.INITIALIZE_ERROR, e);
+        }
+
+        //Create the Coordinator and register it for RMI communicator.  Start the
+        //CAD Simulator Socket Handler to begin to accept connections from CAD Clients.
+        try
+        {
+            String userInterfaceName =
+                    cadSimulatorProperties.getProperty(
+                    CAD_PROPERTIES.USER_INTERFACE.name);
+            if (userInterfaceName == null)
+            {
+                cadSimLogger.logp(Level.SEVERE, "CADSimulator", "Constructor",
+                        propertiesFile + " missing property for user interface.");
+                throw new SimulationException(SimulationException.INITIALIZE_ERROR);
+            }
+            try
+            {
+                Class uiClass = Class.forName(userInterfaceName);
+                theViewer = (CADViewer) uiClass.newInstance();
+            } catch (Exception exc)
+            {
+                cadSimLogger.logp(Level.SEVERE, "CADSimulator", "Constructor",
+                        "Unable to instantiate user interface: " + userInterfaceName
+                        + " " + exc);
+                throw new SimulationException(SimulationException.INITIALIZE_ERROR);
+            }
+            theModel = new CADSimulatorModel();
+            theModel.addObserver(theViewer);
+
+            theCoordinator = new Coordinator(theModel);
+
+            startRegistry(Integer.parseInt(
+                    cadSimulatorProperties.getProperty(
+                    CAD_PROPERTIES.COOR_RMI_PORT.name).trim()));
+            startRegistry(Integer.parseInt(
+                    cadSimulatorProperties.getProperty(
+                    CAD_PROPERTIES.CAD_RMI_PORT.name).trim()));
+
+            theSimulationCntrlMgr = new SimulationControlManager(theCoordinator);
+
+            theATMSMgr = new ATMSManager(
+                    cadSimulatorProperties.getProperty(
+                    CAD_PROPERTIES.ATMS_PROP_FILE.name));
+
+            theMediaMgr = new MediaManager(
+                    cadSimulatorProperties.getProperty(
+                    CAD_PROPERTIES.MEDIA_PROP_FILE.name),
+                    theATMSMgr, theModel);
+
+            theParamicsSimMgr = new ParamicsSimulationManager(
+                    cadSimulatorProperties.getProperty(
+                    CAD_PROPERTIES.PARAMICS_PROP_FILE.name),
+                    theCoordinator, theMediaMgr);
+
+            theSoundPlayer = new SoundPlayer(
+                    cadSimulatorProperties.getProperty(
+                    CAD_PROPERTIES.AUDIO_LOCATION.name));
+            theSoundPlayer.start();
+
+            theIncidentMgr = new IncidentManager(theCoordinator, theSoundPlayer);
+
+
+            //Begin accepting Client connections
+            CADSimulatorSocketHandler tmsh = new CADSimulatorSocketHandler(
+                    Integer.parseInt(cadSimulatorProperties.getProperty(
+                    CAD_PROPERTIES.CLIENT_PORT.name).trim()));
+            tmsh.start();
+        } catch (RemoteException e)
+        {
+            cadSimLogger.logp(Level.SEVERE, "CADSimulator", "Constructor",
+                    "Exception in starting Coordinator.", e);
+
+            throw new SimulationException(SimulationException.BINDING, e);
+        }
+
+        //Load CMS Diversion Information from the XML file
+        try
+        {
+            if (cadSimulatorProperties.getProperty(
+                    CAD_PROPERTIES.CMS_XML_FILE.name) != null)
+            {
+                CMSDiversionDB.getInstance().loadFromXML(
+                        DocumentBuilderFactory.newInstance().newDocumentBuilder()
+                        .parse(new File(cadSimulatorProperties.getProperty(
+                        CAD_PROPERTIES.CMS_XML_FILE.name))));
+            }
+        } catch (Exception e)
+        {
+            cadSimLogger.logp(Level.SEVERE, "CADSimulator", "Constructor",
+                    "Exception in parsing CMSDiversion xml file.", e);
+
+            JOptionPane.showMessageDialog(new JWindow(), "Unable to open "
+                    + cadSimulatorProperties.getProperty(CAD_PROPERTIES.CMS_XML_FILE.name),
+                    "Initialization Error", JOptionPane.WARNING_MESSAGE);
+        }
+
+        theViewer.setVisible(true);
+
+    }
+
+    /**
+     * Binds the Coordinator to an RMI port so that the SimulationManager can
+     * communicate with it, and so that the Coordinator can perform RMI callback
+     * method calls. The port numbers and RMI designators are parsed from the
+     * properties file file.
+     *
+     * @param theCoor A reference to the Coordinator object.
+     * @throws SimulationException if there are errors in binding the RMI to a
+     * port and name.
+     */
+    private void startRegistry(Integer regPort) throws SimulationException
+    {
+
+        try
+        {
+//            if (LocateRegistry.getRegistry(regPort) == null)
+//            {
+            LocateRegistry.createRegistry(regPort);
+            String registryURL = "rmi://localhost:" + regPort + "/coordinator";
+            Naming.rebind(registryURL, theCoordinator);
+//            }
+        } catch (Exception e)
+        {
+            throw new SimulationException(SimulationException.BINDING, e);
+        }
+    }
+
+    /**
+     * Method returns a String representation of the current time. String format
+     * is HHMM
+     *
+     * @return String representation of the current time.
+     */
+    public static String getCADTime()
+    {
+        String time = new String();
+
+        Calendar rightNow = Calendar.getInstance();
+
+        if (rightNow.get(Calendar.HOUR_OF_DAY) < 10)
+        {
+            time += "0";
+        }
+
+        time += (String.valueOf(rightNow.get(Calendar.HOUR_OF_DAY)));
+
+        if (rightNow.get(Calendar.MINUTE) < 10)
+        {
+            time += "0";
+        }
+
+        time += (String.valueOf(rightNow.get(Calendar.MINUTE)));
+
+        return time;
+    }
+
+    /**
+     * Returns a string representation of the current date. String format is:
+     * MMDDYY
+     *
+     * @return String format of the date.
+     */
+    public static String getCADDate()
+    {
+        String date = new String();
+
+        Calendar rightNow = Calendar.getInstance();
+
+        //Months are zero referenced
+        if (rightNow.get(Calendar.MONTH) + 1 < 10)
+        {
+            date += "0";
+        }
+
+        date += (String.valueOf(rightNow.get(Calendar.MONTH) + 1));
+
+        if (rightNow.get(Calendar.DAY_OF_MONTH) < 10)
+        {
+            date += "0";
+        }
+
+        date += (String.valueOf(rightNow.get(Calendar.DAY_OF_MONTH)));
+
+        if (rightNow.get(Calendar.YEAR) % 1000 < 10)
+        {
+            date += "0";
+        }
+
+        date += (String.valueOf(rightNow.get(Calendar.YEAR) % 1000));
+
+        return date;
+
+    }
+
+    /**
+     * Main class. Instantiate a CAD Simulator with the properties file
+     * specified on the command line or the default properties file
+     *
+     * @param args Command line arguments.
+     */
+    public static void main(String[] args)
+    {
+        if (System.getProperty("CONFIG_DIR") == null)
+        {
+            System.setProperty("CONFIG_DIR", "config");
+        }
+        try
+        {
+            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+            String propFile = System.getProperty("CONFIG_DIR")
+                    + System.getProperty("file.separator")
+                    + CONFIG_FILE_NAME;
+            new CADSimulator(propFile);
+        } catch (Exception e)
+        {
+            cadSimLogger.logp(Level.SEVERE, "CADSimulator", "Main",
+                    "Error initializing application.", e);
+
+            JOptionPane.showMessageDialog(new JWindow(), e.getMessage(),
+                    "Error - Program Exiting", JOptionPane.ERROR_MESSAGE);
+
+            System.exit(-1);
+        }
+
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDRange.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDRange.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDRange.java	(revision 82)
@@ -0,0 +1,54 @@
+package tmcsim.cadsimulator.videocontrol;
+
+
+/**
+ * DVDRange is a container class used within video control.  It contains a 
+ * minimum and maximum speed range, an associated title number and duration for
+ * that title.  The DVDController uses the DVDRange to determine
+ * which DVD title is to be played according to current traffic speed.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+public class DVDRange {
+
+    /** Minimum speed for this range. */
+    public float minSpeed;
+
+    /** Maximum speed for this range. */
+    public float maxSpeed;
+
+    /** DVD title to play for this range. */
+    public int   dvdTitle;
+
+    /**  
+     * Constructor.  Initialize member data with parameter values.
+     *
+     * @param min Minimum speed in range.
+     * @param max Maximum speed in range.
+     * @param title Title to play for range.
+     * @param duration Length (in seconds) of range title.
+     */
+    public DVDRange(float min, float max, int title) {
+        minSpeed      = min;
+        maxSpeed      = max;
+        dvdTitle      = title;
+    }
+
+    /** 
+     * Tests if the parameter speed is >= the minimum speed and 
+     * < the maximum speed for this range.
+     *
+     * @param speed Speed value to test for inclusion in range.
+     * @return True if the parameter is within the range, false if not.
+     */ 
+    public boolean isWithin(float speed) {
+        return speed >= minSpeed && speed < maxSpeed;
+    }               
+
+    public boolean equals(DVDRange range) {
+        return dvdTitle == range.dvdTitle &&
+               minSpeed == range.minSpeed &&
+               maxSpeed == range.maxSpeed;
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDIncident.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDIncident.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDIncident.java	(revision 82)
@@ -0,0 +1,30 @@
+package tmcsim.cadsimulator.videocontrol;
+
+/**
+ * DVDIncident is a container class used within video control.  This class is 
+ * used by the DVDController to determine which DVD title is to be played
+ * when an incident is toggled.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+public class DVDIncident {
+
+    /** The incident log number. */
+    public int   incidentNumber;
+
+    /** The DVD title to play for this incident. */
+    public int   dvdTitle;
+
+    /**  
+     * Construct.  Initialize member data with parameter values.
+     *
+     * @param incident Incident number.
+     * @param title DVD title number. 
+     */
+    public DVDIncident(int incident, int title) {
+        incidentNumber = incident;
+        dvdTitle       = title;
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/videocontrol/PioneerV5000.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/videocontrol/PioneerV5000.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/videocontrol/PioneerV5000.java	(revision 82)
@@ -0,0 +1,450 @@
+package tmcsim.cadsimulator.videocontrol;
+
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+
+
+/**
+ * DVDController extends from the Abstraact DVDController class to provide
+ * funtionality for controlling the Pioneer V5000 DVD Controller.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/15 19:08:15 $ $Revision: 1.5 $
+ */
+public class PioneerV5000 extends DVDController  {
+    
+    /**
+     * Enumeration of command strings used for DVD control.
+     * @author Matthew Cechini
+     */
+    protected static enum COMMAND_CHARS {
+        OPEN          ("OP"),
+        CLOSE         ("CO"),
+        START         ("SA"),
+        SEARCH        ("SE"),
+        PLAY          ("PL"),
+        SEARCH_PLAY   ("SL"),
+        PAUSE         ("PA"),
+        STILL         ("ST"),
+        REJECT        ("RJ"),
+        SCAN_FWD      ("NF"),
+        SCAN_RVS      ("NR"),
+        SCAN_STOP     ("NS"),
+        TITLE         ("TI"),
+        CHAPTER       ("CH"),
+        GROUP         ("GP"),
+        CMD_STACK_PL  ("BS"),
+        UPLOAD_DATA   ("BD"),  //Data from computer to player.
+        DOWNLOAD_DATA ("BU"),  //Data from player to computer.
+        SETUP         ("MS");   
+        
+        public String cmd;
+        
+        private COMMAND_CHARS(String c) {
+            cmd = c;
+        }
+    }
+    
+    /** Maximum number of command retries =5. */
+    protected final int  MAX_RETRIES      = 5;
+    
+    /** Maximum command length = 32. */
+    protected final int  MAX_COMMAND_LEN  = 32;
+    
+    /** Maximum response length = 32. */
+    protected final int  MAX_RESPONSE_LEN = 32;
+    
+    /** Carriage return character. */
+    protected final char CR = 0x0d;
+        
+    /** Buffer for creating command string. */
+    protected StringBuffer commandString;
+    
+    /** Buffer to receive repsonse string. */
+    protected StringBuffer responseString;
+    
+    /** DVD Player host. */
+    protected String dvdHost = null;
+    
+    /** DVD Player port. */
+    protected int    dvdPort = 0;
+    
+    /** Socket used for communication with DVD player. */
+    protected Socket serialInterfaceSocket = null;
+    
+    /** IOStream for writing out commands. */
+    //protected ObjectOutputStream out       = null;
+    protected OutputStream out = null;
+    
+    /** IOStream for reading dvd player responses. */
+    protected BufferedReader     in        = null;
+    
+
+    /**
+     * Constructor. 
+     */
+    public PioneerV5000() {     
+        commandString  = new StringBuffer(MAX_COMMAND_LEN);     
+        responseString = new StringBuffer(MAX_RESPONSE_LEN);        
+    }
+    
+    /** 
+     * Sets the host and port connection information for this dvd player.
+     *
+     * @param host DVD player host string.
+     * @param port DVD player port value.
+     */
+    public void setConnectionInfo(String host, int port) {
+        dvdHost = host;
+        dvdPort = port;
+    }
+    
+    /**
+     * Get the current connection information for this dvd player.  The
+     * returned string is as follows: HOST:PORT
+     *
+     * @return DVD connection host:port
+     */
+    public String getConnectionInfo() {
+        return dvdHost + ":" + dvdPort;
+    }
+    
+    public boolean isConnected() {
+        return isConnected;
+    }
+    
+    /**
+     * Establish a connection with the dvd player through socket communication.  
+     * If the port is successfully opened, input and ouput streams are opened
+     * on the socket.  The isConnected boolean flag is set to true if this is 
+     * successful.  Observers are notified with a DVDStatusUpdate to show the
+     * new connection.
+     *
+     * @throws IOException if communication with the dvd player fails.
+     */
+    public void connect() throws IOException {
+        
+        serialInterfaceSocket = new Socket();
+        serialInterfaceSocket.connect(new InetSocketAddress(dvdHost, dvdPort), 5000);
+        serialInterfaceSocket.setSoTimeout(5000);
+        
+        //out = new ObjectOutputStream(serialInterfaceSocket.getOutputStream());
+        out = serialInterfaceSocket.getOutputStream();
+        in  = new BufferedReader(new InputStreamReader(serialInterfaceSocket.getInputStream()));        
+        
+        isConnected = true;
+        
+        setChanged();
+        notifyObservers(new DVDStatusUpdate(getConnectionInfo(), 
+                isConnected()));
+    }
+    
+    
+    /**
+     * Disconnect from the dvd player.  Close all IOStreams and socket, then set
+     * the isConnected flag to false.  Observers are notified with a 
+     * DVDStatusUpdate to show the loss of the connection.
+     */
+    public void disconnect() {
+        
+        try {
+            in.close();
+        }
+        catch (Exception e) {}
+        
+        try {
+            out.close();
+        }
+        catch (Exception e) {}
+        
+        try {
+            serialInterfaceSocket.close();
+        }
+        catch (Exception e) {}
+        
+
+        isConnected = false;
+        
+        setChanged();
+        notifyObservers(new DVDStatusUpdate(getConnectionInfo(), 
+                isConnected()));
+        
+    }
+    
+    /*
+     * If the command is sent while the player is in the Park mode, the dvd
+     * ejects and the player enters the Open mode. After the tray is ejected, 
+     * player returns a completed status message. 
+     *
+     * If the player is in any mode other than Open or Park, the disc stops, the 
+     * player enters Open mode and the door opens.
+     *
+     * If the player is already in Open mode, an error message is returned.
+     */
+    public void open() throws IOException {
+        commandString.append(COMMAND_CHARS.OPEN.cmd);
+        transmit();
+    }
+    
+    
+    /*
+     * If the command is sent while the player door is open, the door 
+     * closes then the player enters the Park mode. After the door closes, the 
+     * player returns the completed status message.
+     *
+     * If the player is in any mode other than Open or if the player door is already 
+     * closed, an error message is returned.
+     */
+    public void close() throws IOException {        
+        commandString.append(COMMAND_CHARS.CLOSE.cmd);
+        transmit();
+    }
+    
+    /*
+     * If the command is sent while the player is in Open, Park or Reject 
+     * mode, the player immediately enters Setup and the disc begins spinning up.
+     * The player is ready for playback when the device reaches the beginning of
+     * the program (DVD, CD or VCD disc pauses or stills at the first Track). The 
+     * player returns the completed status when the disc pauses or stills. 
+     *
+     * If the player receives the command while playing a menu, the player returns 
+     * an error message. However, if the disc program does not allow new 
+     * commands once playback begins, the player ignores the command.
+     */
+    public void start() throws IOException {
+        commandString.append(COMMAND_CHARS.START.cmd);
+        transmit();
+    }
+    
+    public void play() throws IOException {
+        commandString.append(COMMAND_CHARS.PLAY.cmd);
+        transmit();
+    }   
+    
+    public void playChapter(int chapter) throws IOException {   
+        commandString.append(COMMAND_CHARS.CHAPTER.cmd + chapter);
+        commandString.append(COMMAND_CHARS.SEARCH_PLAY.cmd);
+        transmit();
+    }   
+
+    public void playTitle(int title) throws IOException {   
+        commandString.append(COMMAND_CHARS.TITLE.cmd + title);
+        commandString.append(COMMAND_CHARS.SEARCH_PLAY.cmd);
+        transmit();
+                
+    }
+
+    public void repeatTitle(int title) throws IOException { 
+        commandString.append(title + COMMAND_CHARS.GROUP.cmd);
+        commandString.append("1" + COMMAND_CHARS.CMD_STACK_PL.cmd);
+        
+        transmit();
+    }
+        
+    
+    /*
+     * If the command is sent while the player is in Random Access 
+     * mode, the pause occurs at the current disc location. The player returns the
+     * completed status message immediately.
+     *
+     * In Pause mode, Still and Video Squelch are ACTIVE. However, if the disc
+     * program does not allow a pause, the player ignores the command and
+     * returns an error message (E04).
+     */
+    public void pause() throws IOException {
+        commandString.append(COMMAND_CHARS.PAUSE.cmd);
+        transmit();
+    }
+    
+    /*
+     * If the command is sent while the player is in Random Access 
+     * mode, playback stops at the current disc position and the player enters Still 
+     * mode. The player returns the completed status message immediately. 
+     *
+     * However, if the disc program does not allow a pause, the player ignores the 
+     * command and returns an error message (E04).
+     *
+     */
+    public void still() throws IOException {
+        commandString.append(COMMAND_CHARS.STILL.cmd);
+        transmit();
+    }   
+    
+    public void stepForward() throws IOException {}
+    public void stepReverse() throws IOException {}
+    
+    /*
+     * If the command is sent while the player is in Random Access 
+     * mode, the screen proceeds forward (NF) or in reverse (NR) quickly. When 
+     * scanning is finished, the player resumes the Random Access mode and 
+     * returns the completed status message.
+     *
+     * If the SCAN command is sent while the player is in Fast Forward or Reverse 
+     * Playback, the player enters Scan mode.
+     *
+     * Once the NS command is sent, the player resets to the normal 
+     *Playback mode and returns the completed status message.
+     */
+    public void scanForward() throws IOException {
+        commandString.append(COMMAND_CHARS.SCAN_FWD.cmd);
+        transmit();
+    }
+    
+    
+    public void scanReverse() throws IOException {
+        commandString.append(COMMAND_CHARS.SCAN_RVS.cmd);
+        transmit();
+    }
+    
+    
+    public void scanStop() throws IOException {
+        commandString.append(COMMAND_CHARS.SCAN_STOP.cmd);
+        transmit();
+    }
+    
+    public void upload(String cmdStack) throws IOException {
+        //park mode
+        //out.write((COMMAND_CHARS.REJECT.cmd + CR).toString().getBytes());
+        
+        //try { Thread.sleep(500); } catch (Exception e) {}
+            
+        out.write((COMMAND_CHARS.UPLOAD_DATA.cmd + CR).toString().getBytes());
+        out.flush();
+        
+        try { Thread.sleep(500); } catch (Exception e) {}
+        
+        out.write((cmdStack + CR).toString().getBytes());
+        out.flush();
+        
+        
+    }
+    
+    public String download() throws Exception {
+        //park mode
+        commandString.append(COMMAND_CHARS.REJECT.cmd + CR);
+        transmit();
+        
+        commandString.append(COMMAND_CHARS.DOWNLOAD_DATA.cmd + CR);
+        
+        //send carriage return to refresh the connection
+        //out.writeChar(CR);
+        out.write(CR);
+        out.flush();                
+        
+        //clear response buffer
+        while(in.ready()) 
+            responseString.append(in.readLine());
+        responseString.setLength(0);
+        
+        //send the command
+        //out.writeBytes(commandString.toString());
+        out.write(commandString.toString().getBytes());
+        out.flush();                    
+        
+        //read in response
+        while(in.ready()) 
+            responseString.append(in.readLine());   
+        
+        
+        if(responseString.indexOf("E") == 0) {
+            throw new Exception("Error in downloading from player.");
+        }
+        else {
+            return responseString.toString();
+        }
+
+    }
+    
+    /**  
+     * This method spawns a thread to transmit the current command found in the 
+     * commandString buffer to the DVD player.  If the output stream is null,
+     * observers are notified with a DVDStatusUpdate containing the exception.
+     * The following steps are taken to transmit the command: <br>
+     * 
+     * <nl>
+     * <li>A Carriage Return (CR) character is sent to refresh the connection.</li> 
+     * <li>All response characters on the buffer are cleared.</li>
+     * <li>The command is transmitted with a CR to signify the end of the command.</li>
+     * <li>If the DVD response contains an 'E', then the command was not successful, 
+     *     repeat steps 1 - 3.  Otherwise, the command was successful, the thread ends.</li>
+     * <li>If the retry command transmit fails, notify observers with a DVDStatusUpdate
+     *     containing the exception.</li>
+     * <nl>
+     */
+    protected synchronized void transmit() {
+
+        Runnable transmitRun = new Runnable() {
+            public void run() {
+                
+                int retries = MAX_RETRIES;
+                
+                try {
+                    if(out == null) {
+                        throw new Exception("Cannot transmit to DVD " + 
+                                dvdHost + ":" + dvdPort + ". Reconnect to DVD.");
+                    }
+                    
+                    while(retries > 0) {
+                        System.out.println("sending [" + commandString.toString() + 
+                                "] to " + getConnectionInfo());
+
+                        //send carriage return to refresh the connection
+                        out.write(CR);                      
+                        out.flush();
+                        
+                        //Wait for DVD to respond
+                        Thread.sleep(500);
+                        
+                        //clear response buffer
+                        while(in.ready()) 
+                            responseString.append(in.readLine());
+                        responseString.setLength(0);
+
+                        //send the command
+                        out.write(commandString.toString().getBytes());
+                        out.write(CR);
+                        out.flush();
+                        
+                        //Wait for DVD to respond
+                        Thread.sleep(500);
+
+                        //read in response
+                        while(in.ready()) 
+                            responseString.append(in.readLine());   
+
+                        //if an error occured, retry
+                        if((responseString.indexOf("E") > -1)) {
+                            System.out.println("response: " + responseString.toString());
+                            retries--;
+                        }
+                        else {
+                            retries = 0;
+                            System.out.println("response: " + responseString.toString());
+                        }
+                    }                                           
+                }
+                catch (Exception e) {
+                    setChanged();
+                    notifyObservers(new DVDStatusUpdate(getConnectionInfo(), 
+                            isConnected(), e));
+                }
+                finally {
+                    commandString.setLength(0);
+                    responseString.setLength(0);
+                }
+            }
+        };
+        
+        Thread transmitThread = new Thread(transmitRun);
+        transmitThread.start();     
+
+    }
+    
+    
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/videocontrol/PioneerV5000TestController.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/videocontrol/PioneerV5000TestController.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/videocontrol/PioneerV5000TestController.java	(revision 82)
@@ -0,0 +1,280 @@
+package tmcsim.cadsimulator.videocontrol;
+
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import javax.rmi.CORBA.Tie;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JTextField;
+
+
+@SuppressWarnings("serial")
+public class PioneerV5000TestController extends JFrame implements ActionListener{
+                
+    PioneerV5000 cntrl = null;  
+        
+    public static void main(String[] args) {
+        new PioneerV5000TestController();       
+    }
+    
+    public PioneerV5000TestController() {
+        super("SUPER AWESOME DVD CONTROLLER");
+
+        try {
+            cntrl = new PioneerV5000();
+            cntrl.setConnectionInfo("192.168.251.9", 3002);
+            cntrl.connect();
+        }
+        catch (IOException ioe) {
+            ioe.printStackTrace();
+        }
+
+        
+        initialize();
+        
+        addWindowListener(new WindowListener() {
+            public void windowClosed(WindowEvent e)  {}
+            public void windowOpened(WindowEvent e)  {}            
+            public void windowIconified(WindowEvent e)  {}         
+            public void windowDeiconified(WindowEvent e)  {}    
+            public void windowActivated(WindowEvent e)  {}                             
+            public void windowDeactivated(WindowEvent e)  {}         
+            public void windowClosing(WindowEvent e)  {                 
+                cntrl.disconnect();                
+                System.exit(0);
+            }                   
+            
+        });
+    }
+    
+    public void actionPerformed(ActionEvent evt) {
+    
+        try {
+            if(evt.getSource().equals(addDVDButton)) {
+                
+            }
+            else if(evt.getSource().equals(delDVDButton)) { 
+                
+            }
+            else if(evt.getSource().equals(openButton)) { 
+                cntrl.open();
+            }
+            else if(evt.getSource().equals(closeButton)) { 
+                cntrl.close();          
+            }
+            else if(evt.getSource().equals(rewButton)) { 
+                cntrl.scanReverse();
+            }
+            else if(evt.getSource().equals(ffButton)) { 
+                cntrl.scanForward();
+            }
+            else if(evt.getSource().equals(playButton)) { 
+                cntrl.play();
+            }
+            else if(evt.getSource().equals(pauseButton)) { 
+                cntrl.pause();
+            }
+            else if(evt.getSource().equals(stopButton)) {
+                
+            }
+            else if(evt.getSource().equals(cmdStackButton)) {
+                cntrl.repeatTitle(Integer.parseInt(titleTF.getText()));
+            }
+            else if(evt.getSource().equals(uploadButton)) {
+                /*
+                //file chooser
+                JFileChooser fc = new JFileChooser();
+                
+                if(fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
+                    
+                    StringBuffer cmdStack = new StringBuffer();
+                    
+                    try {
+                        FileInputStream fis = new FileInputStream(
+                                fc.getSelectedFile());
+                        
+                        while(fis.available() > 0) {
+                            cmdStack.append(fis.read());
+                        }
+                        fis.close();
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    
+                    cntrl.upload(cmdStack.toString());
+                }
+                */
+                cntrl.upload("24680200000000100020003000400050006000700080009000A000B000C000D000E000F0010001100120013001400150016001700180019001A001B001C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001D0009FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000001D0A4A0A1A0A0A0A0A0A1A9A9A9A9A9A9A0A4A9AAA3000000000000000000000000FF000000000000000000000000000000A4A0A2A0A0A0A0A0A1A9A9A9A9A9A9A1A4A9AAA3000000000000000000000000FF000000000000000000000000000000A4A0A3A0A0A0A0A0A1A9A9A9A9A9A9A2A4A9AAA3000000000000000000000000FF000000000000000000000000000000A4A0A4A0A0A0A0A0A1A9A9A9A9A9A9A3A4A9AAA3000000000000000000000000FF000000000000000000000000000000A4A0A5A0A0A0A0A0A1A9A9A9A9A9A9A4A4A9AAA3000000000000000000000000FF000000000000000000000000000000A4A0A6A0A0A0A0A0A1A9A9A9A9A9A9A5A4A9AAA3000000000000000000000000FF000000000000000000000000000000A4A0A7A0A0A0A0A0A1A9A9A9A9A9A9A6A4A9AAA3000000000000000000000000FF000000000000000000000000000000A4A0A8A0A0A0A0A0A1A9A9A9A9A9A9A7A4A9AAA3000000000000000000000000FF000000000000000000000000000000A4A0A9A0A0A0A0A0A1A9A9A9A9A9A9A8A4A9AAA3000000000000000000000000FF000000000000000000000000000000A4A1A0A0A0A0A0A0A1A9A9A9A9A9A9A0A4A9AAA30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050917");
+                
+            }
+            else if(evt.getSource().equals(downloadButton)) {
+                JFileChooser fc = new JFileChooser();
+                
+                if(fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
+
+                    String cmdStack = cntrl.download();
+                    
+                    System.out.println(cmdStack);
+                    
+                    try {
+                        FileOutputStream fos = new FileOutputStream(
+                                fc.getSelectedFile());
+                        
+                        fos.write(cmdStack.getBytes());                     
+                        fos.close();
+                        
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }                   
+                }
+                
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    
+    protected void initialize() {
+        
+        addDVDButton = new JButton("ADD DVD");
+        addDVDButton.addActionListener(this);
+        
+        delDVDButton = new JButton("DEL DVD");
+        delDVDButton.addActionListener(this);
+        
+        playerMgmtBox = new Box(BoxLayout.X_AXIS);
+        playerMgmtBox.add(Box.createHorizontalGlue());
+        playerMgmtBox.add(addDVDButton);
+        playerMgmtBox.add(Box.createHorizontalGlue());
+        playerMgmtBox.add(delDVDButton);
+        playerMgmtBox.add(Box.createHorizontalGlue());  
+                
+        
+        openButton  = new JButton("OPEN");
+        openButton.addActionListener(this);
+        
+        closeButton = new JButton("CLOSE");
+        closeButton.addActionListener(this);
+        
+        doorCntrlBox = new Box(BoxLayout.X_AXIS);
+        doorCntrlBox.add(Box.createHorizontalGlue());
+        doorCntrlBox.add(openButton);
+        doorCntrlBox.add(Box.createHorizontalGlue());
+        doorCntrlBox.add(closeButton);
+        doorCntrlBox.add(Box.createHorizontalGlue());
+        
+        rewButton  = new JButton("REW");
+        rewButton.addActionListener(this);
+        
+        playButton = new JButton("PLAY");
+        playButton.addActionListener(this);
+        
+        ffButton   = new JButton("FF");     
+        ffButton.addActionListener(this);
+        
+        buttonRowBox1 = new Box(BoxLayout.X_AXIS);
+        buttonRowBox1.add(Box.createHorizontalGlue());
+        buttonRowBox1.add(rewButton);
+        buttonRowBox1.add(Box.createHorizontalGlue());
+        buttonRowBox1.add(playButton);
+        buttonRowBox1.add(Box.createHorizontalGlue());
+        buttonRowBox1.add(ffButton);
+        buttonRowBox1.add(Box.createHorizontalGlue());
+                
+        
+        pauseButton  = new JButton("PAUSE");
+        pauseButton.addActionListener(this);
+        
+        stopButton   = new JButton("STOP");
+        stopButton.addActionListener(this);
+        
+        buttonRowBox2 = new Box(BoxLayout.X_AXIS);
+        buttonRowBox2.add(Box.createHorizontalGlue());
+        buttonRowBox2.add(pauseButton);
+        buttonRowBox2.add(Box.createHorizontalGlue());
+        buttonRowBox2.add(stopButton);
+        buttonRowBox2.add(Box.createHorizontalGlue());
+        
+
+        titleTF = new JTextField();
+        
+        cmdStackButton = new JButton("REPEAT");
+        cmdStackButton.addActionListener(this);
+
+        buttonRowBox3 = new Box(BoxLayout.X_AXIS);
+        buttonRowBox3.add(Box.createHorizontalGlue());
+        buttonRowBox3.add(titleTF);
+        buttonRowBox3.add(Box.createHorizontalGlue());
+        buttonRowBox3.add(cmdStackButton);
+        buttonRowBox3.add(Box.createHorizontalGlue());
+                        
+        uploadButton  = new JButton("UPLOAD");
+        uploadButton.addActionListener(this);
+        
+        downloadButton   = new JButton("DOWNLOAD");
+        downloadButton.addActionListener(this);
+        
+        buttonRowBox4 = new Box(BoxLayout.X_AXIS);
+        buttonRowBox4.add(Box.createHorizontalGlue());
+        buttonRowBox4.add(uploadButton);
+        buttonRowBox4.add(Box.createHorizontalGlue());
+        buttonRowBox4.add(downloadButton);
+        buttonRowBox4.add(Box.createHorizontalGlue());
+        
+                        
+        controllerBox = new Box(BoxLayout.Y_AXIS);
+        controllerBox.add(Box.createVerticalStrut(15));
+        controllerBox.add(playerMgmtBox);
+        controllerBox.add(Box.createVerticalStrut(15));
+        controllerBox.add(doorCntrlBox);
+        controllerBox.add(Box.createVerticalStrut(15));
+        controllerBox.add(buttonRowBox1);
+        controllerBox.add(Box.createVerticalStrut(15));
+        controllerBox.add(buttonRowBox2);
+        controllerBox.add(Box.createVerticalStrut(15));
+        controllerBox.add(buttonRowBox3);
+        controllerBox.add(Box.createVerticalStrut(15));
+        controllerBox.add(buttonRowBox4);
+        controllerBox.add(Box.createVerticalStrut(15));
+        
+        
+        add(controllerBox);
+        
+        pack();
+        setVisible(true);
+    }
+    
+    protected JButton addDVDButton;
+    protected JButton delDVDButton;
+    protected JButton openButton;
+    protected JButton closeButton;
+    protected JButton rewButton;
+    protected JButton playButton;
+    protected JButton ffButton;
+    protected JButton pauseButton;
+    protected JButton stopButton;
+    protected JButton cmdStackButton;
+    protected JButton uploadButton;
+    protected JButton downloadButton;
+    
+    protected JTextField titleTF;
+    
+    protected Box controllerBox;
+    protected Box playerMgmtBox;
+    protected Box doorCntrlBox;
+    protected Box buttonRowBox1;
+    protected Box buttonRowBox2;
+    protected Box buttonRowBox3;
+    protected Box buttonRowBox4;
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDController.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDController.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDController.java	(revision 82)
@@ -0,0 +1,244 @@
+package tmcsim.cadsimulator.videocontrol;
+
+import java.io.IOException;
+import java.util.Observable;
+import java.util.Vector;
+
+/**
+ * DVDController is an abstract class used for controlling a remote DVD player.
+ * All player specific control methods must be overloaded according to the 
+ * requirements of that device.  This base class handles starting and repeating 
+ * range or incident titles according to current speed updates or incident toggles. 
+ *
+ * The addRange() and addIncident() methods are used to register more titles with
+ * the DVDController class.  The updatePlayer() and toggleIncident() methods are
+ * used to control which titles are being played.  A title will continuously
+ * repeat until a new title is chosen through one of these methods.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+public abstract class DVDController extends Observable {
+    
+    /** Number of consecutive requests for change until the title will change. */
+    private static final int CHANGE_TOLERANCE = 2;
+    
+    /** 
+     *  Boolean flag to designate whether a connection has been established with
+     *  the DVD player.
+     */
+    protected boolean isConnected = false;
+    
+    /** Vector of all DVDRanges in the current simulation.  */
+    protected Vector<DVDRange> ranges = null;
+    
+    /**  Vector of all DVDIncidents in the current simulation. */
+    protected Vector<DVDIncident> incidents = null;
+    
+    /** Current range being played.  Null if none have played. */
+    protected DVDRange currentRange = null;
+    
+    /** Current incident being played. */
+    protected DVDIncident currentIncident = null;
+    
+    /** Boolean flag to designate whether an incident is currently playing. */
+    protected boolean isPlayingIncident = false;
+    
+    /** 
+     * DVDRange object to cache the last "new range" that the controller
+     * has chosen as a result of a speed update.  This allows for a tolerance
+     * value to be used to control frequent title changes.  
+     */
+    protected DVDRange changeRange;
+    
+    /** 
+     * Count value to count the number of consecutive updates that
+     * result in the same DVDRange. 
+     */
+    protected int changeRangeCounter;
+    
+    /**
+     * Constructor.  Initialize lists and title repeat timer.
+     */
+    public DVDController() {
+        ranges    = new Vector<DVDRange>();
+        incidents = new Vector<DVDIncident>();
+        
+        changeRange        = null;
+        changeRangeCounter = 0;
+    }
+    
+    /**  
+     * Add a new DVDRange to the local list.
+     * 
+     * @param newRange DVDRange to add.
+     */
+    public void addRange(DVDRange newRange) {
+        ranges.add(newRange);
+    }
+    
+    /**  
+     * Add a new DVDIncident to the local list.
+     * 
+     * @param newRange DVDIncident to add.
+     */ 
+    public void addIncident(DVDIncident newIncident) {
+        incidents.add(newIncident);
+    }
+    
+    /**
+     * Toggle the dvd player to start or stop playing an incident track.  The
+     * boolean parameter is used to designate whether the incident is being
+     * toggled to start(true) or stop (false).  If the toggle flag is true,
+     * then the DVDIncident with log number equal to the parameter log_num
+     * will be played.  The currentIncident and isPlayeingIncident member data
+     * objects are updated.  
+     *
+     * If the toggle flag is false, and the incident being toggled is playing,
+     * then it is stopped.
+     *
+     * @param log_num Incident log number to toggle.
+     * @param toggle Boolean flag.  True = start incident, false = stop incident.
+     * @throws Exception if the method is unable to toggle the incident.
+     */
+    public void toggleIncident(int log_num, boolean toggle) throws Exception {
+        if(toggle) {
+            for(DVDIncident incident : incidents) {
+                if(incident.incidentNumber == log_num) {
+                    currentIncident   = incident;                   
+                    isPlayingIncident = true;
+                    
+                    playCurrentTitle();
+                }
+            }
+        }
+        else if(currentIncident != null && currentIncident.incidentNumber == log_num) {
+            isPlayingIncident = false;          
+            
+            playCurrentTitle();
+        }
+        else {
+            throw new Exception("DVDController: Unable to toggle incident #" + log_num);
+        }
+    }
+    
+    /**
+     * Update this DVD player with a new traffic speed after the tolerance of
+     * range changes has been met.  If the parameter speed falls within a 
+     * different DVDRange than is being played, remember the new range.  If this 
+     * new range was not detected during the last update, reset the change 
+     * counter to 0.  If this range was detected during the last update, 
+     * increment the change counter.  If the change counter is greater than
+     * the tolerance value specified, set the current range to the new range, 
+     * reset the change counter, and set the updated flag to true.  If the range
+     * has been updated, and an incident is not being shown, return true.  Else
+     * return false.
+     *
+     * @param newSpeed New traffic speed for this DVD's camera location.
+     * @return True if a new DVDRange is to be played, false if not.
+     */
+    public boolean updatePlayer(float newSpeed) {
+        
+        boolean updated   = false;
+        DVDRange newRange = null;
+        
+        for(DVDRange range : ranges) {
+            if(range.isWithin(newSpeed)) {
+                if(currentRange == null || !currentRange.equals(range)) {
+                    newRange = range;
+                    break;
+                }
+            }
+        }
+        
+        if(newRange == null) {
+            //do nothing
+        }
+        else if(changeRange == null || !changeRange.equals(newRange)) {
+            changeRange = newRange;
+            changeRangeCounter = 0;
+        }
+        else {
+            changeRangeCounter++;
+        }
+        
+        if(currentRange == null ||
+           changeRangeCounter >= CHANGE_TOLERANCE) 
+        {
+            changeRangeCounter = 0;
+            currentRange       = changeRange;
+            updated            = true;
+        }
+        
+        
+        //even if the currentRange is updated, an incident trumps this
+        return updated & !isPlayingIncident;
+    }
+    
+    /**
+     * This method starts a new title.  If the DVD Controller is playing an incident,
+     * then the incident title will be started.  Else, if a DVD range has been found, 
+     * then it's title will be started in repeat mode.  
+     *
+     * @throws Exception if the method is not able to play the current title.
+     */
+    public void playCurrentTitle() throws Exception {
+        
+        if(!isConnected) {
+            throw new Exception("Cannot play title, connection has not been established to DVD Controller");
+        }
+        else if(isPlayingIncident) {
+            repeatTitle(currentIncident.dvdTitle);
+
+            setChanged();
+            notifyObservers(new DVDTitleUpdate(
+                    getConnectionInfo(), currentRange, 
+                    currentIncident, isPlayingIncident, false));            
+        }       
+        else if(currentRange != null) {
+            repeatTitle(currentRange.dvdTitle);
+
+            setChanged();
+            notifyObservers(new DVDTitleUpdate(
+                    getConnectionInfo(), currentRange, 
+                    currentIncident, isPlayingIncident, false));        
+        }
+
+    }
+    
+    public abstract void setConnectionInfo(String host, int port);
+    public abstract String getConnectionInfo();
+    public abstract boolean isConnected();
+    public abstract void connect() throws IOException; 
+    public abstract void disconnect();  
+
+    
+    public abstract void open() throws IOException;
+    public abstract void close() throws IOException;
+    
+    public abstract void start() throws IOException;
+    public abstract void play() throws IOException;
+    public abstract void playChapter(int chapter) throws IOException;
+    public abstract void playTitle(int title) throws IOException;
+    public abstract void repeatTitle(int title) throws IOException;
+    public abstract void pause() throws IOException;
+    public abstract void still() throws IOException;
+        
+    public abstract void stepForward() throws IOException;
+    public abstract void stepReverse() throws IOException;
+    public abstract void scanForward() throws IOException;
+    public abstract void scanReverse() throws IOException;
+    public abstract void scanStop() throws IOException;
+    
+    //multi-speed forward/reverse
+    
+    //speed
+    //search
+    //search&play
+    
+    //frame
+    
+    //time
+    //track
+    
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDTitleUpdate.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDTitleUpdate.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDTitleUpdate.java	(revision 82)
@@ -0,0 +1,54 @@
+package tmcsim.cadsimulator.videocontrol;
+
+/**
+ * DVDTitleUpdate is a container class used to notify observers of a DVD
+ * Controller when a title update occurs.  The DVD's connection is used to 
+ * uniquely identify a DVD player.  So this connection information String should
+ * always be the same for all updates.  The Abstract DVDController defines a 
+ * getConnectionInfo() method that may be used for this purpise.  The data members
+ * of this object are used to hold the current state of the DVD player when the
+ * update occurs.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class DVDTitleUpdate {
+
+    /** DVD player's connection info. */
+    public String connectionInfo = null;
+    
+    /** Current range being played.  Null if none have played. */
+    public DVDRange currentRange = null;
+    
+    /** Current incident being played. */
+    public DVDIncident currentIncident = null;
+    
+    /** Boolean flag to designate whether an incident is currently playing. */
+    public boolean isPlayingIncident = false;
+    
+    /** 
+     *  Boolean flag to designate whether the title is being repeated(true) or 
+     *  played for the first time(false). 
+     */ 
+    public boolean isRepeat = false;
+    
+    /**
+     * Constructor.
+     * 
+     * @param connInfo  DVD player connection info.
+     * @param range Current range being played. (may be null)
+     * @param incident Current Incident being played. (may be null)
+     * @param playingInc Playing incident flag.
+     * @param repeat Title repeated flag.
+     */
+    public DVDTitleUpdate(String connInfo, DVDRange range, 
+            DVDIncident incident, boolean playingInc, boolean repeat)
+    {
+        connectionInfo    = connInfo;
+        currentRange      = range;
+        currentIncident   = incident;
+        isPlayingIncident = playingInc;
+        isRepeat          = repeat;
+        
+    }
+}
Index: /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDStatusUpdate.java
===================================================================
--- /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDStatusUpdate.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadsimulator/videocontrol/DVDStatusUpdate.java	(revision 82)
@@ -0,0 +1,56 @@
+package tmcsim.cadsimulator.videocontrol;
+
+/**
+ * DVDStatusUpdate is a container class used to notify observers of a DVD
+ * Controller when a status update occurs.  The DVD's connection is used to 
+ * uniquely identify a DVD player.  So this connection information String should
+ * always be the same for all updates.  The Abstract DVDController defines a 
+ * getConnectionInfo() method that may be used for this purpise.  The isConnected 
+ * should also always be set.  However, the Throwable object may be unused (null)
+ * if the DVDStatusUpdate is not reporting an exception.  Otherwise, the Throwable 
+ * will be the cause of the status update.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class DVDStatusUpdate {
+
+    /** DVD player connection info. */
+    public String connectionInfo = null;
+    
+    /** Boolean flag to designate whether the DVD Controller is connected. */
+    public boolean isConnected = false;
+    
+    /** An Exception that has been thrown from the DVD controller. (Optional) */
+    public Throwable exception = null;
+
+    /**
+     * Constructor.
+     * 
+     * @param connInfo DVD connection info.
+     * @param connected Boolean connected flag.
+     * @param e Exception caught in DVD Controller.
+     */
+    public DVDStatusUpdate(String connInfo, boolean connected, Throwable e)
+    {
+        connectionInfo    = connInfo;
+        isConnected       = connected;
+        exception         = e;
+        
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param connInfo DVD connection info.
+     * @param connected Boolean connected flag.
+     */
+    public DVDStatusUpdate(String connInfo, boolean connected)
+    {
+        connectionInfo    = connInfo;
+        isConnected       = connected;
+        exception         = null;
+        
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/common/ScriptHandler.java
===================================================================
--- /branches/trunk/src/tmcsim/common/ScriptHandler.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/ScriptHandler.java	(revision 82)
@@ -0,0 +1,350 @@
+package tmcsim.common;
+
+import java.util.TreeMap;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.cadmodels.IncidentInquiryDetails;
+import tmcsim.cadmodels.IncidentInquiryHeader;
+import tmcsim.cadmodels.IncidentInquiryModel_obj;
+import tmcsim.cadmodels.IncidentInquiryServices;
+import tmcsim.cadmodels.IncidentInquiryTows;
+import tmcsim.cadmodels.IncidentInquiryUnitsAssigned;
+import tmcsim.cadmodels.IncidentInquiryWitnesses;
+import tmcsim.common.CADScriptTags.AUDIO_TAGS;
+import tmcsim.common.CADScriptTags.CAD_INCIDENT_DATA_TAGS;
+import tmcsim.common.CADScriptTags.CCTV_TAGS;
+import tmcsim.common.CADScriptTags.INCIDENT_HEADER_TAGS;
+import tmcsim.common.CADScriptTags.LOCATION_INFO_TAGS;
+import tmcsim.common.CADScriptTags.PARAMICS_TAGS;
+import tmcsim.common.CADScriptTags.SCRIPT_EVENT_TAGS;
+import tmcsim.common.CADScriptTags.SCRIPT_LEVEL_TAGS;
+import tmcsim.common.CADScriptTags.SERVICE_TAGS;
+import tmcsim.common.CADScriptTags.TOW_TAGS;
+import tmcsim.common.CADScriptTags.UNIT_TAGS;
+import tmcsim.common.CADScriptTags.WITNESS_TAGS;
+
+/**
+ * SAX Handler that parses a script file and creates a list of Incident objects 
+ * containing all script information that will be used by the CAD.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class ScriptHandler extends DefaultHandler { 
+
+    /** Error Logger. */
+    private Logger scriptLogger = Logger.getLogger("tmcsim.common");
+    
+    /** 
+     * Enumeration used to keep track of the current tab level that the
+     * parser is reading data in.
+     */
+    private static enum LEVEL { NONE, TMC_SCRIPT, SCRIPT_EVENT, CAD_DATA,
+        HEADER_INFO, LOCATION_INFO, CAD_INCIDENT_EVENT, PARAMICS };
+        
+    /** 
+     *  Map containing all parsed Incidents. Keys = Incident Log Number.  
+     *  Values = Incident object.
+     */
+    private TreeMap<Integer, Incident> incidentMap;
+    
+    /** Buffer used to hold parsed tag content */
+    private StringBuffer parsedValue = new StringBuffer();
+    
+    /** Current Tag level within the script that is being parsed */
+    private LEVEL currentLevel       = LEVEL.NONE;
+    
+    /** Log number for the current ScriptEvent being parsed */
+    private Integer currentLogNumber     = 0;
+    
+    /** Incident description for the current ScriptEvent being parsed */
+    private String  currentIncidentDesc  = "";
+    
+    /** Time index value (in seconds) for the current ScriptEvent being parsed */
+    private long    currentEventTime     = 0;
+    
+    /** ParamicsLocation object for current script event */
+    private ParamicsLocation currLoc      = null;
+    
+    /** IncidentInquiryHeader object for current script event */
+    private IncidentInquiryHeader currIIH = null;
+    
+    /** IncidentEvent object for current script event */
+    private IncidentEvent currEvent       = null;
+    
+    /** XMLIncident object for current script event */
+    private XMLIncident currXMLInc        = null;
+    
+    
+    
+    /** Constructor.  Initializes incident map. */
+    public ScriptHandler() {
+        incidentMap = new TreeMap<Integer, Incident>();
+    }
+    
+    /**  
+     * Get the list of incidents that have been parsed from the script file.
+     * 
+     * @returns Vector of Incident objects.
+     */
+    public Vector<Incident> getIncidents() {
+        return new Vector<Incident>(incidentMap.values());
+    }       
+    
+    /** SAX Handler method.  Clear incident map and reset the error flag. */
+    public void startDocument() {       
+        incidentMap.clear();        
+    }   
+    
+    /** SAX Handler method.   */
+    public void startElement(String uri, String localName, String qName, Attributes attributes)  {
+        
+        try {
+            if(qName.equals(SCRIPT_LEVEL_TAGS.TMC_SCRIPT.tag)) {
+                currentLevel = LEVEL.TMC_SCRIPT;
+            }       
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.SCRIPT_EVENT.tag)) {
+                currentLevel = LEVEL.SCRIPT_EVENT;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.CAD_DATA.tag)) {
+                currentLevel = LEVEL.CAD_DATA;              
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.HEADER_INFO.tag)) {
+                currIIH           = new IncidentInquiryHeader();
+                currIIH.logNumber = currentLogNumber;
+                
+                currentLevel = LEVEL.HEADER_INFO;               
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.LOCATION_INFO.tag)) {
+                currLoc      = new ParamicsLocation(attributes.getValue(
+                        LOCATION_INFO_TAGS.ID.tag));
+                currentLevel = LEVEL.LOCATION_INFO;             
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.CAD_INCIDENT_EVENT.tag)) {
+                currEvent    = new IncidentEvent(currentEventTime - incidentMap.get(
+                        currentLogNumber).getSecondsToStart());         
+                currentLevel = LEVEL.CAD_INCIDENT_EVENT;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.PARAMICS.tag)) {
+                String locationID = attributes.getValue(
+                        PARAMICS_TAGS.LOCATION_ID.tag);
+                
+                currXMLInc = new XMLIncident(locationID, incidentMap.get(
+                        currentLogNumber).locationMap.get(locationID));
+                currentLevel = LEVEL.PARAMICS;
+            }
+            else if(qName.equals(SCRIPT_EVENT_TAGS.INCIDENT.tag)) {
+                try {
+                    currentLogNumber = Integer.parseInt(attributes.getValue(
+                            SCRIPT_EVENT_TAGS.LOG_NUMBER.tag));
+                }
+                catch (Exception e)  { 
+                    scriptLogger.logp(Level.SEVERE, "ScriptHandler", "startElement", 
+                            "Invalid LogNumber " + attributes.getValue(
+                                    SCRIPT_EVENT_TAGS.LOG_NUMBER.tag), e);
+                    currentLogNumber = 0;
+                }               
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.UNIT.tag)) {
+                IncidentInquiryUnitsAssigned iiu = new IncidentInquiryUnitsAssigned(IncidentInquiryModel_obj.SCRIPT_POS_INFO);
+                
+                iiu.beat = attributes.getValue(UNIT_TAGS.UNIT_NUMBER.tag);
+                iiu.statusType = attributes.getValue(UNIT_TAGS.UNIT_STATUS.tag);
+                iiu.isPrimary  = new Boolean(attributes.getValue(UNIT_TAGS.UNIT_PRIMARY.tag)).booleanValue();
+                iiu.isActive   = new Boolean(attributes.getValue(UNIT_TAGS.UNIT_ACTIVE.tag)).booleanValue();
+                
+                currEvent.eventInfo.addUnit(iiu);
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.WITNESS.tag)) {
+                IncidentInquiryWitnesses iiw = new IncidentInquiryWitnesses(IncidentInquiryModel_obj.SCRIPT_POS_INFO);
+    
+                iiw.reportingParty = attributes.getValue(WITNESS_TAGS.WITNESS_NAME.tag);
+                iiw.telephoneNum   = attributes.getValue(WITNESS_TAGS.WITNESS_PHONE.tag);
+                iiw.address        = attributes.getValue(WITNESS_TAGS.WITNESS_ADDRESS.tag);
+                                
+                currEvent.eventInfo.addWitness(iiw);
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.TOW.tag)) {
+                IncidentInquiryTows iit = new IncidentInquiryTows(IncidentInquiryModel_obj.SCRIPT_POS_INFO);
+                
+                iit.towCompany     = attributes.getValue(TOW_TAGS.TOW_COMPANY_NAME.tag);
+                iit.confPhoneNum   = attributes.getValue(TOW_TAGS.CONF_PHONE_NUM.tag);
+                iit.publicPhoneNum = attributes.getValue(TOW_TAGS.PUBLIC_PHONE_NUM.tag);
+                iit.beat           = attributes.getValue(TOW_TAGS.BEAT.tag);
+                
+                currEvent.eventInfo.addTow(iit);                
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.SERVICE.tag)) {
+                IncidentInquiryServices iis = new IncidentInquiryServices(IncidentInquiryModel_obj.SCRIPT_POS_INFO);
+                
+                iis.serviceName    = attributes.getValue(SERVICE_TAGS.SERVICE_NAME.tag);
+                iis.confPhoneNum   = attributes.getValue(SERVICE_TAGS.CONF_PHONE_NUM.tag);
+                iis.publicPhoneNum = attributes.getValue(SERVICE_TAGS.PUBLIC_PHONE_NUM.tag);
+                
+                currEvent.eventInfo.addService(iis);        
+            }       
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.AUDIO.tag)) {
+                currEvent.waveFile   = attributes.getValue(AUDIO_TAGS.FILE_PATH.tag);
+                currEvent.waveLength = new Integer(attributes.getValue(AUDIO_TAGS.FILE_LENGTH.tag)).intValue();
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.CCTV_INFO.tag)) {
+                CCTVInfo newInfo = new CCTVInfo();
+                
+                try {
+                    newInfo.cctv_id   = Integer.parseInt(attributes.getValue(CCTV_TAGS.CCTV_ID.tag));
+                    newInfo.direction = CCTVDirections.fromChar(attributes.getValue(CCTV_TAGS.CCTV_DIR.tag).charAt(0));
+                    newInfo.toggle    = Boolean.parseBoolean(attributes.getValue(CCTV_TAGS.CCTV_TOGGLE.tag));
+                
+                    currEvent.cctvInfos.add(newInfo);
+                } 
+                catch (Exception e) {
+                    scriptLogger.logp(Level.SEVERE, "ScriptHandler", "startElement", 
+                            "Exception in parsing CCTV_INFO node.", e);
+                }
+                            
+            }       
+
+        } catch (Exception e) {
+            scriptLogger.logp(Level.SEVERE, "ScriptHandler", "startElement", 
+                    "Exception in starting element <" + qName + ">.", e);
+        }
+    }
+
+    /** SAX Handler method.  Append read characters to local buffer. */
+    public void characters(char[] ch, int start, int length) {      
+        parsedValue.append(new String(ch, start, length).trim());               
+    }
+
+    /** SAX Handler method. */
+    public void endElement(String uri, String localName, String qName)  {
+
+        try {
+            if(qName.equals(SCRIPT_LEVEL_TAGS.SCRIPT_EVENT.tag)) {
+                currentLevel = LEVEL.TMC_SCRIPT;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.CAD_DATA.tag)) {
+                currentLevel = LEVEL.SCRIPT_EVENT;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.HEADER_INFO.tag)) {
+                incidentMap.get(currentLogNumber).header = currIIH;
+                currentLevel = LEVEL.CAD_DATA;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.LOCATION_INFO.tag)) {
+                incidentMap.get(currentLogNumber).locationMap.put(currLoc.locationID, currLoc);
+                currentLevel = LEVEL.CAD_DATA;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.CAD_INCIDENT_EVENT.tag)) {
+                incidentMap.get(currentLogNumber).addEvent(currEvent);
+                currentLevel = LEVEL.CAD_DATA;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.PARAMICS.tag)) {     
+                currEvent.XMLIncidents.add(currXMLInc);
+                currentLevel = LEVEL.CAD_INCIDENT_EVENT;
+            }
+            else if(qName.equals(SCRIPT_EVENT_TAGS.INCIDENT.tag)) {
+                currentIncidentDesc = parsedValue.toString();
+                
+                if(incidentMap.get(currentLogNumber) == null) {             
+                
+                    incidentMap.put(currentLogNumber, 
+                            new Incident(currentLogNumber, 
+                                         currentIncidentDesc, 
+                                         currentEventTime));
+                }
+            }
+            else if(qName.equals(SCRIPT_EVENT_TAGS.TIME_INDEX.tag)) {
+                currentEventTime = timeBytesToSeconds(parsedValue.toString().trim());
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.TYPE.tag)){
+                currIIH.type = parsedValue.toString();
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.BEAT.tag)){
+                currIIH.beat = parsedValue.toString();
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.FULL_LOCATION.tag)){
+                currIIH.fullLocation = parsedValue.toString();
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.TRUNC_LOCATION.tag)){
+                currIIH.truncLocation = parsedValue.toString();
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.LOG_NUMBER.tag)){
+                currIIH.logNumber = Integer.parseInt(parsedValue.toString());
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.DETAIL.tag)) {
+                currEvent.eventInfo.addDetail(new IncidentInquiryDetails(
+                        IncidentInquiryModel_obj.SCRIPT_POS_INFO, 
+                        parsedValue.toString(), false));
+            }   
+            else if(currentLevel == LEVEL.PARAMICS) {
+                try {
+                    currXMLInc.readXMLNode(qName, parsedValue.toString());
+                }
+                catch (Exception e) {
+                    scriptLogger.logp(Level.SEVERE, "ScriptHandler", "endElement", 
+                            "Exception in parsing PARAMICS node.", e);
+                }
+            }
+            else if(currentLevel == LEVEL.LOCATION_INFO) {
+                currLoc.readXMLNode(qName, parsedValue.toString());
+            }
+    
+            parsedValue.setLength(0);
+        } catch (Exception e) {
+            scriptLogger.logp(Level.SEVERE, "ScriptHandler", "endElement", 
+                    "Exception in ending element <" + qName + ">.", e);
+        }
+    }   
+    
+    public void endDocument() {
+    }
+    
+    public void error(SAXParseException e) {
+        scriptLogger.logp(Level.SEVERE, "ScriptHandler", "error", 
+                "SAX Parsing error.", e);
+    }
+    
+    public void fatalError(SAXParseException e) {
+        scriptLogger.logp(Level.SEVERE, "ScriptHandler", "fatalError", 
+                "SAX Parsing fatal error.", e);
+    }
+    
+    public void warning(SAXParseException e) {
+        scriptLogger.logp(Level.SEVERE, "ScriptHandler", "warning", 
+                "SAX Parsing warning.", e);
+    }
+    
+
+    /**
+     * Private method to convert a time object from format HH:MM:SS to a long value of the
+     * corresponding number of seconds.
+     *
+     * @param time String time representation of format HH:MM:SS
+     * @return long Number of seconds
+     * @throws StringIndexOutOfBoundsException if the input parameter is not valid
+     */
+    private long timeBytesToSeconds(String time) 
+        throws StringIndexOutOfBoundsException
+    {
+        long seconds = 0;
+
+        seconds =  ((long) Character.digit(time.charAt(0), 10) * 36000 +
+                        Character.digit(time.charAt(1), 10) * 3600 +
+                        Character.digit(time.charAt(3), 10) * 600 + 
+                        Character.digit(time.charAt(4), 10) * 60 + 
+                        Character.digit(time.charAt(6), 10) * 10 +
+                        Character.digit(time.charAt(7), 10));
+
+              
+        return seconds;
+    }       
+    
+    
+}
Index: /branches/trunk/src/tmcsim/common/CCTVDirections.java
===================================================================
--- /branches/trunk/src/tmcsim/common/CCTVDirections.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/CCTVDirections.java	(revision 82)
@@ -0,0 +1,39 @@
+package tmcsim.common;
+
+
+/**
+ * Enumberation containing possible CCTV camera directions.
+ *
+ * @author
+ * @version
+ */
+public enum CCTVDirections {
+    
+    NORTH, SOUTH, EAST, WEST; 
+
+    /**
+     * Returns the CCTVDirections enumeration value which has a direction
+     * value that matches the parameter value.
+     * @param dir 
+     * @return CCTVDirections for the parameter value.
+     * @throws ScriptException if the parameter value is invalid.
+     */
+    public static CCTVDirections fromChar(char dir) throws ScriptException {
+        switch(dir){
+            case 'S':
+            case 's':
+                return SOUTH;
+            case 'N':
+            case 'n': 
+                return NORTH;
+            case 'E':
+            case 'e':
+                return EAST;
+            case 'W':
+            case 'w':
+                return WEST;
+            default:
+                throw new ScriptException(ScriptException.INVALID_ENUM, dir);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/common/ScriptException.java
===================================================================
--- /branches/trunk/src/tmcsim/common/ScriptException.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/ScriptException.java	(revision 82)
@@ -0,0 +1,97 @@
+package tmcsim.common;
+
+/**
+ * Exception class used to handle exceptions thrown within 
+ * the CAD Simulation software relating to errors caused by simulation 
+ * script actions.  Each error is defined by this class' public static 
+ * final Strings.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class ScriptException extends Exception {
+            
+    /**
+     * Exception error when user attempts to perform an action but cannot
+     * because a script file has not yet been loaded.<br>
+     * Error Message: "Simulation must have at least one incident loaded."
+     */
+    public static final String NO_SCRIPT_LOADED = "Simulation must have at least one incident loaded.";
+        
+    /**
+     * Exception error when user attempts to perform an action but cannot
+     * because the simulation has not started.<br>
+     * Error Message: "Simulation Not Started"
+     */
+    public static final String SIM_NOT_STARTED = "Simulation must be started.";
+    
+    /**
+     * Exception error when user attempts to delete an incident that has 
+     * already occured.<br>
+     * Error Message: "Incident Already Occured"
+     */
+    public static final String INCIDENT_ALREADY_STARTED = "Incident has already occured.";
+    
+    /**
+     * Exception error when user attempts to reschedule an incident to a time that has 
+     * already passed.<br>
+     * Error Message: "Time has already passed."
+     */
+    public static final String TIME_PASSED = "Simulation time has already passed.";
+
+    /**
+     * Exception error when user attempts to add an incident that is already in the simualtion. <br>
+     * Error Message: "Duplicate incident number."
+     */
+    public static final String DUPLICATE_INCIDENT = "Duplicate incident number.";
+
+    /**
+     * Exception error during script parsing when an invalid enumeration value parsed.<br>
+     * Error Message: "Invalid enumeration value."
+     */
+    public static final String INVALID_ENUM = "Invalid enumeration value.";
+
+    
+    /**
+     * Constructor accepting a String message.
+     *
+     * @param newMessage Exception message
+     */ 
+    public ScriptException(String newMessage) {
+        super(newMessage);
+    }   
+    
+    /**
+     * Constructor accepting a String message.
+     *
+     * @param newMessage Exception message
+     */ 
+    public ScriptException(String newMessage, Object addlInfo) {
+        super(newMessage + " <" + addlInfo.toString() + ">");
+    }       
+        
+    /**
+     * Constructor accepting a String message and Throwable cause.
+     *
+     * @param newMessage Exception message 
+     * @param e Cause of the exception.
+     */ 
+    public ScriptException(String newMessage, Throwable e) {
+        super(newMessage, e);
+    }       
+
+    /**
+     * Constructor accepting a String message, additional info object, and Throwable cause.
+     *
+     * @param newMessage Exception message
+     * @param addlInfo Additional info
+     * @param e Cause of the exception.
+     */ 
+    public ScriptException(String newMessage, Object addlInfo, Throwable e) {
+        super(newMessage + " <" + addlInfo.toString() + ">", e);
+    }       
+    
+        
+}
+    
Index: /branches/trunk/src/tmcsim/common/SimulationException.java
===================================================================
--- /branches/trunk/src/tmcsim/common/SimulationException.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/SimulationException.java	(revision 82)
@@ -0,0 +1,104 @@
+package tmcsim.common;
+
+
+
+/**
+ * Exception class used to handle exceptions thrown within the CAD Simulation 
+ * software relating to connection and initialization errors.  Each error is 
+ * defined by this class' public static final Strings.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:41 $ $Revision: 1.7 
+ */
+@SuppressWarnings("serial")
+public class SimulationException extends Exception {
+    
+
+    /** 
+     * Exception error when a socket or RMI connection to the CAD Simulator fails.<br>
+     * Error Message: "Unable to connect to the CAD Simulator."
+     */
+    public static final String CAD_SIM_CONNECT = "Unable to connect to the CAD Simulator.";
+    
+    /** 
+     * Exception error when a socket or RMI communication to the CAD Simulator fails.<br>
+     * Error Message: "Unable to communicate with the CAD Simulator."
+     */
+    public static final String CAD_SIM_COMM = "Unable to communicate with the CAD Simulator.";
+    
+    /** 
+     * An error has occured in binding to a socket or rmi port.<br>
+     * Error Message: "An error has occured in establishing communications."
+     */
+    public static final String BINDING     = "An error has occured in establishing communications.";
+
+    /** 
+     * Exception error when initialization of an object from a properties file fails.<br>
+     * Error Message: "Unable to complete initialization, program exiting."
+     */
+    public static final String INITIALIZE_ERROR = "Unable to complete initialization, program exiting.";
+
+    /** 
+     * Exception error when registering the CAD Client with the CAD Simulator fails.<br>
+     * Error Message: "Unable to complete CAD Client registration, program exiting."
+     */
+    public static final String REGISTER_ERROR = "Unable to complete CAD Client registration, program exiting.";
+
+    /** 
+     * Exception error if the SimulationManagerModel is initialized without 
+     * the view componenta socket or RMI connection to the CAD Simulator fails.<br>
+     * Error Message: "Unable to connect to the CAD Simulator."
+     */
+    public static final String NULL_VIEW = "Unable to connect to the CAD Simulator.";
+        
+    /**
+     * Exception error when a connection to the ATMS server cannot be established.<br>
+     * Error Message: "A connection to the ATMS server could not be established"
+     */    
+    public static final String ATMS_UNREACHABLE = "A connection to the ATMS server could not be established";
+    
+    /**
+     * Exception error to notify the user that a connection to Paramics has 
+     * not been established.<br>
+     * Error Message: "A connection to Paramics has not been established."
+     */
+    public static final String PARAMICS_NOT_CONNECTED = "A connection to Paramics has not been established.";    
+    
+    /**
+     * Exception error when there is an error parsing the script file.<br>
+     * Error Message: "Unable to parse the script file."
+     */
+    public static final String INVALID_SCRIPT_FILE = "Unable to parse the script file.";    
+        
+    /**
+     * Constructor accepting a String message.
+     *
+     * @param newMessage Exception message
+     */ 
+    public SimulationException(String newMessage) {
+        super(newMessage);
+    }    
+    
+    /**
+     * Constructor accepting a String message and Throwable cause.
+     *
+     * @param newMessage Exception message 
+     * @param e Cause of the exception.
+     */ 
+    public SimulationException(String newMessage, Throwable e) {
+        super(newMessage, e);
+    }       
+
+    /**
+     * Constructor accepting a String message, additional info object, and Throwable cause.
+     *
+     * @param newMessage Exception message
+     * @param addlInfo Additional info
+     * @param e Cause of the exception.
+     */ 
+    public SimulationException(String newMessage, Object addlInfo, Throwable e) {
+        super(newMessage + " <" + addlInfo.toString() + ">", e);
+    }       
+    
+        
+}
Index: /branches/trunk/src/tmcsim/common/RevisionNumber.java
===================================================================
--- /branches/trunk/src/tmcsim/common/RevisionNumber.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/RevisionNumber.java	(revision 82)
@@ -0,0 +1,50 @@
+package tmcsim.common;
+
+import java.io.File;
+import java.util.Scanner;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * RevisionNumber represents the current Subversion revision. The Ant build
+ * script generates this value and saves it in a plain text file in the 'config'
+ * folder. (See target '-pre-compile'). The file should be included into the
+ * distributed zip file by the build script so it is available at run time to be
+ * displayed in help info.
+ *
+ * @author jdalbey
+ */
+public class RevisionNumber
+{
+
+    private static Logger logger = Logger.getLogger("tmcsim.common");
+    // Read the subversion revision info and return it
+
+    /**
+     * Return the version number as a string. The revision number is generated
+     * by the svnversion command.
+     *
+     * @see http://svnbook.red-bean.com/en/1.7/svn.ref.svnversion.re.html
+     * Currently this string it return untouched. Future enhancements might make
+     * it pretty.
+     * @return the revision number as a string
+     */
+    public static String getString()
+    {
+        String revision = "unknown"; // default
+        String kConfigFile = "config/svn-version.txt";
+//        InputStream in = RevisionNumber.class.getResourceAsStream("config/svn-version.txt");
+        try
+        {
+            Scanner scan = new Scanner(new File(kConfigFile));
+            revision = scan.next();
+        } catch (Exception e)
+        {
+            logger.logp(Level.SEVERE,
+                    "RevisionNumber", "getString()",
+                    "Exception trying to read from file: "
+                    + kConfigFile, e);
+        }
+        return revision;
+    }
+}
Index: /branches/trunk/src/tmcsim/common/ParamicsLocation.java
===================================================================
--- /branches/trunk/src/tmcsim/common/ParamicsLocation.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/ParamicsLocation.java	(revision 82)
@@ -0,0 +1,84 @@
+package tmcsim.common;
+
+import java.io.Serializable;
+
+/**
+ * IncidentLocation contains information regarding incident 
+ * locations.  These locations are referenced within the 
+ * Paramics control portion of the CAD Simulator.  The data 
+ * within these objects is read in from a simulation script, 
+ * and must correspond to valid locations within the loaded 
+ * paramics network.
+ * 
+ * @author
+ * @version
+ */
+@SuppressWarnings("serial")
+public class ParamicsLocation implements Serializable {
+
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    public static enum XML_TAGS {
+        /** Route. */
+        ROUTE      ("Route"),
+        /** Route direction. */
+        DIRECTION  ("Direction"),
+        /** Location type. */
+        LOC_TYPE   ("Location_type"),
+        /** Location postmile. */
+        POSTMILE   ("Postmile");
+
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    /** Unique ID for this IncidentLocation. */
+    public String locationID        = null;
+    
+    /** Route name of incident location. */
+    public String incidentRoute     = null;
+    
+    /** Route direction of incident location. */
+    public String incidentDirection = null;
+    
+    /** Route postmile of incident location. */
+    public String incidentPostmile  = null;
+    
+    /** Type of incident location. */
+    public String incidentLocType   = null;
+
+    
+    /**
+     * Constructor.
+     * 
+     * @param id Unique ID.
+     */
+    public ParamicsLocation(String id) {
+        locationID = id;
+    }
+
+    /**
+     * Receive the tag name and value data from a parsed XML node.  
+     * Set the corresponding data member with the new value.
+     * 
+     * @param tag_value XML tag name.
+     * @param value XML tag value.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        
+        if(tag_name.equals(XML_TAGS.ROUTE.tag))
+            incidentRoute = value;      
+        else if(tag_name.equals(XML_TAGS.DIRECTION.tag))
+            incidentDirection = value;  
+        else if(tag_name.equals(XML_TAGS.POSTMILE.tag))
+            incidentPostmile = value;       
+        else if(tag_name.equals(XML_TAGS.LOC_TYPE.tag))
+            incidentLocType = value;
+                
+    }   
+}
Index: /branches/trunk/src/tmcsim/common/CADProtocol.java
===================================================================
--- /branches/trunk/src/tmcsim/common/CADProtocol.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/CADProtocol.java	(revision 82)
@@ -0,0 +1,303 @@
+package tmcsim.common;
+
+import java.io.Serializable;
+
+
+/**
+ * CADProtocol contains enumerations used to create the communications protocol
+ * between the CAD Client, CAD Simulator, and ParamicsCommunicator.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:41 $ $Revision: 1.4 $
+ */
+public class CADProtocol {
+
+    /**
+     * Enumeration of commands that are performed by the CAD client and
+     * transmitted to the CAD Simulator.
+     * @author Matthew Cechini
+     */
+    public static enum CAD_CLIENT_CMD implements Serializable {
+        TERMINAL_REGISTER ("TERMINAL_REGISTER"),
+        TERMINAL_FUNCTION ("TERMINAL_FUNCTION"),
+        TERMINAL_CMD_LINE ("TERMINAL_CMD_LINE"),
+        SAVE_COMMAND_LINE ("SAVE_COMMAND_LINE"),
+        UNKNOWN           ("");
+        
+        public String type;
+        
+        private CAD_CLIENT_CMD(String t) {
+            type = t;           
+        }
+         
+        /**
+         * Returns the CAD_CLIENT_CMD enumeration value which has a command
+         * value that matches the parameter value.
+         * @param t Command type
+         * @throws ScriptException if the parameter value is invalid.
+         * @return CAD_CLIENT_CMD for the parameter value.
+         */     
+        public static CAD_CLIENT_CMD fromString(String t) {
+            for(CAD_CLIENT_CMD cmdType : values()) {
+                if(cmdType.type.equals(t))
+                    return cmdType;
+            }
+            
+            return UNKNOWN;
+        }
+    };
+    
+    /**
+     * Enumeration of commands that are performed by the CAD simulator 
+     * and transmitted to the CAD Client.
+     * @author Matthew Cechini
+     */    
+    public static enum CAD_SIMULATOR_CMD implements Serializable {
+        UPDATE_SCREEN     ("UPDATE_SCREEN"),
+        UPDATE_STATUS     ("UPDATE_STATUS"),
+        UPDATE_TIME       ("UPDATE_TIME"),
+        UPDATE_MSG_COUNT  ("UPDATE_MSG_COUNT"),
+        UPDATE_MSG_UNREAD ("UPDATE_MSG_UNREAD"),
+        CAD_INFO          ("CAD_INFO"),
+        APP_CLOSE         ("APP_CLOSE"),
+        UNKNOWN           ("");
+        
+        public String type;
+        
+        private CAD_SIMULATOR_CMD(String t) {
+            type = t;           
+        }
+                
+        /**
+         * Returns the CAD_SIMULATOR_CMD enumeration value which has a command
+         * value that matches the parameter value.
+         * @param t Command type
+         * @throws ScriptException if the parameter value is invalid.
+         * @return CAD_SIMULATOR_CMD for the parameter value.
+         */         
+        public static CAD_SIMULATOR_CMD fromString(String t) {
+            for(CAD_SIMULATOR_CMD cmdType : values()) {
+                if(cmdType.type.equals(t))
+                    return cmdType;
+            }
+            
+            return UNKNOWN;
+        }
+    };    
+        
+    /**
+     * Enumeration of commands that are parsed from the CAD command line.
+     * @author Matthew Cechini
+     */        
+    public static enum CAD_COMMANDS implements Serializable {
+        
+        BLANK_SCREEN     ("",   "BLANK_SCREEN"),
+        INCIDENT_BOARD   ("IB", "INCIDENT_BOARD"),
+        INCIDENT_UPDATE  ("UI", "INCIDENT_UPDATE"),
+        INCIDENT_INQUIRY ("II", "INCIDENT_INQUIRY"),
+        INCIDENT_SUMMARY ("SA", "INCIDENT_SUMMARY"),
+        ROUTED_MESSAGE   ("TO", "ROUTED_MESSAGE"),
+        ENTER_INCIDENT   ("EI", "ENTER_INCIDENT"),
+        TERMINAL_OFF     ("OF", "TERMINAL_OFF"),
+        APP_CLOSE        ("KILL", "APP_CLOSE"),
+        UNKNOWN          ("", "");
+        
+        /** Mnemonic used on command line. */
+        public String mnemonic = "";
+        /** Full text name of command used for XML document creation. */
+        public String fullName = "";
+        
+        private CAD_COMMANDS(String new_mnemonic, String new_name) {
+            mnemonic = new_mnemonic;
+            fullName = new_name;
+        }
+        
+        /**
+         * Returns the CAD_COMMANDS enumeration value which has a full name
+         * value that matches the parameter value.
+         * @param fName Full name
+         * @throws ScriptException if the parameter value is invalid.
+         * @return CAD_COMMANDS for the parameter value.
+         */         
+        public static CAD_COMMANDS fromFullName(String fName) {
+            for(CAD_COMMANDS cmd : values()) {
+                if(cmd.fullName.equals(fName))
+                    return cmd;
+            }
+            
+            return UNKNOWN;
+        }
+    }
+    
+    /**
+     * Enumeration of field codes that are parsed from the CAD command line.
+     * @author Matthew Cechini
+     */     
+    public static enum CAD_FIELD_CODES implements Serializable {
+        
+        WITNESS_ADDRESS  ("A/", "WITNESS_ADDRESS"),
+        BEAT             ("B/", "BEAT"),
+        CALLBOX          ("C/", "CALLBOX"),
+        DETAILS          ("D/", "DETAILS"),
+        HANDLING_UNIT    ("H/", "HANDLING_UNIT"),
+        INCIDENT_NUMBER  ("I/", "INCIDENT_NUMBER"),
+        LOCATION         ("L/", "LOCATION"),
+        PRIORITY         ("P/", "PRIORITY"),
+        WITNESS_PHONE    ("N/", "WITNESS_PHONE"),
+        TYPE             ("T/", "TYPE"),
+        TOW              ("V/", "TOW"),
+        WITNESS          ("W/", "WITNESS"),
+        MESSAGE          ("M/", "MESSAGE"),
+        ROUTE            ("R/", "ROUTE"),
+        UNKNOWN          ("", "");
+        
+
+        /** Mnemonic used on command line. */
+        public String mnemonic = "";
+        /** Full text name of command used for XML document creation. */
+        public String fullName = "";
+        
+        private CAD_FIELD_CODES(String new_mnemonic, String new_name) {
+            mnemonic = new_mnemonic;
+            fullName = new_name;
+        }
+        
+        /**
+         * Returns the CAD_FIELD_CODES enumeration value which has a full name
+         * value that matches the parameter value.
+         * @param fName Full name
+         * @throws ScriptException if the parameter value is invalid.
+         * @return CAD_FIELD_CODES for the parameter value.
+         */  
+        public static CAD_FIELD_CODES fromFullName(String fName) {
+            for(CAD_FIELD_CODES cmd : values()) {
+                if(cmd.fullName.equals(fName))
+                    return cmd;
+            }
+            
+            return UNKNOWN;
+        }
+    }   
+            
+    /**
+     * Enumeration of XML tag and attribute names that are used for XML 
+     * document creation.
+     * @author Matthew Cechini
+     */     
+    public static enum DATA_TAGS implements Serializable {
+        
+        POSITION_NUM      ("POSITION_NUM"),
+        USER_ID           ("USER_ID"),
+        LOG_NUM           ("LOG_NUM"),
+        //ORIGINAL_CAD_LINE = "ORIGINAL_CAD_LINE"),
+        SENSITIVE         ("SENSITIVE"),
+        FULL_LOCATION     ("FULL_LOCATION"),
+        TRUNC_LOCATION    ("TRUNC_LOCATION"),               
+        ORIGIN            ("ORIGIN"),
+        DESTINATION       ("DESTINATION"),
+        MESSAGE           ("MESSAGE"),      
+        WITNESS_NAME      ("WITNESS_NAME"),
+        WITNESS_PHONE     ("WITNESS_PHONE"),
+        WITNESS_ADDR      ("WITNESS_ADDR"),
+        UNKNOWN           ("");
+        
+        public String tag;
+        
+        private DATA_TAGS(String t) {
+            tag = t;
+        }
+        
+        /**
+         * Returns the DATA_TAGS enumeration value which has a name
+         * value that matches the parameter value.
+         * @param t Tag name
+         * @throws ScriptException if the parameter value is invalid.
+         * @return DATA_TAGS for the parameter value.
+         */         
+        public static DATA_TAGS fromString(String t) {
+            for(DATA_TAGS data : values()) {
+                if(data.tag.equals(t))
+                    return data;
+            }
+            
+            return UNKNOWN;
+        }       
+    }
+    
+    /**
+     * Enumeration of XML tag names that are used for document creation.
+     * @author Matthew Cechini
+     */     
+    public static enum PARAMICS_COMM_TAGS implements Serializable {
+        
+        ID          ("ID"),
+        ACTION      ("ACTION"),
+        TARGET_FILE ("TARGET_FILE"),
+        INTERVAL    ("INTERVAL"),
+        MESSAGE     ("MESSAGE"),
+        WRITER      ("WRITER"),
+        READER      ("READER"),
+        RESET       ("RESET"),
+        UNKNOWN     ("");
+        
+        public String tag;
+        
+        private PARAMICS_COMM_TAGS(String t) {
+            tag = t;
+        }
+        
+        /**
+         * Returns the PARAMICS_COMM_TAGS enumeration value which has a name
+         * value that matches the parameter value.
+         * @param t Tag name.
+         * @throws ScriptException if the parameter value is invalid.
+         * @return PARAMICS_COMM_TAGS for the parameter value.
+         */         
+        public static PARAMICS_COMM_TAGS fromString(String t) {
+            for(PARAMICS_COMM_TAGS comm : values()) {
+                if(comm.tag.equals(t))
+                    return comm;
+            }
+            
+            return UNKNOWN;
+        }
+    }
+    
+    /**
+     * Enumeration of XML tag name that are used for XML document creation
+     * to perform specific actions in the ParamicsCommunicator.
+     * @author Matthew Cechini
+     */     
+    public static enum PARAMICS_ACTIONS implements Serializable {
+        
+        REGISTER   ("REGISTER"),
+        UNREGISTER ("UNREGISTER"),
+        READ_FILE  ("READ_FILE"),
+        WRITE_FILE ("WRITE_FILE"),
+        UNKNOWN    ("");
+        
+        public String action;
+        
+        private PARAMICS_ACTIONS(String a){
+            action = a;
+        }
+        
+        /**
+         * Returns the PARAMICS_ACTIONS enumeration value which has an action
+         * value that matches the parameter value.
+         * @param a Paramics action.
+         * @throws ScriptException if the parameter value is invalid.
+         * @return PARAMICS_ACTIONS for the parameter value.
+         */ 
+        public static PARAMICS_ACTIONS fromString(String a) {
+            for(PARAMICS_ACTIONS act : values()) {
+                if(act.action.equals(a))
+                    return act;
+            }
+            
+            return UNKNOWN;
+        }       
+    }
+    
+}
+
Index: /branches/trunk/src/tmcsim/common/CADScriptTags.java
===================================================================
--- /branches/trunk/src/tmcsim/common/CADScriptTags.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/CADScriptTags.java	(revision 82)
@@ -0,0 +1,239 @@
+package tmcsim.common;
+
+
+/**
+ * CADScriptTags contains enumerations grouping tag and attribute names
+ * used in parsing and creating a simulation script. 
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class CADScriptTags {
+
+    /**
+     * Enumeration representing the tag names corresponding to major XML 
+     * document elements in a CAD Script. 
+     * @author Matthew Cechini
+     */
+    public static enum SCRIPT_LEVEL_TAGS {
+        TMC_SCRIPT          ("TMC_SCRIPT"),
+        SCRIPT_EVENT        ("SCRIPT_EVENT"),
+        CAD_DATA            ("CAD_DATA"),
+        HEADER_INFO         ("HEADER_INFO"),
+        LOCATION_INFO       ("LOCATION_INFO"),
+        CAD_INCIDENT_EVENT  ("CAD_INCIDENT_EVENT"), 
+        PARAMICS            ("PARAMICS");
+        
+        public String tag;
+        
+        private SCRIPT_LEVEL_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the SCRIPT_EVENT
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum SCRIPT_EVENT_TAGS {
+        TIME_INDEX     ("TIME_INDEX"),
+        INCIDENT       ("INCIDENT"),
+        LOG_NUMBER     ("LogNum");
+        
+        public String tag;
+        
+        private SCRIPT_EVENT_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the LOCATION_INFO
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum LOCATION_INFO_TAGS {
+        ID             ("ID");
+        
+        public String tag;
+        
+        private LOCATION_INFO_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the CAD_DATA
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum CAD_INCIDENT_DATA_TAGS {
+        AUDIO             ("AUDIO"),    
+        CCTV_INFO         ("CCTV_INFO"),
+        DETAIL            ("DETAIL"),
+        UNIT              ("UNIT"),
+        WITNESS           ("WITNESS"),
+        TOW               ("TOW"),
+        SERVICE           ("SERVICE");
+        
+        public String tag;
+        
+        private CAD_INCIDENT_DATA_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the HEADER_INFO
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum INCIDENT_HEADER_TAGS {
+        LOG_NUMBER     ("LogNum"),
+        LOG_STATUS     ("LogStatus"),
+        DESCRIPTION    ("Desc"),
+        PRIORITY       ("Priority"),
+        TYPE           ("Type"),
+        FULL_LOCATION  ("FullLoc"),
+        TRUNC_LOCATION ("TruncLoc"),
+        BEAT           ("Beat"),
+        CALLBOX        ("Callbox");
+        
+        public String tag;
+        
+        private INCIDENT_HEADER_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the UNIT
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum UNIT_TAGS {
+        UNIT_NUMBER      ("UnitNum"),
+        UNIT_STATUS      ("Status"),
+        UNIT_PRIMARY     ("Primary"),
+        UNIT_ACTIVE      ("Active");
+        
+        public String tag;
+        
+        private UNIT_TAGS (String t) {
+            tag = t;
+        }       
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the TOW
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum TOW_TAGS {
+        TOW_COMPANY_NAME ("Company"),
+        CONF_PHONE_NUM   ("ConfNum"),
+        PUBLIC_PHONE_NUM ("PubNum"),
+        BEAT             ("Beat");
+        
+        public String tag;
+        
+        private TOW_TAGS(String t) {
+            tag = t;
+        }       
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the WITNESS
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum WITNESS_TAGS {
+        WITNESS_NAME     ("Name"),
+        WITNESS_ADDRESS  ("Address"),
+        WITNESS_PHONE    ("PhoneNum");
+        
+        public String tag;
+        
+        private WITNESS_TAGS(String t) {
+            tag = t;
+        }       
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the SERVICE
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum SERVICE_TAGS {   
+        SERVICE_NAME     ("Name"),
+        CONF_PHONE_NUM   ("ConfNum"),
+        PUBLIC_PHONE_NUM ("PubNum");
+        
+        public String tag;
+        
+        private SERVICE_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the AUDIO
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum AUDIO_TAGS {
+        FILE_PATH    ("Path"),
+        FILE_LENGTH  ("Length");
+        
+        public String tag;
+        
+        private AUDIO_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the PARAMICS
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum PARAMICS_TAGS {
+        LOCATION_ID      ("LocationID");    
+        
+        public String tag;
+        
+        private PARAMICS_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /**
+     * Enumeration representing the tag names corresponding to XML 
+     * document tag and attribute names within the CCTV
+     * element in a CAD Script.
+     * @author Matthew Cechini
+     */
+    public static enum CCTV_TAGS {
+        CCTV_ID          ("ID"),
+        CCTV_DIR         ("Dir"),
+        CCTV_TOGGLE      ("Toggle");    
+        
+        public String tag;
+        
+        private CCTV_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+}
Index: /branches/trunk/src/tmcsim/common/CCTVInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/common/CCTVInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/CCTVInfo.java	(revision 82)
@@ -0,0 +1,35 @@
+package tmcsim.common;
+
+import java.io.Serializable;
+
+/**
+ * The CCTVInfo object holds information that is used during a simulation to 
+ * toggle a CCTV camera (referenced by the ID and direction) to begin or 
+ * stop showing incident data.
+ * 
+ * @author
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class CCTVInfo implements Serializable {
+
+    /** Paramics CCTV unique id. */
+    public int cctv_id;
+
+    /** Direction of CCTV. */
+    public CCTVDirections direction;
+
+    /** Flag to designate whether the CCTV is being toggled on(true) or off(false). */
+    public boolean toggle;
+    
+
+    /**
+     * Constructor.
+     */
+    public CCTVInfo() {
+        cctv_id   = 0;
+        direction = CCTVDirections.NORTH;
+        toggle    = false;
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/common/ObserverMessage.java
===================================================================
--- /branches/trunk/src/tmcsim/common/ObserverMessage.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/ObserverMessage.java	(revision 82)
@@ -0,0 +1,53 @@
+package tmcsim.common;
+
+
+/**
+ * The ObserverMessage acts as a message object to pass information between 
+ * components within the CADClient and CAD Simulator.  The ObserverMessage
+ * contains a enumerated message type and data object that may be used
+ * by observers.
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+public class ObserverMessage {
+    
+    /**
+     * Enumeration of all possible message types.
+     * 
+     * INCIDENT_INQUIRY      - Notify observers with a new IncidentInquiry model object.
+     * INCIDENT_SUMMARY      - Notify observers with a new IncidentSummry model object.
+     * INCIDENT_BOARD        - Notify observers with a new IncidentBoard model object.
+     * ROUTED_MESSAGE        - Notify observers with a new RouteMessage model object.
+     * BLANK_SCREEN          - Notify observers with a new BlankScreen model object.
+     * SCREEN_UPDATE         - Notify observers with a new ScreenUpdate string.
+     * TIME_UPDATE           - Notify observers with a new CAD Time value.
+     * ROUTED_MESSAGE_COUNT_UPDATE  - Notify observers with a new count of routed messages.
+     * ROUTED_MESSAGE_UNREAD_UPDATE - Notify observers with the unread message status boolean.
+     * CAD_INFO_MESSAGE      - Notify observers with a new CAD info message.
+     * REFRESH_VIEW          - Notify observers with to refresh the current view.
+     * RESET_SIMULATION      - Notify observers that the simulation is being reset.
+     */
+    public static enum messageType { INCIDENT_INQUIRY, INCIDENT_SUMMARY, INCIDENT_BOARD, 
+                                     ROUTED_MESSAGE, BLANK_SCREEN, SCREEN_UPDATE, 
+                                     TIME_UPDATE, ROUTED_MESSAGE_COUNT_UPDATE,
+                                     ROUTED_MESSAGE_UNREAD_UPDATE, CAD_INFO_MESSAGE, 
+                                     REFRESH_VIEW, RESET_SIMULATION };
+    
+    /** Type of message. */
+    public messageType type  = null;
+    
+    /** Data being sent to observers. */
+    public Object      value = null;    
+    
+    /**
+     * 
+     * @param newType Type of message.
+     * @param o Data object.
+     */
+    public ObserverMessage(messageType newType, Object o) {
+        type  = newType;
+        value = o;
+    }   
+    
+}
Index: /branches/trunk/src/tmcsim/common/XMLIncident.java
===================================================================
--- /branches/trunk/src/tmcsim/common/XMLIncident.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/XMLIncident.java	(revision 82)
@@ -0,0 +1,298 @@
+package tmcsim.common;
+
+import java.io.Serializable;
+import java.util.Vector;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * XMLIncident contains incident information used to create the XML file that 
+ * is transmitted to paramics.  It's methods construct an XML element with the
+ * incident data.  
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:41 $ $Revision: 1.4 $
+ */
+@SuppressWarnings("serial")
+public class XMLIncident implements Serializable {      
+
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {      
+        /** Current Incident info. */
+        INCIDENT   ("Incident"),
+        /** Incident's ID. */
+        ID         ("Identifier"),
+        /** Incident's status. */
+        STATUS     ("Status"),
+        /** Incident Location. */
+        LOCATION   ("Location"),
+        /** Incident's route location. */
+        ROUTE      ("Route"),
+        /** Incident's route direction. */
+        DIRECTION  ("Direction"),
+        /** Incident's route location type. */
+        LOC_TYPE   ("Location_type"),
+        /** Incident's route postmile. */
+        POSTMILE   ("Postmile"),
+        /** Incident's type. */
+        INC_TYPE   ("Incident_type"),
+        /** Incident lanes. */
+        LANES      ("Lanes"),
+        /** Lane number. */
+        LANE_NUM   ("Lane_number");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    /**
+     * Enumeration containing possible incident status values.
+     */
+    public static enum INCIDENT_STATUS { 
+        NEW      ("NEW"), 
+        CHANGED  ("CHANGED"), 
+        ON_GOING ("ON_GOING"), 
+        CLEARED  ("CLEARED");  
+    
+        public String status;
+        
+        private INCIDENT_STATUS(String s) {
+            status = s;
+        }
+        
+        /**
+         * Returns the INCIDENT_STATUS enumeration value which has a status
+         * value that matches the parameter value.
+         * @param val Incident status.
+         * @throws ScriptException if the parameter value is invalid.
+         * @return INCIDENT_STATUS for the parameter value.
+         */
+        public static INCIDENT_STATUS fromValue(String val) throws ScriptException {
+            
+            for(INCIDENT_STATUS incStatus : values()) {
+                if(incStatus.status.equals(val))
+                    return incStatus;
+            }
+            throw new ScriptException(ScriptException.INVALID_ENUM, val);
+        }       
+    
+    };
+    
+    /**
+     * Enumeration containing possible incident type values.
+     */
+    public static enum INCIDENT_TYPE { 
+        LANE_BREAKDOWN ("LANE_BREAKDOWN"); 
+    
+        public String type;
+        
+        private INCIDENT_TYPE(String s) {
+            type = s;
+        }
+            
+        /**
+         * Returns the INCIDENT_STATUS enumeration value which has a status
+         * value that matches the parameter value.
+         * @param val Incident status.
+         * @throws ScriptException if the parameter value is invalid.
+         * @return INCIDENT_STATUS for the parameter value.
+         */
+        public static INCIDENT_TYPE fromValue(String val) throws ScriptException {
+            
+            for(INCIDENT_TYPE incType : values()) {
+                if(incType.type.equals(val))
+                    return incType;
+            }
+            throw new ScriptException(ScriptException.INVALID_ENUM, val);
+        }     
+    };  
+
+    /** Incident unique ID. */
+    private String incidentID    = null;
+    
+    /** Incident status. */
+    private INCIDENT_STATUS incidentStatus = null;
+    
+    /** Incident type. */ 
+    private INCIDENT_TYPE incidentType  = null;
+    
+    /** Lane numbers affected incident. */
+    private Vector<String> lanes = null;
+    
+    /** Incident location object. */
+    private ParamicsLocation theLocation = null;
+    
+    
+    /**
+     * Constructor.  Initialize data members.
+     * 
+     * @param id Incident ID.
+     * @param newLocation Incident location.
+     */  
+    public XMLIncident(String id, ParamicsLocation newLocation) {
+        
+        incidentID     = id;
+        theLocation    = newLocation;
+        incidentStatus = INCIDENT_STATUS.CLEARED; 
+        incidentType   = INCIDENT_TYPE.LANE_BREAKDOWN;  
+        lanes          = new Vector<String>();
+    }
+        
+    /**
+     * Get the incident ID.
+     * @return Incident ID.
+     */
+    public String getIdentifier() {
+        return incidentID;  
+    }
+    
+    
+    /**
+     * Receive the tag name and data from XML parsing.
+     * @param name XML Tag name.
+     * @param value XML Tag value.
+     * @throws ScriptException if there is an error in parsing the node data.
+     */
+    public void readXMLNode(String name, String value) throws ScriptException {
+        
+        if(name.equals(XML_TAGS.STATUS.tag))
+            incidentStatus = INCIDENT_STATUS.fromValue(value);      
+        else if(name.equals(XML_TAGS.INC_TYPE.tag))
+            incidentType = INCIDENT_TYPE.fromValue(value);
+        else if(name.equals(XML_TAGS.LANE_NUM.tag))
+            lanes.add(value);       
+                
+    }   
+    
+    /**
+     * Adds XML tags to the parameter Element for this Incident with the 
+     * following schema: <br/>
+     * <Incident><br/>
+     *      <Identifier/><br/>
+     *      <Status/><br/>
+     *      <Location><br/>
+     *           <Route/><br/>
+     *           <Direction/><br/>
+     *           <Location_type/><br/>
+     *           <Postmile/><br/>
+     *      </Location><br/>
+     *      <Incident_type/><br/>
+     *      <Lanes><br/>
+     *          <Lane_number/><br/>
+     *      </Lanes><br/>
+     * </Incident><br/>
+     *
+     * @param currElem XML Element used as a root for XML tag appending.
+     */
+    public void toXML(Element currElem) {
+                        
+        Document theDoc = currElem.getOwnerDocument();
+                
+        Element incidentElem = theDoc.createElement(XML_TAGS.INCIDENT.tag);
+        currElem.appendChild(incidentElem);
+        
+        Element idElement = theDoc.createElement(XML_TAGS.ID.tag);
+        idElement.appendChild(theDoc.createTextNode(incidentID));
+        incidentElem.appendChild(idElement);
+
+        Element statusElement = theDoc.createElement(XML_TAGS.STATUS.tag);
+        statusElement.appendChild(theDoc.createTextNode(incidentStatus.status));
+        incidentElem.appendChild(statusElement);
+        
+        writeLocationXML(incidentElem);
+            
+        Element typeElement = theDoc.createElement(XML_TAGS.INC_TYPE.tag);
+        typeElement.appendChild(theDoc.createTextNode(incidentType.type));
+        incidentElem.appendChild(typeElement);
+            
+        writeLanesXML(incidentElem);
+        
+    }
+    
+    /**
+     *
+     * Write the location information for the incident with the following
+     * XML Schema: <br>
+     * <Location><br>
+     *      <Route/><br>
+     *      <Direction/><br>
+     *      <Location_type/><br>
+     *      <Postmile/><br>
+     * </Location><br>
+     */
+    protected void writeLocationXML(Element currElem) {
+
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element locationElement = theDoc.createElement(XML_TAGS.LOCATION.tag);
+        currElem.appendChild(locationElement);
+
+        Element routeElement = theDoc.createElement(XML_TAGS.ROUTE.tag);
+        routeElement.appendChild(theDoc.createTextNode(theLocation.incidentRoute));
+        locationElement.appendChild(routeElement);
+
+        Element directionElement = theDoc.createElement(XML_TAGS.DIRECTION.tag);
+        directionElement.appendChild(theDoc.createTextNode(theLocation.incidentDirection));
+        locationElement.appendChild(directionElement);
+
+        Element typeElement = theDoc.createElement(XML_TAGS.LOC_TYPE.tag);
+        typeElement.appendChild(theDoc.createTextNode(theLocation.incidentLocType));
+        locationElement.appendChild(typeElement);
+
+        Element postmileElement = theDoc.createElement(XML_TAGS.POSTMILE.tag);
+        postmileElement.appendChild(theDoc.createTextNode(theLocation.incidentPostmile));
+        locationElement.appendChild(postmileElement);
+    }
+    
+    /**
+     * Write the lanes for the incident with the following XML Schema.<br/>
+     * <Lanes><br>
+     *     <Lane_number/><br>
+     *     <Lane_number/><br>
+     * </Lanes><br>
+     */
+    protected void writeLanesXML(Element currElem) {
+        
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element lanesElement = theDoc.createElement(XML_TAGS.LANES.tag);
+        currElem.appendChild(lanesElement);
+
+        Element laneElement = null;     
+
+        for(String l : lanes) {
+            laneElement = theDoc.createElement(XML_TAGS.LANE_NUM.tag);
+            laneElement.appendChild(theDoc.createTextNode(l));
+            lanesElement.appendChild(laneElement);      
+        }
+    }
+    
+    /** 
+     * This method is used to set the status of this incident object to
+     * "ON_GOING" if the incident has not been cleard.
+     */
+    public void update() {
+        
+        if(!isCleared())
+            incidentStatus = INCIDENT_STATUS.ON_GOING;
+        
+    }
+    
+    /**
+     * Method is called to determine if this incident update object is clearing 
+     * an incident.  This is determined by checking if the status string is "CLEARED".
+     *
+     * @return true if object is clearing an incident, false if not.
+     */
+    public boolean isCleared() {
+        return (incidentStatus == INCIDENT_STATUS.CLEARED); 
+    }
+    
+}         
Index: /branches/trunk/src/tmcsim/common/package.html
===================================================================
--- /branches/trunk/src/tmcsim/common/package.html	(revision 82)
+++ /branches/trunk/src/tmcsim/common/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains classes for common objects within the CAD software.
+  </body>
+</html>
Index: /branches/trunk/src/tmcsim/common/CADEnums.java
===================================================================
--- /branches/trunk/src/tmcsim/common/CADEnums.java	(revision 82)
+++ /branches/trunk/src/tmcsim/common/CADEnums.java	(revision 82)
@@ -0,0 +1,304 @@
+package tmcsim.common;
+
+import java.io.Serializable;
+import java.util.Vector;
+
+
+/**
+ * CADEnums contains enumerations used to encapsulate specific lists of data.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class CADEnums {
+    
+    /**
+     * Enumeration representing the possible page numbers in the
+     * CAD screen.  The next() method will cycle through the pages in the following
+     * order: ONE - TWO - THREE - FOUR - (repeat).  Each enumeration has an integer
+     * value equal to that name of the object.
+     * @author Matthew Cechini
+     */
+    public static enum CADScreenNum 
+    { 
+        ONE(1), 
+        TWO(2), 
+        THREE(3), 
+        FOUR(4);
+   
+        /** Numerical value of the CADScreen number. */
+        public int intNum;
+        
+        /**
+         * Constructor.
+         * @param i Screen number value.
+         */
+        CADScreenNum(int i) {
+            intNum = i;
+        }
+        
+        /**
+         * Returns the CADScreenNum enumeration value which follows the current value.
+         * @return Next CADScreen number.
+         */
+        public CADScreenNum next() {
+            switch(this) {
+                case ONE:
+                    return TWO;
+                case TWO:
+                    return THREE;
+                case THREE:
+                    return FOUR;
+                case FOUR:
+                default:
+                    return ONE;
+                
+            }
+        }               
+     
+        /**
+         * Returns the CADScreenNum enumeration value which has a integer
+         * value that matches the parameter value.
+         * @param val Page number.
+         * @throws ScriptException if the parameter value is invalid.
+         * @return CADScreen for page number.
+         */
+        public static CADScreenNum fromValue(int val) {
+            
+            for(CADScreenNum screen : values()) {
+                if(screen.intNum == val)
+                    return screen;
+            }
+            
+            return ONE;
+        }       
+        
+        /**
+         * Return an ordered list of CADScreenNum objects.  The list is ordered from
+         * ONE through FOUR.
+         * 
+         * @return Ordered list of CADScreenNum objects.
+         */
+        public static Vector<CADScreenNum> orderedList() {
+            Vector<CADScreenNum> orderedList = new Vector<CADScreenNum>();
+            
+            orderedList.add(ONE);
+            orderedList.add(TWO);
+            orderedList.add(THREE);
+            orderedList.add(FOUR);
+            
+            return orderedList;
+        }
+    }
+
+    /**
+     * Enumeration representing the possible CAD Screens that are viewable
+     * in the CAD.  
+     * @author Matthew Cechini
+     */
+    public static enum CADScreenType { 
+        BLANKSCREEN, 
+        II_INCIDENT_INQUIRY, 
+        ON_LOGIN_SCREEN,
+        SA_INCIDENT_SUMMARY, 
+        IB_INCIDENT_BOARD, 
+        TO_ROUTED_MESSAGE 
+    };
+
+    /**
+     * Enumeration containing the key code values for the keyboard keys that 
+     * are mapped to CAD functions. 
+     * @author Matthew Cechini
+     */
+    public static enum CAD_KEYS implements Serializable {
+        COMMAND_LINE_TX    (112),  
+        PGUP               (36),
+        LEFT_ARROW         (37),
+        UP_ARROW           (38),
+        RIGHT_ARROW        (39),
+        DOWN_ARROW         (40),
+        PGDN               (35),
+        REFRESH            (34),
+        CYCLE              (33),
+        BACKSPACE          (8),
+        PREV_QUEUE         (121), 
+        DELETE_QUEUE       (120),
+        NEXT_QUEUE         (119),
+        SCREEN_CLEAR       (123),    
+        COMMAND_LINE_CLEAR (122),    
+        SHIFT_KEY          (16),
+        ENTER              (10),
+        UNKNOWN            (-1);
+        
+        public int value;
+        
+        //{CAD, STD}
+        public static String keyboard_type = "STD";   
+        
+        private CAD_KEYS(int v) {
+            value         = v;          
+        }
+        
+        /**
+         * Returns the CAD_KEYS enumeration value which has a key
+         * value that matches the parameter value.
+         * @param v Key value.
+         * @throws ScriptException if the parameter value is invalid.
+         * @return CAD_KEYS for the parameter value.
+         */ 
+        public static CAD_KEYS fromValue(String kbd_type, int v) {
+            
+            String prevType = null;
+            
+            try {
+                //Preserve previous keyboard type, if not same as parameter.
+                if(!kbd_type.equals(keyboard_type)) {
+                    prevType = keyboard_type;
+                    
+                    if(kbd_type.equals("CAD")) {
+                        setupCADKeyboard();
+                    }
+                    else {
+                        setupStandardKeyboard();
+                    }
+                }
+                
+                //Find matching key.
+                for(CAD_KEYS key : values()) {
+                    if(key.value == v)
+                        return key;
+                }               
+                
+                return UNKNOWN;
+            } 
+            finally {
+                //Restore previous keyboard type, if saved.
+                if(prevType != null) {
+                    if(prevType.equals("CAD")) {
+                        setupCADKeyboard();
+                    }
+                    else {
+                        setupStandardKeyboard();
+                    }
+                }
+            }
+        }
+        
+        public static void setupCADKeyboard() {
+            SCREEN_CLEAR.value       = 61451;
+            COMMAND_LINE_CLEAR.value = 61450;
+            COMMAND_LINE_TX.value    = 61447;
+
+            keyboard_type = "CAD";
+        }
+        
+        public static void setupStandardKeyboard() {
+            SCREEN_CLEAR.value       = 123;
+            COMMAND_LINE_CLEAR.value = 122;
+            COMMAND_LINE_TX.value    = 112;
+            
+            keyboard_type = "STD";
+        }
+        
+    };
+                                       
+    /**
+     * Enumeration representing the possible directional arrows that may be pressed.  
+     * @author Matthew Cechini
+     */               
+    public static enum ARROW { 
+        LEFT, 
+        RIGHT, 
+        UP, 
+        DOWN };
+
+    /**
+     * Enumeration representing possible errors that may occur as a result of CAD
+     * command line parsing.  Each object has an associated text message for display. 
+     * @author Matthew Cechini
+     */
+    public static enum CAD_ERROR { 
+        UNAUTH_CMD  ("0002: Unauthorized Command"), 
+        NO_LOG_NUM  ("0744: Must provide log # when no log is on display"),
+        KYBD_LOCK   ("0796: KYBD Successfuly Locked"),
+        INVALID_LOG ("0753: Invalid Log Number");
+        
+        /** Error message. */
+        public String message;
+        
+        /**
+         * Constructor.
+         * @param m Error message.
+         */
+        CAD_ERROR(String m) {
+            message = m;    
+        }
+            
+    }
+
+    /**
+     * Enumeration representing possible text styles that will be used in CAD screen
+     * document creation.
+     * @author Matthew Cechini
+     */
+    public static enum TEXT_STYLES { 
+        BLUE          ("blue"),
+        BLACK         ("black"),
+        AQUA          ("aqua"),
+        RED           ("red"),
+        GRAY          ("gray"),
+        CYAN          ("cyan"),
+        YELLOW        ("yellow"),
+        WHITE         ("white"),
+        GREEN         ("green"),
+        ORANGE        ("orange"),
+        REVERSE_GREEN ("rev_green"),
+        REVERSE_CYAN  ("rev_cyan"),
+        GREEN_HIGHLIGHT ("green_highlight"),
+        
+        REGULAR ("regular"),
+        ITALIC  ("italic"),
+        BOLD    ("bold"),
+        
+        COURIER ("Courier");    
+            
+        /** Style string. */
+        public String style;
+        
+        /**
+         * Constructor.
+         * @param s Style string.
+         */
+        TEXT_STYLES(String s) {
+            style = s;  
+        }
+    }
+
+    /**
+     * Enumeration representing all possible states that the script may be in.
+     * @author Matthew Cechini
+     */
+    public static enum SCRIPT_STATUS { 
+        NO_SCRIPT, 
+        SCRIPT_STOPPED_NOT_STARTED, 
+        SCRIPT_PAUSED_STARTED, 
+        SCRIPT_RUNNING,
+        ATMS_SYNCHRONIZATION};
+
+    /**
+     * Enumeration representing all possible states of the paramics connection.
+     * @author Matthew Cechini
+     */
+    public static enum PARAMICS_STATUS { 
+        UNKNOWN, 
+        CONNECTING, 
+        CONNECTED, 
+        DISCONNECTED, 
+        SENDING_NETWORK_ID, 
+        LOADING, 
+        WARMING, 
+        LOADED, 
+        DROPPED, 
+        UNREACHABLE };
+
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentCallBacks.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentCallBacks.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentCallBacks.java	(revision 82)
@@ -0,0 +1,66 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentCallBacks implements Serializable
+{
+    private String initial;
+    private String comment;
+    
+    private static enum CALL_BACKS_ENUMS
+    {
+        INITIAL     ("INITIAL"),
+        COMMENT   ("COMMENT");
+        
+        public String tag;
+        
+        private CALL_BACKS_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentCallBacks(){
+        initial = "";
+        comment = "";
+    }
+    
+    public String getInitial() {
+        return initial;
+    }
+    
+    public void setInitial(String initial) {
+        this.initial = initial;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+    
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(CALL_BACKS_ENUMS.INITIAL.tag))
+        {
+            setInitial(value);
+        }
+        else if(tag_name.equals(CALL_BACKS_ENUMS.COMMENT.tag))
+        {
+            setComment(value);
+        }
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryModel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryModel.java	(revision 82)
@@ -0,0 +1,159 @@
+package tmcsim.cadmodels;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.CADEnums.CADScreenNum;
+import tmcsim.common.CADEnums.CADScreenType;
+import tmcsim.common.CADProtocol.CAD_COMMANDS;
+
+
+/**
+ * IncidentInquiryModel is a CADScreenModel object containing data that is 
+ * displayed in the IncidentInquiry CAD Screen.  The addModelObject() method 
+ * is used to update the model data with new information.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.  
+ * See the class description for the CADScreenModel and 
+ * IncidentInquiryModel_obj Objects for their XML schema.<br/>
+ * <ROOT>
+ *    <INCIDENT_INQUIRY>
+ *       <BASE_MODEL_INFO/>
+ *       ... IncidentInquiryModel_obj ...
+ *    </INCIDENT_INQUIRY>
+ * </ROOT>
+ * 
+ * @see IncidentInquiryModel_obj
+ * @see CADScreenModel
+ * @author Matthew Cechini
+ * @version
+ */
+public class IncidentInquiryModel extends CADScreenModel {
+
+    /** Object containing model data. */
+    private IncidentInquiryModel_obj theModelObj = null;    
+    
+    /**
+     * Constructor. Initialize the model data and set the log number.
+     * This constructor is used when creating an IncidentInquiry
+     * model object where the source is the script.
+     * 
+     * @param num CADScreen number for this model object.
+     * @param logNum Unique log number for this model object.
+     */
+    public IncidentInquiryModel(CADScreenNum num, Integer logNum) {
+        super(CADScreenType.II_INCIDENT_INQUIRY, num);
+        
+        theModelObj = new IncidentInquiryModel_obj();
+        theModelObj.setLogNumber(logNum);
+    }
+    
+    /**
+     * Constructor. Initialize the model data and set the log number.
+     * This constructor is used when creating an IncidentInquiry
+     * model object where the source is a CAD position.
+     * 
+     * @param CADPostion CAD Position number for where data originated.
+     * @param num CADScreen number for this model object.
+     * @param logNum Unique log number for this model object.
+     */    
+    public IncidentInquiryModel(int CADPosition, CADScreenNum num, Integer logNum) {
+        super(CADScreenType.II_INCIDENT_INQUIRY, num);
+        
+        theModelObj = new IncidentInquiryModel_obj(CADPosition);
+        theModelObj.setLogNumber(logNum);
+    }    
+    
+    /**
+     * Constructor. Initialize the model data from the parameter Node.
+     * 
+     * @param newNode Node containing model data.
+     * @throws ScriptException if there is an error in parsing the Node.
+     */    
+    public IncidentInquiryModel(Node newNode) throws ScriptException {
+        super(CADScreenType.II_INCIDENT_INQUIRY, CADScreenNum.ONE);
+        
+        fromXML(newNode);   
+    }
+    
+    /**
+     * Updates the private IncidentInquiryModel_obj object with the parameter.
+     * 
+     * @param iimo An IncidentInquiryModel_obj object to be added
+     */
+    public void addModelObject(Object iimo) {                       
+        theModelObj.update((IncidentInquiryModel_obj)iimo);      
+    }                   
+    
+    /** 
+     * Returns the private IncidentInquiryModel object.
+     * 
+     * @return The model's data object.
+     */
+    public IncidentInquiryModel_obj getModelObject() {        
+        return theModelObj; 
+    } 
+    
+    /**
+     * Sets the model object's log number.
+     * 
+     * @param newLogNumber The new log number.
+     */
+    public void setLogNumber(Integer newlogNumber) {
+        theModelObj.setLogNumber(newlogNumber);
+    }    
+    
+    /**
+     * Gets the unique log number for this model's data.
+     * 
+     * @return Integer log number.
+     */
+    public Integer getLogNumber() {
+        return theModelObj.getLogNumber();
+    }    
+    
+    /**
+     * Compares a parameter IncidentInquiry model object's log number against
+     * this object's log number.
+     * 
+     * @param iimo Model object whose log number will be compared with
+     *             this object's log number.
+     * @return true if log numbers match, false if not.
+     */
+    public boolean logNumMatches(IncidentInquiryModel_obj iimo) {
+        return iimo.getHeader().logNumber.equals(getLogNumber());
+    }
+        
+    public void toXML(Element currElem) {
+        
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element modelElem = theDoc.createElement(CAD_COMMANDS.INCIDENT_INQUIRY.fullName);
+        
+        baseToXML(modelElem);
+        
+        theModelObj.toXML(modelElem);
+                
+        currElem.appendChild(modelElem);
+    
+    }    
+    
+    public void fromXML(Node modelNode) throws ScriptException {    
+        
+        theModelObj = new IncidentInquiryModel_obj();
+        
+        modelNode = modelNode.getFirstChild();
+        
+        baseFromXML(modelNode);     
+        
+        modelNode = modelNode.getNextSibling();
+        
+        theModelObj.fromXML(modelNode);
+        
+    }    
+    
+
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentTimes.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentTimes.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentTimes.java	(revision 82)
@@ -0,0 +1,274 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentTimes implements Serializable
+{
+    private String unit;
+    private String alarm;
+    private String assigned;
+    private String enroute;
+    private String staged;
+    private String arrival;
+    private String access;
+    private String depart;
+    private String atDest;
+    private String status5;
+    private String available;
+    private String respNum;
+    
+    private String ring;
+    private String inQueue;
+    private String allAvailable;
+    private String callClosed;
+    
+    private static enum TIMES_ENUMS
+    {
+        UNIT     ("UNIT"),
+        ALARM  ("ALARM"),
+        ASSIGNED   ("ASSIGNED"), 
+        ENROUTE   ("ENROUTE"),
+        STAGED     ("STAGED"),
+        ARRIVAL     ("ARRIVAL"),
+        ACCESS  ("ACCESS"),
+        DEPART   ("DEPART"), 
+        AT_DEST   ("AT_DEST"),
+        STATUS_5     ("STATUS_5"),
+        AVAILABLE     ("AVAILABLE"),
+        RESP_NUM    ("RESP_NUM"),
+        
+        RING    ("RING"),
+        IN_QUEUE    ("IN_QUEUE"),
+        ALL_AVAILABLE   ("ALL_AVAILABLE"),
+        CALL_CLOSED ("CALL_CLOSED");
+        
+        public String tag;
+        
+        private TIMES_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentTimes(){
+        unit = "";
+        alarm = "";
+        assigned = "";
+        enroute = "";
+        staged = "";
+        arrival = "";
+        access = "";
+        depart = "";
+        atDest = "";
+        status5 = "";
+        available = "";
+        respNum = "";
+    }
+    
+    public String getUnit() {
+        return unit;
+    }
+    
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public String getAlarm() {
+        return alarm;
+    }
+
+    public void setAlarm(String alarm) {
+        this.alarm = alarm;
+    }
+
+    public String getAssigned() {
+        return assigned;
+    }
+
+    public void setAssigned(String assigned) {
+        this.assigned = assigned;
+    }
+
+    public String getEnroute() {
+        return enroute;
+    }
+
+    public void setEnroute(String enroute) {
+        this.enroute = enroute;
+    }
+
+    public String getStaged() {
+        return staged;
+    }
+
+    public void setStaged(String staged) {
+        this.staged = staged;
+    }
+
+    public String getArrival() {
+        return arrival;
+    }
+
+    public void setArrival(String arrival) {
+        this.arrival = arrival;
+    }
+
+    public String getAccess() {
+        return access;
+    }
+
+    public void setAccess(String access) {
+        this.access = access;
+    }
+
+    public String getDepart() {
+        return depart;
+    }
+
+    public void setDepart(String depart) {
+        this.depart = depart;
+    }
+
+    public String getAtDest() {
+        return atDest;
+    }
+
+    public void setAtDest(String atDest) {
+        this.atDest = atDest;
+    }
+
+    public String getStatus5() {
+        return status5;
+    }
+
+    public void setStatus5(String status5) {
+        this.status5 = status5;
+    }
+
+    public String getAvailable() {
+        return available;
+    }
+
+    public void setAvailable(String available) {
+        this.available = available;
+    }
+
+    public String getRespNum() {
+        return respNum;
+    }
+
+    public void setRespNum(String respNum) {
+        this.respNum = respNum;
+    }
+    
+    public String getRing() {
+        return ring;
+    }
+
+    public void setRing(String ring) {
+        this.ring = ring;
+    }
+    
+    public String getInQueue() {
+        return inQueue;
+    }
+
+    public void setInQueue(String inQueue) {
+        this.inQueue = inQueue;
+    }
+    
+    public String getAllAvailable() {
+        return allAvailable;
+    }
+
+    public void setAllAvailable(String allAvailable) {
+        this.allAvailable = allAvailable;
+    }
+    
+    public String getCallClosed() {
+        return callClosed;
+    }
+
+    public void setCallClosed(String callClosed) {
+        this.callClosed = callClosed;
+    }
+    
+    
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(TIMES_ENUMS.UNIT.tag))
+        {
+            setUnit(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.ALARM.tag))
+        {
+            setAlarm(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.ASSIGNED.tag))
+        {
+            setAssigned(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.ENROUTE.tag))
+        {
+            setEnroute(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.STAGED.tag))
+        {
+            setStaged(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.ARRIVAL.tag))
+        {
+            setArrival(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.ACCESS.tag))
+        {
+            setAccess(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.DEPART.tag))
+        {
+            setDepart(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.AT_DEST.tag))
+        {
+            setAtDest(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.STATUS_5.tag))
+        {
+            setStatus5(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.AVAILABLE.tag))
+        {
+            setAvailable(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.RESP_NUM.tag))
+        {
+            setRespNum(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.RING.tag))
+        {
+            setRing(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.IN_QUEUE.tag))
+        {
+            setInQueue(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.ALL_AVAILABLE.tag))
+        {
+            setAllAvailable(value);
+        }
+        else if(tag_name.equals(TIMES_ENUMS.CALL_CLOSED.tag))
+        {
+            setCallClosed(value);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentEvent.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentEvent.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentEvent.java	(revision 82)
@@ -0,0 +1,240 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+import java.util.Vector;
+
+import tmcsim.common.CCTVInfo;
+import tmcsim.common.XMLIncident;
+
+/**
+ * IncidentEvent class contains data for an event that occurs during a 
+ * simulation.  Incident event information includes the following:<br/>
+ * <ul>
+ * <li>Second after Incident begins Event is schedule to occur.</li>
+ * <li>Simulation time Event occurs.</li>
+ * <li>IncidentInquiry model data.</li>
+ * <li>Audio file name and duration.</li>
+ * <li>XMLIncident Objects</li>
+ * <li>CCTVInfo Objects</li>
+ * <li>Current Event status.</li>
+ * </ul>
+ * <br/>
+ * <br/>
+ * The EVENT_STATUS is used to keep track of what state this event is in.  An 
+ * event is WAITING until its time to occur is reached in the simulation.  The 
+ * event will then enter the TRIGGERED state if it has a wave file length 
+ * greater than 0, otherwise it will enter the COMPLETED state.  When an 
+ * audio file is completed, the wavePlayed() method is called, and the Event 
+ * enters the COMPLETED state.  The finalizeEvent method finalizes the Event by
+ * timestamping the model data and setting the number of seconds the event 
+ * occured in the simulation.  The EVENT_STATUS is then set to FINALIZED.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:40 $ $Revision: 1.4 $
+ */
+@SuppressWarnings("serial")
+public class IncidentEvent implements Comparable<IncidentEvent>, Serializable {
+    
+    /**
+     * Enumeration
+     * @author Matthew Cechini
+     */
+    public static enum EVENT_STATUS {
+        /** Waiting to be triggered. */
+        WAITING,
+        /** Event has been triggered. */
+        TRIGGERED,  
+        /** Completed audio playing, if necessary. */
+        COMPLETED,   
+        /** 
+         * Incident has been triggered, audio file has been played, 
+         * and model data timestamped. 
+         */
+        FINALIZED
+    };
+
+    /** Number of seconds after the incident begins that this event will trigger. */    
+    public long secondsToOccurInIncident;
+    
+    /** Number of seconds after the simulation started that this event occured. */  
+    public long secondsOccuredInSimulation;
+    
+    /** Model object containing the data that will be added to the incident when this event occurs. */  
+    public IncidentInquiryModel_obj eventInfo = null;
+    
+    /** Audio wav file associated with this event. */   
+    public String waveFile;
+    
+    /** Duration(in seconds) of the waveFile. */    
+    public int waveLength;
+            
+    /** Vector of XMLIncident objects which are associated with this incident event. */
+    public Vector<XMLIncident> XMLIncidents;
+    
+    /** Vector of CCTV objects which are associated with this incident event. */
+    public Vector<CCTVInfo> cctvInfos;
+    
+    /** Current Incident Event status. */
+    public EVENT_STATUS eventStatus;
+    
+
+    /**  
+     * Constructor.
+     *
+     * @param timeToOccur Time (in seconds) in simulation for this incident event to occur.
+     */
+    public IncidentEvent(long timeToOccur) {
+            
+        eventInfo       = new IncidentInquiryModel_obj();   
+        waveFile        = "";
+        waveLength      = 0;
+        eventStatus     = EVENT_STATUS.WAITING;
+        XMLIncidents    = new Vector<XMLIncident>();
+        cctvInfos       = new Vector<CCTVInfo>();
+
+        secondsToOccurInIncident   = timeToOccur;
+        secondsOccuredInSimulation = 0;   
+            
+    }    
+     
+   /**
+    * Constructor.
+    *
+    * @param timeToOccur      Time (in seconds) in simulation for this incident event to occur.
+    * @param info             IncidentInquiry model data.
+    * @param newWaveFile      Filename of audio wav file to be played with this event.
+    * @param newWaveLength    Duration (in seconds) of audio wav file
+    * @param newXMLIncidents  List of XMLIncidents for this event.
+    * @param newCCTVInfos     List of CCTVInfos for this event.
+    */
+    public IncidentEvent(long timeToOccur, 
+                         IncidentInquiryModel_obj info, 
+                         String newWaveFile, 
+                         int newWaveLength,
+                         Vector<XMLIncident> newXMLIncidents,
+                         Vector<CCTVInfo> newCCTVInfos){
+        
+        eventInfo       = info;
+        eventStatus     = EVENT_STATUS.WAITING;
+        waveFile        = newWaveFile;
+        waveLength      = newWaveLength;
+
+        XMLIncidents    = new Vector<XMLIncident>();
+        XMLIncidents.addAll(newXMLIncidents);
+        
+        cctvInfos       = new Vector<CCTVInfo>();
+        cctvInfos.addAll(newCCTVInfos);     
+        
+        secondsToOccurInIncident   = timeToOccur;
+        secondsOccuredInSimulation = 0;     
+    }
+    
+    /**
+     * Copy Constructor.
+     *
+     * @param timeToOccur      Time (in seconds) in simulation for this incident event to occur.
+     * @param info             IncidentInquiry model data.
+     * @param newWaveFile      Filename of audio wav file to be played with this event.
+     * @param newWaveLength    Duration (in seconds) of audio wav file
+     * @param newXMLIncidents  List of XMLIncidents for this event.
+     * @param newCCTVInfos     List of CCTVInfos for this event.
+     */
+     public IncidentEvent(final IncidentEvent copyEvent){
+        
+        eventInfo       = copyEvent.eventInfo;
+        eventStatus     = copyEvent.eventStatus;
+        waveFile        = copyEvent.waveFile;
+        waveLength      = copyEvent.waveLength;
+
+        XMLIncidents    = new Vector<XMLIncident>();
+        XMLIncidents.addAll(copyEvent.XMLIncidents);
+        
+        cctvInfos       = new Vector<CCTVInfo>();
+        cctvInfos.addAll(copyEvent.cctvInfos);      
+        
+        secondsToOccurInIncident   = copyEvent.secondsToOccurInIncident;
+        secondsOccuredInSimulation = copyEvent.secondsOccuredInSimulation;      
+     }    
+    
+    /** Compare objects according o comparison of secondsToOccurInIncident member data. */
+    public int compareTo(IncidentEvent o) {
+        if(secondsToOccurInIncident < o.secondsToOccurInIncident)
+            return -1;
+            
+        else if(secondsToOccurInIncident > o.secondsToOccurInIncident)
+            return 1;
+        
+        else 
+            return 0;
+    }
+    
+    /**
+     * Method determines if the Event is ready to be triggered.  This is 
+     * determined by assessing the current Event status and simulation
+     * time.  The Event will be triggered if the Event is WAITING and the
+     * Event's time to start has been reached.  The Event's relative start 
+     * time is added to the Incident start time parameter and compared
+     * against the current simulation time parameter.  If the audio file 
+     * duration is greater than  zero seconds, then the Event status is set to 
+     * TRIGGERED, and true is returned.  If the audio file is zero, the status 
+     * is set to COMPLETED and false is returned.
+     *
+     * @param incidentStartTime Simulation time that Event's Incident began (in seconds).
+     * @param simulationTime Current simulation time (in seconds).
+     * @return true if incident enters the TRIGGERED state, false if it is not 
+     * ready to be triggered or has entered the COMPLETED state.
+     */
+    public boolean triggerEvent(long incidentStartTime, long simulationTime) {
+        boolean retVal = false;
+        
+        if(eventStatus == EVENT_STATUS.WAITING &&
+           simulationTime > (incidentStartTime + secondsToOccurInIncident) )
+        {               
+            if(waveLength == 0) {
+                eventStatus = EVENT_STATUS.COMPLETED;
+            }
+            else {
+                retVal = true;
+                eventStatus = EVENT_STATUS.TRIGGERED;
+            }
+        }
+        
+        return retVal;
+    }        
+    
+  
+    /**
+     * Method is called when the Event's audio file completes.  The Event 
+     * status is set to COMPLETED.
+     */
+    public void wavePlayed() {
+        eventStatus = EVENT_STATUS.COMPLETED;
+    }
+    
+    /**
+     * Method is called to finalize and Event.  The Event info
+     * is timestamped with the parameter and the  secondsInSimulationOccured
+     * member is set to the current time in the simulation.  The Event
+     * status is set to FINALIZED.
+     *
+     * @param occured Current simulation time (in seconds). 
+     * @param timestamp CAD time stamp for model data. 
+     */
+    public void finalizeEvent(long occured, String timestamp) {
+        //set time stamp
+        eventInfo.timeStamp(timestamp);     
+        secondsOccuredInSimulation = occured;
+        
+        eventStatus = EVENT_STATUS.FINALIZED;
+    }
+    
+    /**
+     * Called to reset the simulation.  The Event status is set to WAITING and
+     * the secondsOccuredinSimulation is reset to 0.
+     */
+    public void resetSimulation() {
+        eventStatus = EVENT_STATUS.WAITING;
+        secondsOccuredInSimulation = 0;
+    }
+
+} 
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentAdditionalInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentAdditionalInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentAdditionalInfo.java	(revision 82)
@@ -0,0 +1,173 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentAdditionalInfo implements Serializable
+{
+    private int incidentNumber;
+    private String type;
+    private String machine;
+    private String callTaken;
+    private String callStatus;
+    private String callTakerExt;
+    private String alarmLevel;
+    private String rotationProviderArea;
+    private String comment;
+    
+    private static enum ADDITIONAL_INFO_ENUMS
+    {
+        INCIDENT_NUM    ("INCIDENT_NUM"),
+        TYPE            ("TYPE"),
+        MACHINE   ("MACHINE"), 
+        CALL_TAKEN   ("CALL_TAKEN"),
+        CALL_STATUS   ("CALL_STATUS"),
+        CALL_TAKER_EXT  ("CALL_TAKER_EXT"),
+        ALARM_LEVEL ("ALARM_LEVEL"),
+        ROTATION_PROVIDER_AREA  ("ROTATION_PROVIDER_AREA"),
+        COMMENT ("COMMENT");
+        
+        public String tag;
+        
+        private ADDITIONAL_INFO_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentAdditionalInfo(){
+        type = "";
+        machine = "";
+        callTaken = "";
+        callStatus = "";
+        callTakerExt = "";
+        alarmLevel = "";
+        rotationProviderArea = "";
+        comment = "";
+    }
+    
+    public String getMachine() {
+        return machine;
+    }
+
+    public void setMachine(String machine) {
+        this.machine = machine;
+    }
+
+    public String getCallTaken() {
+        return callTaken;
+    }
+
+    public void setCallTaken(String callTaken) {
+        this.callTaken = callTaken;
+    }
+
+    public String getCallStatus() {
+        return callStatus;
+    }
+
+    public void setCallStatus(String callStatus) {
+        this.callStatus = callStatus;
+    }
+
+    public String getCallTakerExt() {
+        return callTakerExt;
+    }
+
+    public void setCallTakerExt(String callTakerExt) {
+        this.callTakerExt = callTakerExt;
+    }
+
+    
+    
+    public int getIncidentNumber() {
+        return incidentNumber;
+    }
+    
+    public void setIncidentNumber(int incidentNumber) {
+        this.incidentNumber = incidentNumber;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+    
+    public String getAlarmLevel() {
+        return alarmLevel;
+    }
+
+    public void setAlarmLevel(String alarmLevel) {
+        this.alarmLevel = alarmLevel;
+    }
+    
+    public String getRotationProviderArea() {
+        return rotationProviderArea;
+    }
+
+    public void setRotationProviderArea(String rotationProviderArea) {
+        this.rotationProviderArea = rotationProviderArea;
+    }
+    
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+    
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(ADDITIONAL_INFO_ENUMS.INCIDENT_NUM.tag))
+        {
+            setIncidentNumber(Integer.parseInt(value));
+        }
+        else if(tag_name.equals(ADDITIONAL_INFO_ENUMS.TYPE.tag))
+        {
+            setType(value);
+        }
+        else if(tag_name.equals(ADDITIONAL_INFO_ENUMS.MACHINE.tag))
+        {
+            setMachine(value);
+        }
+        else if(tag_name.equals(ADDITIONAL_INFO_ENUMS.CALL_TAKEN.tag))
+        {
+            setCallTaken(value);
+        }
+        else if(tag_name.equals(ADDITIONAL_INFO_ENUMS.CALL_STATUS.tag))
+        {
+            setCallStatus(value);
+        }
+        else if(tag_name.equals(ADDITIONAL_INFO_ENUMS.CALL_TAKER_EXT.tag))
+        {
+            setCallTakerExt(value);
+        }
+        else if(tag_name.equals(ADDITIONAL_INFO_ENUMS.ALARM_LEVEL.tag))
+        {
+            setAlarmLevel(value);
+        }
+        else if(tag_name.equals(ADDITIONAL_INFO_ENUMS.ROTATION_PROVIDER_AREA.tag))
+        {
+            setRotationProviderArea(value);
+        }
+        else if(tag_name.equals(ADDITIONAL_INFO_ENUMS.COMMENT.tag))
+        {
+            setComment(value);
+        }
+    }
+    
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryLogEntry.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryLogEntry.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryLogEntry.java	(revision 82)
@@ -0,0 +1,121 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * IncidentInquiryLogEntry is the base model object used for IncidentInquiry
+ * log entries.  Every log entry has an associated position and timestamp for 
+ * where the data originated. <br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.<br/>
+ * <ROOT><br/>
+ *    <POSITION_INFO/><br/>
+ *    <TIMESTAMP/><br/>
+ * </ROOT><br/>
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class IncidentInquiryLogEntry implements Serializable {
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {      
+        /** Log entry position info. */
+        POSITION_INFO ("POSITION_INFO"),
+        /** Log entry timestamp. */
+        TIMESTAMP     ("TIMESTAMP");
+
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    /** Position information for this log entry. */
+    protected String positionInfo;
+
+    /** Time stamp value for this log entry. */
+    protected String timeStamp; 
+        
+    /** Default Constructor.  Initialize local data. */
+    public IncidentInquiryLogEntry() {
+        positionInfo   = "";
+        timeStamp      = "0000";
+    }
+    
+    /** 
+     * Constructor.  Set position info and time stamp. 
+     * 
+     * @param newPosInfo   Position info for this log entry
+     * @param newTimeStamp Time stamp for this log entry
+     */
+    public IncidentInquiryLogEntry(String newPosInfo, String newTimeStamp) {
+        positionInfo   = newPosInfo;
+        timeStamp      = newTimeStamp;    
+    }
+    
+    /**
+     * Creates XML tags with the model data and adds them to the parameter 
+     * Element.  See clss description for XML schema.
+     *
+     * @param currElem XML Element used as a root for XML tag appending.
+     */
+    public void toXML(Element currElem) {
+        Document theDoc    = currElem.getOwnerDocument();
+        Element  tempElem  = null;
+                
+        tempElem = theDoc.createElement(XML_TAGS.POSITION_INFO.tag);
+        tempElem.appendChild(theDoc.createTextNode(positionInfo));
+        currElem.appendChild(tempElem);
+                
+        tempElem = theDoc.createElement(XML_TAGS.TIMESTAMP.tag);
+        tempElem.appendChild(theDoc.createTextNode(timeStamp));
+        currElem.appendChild(tempElem);         
+    }
+    
+    /**
+     * Parses model data from the parameter Node.  See clss description for
+     * XML schema.
+     * 
+     * @param modelNode XML Node containing model information.
+     */
+    public void fromXML(Node modelNode) {   
+        Node childNode = null;
+        
+        //childNode = modelNode.getFirstChild();
+        positionInfo = modelNode.getTextContent();
+        
+        childNode = modelNode.getNextSibling();
+        timeStamp = childNode.getTextContent();     
+    }
+    
+    
+    /** 
+     * Sets the time stamp for this log entry. 
+     * 
+     * @param newStamp The timestamp value.
+     */
+    public void timeStamp(String newStamp) {
+        timeStamp = newStamp;       
+    }       
+    
+    /** 
+     * Returns the log information for this log entry.  The log information 
+     * is the concatenation of the entering position info and timestamp.
+     * 
+     * @return Log entry's log information 
+     */
+    public String getLogInfo() {
+        return positionInfo += timeStamp;
+    }
+}
Index: /branches/trunk/src/tmcsim/cadmodels/CMSDiversion.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/CMSDiversion.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/CMSDiversion.java	(revision 82)
@@ -0,0 +1,163 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * CMSDiversion is a container class used to hold information for a single 
+ * diversion that may be applied at a changeable message sign.  This 
+ * information includes the original path, new diversion path, paramics 
+ * diversion string, maximum diversion percentage, applied diversion 
+ * percentage, and simulation time the diversion was applied.  The updated
+ * and cleared flags are used to specify whether the diversion has been
+ * recently changed or is cleared.
+ * 
+ * @author  Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class CMSDiversion implements Serializable {
+
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        /** Diversion path. */
+        DIVERSION_PATH ("Diversion_path"),
+        /** Diversion percentage. */
+        PERCENTAGE     ("Percentage"),
+        /** Diversion identifier. */
+        IDENTIFIER     ("Identifier");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    /** Boolean flag to designate whether the diversion percentage has changed.*/
+    private boolean updated;
+    
+    /** Boolean flag to designate whether the diversion percentage is 0.  */
+    private boolean cleared;   
+    
+    /** Original path of traffic. */
+    public String  originalPath;
+
+    /** New path traffic will be diverted to. */
+    public String  newPath;
+
+    /** Paramics diversion path. */
+    public String  diversionPath;
+
+    /** Maximum diversion percentage. */
+    public Integer maxDiversionPercent;
+
+    /** Current diversion percentage. */
+    private Integer currDiversionPercent;
+
+    /** Time the current diversion percentage was applied. */
+    public Long timeApplied;
+
+    
+    /**
+     * Constructor.
+     * 
+     * @param oPath Original path traffic would take.
+     * @param nPath New path traffic will take.
+     * @param dPath Paramics diversion path.
+     * @param maxPerc Maximum diversion percentage.
+     */
+    public CMSDiversion(String oPath, String nPath, String dPath, Integer maxPerc) {
+
+        originalPath         = oPath;
+        newPath              = nPath;
+        diversionPath        = dPath;
+        maxDiversionPercent  = maxPerc;
+        currDiversionPercent = new Integer(0);
+        timeApplied          = new Long(0);
+        
+        updated = false;
+        cleared = (currDiversionPercent == 0);              
+    }
+    
+    /**
+     * Get the current diversion percentage.
+     * 
+     * @return Integer value of current diversion percentage.
+     */
+    public int getCurrDiv() { 
+        return currDiversionPercent.intValue();
+    }
+    
+    /**
+     * Set the cleared flag to true if the new diversion is zero, false
+     * if not.  Set the updated flag if the new diversion percentage is
+     * differenct than the previous applied diversion, false if not.  
+     * Set the current diversion percentage to the parameter value.
+     * 
+     * @param newDiv New applied diversion percentage.
+     */
+    public void setCurrDiv(int newDiv) {
+        
+        cleared = (newDiv == 0);
+        updated = (newDiv != currDiversionPercent);
+            
+        currDiversionPercent = newDiv;          
+    }
+    
+    /**
+     * Determine whether this diversion has been updated in its last use.
+     * 
+     * @return True if diversion has been updated, false if not.
+     */
+    public boolean isUpdated() { return updated;}
+    
+    /**
+     * Determine if the current diversion has been cleared.
+     * 
+     * @return True if diversion is zero, false if not.
+     */
+    public boolean isCleared() { return cleared;}       
+    
+    /**
+     * Reset this diversion by ...
+     */
+    public void reset() {
+        currDiversionPercent = 0;
+        
+        updated = false;
+        cleared = (currDiversionPercent == 0);      
+    }
+    
+    /**
+     * Write the XML output for the diversion information 
+     * represented in this object.  THe format is as follows:
+     * <Diversion_path>
+     *    <Identifier/>
+     *    <Percentage/>
+     * <Diversion_path>
+     * 
+     * @param xmlOut XMLWriter used for XML creation.
+     */
+    public void toXML(Element currElem) {
+        
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element divPathElem = theDoc.createElement(XML_TAGS.DIVERSION_PATH.tag);
+        currElem.appendChild(divPathElem);
+        
+        Element idElem = theDoc.createElement(XML_TAGS.IDENTIFIER.tag);
+        idElem.appendChild(theDoc.createTextNode(diversionPath));
+        divPathElem.appendChild(idElem);
+
+        Element pctElem = theDoc.createElement(XML_TAGS.PERCENTAGE.tag);
+        pctElem.appendChild(theDoc.createTextNode(String.valueOf(currDiversionPercent)));
+        divPathElem.appendChild(pctElem);
+        
+    }
+}   
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentEditLog.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentEditLog.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentEditLog.java	(revision 82)
@@ -0,0 +1,95 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentEditLog implements Serializable
+{
+    private String edit;
+    private String reason;
+    private String changeBy;
+    private String terminal;
+    
+    private static enum EDIT_LOG_ENUMS
+    {
+        EDIT     ("EDIT"),
+        REASON  ("REASON"),
+        CHANGE_BY   ("CHANGE_BY"), 
+        TERMINAL   ("TERMINAL");
+        
+        public String tag;
+        
+        private EDIT_LOG_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentEditLog(){
+        edit = "";
+        reason = "";
+        changeBy = "";
+        terminal = "";
+    }
+    
+    public String getEdit() {
+        return edit;
+    }
+    
+    public void setEdit(String edit) {
+        this.edit = edit;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getChangeBy() {
+        return changeBy;
+    }
+
+    public void setChangeBy(String changeBy) {
+        this.changeBy = changeBy;
+    }
+
+    public String getTerminal() {
+        return terminal;
+    }
+
+    public void setTerminal(String terminal) {
+        this.terminal = terminal;
+    }
+    
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(EDIT_LOG_ENUMS.EDIT.tag))
+        {
+            setEdit(value);
+        }
+        else if(tag_name.equals(EDIT_LOG_ENUMS.REASON.tag))
+        {
+            setReason(value);
+        }
+        else if(tag_name.equals(EDIT_LOG_ENUMS.CHANGE_BY.tag))
+        {
+            setChangeBy(value);
+        }
+        else if(tag_name.equals(EDIT_LOG_ENUMS.TERMINAL.tag))
+        {
+            setTerminal(value);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentGeneralInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentGeneralInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentGeneralInfo.java	(revision 82)
@@ -0,0 +1,104 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentGeneralInfo implements Serializable
+{
+    private String id;
+    private String masterIncNum;
+    private String jurisdiction;
+    private String alarm;
+    private String agy;
+    
+    private static enum GENERAL_ENUMS
+    {
+        ID     ("ID"),
+        JURISDICTION   ("JURISDICTION"), 
+        ALARM   ("ALARM"),
+        AGY     ("AGY");
+        
+        public String tag;
+        
+        private GENERAL_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentGeneralInfo(){
+        jurisdiction = "";
+        alarm = "";
+        agy = "";
+    }
+    
+    public String getJurisdiction() {
+        return jurisdiction;
+    }
+    
+    public void setJurisdiction(String jurisdiction) {
+        this.jurisdiction = jurisdiction;
+    }
+
+    public String getAlarm() {
+        return alarm;
+    }
+
+    public void setAlarm(String alarm) {
+        this.alarm = alarm;
+    }
+
+    public String getAgy() {
+        return agy;
+    }
+
+    public void setAgy(String agy) {
+        this.agy = agy;
+    }
+
+    public String getMasterIncNum() {
+        return masterIncNum;
+    }
+
+    public void setMasterIncNum(String masterIncNum) {
+        this.masterIncNum = masterIncNum;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+    
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(GENERAL_ENUMS.ID.tag))
+        {
+            setId(value);
+        }
+        else if(tag_name.equals(GENERAL_ENUMS.JURISDICTION.tag))
+        {
+            setJurisdiction(value);
+        }
+        else if(tag_name.equals(GENERAL_ENUMS.ALARM.tag))
+        {
+            setAlarm(value);
+        }
+        else if(tag_name.equals(GENERAL_ENUMS.AGY.tag))
+        {
+            setAgy(value);
+        }
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/CADScreenModel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/CADScreenModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/CADScreenModel.java	(revision 82)
@@ -0,0 +1,341 @@
+package tmcsim.cadmodels;
+
+
+import java.util.Observable;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.CADEnums.CADScreenNum;
+import tmcsim.common.CADEnums.CADScreenType;
+
+/**
+ * CADScreenModel is the base model object for all CAD Screen models.  The 
+ * information contained within this base class includes the CAD time and date,
+ * number of routed messages, whether any messages are unread, CAD screen 
+ * number, and the screen update status values.  This data is used for every 
+ * CAD Screen during display.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.<br/>
+ * <ROOT>
+ *    <BASE_MODEL_INFO>
+ *       <COMMAND_LINE/>
+ *       <FOOTER>
+ *          <CAD_TIME/>
+ *          <CAD_DATE/>
+ *          <ROUTED_MESSAGES/>
+ *          <UNREAD_MESSAGES/>
+ *          <SCREEN_NUM/>
+ *          <SCREEN_UPDATES>
+ *             <HAS_UPDATE Screen_Num=""/>
+ *             <HAS_UPDATE Screen_Num=""/>
+ *             <HAS_UPDATE Screen_Num=""/>
+ *             <HAS_UPDATE Screen_Num=""/>
+ *          </SCREEN_UPDATES>
+ *       </FOOTER>
+ *    </BASE_MODEL_INFO>
+ * </ROOT>
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+public abstract class CADScreenModel extends Observable {   
+
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        /** CAD screen mnodel. */
+        CAD_SCREEN_MODEL  ("CAD_SCREEN_MODEL"),
+        /** CAD model update. */
+        CAD_MODEL_UPDATE  ("CAD_MODEL_UPDATE"),
+        /** CAD model type. */
+        MODEL_TYPE        ("MODEL_TYPE"),
+        /** Base model information. */
+        BASE_MODEL_INFO   ("BASE_MODEL_INFO"),
+        /** Current command line. */
+        COMMAND_LINE      ("COMMAND_LINE"),
+        /** CAD screen footer. */
+        FOOTER            ("FOOTER"),
+        /** Current CAD time. */
+        CAD_TIME          ("CAD_TIME"),
+        /** Current CAD date. */
+        CAD_DATE          ("CAD_DATE"),
+        /** Screen number. */
+        SCREEN_NUM        ("SCREEN_NUM"),
+        /** Number of routed messages. */
+        ROUTED_MESSAGES   ("ROUTED_MESSAGES"),
+        /** Boolean to designate if unread messages are in the queue. */
+        UNREAD_MESSAGES   ("UNREAD_MESSAGES"),
+        /** Screen update stati. */
+        SCREEN_UPDATES    ("SCREEN_UPDATES"),
+        /** Page number attribute. */
+        UPDATE_SCREEN_NUM ("Screen_Number"),
+        /** Screen update's stats.. */
+        HAS_UPDATE        ("HAS_UPDATE");
+
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+        
+    }   
+    
+    /** Current command line. */
+    public String commandLine;    
+    
+    /** Screen type for this model. */
+    public CADScreenType screenType;
+    
+    /** Screen number for this model. */    
+    public CADScreenNum  screenNum;
+    
+    /** Number of routed messages for this CAD terminal. */
+    public int numberRoutedMessages;
+    
+    /** Boolean flag to designate whether there are unread routed messages. */
+    public boolean unreadMessages;
+    
+    /** Current update status for all CAD screens. */
+    public TreeMap<CADScreenNum, Boolean> screenUpdateMap;
+    
+    /** Current CAD Date value. MMYY*/
+    static public String theCADDate = "";
+    
+    /** Current CAD Time value. HHMM*/   
+    static public String theCADTime = "";   
+    
+
+    /**
+     * Constructor.  Initiailze data.  Set screenUpdateMap to be
+     * false for all screens.
+     * 
+     * @param type CADScreenType for this model.
+     * @param num CADScreenNum for this model.
+     */
+    public CADScreenModel(CADScreenType type, CADScreenNum num) { 
+        
+        screenNum   = num;
+        screenType  = type;
+        commandLine = "";    
+        numberRoutedMessages = 0;
+        unreadMessages       = false;
+                    
+        screenUpdateMap = new TreeMap<CADScreenNum, Boolean>();
+
+        for(CADScreenNum screen : CADScreenNum.orderedList()) {
+            screenUpdateMap.put(screen, false);
+        }
+    }        
+    
+    public abstract void addModelObject(Object o);
+    
+    /**
+     * Creates XML tags with the model data and adds them to the parameter 
+     * Element.  The baseToXML() method is called to add the base
+     * XML tags for CAD model data.  See clss description for XML schema.
+     *
+     * @param currElem XML Element used as a root for XML tag appending.
+     */
+    public abstract void toXML(Element currElem);
+    
+    /**
+     * Parses model data from the parameter Node.  The fromToXML() method is 
+     * called to parse the base XML tags for CAD model data.  See clss 
+     * description for XML schema.
+     * 
+     * @param modelNode XML Node containing model information.
+     * @throws ScriptException if there is an error in parsing the Node.
+     */
+    public abstract void fromXML(Node modelNode) throws ScriptException;
+
+    /**
+     * Writes the base model data to the XMLWriter.  See the class
+     * description for the base model XML schema.
+     * 
+     * @param currElem XML Element used as a root for XML tag appending.
+     */
+    public void baseToXML(Element currElem) {
+
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element baseModelElem = theDoc.createElement(XML_TAGS.BASE_MODEL_INFO.tag);
+        
+        Element cmdLineElem = theDoc.createElement(XML_TAGS.COMMAND_LINE.tag);
+        cmdLineElem.appendChild(theDoc.createTextNode(commandLine));
+        baseModelElem.appendChild(cmdLineElem);
+        
+        Element footerElem = theDoc.createElement(XML_TAGS.FOOTER.tag);
+        baseModelElem.appendChild(footerElem);
+                
+        Element timeElem   = theDoc.createElement(XML_TAGS.CAD_TIME.tag);
+        timeElem.appendChild(theDoc.createTextNode(theCADTime));
+        footerElem.appendChild(timeElem);
+
+        Element dateElem   = theDoc.createElement(XML_TAGS.CAD_DATE.tag);
+        dateElem.appendChild(theDoc.createTextNode(theCADDate));
+        footerElem.appendChild(dateElem);
+
+        Element routedMsgsElem = theDoc.createElement(XML_TAGS.ROUTED_MESSAGES.tag);
+        routedMsgsElem.appendChild(theDoc.createTextNode(String.valueOf(numberRoutedMessages)));
+        footerElem.appendChild(routedMsgsElem);
+
+        Element unreadMsgsElem = theDoc.createElement(XML_TAGS.UNREAD_MESSAGES.tag);
+        unreadMsgsElem.appendChild(theDoc.createTextNode(String.valueOf(unreadMessages)));
+        footerElem.appendChild(unreadMsgsElem);
+
+        Element screenNumElem   = theDoc.createElement(XML_TAGS.SCREEN_NUM.tag);
+        screenNumElem.appendChild(theDoc.createTextNode(String.valueOf(screenNum.intNum)));
+        footerElem.appendChild(screenNumElem);
+        
+        Element screenUpdatesElem = theDoc.createElement(XML_TAGS.SCREEN_UPDATES.tag);
+        footerElem.appendChild(screenUpdatesElem);
+
+        Element updateElem = null;
+        for(CADScreenNum screen : CADScreenNum.orderedList()) {
+            updateElem = theDoc.createElement(XML_TAGS.HAS_UPDATE.tag);         
+            updateElem.appendChild(theDoc.createTextNode(String.valueOf(screenUpdateMap.get(screen))));
+            updateElem.setAttribute(XML_TAGS.UPDATE_SCREEN_NUM.tag, String.valueOf(screen.intNum));
+
+            screenUpdatesElem.appendChild(updateElem);
+        }
+        
+        currElem.appendChild(baseModelElem);
+        
+    }   
+    
+    /**
+     * Read in the base model data from the XML node. See the class
+     * description for the base model XML schema.
+     * 
+     * @param modelNode XML Node containing model information.
+     * @throws ScriptException if there is an error in parsing the node.
+     */
+    public void baseFromXML(Node modelNode) throws ScriptException {
+        //COMMAND_LINE node
+        Node node = modelNode.getFirstChild();
+        commandLine = node.getTextContent();
+        
+        //FOOTER node
+        node = node.getNextSibling();       
+
+        //CAD_TIME node
+        node = node.getFirstChild();
+        theCADTime = node.getTextContent();
+
+        //CAD_DATE node
+        node = node.getNextSibling();
+        theCADDate = node.getTextContent();
+        
+        //ROUTED_MESSAGES node
+        node = node.getNextSibling();
+        numberRoutedMessages = Integer.valueOf(node.getTextContent()).intValue();
+        
+        //UNREAD_MESSAGES node
+        node = node.getNextSibling();
+        unreadMessages = Boolean.valueOf(node.getTextContent()).booleanValue();
+        
+        //SCREEN_NUM node
+        node = node.getNextSibling();
+        screenNum = CADScreenNum.fromValue(Integer.valueOf(node.getTextContent()).intValue());      
+        
+        //SCREEN_UPDATES node
+        node = node.getNextSibling();
+        NodeList updates = node.getChildNodes();
+        
+        screenUpdateMap.clear();
+        Integer pageNumber   = null;
+        Boolean updateStatus = null;
+        for(int i = 0; i < updates.getLength(); i++) {
+            
+            pageNumber   = Integer.valueOf(updates.item(i).getAttributes().
+                    getNamedItem(XML_TAGS.UPDATE_SCREEN_NUM.tag).getTextContent());
+            updateStatus = Boolean.valueOf(updates.item(i).getTextContent());
+            
+            screenUpdateMap.put(CADScreenNum.fromValue(pageNumber), updateStatus);
+        }
+    }
+
+    /**
+     * Get the CAD screen type for this model.
+     * @return Current CADScreenType object.
+     */
+    public CADScreenType getType() {
+        return screenType;
+    }
+    
+    /**
+     * Get the CAD screen number for this model.
+     * @return Current CADScreenNum object.
+     */
+    public CADScreenNum getScreenNum() {
+        return screenNum;
+    }
+    
+    /**
+     * This static method converts the parameter CAD screen status update
+     * map into a String representation.  The resulting String is in the
+     * following format:  "<#>=true,<#>=false,<#>=true,<#>=false" where <#>
+     * is the CAD screen number.  
+     * 
+     * @param updateMap Map containing screen update flags.
+     * @return A String concatenation of screen update information.
+     */
+    public static String updateMapToString(TreeMap<CADScreenNum, Boolean> updateMap) {
+        
+        StringBuffer mapBuf = new StringBuffer();
+        
+        for(CADScreenNum screen : updateMap.keySet()) {
+            mapBuf.append(screen.intNum);
+            mapBuf.append("=");
+            mapBuf.append(updateMap.get(screen).toString());
+            mapBuf.append(",");
+        }       
+        
+        mapBuf.setLength(mapBuf.length()-1);
+        
+        return mapBuf.toString();
+    }
+    
+    /**
+     * This static method converts the parameter CAD screen status update
+     * String into an update Map. The parameter String must have the 
+     * following format:  "<#>=true,<#>=false,<#>=true,<#>=false" where <#>
+     * is the CAD screen number.  
+     * 
+     * @param updateString String containing CAD screen status update info. 
+     * @return Map containing CAD Screen update info.
+     */
+    public static TreeMap<CADScreenNum, Boolean> updateStringToMap(String updateString) {
+        
+        TreeMap<CADScreenNum, Boolean> updateMap = new TreeMap<CADScreenNum, Boolean>();
+        
+        StringTokenizer strTok = new StringTokenizer(updateString, ",");
+        String token = null;
+        
+        CADScreenNum screen  = null;
+        Boolean screenUpdate = null;
+        
+        while(strTok.hasMoreTokens()) {
+            token = strTok.nextToken();
+            
+            screen = CADScreenNum.fromValue(Integer.parseInt(
+                        token.substring(0, token.indexOf("="))));
+            screenUpdate = Boolean.parseBoolean(token.substring(
+                    token.indexOf("=")+1, token.length()));
+            
+            updateMap.put(screen, screenUpdate);
+        }
+        
+        return updateMap;
+    }   
+
+}
Index: /branches/trunk/src/tmcsim/cadmodels/BlankScreenModel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/BlankScreenModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/BlankScreenModel.java	(revision 82)
@@ -0,0 +1,76 @@
+package tmcsim.cadmodels;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.CADEnums.CADScreenNum;
+import tmcsim.common.CADEnums.CADScreenType;
+import tmcsim.common.CADProtocol.CAD_COMMANDS;
+
+
+/**
+ * BlankScreenModel is a CADScreenModel object used to display a blank CAD Screen.  
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.  
+ * See the class description for the CADScreenModel XML schema.<br/>
+ * <ROOT>
+ *    <BLANK_SCREEN>
+ *       <BASE_MODEL_INFO/>
+ *    </BLANK_SCREEN>
+ * </ROOT>
+ * 
+ * @see CADScreenModel
+ * @author Matthew Cechini
+ * @version
+ */
+public class BlankScreenModel extends CADScreenModel {
+    
+    
+    /**
+     * Constructor.  Initialize base class with screen model type and
+     * current cad screen number.
+     * 
+     * @param num Current CADScreen number.
+     */
+    public BlankScreenModel(CADScreenNum num) {
+        super(CADScreenType.BLANKSCREEN, num);
+        
+    }
+    
+    /**
+     * Constructor.  Initialize base class with screen model type and
+     * current cad screen number.
+     * 
+     * @param newNode Node containing XML data for this model object.
+     * @throws ScriptException if there is an error in parsing the Node.
+     */    
+    public BlankScreenModel(Node newNode) throws ScriptException {
+        super(CADScreenType.BLANKSCREEN, CADScreenNum.ONE);
+        
+        fromXML(newNode);   
+    }
+        
+    public void addModelObject(Object o) {}
+  
+    public void toXML(Element currElem) {
+        
+        Document theDoc = currElem.getOwnerDocument();
+
+        Element modelElem = theDoc.createElement(CAD_COMMANDS.BLANK_SCREEN.fullName);
+        
+        baseToXML(modelElem);   
+
+        currElem.appendChild(modelElem);
+    }
+    
+    public void fromXML(Node modelNode) throws ScriptException {    
+        
+        modelNode = modelNode.getFirstChild();
+        baseFromXML(modelNode);
+        
+    }  
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentProblem.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentProblem.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentProblem.java	(revision 82)
@@ -0,0 +1,74 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentProblem implements Serializable
+{
+   private String problemCode;
+   private String priority;
+   
+   private static enum PROBLEM_ENUMS
+    {
+        CODE       ("CODE"), 
+        PRIORITY   ("PRIORITY");
+        
+        public String tag;
+        
+        private PROBLEM_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+   
+   /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+   public IncidentProblem(String code, String prio)
+   {
+       setProblemCode(code);
+       setPriority(prio);
+   }
+
+   public IncidentProblem() 
+   {
+       problemCode = "";
+       priority = "";
+   }
+
+   public String getProblemCode() {
+       return problemCode;
+   }
+
+   public void setProblemCode(String problemCode) {
+       this.problemCode = problemCode;
+   }
+
+   public String getPriority() {
+       return priority;
+   }
+
+   public void setPriority(String priority) {
+       this.priority = priority;
+   }
+   
+   /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+   public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(PROBLEM_ENUMS.CODE.tag))
+        {
+            setProblemCode(value);
+        }
+        else if(tag_name.equals(PROBLEM_ENUMS.PRIORITY.tag))
+        {
+            setPriority(value);
+        }
+    }
+   
+   
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryUnitsAssigned.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryUnitsAssigned.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryUnitsAssigned.java	(revision 82)
@@ -0,0 +1,138 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * IncidentInquiryUnitsAssigned extends from IncidentInquiryLogEntry
+ * to provide a model object containing information used to display an assigned
+ * unit.  Data for an assigned unit includes a flag designating whether
+ * the unit is primary, the beat number, the unit's status, and a flag 
+ * designating whether the unit is active or not.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.<br/>
+ * <ROOT><br/>
+ *    <IS_PRIMARY/><br/>
+ *    <BEAT>/<br/>
+ *    <STATUS_TYPE/><br/>
+ *    <IS_ACTIVE/><br/>
+ *    <POSITION_INFO/><br/>
+ *    <TIMESTAMP/><br/>
+ * </ROOT><br/>
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class IncidentInquiryUnitsAssigned extends IncidentInquiryLogEntry 
+    implements Serializable {
+    
+    private static enum XML_TAGS {
+        /** Unit's primary flag. */
+        IS_PRIMARY  ("IS_PRIMARY"),     
+        /** Unit's beat. */
+        BEAT        ("BEAT"),
+        /** Unit's status type. */
+        STATUS_TYPE ("STATUS_TYPE"),
+        /** Unit's active flag. */
+        IS_ACTIVE   ("IS_ACTIVE");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+        
+    }
+
+    /** Unit is primary flag. */
+    public boolean isPrimary;   
+
+    /** Unit's beat. */
+    public String  beat;    
+ 
+    /** Unit's current status. */
+    public String  statusType;  
+
+    /** Unit's current active flag. */
+    public boolean isActive;
+    
+    
+    /** 
+     * Constructor.  Initialize all unit data to empty strings or false.
+     * 
+     *  @param newPosInfo String containing position info for this log entry
+     */
+    public IncidentInquiryUnitsAssigned(String newPosInfo) {
+        super(newPosInfo, "0000");
+        
+        isPrimary  = false;
+        beat       = "";
+        statusType = "";
+        isActive   = false;     
+    }
+  
+    /**
+     * Constructor.  Parse parameter node for Unit log entry data.
+     * 
+     * @param theNode Node containing data for this Unit log entry
+     */
+    public IncidentInquiryUnitsAssigned(Node theNode) { 
+        fromXML(theNode);
+    }   
+
+    public void toXML(Element currElem) {
+        
+        Document theDoc    = currElem.getOwnerDocument();
+        Element  tempElem  = null;
+        
+        tempElem = theDoc.createElement(XML_TAGS.IS_PRIMARY.tag);
+        tempElem.appendChild(theDoc.createTextNode(String.valueOf(isPrimary)));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.BEAT.tag);
+        tempElem.appendChild(theDoc.createTextNode(beat));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.STATUS_TYPE.tag);
+        tempElem.appendChild(theDoc.createTextNode(statusType));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.IS_ACTIVE.tag);
+        tempElem.appendChild(theDoc.createTextNode(String.valueOf(isActive)));
+        currElem.appendChild(tempElem);
+
+        super.toXML(currElem);
+    }    
+    
+    public void fromXML(Node modelNode) {   
+        
+        Node childNode = null;
+        
+        childNode = modelNode.getFirstChild();
+        isPrimary = Boolean.parseBoolean(childNode.getTextContent());
+        
+        childNode = childNode.getNextSibling();
+        beat = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        statusType = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        isActive = Boolean.parseBoolean(childNode.getTextContent());
+
+        childNode = childNode.getNextSibling();
+        super.fromXML(childNode);
+        
+    }     
+    
+    
+    /** Determines equality based on beat */
+    public boolean equals(Object o) {
+        return beat.equals(((IncidentInquiryUnitsAssigned)o).beat);
+    }
+}
Index: /branches/trunk/src/tmcsim/cadmodels/CADRoutedMessage.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/CADRoutedMessage.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/CADRoutedMessage.java	(revision 82)
@@ -0,0 +1,110 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+import java.util.Calendar;
+
+/**
+ * CADRoutedMessage is used to contain information for a routed message
+ * between CAD positions.  Message information includes origin and destination
+ * CAD positions, message date and time, message text, and a flag to specify
+ * that this message is a incident update.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:40 $ $Revision: 1.4 $
+ */
+@SuppressWarnings("serial")
+public class CADRoutedMessage implements Comparable<CADRoutedMessage>, Serializable {
+
+    /** CAD Position that sent this routed message. */
+    public int fromPosition;
+
+    /** CAD Position tha tthis routed message is being sent to. */
+    public int toPosition;
+
+    /** String representation of the current data in format DDMMYYYY. */
+    public String date;
+
+    /** String representation of the current time in format HH:MM:SS */
+    public String time;
+
+    /** Routed message text. */
+    public String message; 
+    
+    /** Flag to designate whether this is a routed IncidentInquiry page */
+    public boolean incidentUpdate;
+    
+    /**
+     * Constructor.  Initializes source, destination, and message from 
+     * method parameters.  Initializes date and time to current values.
+     *
+     * @param from CAD position message has been sent from.
+     * @param to CAD Position to route the message to
+     * @param newMessage Routed message that has been entered
+     */
+    public CADRoutedMessage(int from, int to, String newMessage, boolean isIncidentUpdate) {
+        fromPosition = from;
+        toPosition   = to;
+        date         = "";
+        time         = "";
+            
+            
+        Calendar rightNow = Calendar.getInstance();
+        
+        /*** BUILD TIME ***/
+        
+        //String currentTime = "";
+        if(rightNow.get(Calendar.HOUR_OF_DAY) < 10)
+            time += "0";
+        
+        time += (String.valueOf(rightNow.get(Calendar.HOUR_OF_DAY))) + ":";
+        
+        if(rightNow.get(Calendar.MINUTE) < 10)
+            time += "0";
+        
+        time += (String.valueOf(rightNow.get(Calendar.MINUTE))) + ":";      
+        
+        
+        if(rightNow.get(Calendar.SECOND) < 10)
+            time += "0";
+        
+        time += (String.valueOf(rightNow.get(Calendar.SECOND)));
+        
+        
+        /*** BUILD DATE ***/
+        
+        if(rightNow.get(Calendar.MONTH) < 10)
+            date += "0";
+        date += String.valueOf(rightNow.get(Calendar.MONTH));
+        
+        if(rightNow.get(Calendar.DAY_OF_MONTH) < 10)
+            date += "0";
+        date += String.valueOf(rightNow.get(Calendar.DAY_OF_MONTH));
+        
+        date += String.valueOf(rightNow.get(Calendar.YEAR));
+        
+        message        = newMessage;
+        incidentUpdate = isIncidentUpdate;
+    }
+
+    
+
+    /**
+     * Overloaded Comparable.compareTo() method to allow this object to be 
+     * added to an order collection.
+     */
+    public int compareTo(CADRoutedMessage o) {
+        return time.compareTo(o.time);
+    }
+    
+    /**
+     * Overloaded equals method, determining equality by checking all data members.
+     */
+    public boolean equals(Object o) {
+        return ((CADRoutedMessage)o).toPosition == toPosition &&
+               ((CADRoutedMessage)o).fromPosition == fromPosition &&
+               ((CADRoutedMessage)o).date.equals(date) &&
+               ((CADRoutedMessage)o).message.equals(message);
+         
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentCaller.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentCaller.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentCaller.java	(revision 82)
@@ -0,0 +1,100 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentCaller implements Serializable
+{
+    private String callerType;
+    private String callerName;
+    private String phone;
+    private String ext;
+    
+    private static enum CALLER_ENUMS
+    {
+        TYPE   ("TYPE"), 
+        NAME   ("NAME"),
+        PHONE  ("PHONE"),
+        EXT    ("EXT");
+        
+        public String tag;
+        
+        private CALLER_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentCaller(String type, String name)
+    {
+        setCallerType(type);
+        setCallerName(name);
+    }
+    
+    public IncidentCaller()
+    {
+        callerType = "";
+        callerName = "";
+    }
+
+    public String getCallerType() {
+        return callerType;
+    }
+
+    public void setCallerType(String callerType) {
+        this.callerType = callerType;
+    }
+
+    public String getCallerName() {
+        return callerName;
+    }
+
+    public void setCallerName(String callerName) {
+        this.callerName = callerName;
+    }
+    
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+    
+    public String getExt() {
+        return ext;
+    }
+
+    public void setExt(String ext) {
+        this.ext = ext;
+    }
+    
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(CALLER_ENUMS.TYPE.tag))
+        {
+            setCallerType(value);
+        }
+        else if(tag_name.equals(CALLER_ENUMS.NAME.tag))
+        {
+            setCallerName(value);
+        }
+        else if(tag_name.equals(CALLER_ENUMS.PHONE.tag))
+        {
+            setCallerName(value);
+        }
+        else if(tag_name.equals(CALLER_ENUMS.EXT.tag))
+        {
+            setCallerName(value);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryServices.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryServices.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryServices.java	(revision 82)
@@ -0,0 +1,119 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+
+/**
+ * IncidentInquiryServices extends from IncidentInquiryLogEntry
+ * to provide a model object containing information used to display a service
+ * unit assigned.  Data for a service includes the service's name and 
+ * the confidential and public phone numbers.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.<br/>
+ * <ROOT><br/>
+ *    <SERVICE/><br/>
+ *    <CONF_PHONE_NUM/>/<br/>
+ *    <PUB_PHONE_NUM/><br/>
+ *    <POSITION_INFO/><br/>
+ *    <TIMESTAMP/><br/>
+ * </ROOT><br/>
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class IncidentInquiryServices extends IncidentInquiryLogEntry 
+    implements Serializable {
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        /** Service's name. */
+        SERVICE        ("SERVICE"),
+        /** Service's confidential phone number. */
+        CONF_PHONE_NUM ("CONF_PHONE_NUM"),
+        /** Service's public phone number. */
+        PUB_PHONE_NUM  ("PUB_PHONE_NUM");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /** Service's name. */
+    public String serviceName;  
+    
+    /** Service's confidential phone number. */
+    public String confPhoneNum; 
+    
+    /** Service's public phone number. */
+    public String publicPhoneNum;   
+    
+    /** 
+     * Constructor.  Initialize all Service data to empty strings.
+     * 
+     *  @param newPosInfo String containing position info for this log entry
+     */
+    public IncidentInquiryServices(String newPosInfo) {
+        super(newPosInfo, "0000");
+
+        serviceName    = "";
+        confPhoneNum   = "";
+        publicPhoneNum = "";    
+    }
+    
+    /**
+     * Constructor.  Parse parameter node for Service log entry data.
+     * 
+     * @param theNode Node containing data for this Service log entry
+     */
+    public IncidentInquiryServices(Node theNode) {  
+        fromXML(theNode);
+    }
+    
+    public void toXML(Element currElem) {
+        
+        Document theDoc    = currElem.getOwnerDocument();
+        Element  tempElem  = null;
+        
+        tempElem = theDoc.createElement(XML_TAGS.SERVICE.tag);
+        tempElem.appendChild(theDoc.createTextNode(serviceName));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.CONF_PHONE_NUM.tag);
+        tempElem.appendChild(theDoc.createTextNode(confPhoneNum));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.PUB_PHONE_NUM.tag);
+        tempElem.appendChild(theDoc.createTextNode(publicPhoneNum));
+        currElem.appendChild(tempElem);
+
+        super.toXML(currElem);
+    }    
+    
+    public void fromXML(Node modelNode) {   
+        
+        Node childNode = null;
+        
+        childNode = modelNode.getFirstChild();
+        serviceName = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        confPhoneNum = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        publicPhoneNum = childNode.getTextContent();
+
+        childNode = childNode.getNextSibling();
+        super.fromXML(childNode);
+    }    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentActivities.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentActivities.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentActivities.java	(revision 82)
@@ -0,0 +1,111 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentActivities implements Serializable
+{
+    private String vehicle;
+    private String activity;
+    private String location;
+    private String comment;
+    private String disp;
+    
+    private static enum ACTIVITIES_ENUMS
+    {
+        VEHICLE     ("VEHICLE"),
+        ACTIVITY   ("ACTIVITY"),
+        LOCATION   ("LOCATION"), 
+        COMMENT   ("COMMENT"),
+        DISP      ("DISP");
+        
+        public String tag;
+        
+        private ACTIVITIES_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentActivities(){
+        vehicle = "";
+        activity = "";
+        location = "";
+        comment = "";
+        disp = "";
+    }
+    
+    public String getVehicle() {
+        return vehicle;
+    }
+    
+    public void setVehicle(String vehicle) {
+        this.vehicle = vehicle;
+    }
+
+    public String getActivity() {
+        return activity;
+    }
+
+    public void setActivity(String activity) {
+        this.activity = activity;
+    }
+
+    public String getLocation() {
+        return location;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+
+    public String getDisp() {
+        return disp;
+    }
+
+    public void setDisp(String disp) {
+        this.disp = disp;
+    }
+    
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(ACTIVITIES_ENUMS.VEHICLE.tag))
+        {
+            setVehicle(value);
+        }
+        else if(tag_name.equals(ACTIVITIES_ENUMS.ACTIVITY.tag))
+        {
+            setActivity(value);
+        }
+        else if(tag_name.equals(ACTIVITIES_ENUMS.LOCATION.tag))
+        {
+            setLocation(value);
+        }
+        else if(tag_name.equals(ACTIVITIES_ENUMS.COMMENT.tag))
+        {
+            setComment(value);
+        }
+        else if(tag_name.equals(ACTIVITIES_ENUMS.DISP.tag))
+        {
+            setDisp(value);
+        }
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentTransportInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentTransportInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentTransportInfo.java	(revision 82)
@@ -0,0 +1,95 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentTransportInfo implements Serializable
+{
+    private String name;
+    private String toCity;
+    private String toLocation;
+    private String toState;
+    
+    private static enum TRANSPORT_INFO_ENUMS
+    {
+        NAME     ("NAME"),
+        TO_CITY   ("TO_CITY"),
+        TO_LOCATION   ("TO_LOCATION"), 
+        TO_STATE     ("TO_STATE");
+        
+        public String tag;
+        
+        private TRANSPORT_INFO_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentTransportInfo(){
+        name = "";
+        toCity = "";
+        toLocation = "";
+        toState = "";
+    }
+    
+    public String getName() {
+        return name;
+    }
+    
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getToCity() {
+        return toCity;
+    }
+
+    public void setToCity(String toCity) {
+        this.toCity = toCity;
+    }
+
+    public String getToLocation() {
+        return toLocation;
+    }
+
+    public void setToLocation(String toLocation) {
+        this.toLocation = toLocation;
+    }
+
+    public String getToState() {
+        return toState;
+    }
+
+    public void setToState(String toState) {
+        this.toState = toState;
+    }
+    
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(TRANSPORT_INFO_ENUMS.NAME.tag))
+        {
+            setName(value);
+        }
+        else if(tag_name.equals(TRANSPORT_INFO_ENUMS.TO_CITY.tag))
+        {
+            setToCity(value);
+        }
+        else if(tag_name.equals(TRANSPORT_INFO_ENUMS.TO_LOCATION.tag))
+        {
+            setToLocation(value);
+        }
+        else if(tag_name.equals(TRANSPORT_INFO_ENUMS.TO_STATE.tag))
+        {
+            setToState(value);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentSummaryModel_obj.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentSummaryModel_obj.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentSummaryModel_obj.java	(revision 82)
@@ -0,0 +1,223 @@
+package tmcsim.cadmodels;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import tmcsim.common.ScriptException;
+
+/*
+ * The model object containing data for an entry in the IncidentSummary CAD Screen.
+ * 
+ * @author
+ * @version
+ */
+public class IncidentSummaryModel_obj {
+            
+    private static enum XML_TAGS {
+        /** Log number. */
+        LOG_NUMBER    ("LOG_NUMBER"),
+        /** Log status. */
+        LOG_STATUS    ("LOG_STATUS"),
+        /** Log creation date. */
+        DATE          ("DATE"),
+        /** Log creation time. */
+        TIME          ("TIME"),
+        /** Log priority. */
+        PRIORITY      ("PRIORITY"),
+        /** Log type. */
+        TYPE          ("TYPE"),
+        /** Log beat area. */
+        BEAT_AREA     ("BEAT_AREA"),
+        /** Log location. */
+        LOCATION      ("LOCATION"),
+        /** Log beat assigned. */
+        BEAT_ASSIGNED ("BEAT_ASSIGNED");
+
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }       
+    }
+    
+    /** Unique log number */
+    public Integer logNumber; 
+    
+    /** Log status */
+    public String logStatus;       
+    
+    /** Log creation date */
+    public String date;
+    
+    /** Log creation time */
+    public String time;
+    
+    /** Log priority */
+    public String priority;
+    
+    /** Log type */
+    public String callType;
+    
+    /** Log beat area */
+    public String beatArea;
+    
+    /** Log location */
+    public String location;
+    
+    /** log beat assigned */
+    public String beatAssigned;
+    
+        
+    /**
+     * Constructor.  Initialize all model data to empty strings.
+     */
+    public IncidentSummaryModel_obj() {
+        logNumber    = new Integer(0);
+        logStatus    = "";
+        date         = "";
+        time         = "";
+        priority     = "";  
+        callType     = "";
+        beatArea     = "";
+        location     = "";
+        beatAssigned = "";
+    }
+    
+    /**
+     * Constructor.  Initialize all model data to parameter data.
+     * 
+     * @param newLogNumber     Incident log number
+     * @param newLogStatus     Incident log status
+     * @param newDate          Incident creation date
+     * @param newTime          Incident create time
+     * @param newPriority      Incident priority
+     * @param newCallType      Incident type
+     * @param newBeatArea      Incident beat area
+     * @param newLocation      Incident location
+     * @param newBeatAssigned  Incident beat assigned
+     */    
+    public IncidentSummaryModel_obj(Integer newLogNumber,
+                                    String newLogStatus,
+                                    String newDate,
+                                    String newTime,
+                                    String newPriority,
+                                    String newCallType,
+                                    String newBeatArea,
+                                    String newLocation,
+                                    String newBeatAssigned) {
+        logNumber    = newLogNumber;
+        logStatus    = newLogStatus;
+        date         = newDate;
+        time         = newTime;
+        priority     = newPriority; 
+        callType     = newCallType;
+        beatArea     = newBeatArea;
+        location     = newLocation;
+        beatAssigned = newBeatAssigned;
+    }
+    
+    /**
+     * Constructor.  Initialize all model data with IncidentInquiryHeader.
+     * 
+     * @param newIncident IncidentInquiryHeader object containing data for
+     *                    IncidentSummery model.
+     */
+    public IncidentSummaryModel_obj(IncidentInquiryHeader newIncident) {
+        logNumber    = newIncident.logNumber;  
+        logStatus    = newIncident.logStatus;   
+        date         = newIncident.incidentDate;
+        time         = newIncident.incidentTime;
+        priority     = newIncident.priority;
+        callType     = newIncident.type;
+        beatArea     = newIncident.beat;
+        location     = newIncident.fullLocation;
+        beatAssigned = newIncident.beat; 
+    }
+    
+    /**
+     * Constructor.  Initialize all model data to data in parameter Node.
+     * 
+     * @param theNode Node containing data for IncidentSummary model.
+     */
+    public IncidentSummaryModel_obj(Node theNode) throws ScriptException {  
+        
+        fromXML(theNode);           
+        
+    }
+    
+    public void toXML(Element currElem) {
+        
+        Document theDoc    = currElem.getOwnerDocument();
+        Element  tempElem  = null;
+        
+        currElem.setAttribute(XML_TAGS.LOG_NUMBER.tag, logNumber.toString());
+        
+        tempElem = theDoc.createElement(XML_TAGS.LOG_STATUS.tag);
+        tempElem.appendChild(theDoc.createTextNode(logStatus));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.DATE.tag);
+        tempElem.appendChild(theDoc.createTextNode(date));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.TIME.tag);
+        tempElem.appendChild(theDoc.createTextNode(time));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.PRIORITY.tag);
+        tempElem.appendChild(theDoc.createTextNode(priority));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.TYPE.tag);
+        tempElem.appendChild(theDoc.createTextNode(callType));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.BEAT_AREA.tag);
+        tempElem.appendChild(theDoc.createTextNode(beatArea));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.LOCATION.tag);
+        tempElem.appendChild(theDoc.createTextNode(location));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.BEAT_ASSIGNED.tag);
+        tempElem.appendChild(theDoc.createTextNode(beatAssigned));
+        currElem.appendChild(tempElem);
+    
+    }
+    
+
+    public void fromXML(Node modelNode) throws ScriptException {   
+
+        Node childNode = null;
+        
+        logNumber = Integer.parseInt(modelNode.getAttributes().getNamedItem(
+                XML_TAGS.LOG_NUMBER.tag).getNodeValue());
+        
+        childNode = modelNode.getFirstChild();
+        logStatus = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        date = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        time = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        priority = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        callType = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        beatArea = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        location = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        beatAssigned = childNode.getTextContent();      
+        
+    }
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryHeader.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryHeader.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryHeader.java	(revision 82)
@@ -0,0 +1,309 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+
+/**
+ * IncidentInquiryHeader contains model data containing information used to 
+ * display the CAD log Header inofrmation.  Data for the header includes the
+ * following Incident data:
+ * <ul>
+ * <li>Log number</li>
+ * <li>Log status</li>
+ * <li>Priority</li>
+ * <li>Type</li>
+ * <li>Callbox Number</li>
+ * <li>Beat</li>
+ * <li>Full Location</li>
+ * <li>Truncated Location</li>
+ * <li>Origin</li>
+ * <li>Date</li>
+ * <li>Time</li>
+ * <li>Dispatcher</li>
+ * <ul>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.  
+ * See the class description for the CADScreenModel and 
+ * IncidentSummaryModel_obj Objects for their XML schema.<br/>
+ * <ROOT>
+ *    <LOG_NUMBER/>
+ *    <LOG_STATUS/>
+ *    <PRIORITY/>
+ *    <TYPE/>
+ *    <CALLBOX_NUM/>
+ *    <BEAT/>
+ *    <FULL_LOC/>
+ *    <TRUNC_LOC/>
+ *    <ORIGIN/>
+ *    <INCIDENT_DATE/>
+ *    <INCIDENT_TIME/>
+ *    <DISPATCHER/>
+ * </ROOT>
+ * 
+ * @see IncidentSummaryModel_obj
+ * @see CADScreenModel
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class IncidentInquiryHeader implements Serializable {
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        /** Incident log number. */ 
+        LOG_NUMBER    ("LOG_NUMBER"),
+        /** Incident log status. */ 
+        LOG_STATUS    ("LOG_STATUS"),
+        /** Incident priority. */   
+        PRIORITY      ("PRIORITY"),
+        /** Incident type. */   
+        TYPE          ("TYPE"),
+        /** Call box number. */ 
+        CALLBOX_NUM   ("CALLBOX_NUM"),
+        /** Incident beat. */   
+        BEAT          ("BEAT"),
+        /** Incident full location. */  
+        FULL_LOC      ("FULL_LOC"),
+        /** Incident truncated location. */ 
+        TRUNC_LOC     ("TRUNC_LOC"),
+        /** Log origin. */  
+        ORIGIN        ("ORIGIN"),
+        /** Incident date. */   
+        INCIDENT_DATE ("INCIDENT_DATE"),
+        /** Incident time. */   
+        INCIDENT_TIME ("INCIDENT_TIME"),
+        /** Assigned dispatcher. */ 
+        DISPATCHER    ("DISPATCHER");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }       
+    }
+
+    /** Incident log number.  */
+    public Integer logNumber;
+    
+    /** Incident log status.  */
+    public String logStatus;
+    
+    /** Incident log priority.  */
+    public String priority;
+    
+    /** Incident log type.  */
+    public String type;
+    
+    /** Call Box number. */
+    public String callBoxNumber;
+    
+    /** Incident beat. */
+    public String beat;
+    
+    /** Incident full location. */
+    public String fullLocation;
+    
+    /** Incident truncated location.  */
+    public String truncLocation;
+    
+    /** 
+     *  Incident log origin. Format: XXAYYYYY.  
+     *  XX = log position.  YYYYY = CAD user id.
+     */
+    public String origin;
+    
+    /** Incident log creation date. Format: MMDD */
+    public String incidentDate;
+    
+    /** Incident log create time. Format: HHMM */
+    public String incidentTime;
+    
+    /** 
+     *Incident log dispatcher.  Format: XXAYYYYY.  
+     *  XX = log position.  YYYYY = CAD user id.
+     */
+    public String dispatcher;
+    
+    /** Constructor.  Initialize all class variables to 0 or empty string. */
+    public IncidentInquiryHeader() {
+        logNumber     = new Integer(0);
+        logStatus     = "";
+        priority      = "";
+        type          = "";
+        callBoxNumber = "";
+        beat          = "";
+        fullLocation  = "";
+        truncLocation = "";
+        origin        = "";
+        incidentDate  = "";
+        incidentTime  = "";        
+        dispatcher    = "";     
+        
+    }    
+    
+    /**
+     * Copy constructor.
+     *
+     * @param newIIH Object containing header information used to initialize
+     *               the new instance.
+     */
+    public IncidentInquiryHeader(IncidentInquiryHeader newIIH) {
+        logNumber     = new Integer(newIIH.logNumber);
+        logStatus     = new String(newIIH.logStatus);
+        priority      = new String(newIIH.priority);
+        type          = new String(newIIH.type);
+        callBoxNumber = new String(newIIH.callBoxNumber);
+        beat          = new String(newIIH.beat);
+        fullLocation  = new String(newIIH.fullLocation);
+        truncLocation = new String(newIIH.truncLocation);
+        origin        = new String(newIIH.origin);
+        incidentDate  = new String(newIIH.incidentDate);
+        incidentTime  = new String(newIIH.incidentTime);
+        dispatcher    = new String(newIIH.dispatcher);
+    }    
+    
+    /**
+     * Parse the paramater node ad assign all member data values.
+     *
+     * @param theNode Node containing XML data to parse header information from.
+     */
+    public IncidentInquiryHeader(Node theNode) {    
+        fromXML(theNode);
+    }
+    
+    
+    /**
+     * Updates the local member data with any member data in the parameter
+     * Header object that is not 0 or an empty string.
+     *
+     * TODO look at his method
+     * @param newHeader Object containing header information for update.
+     */
+    public void update(IncidentInquiryHeader newHeader) {
+        
+        if(newHeader.logNumber != 0) 
+            logNumber     = new Integer(newHeader.logNumber);
+        if(newHeader.logStatus.trim().length() > 0) 
+            logStatus     = new String(newHeader.logStatus);
+        if(newHeader.priority.trim().length() > 0) 
+            priority      = new String(newHeader.priority);     
+        if(newHeader.type.trim().length() > 0) 
+            type          = new String(newHeader.type);
+        if(newHeader.beat.trim().length() > 0) 
+            beat          = new String(newHeader.beat);
+        if(newHeader.fullLocation.trim().length() > 0) 
+            fullLocation  = new String(newHeader.fullLocation);
+        if(newHeader.truncLocation.trim().length() > 0) 
+            truncLocation = new String(newHeader.truncLocation);
+        if(newHeader.incidentDate.trim().length() > 0) 
+            incidentDate  = new String(newHeader.incidentDate);             
+        if(newHeader.incidentTime.trim().length() > 0) 
+            incidentTime  = new String(newHeader.incidentTime);         
+    
+    }    
+    
+    
+    public void toXML(Element currElem) {
+        
+        Document theDoc    = currElem.getOwnerDocument();
+        Element  tempElem  = null;
+        
+        tempElem = theDoc.createElement(XML_TAGS.LOG_NUMBER.tag);
+        tempElem.appendChild(theDoc.createTextNode(logNumber.toString()));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.LOG_STATUS.tag);
+        tempElem.appendChild(theDoc.createTextNode(logStatus));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.PRIORITY.tag);
+        tempElem.appendChild(theDoc.createTextNode(priority));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.TYPE.tag);
+        tempElem.appendChild(theDoc.createTextNode(type));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.CALLBOX_NUM.tag);
+        tempElem.appendChild(theDoc.createTextNode(callBoxNumber));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.BEAT.tag);
+        tempElem.appendChild(theDoc.createTextNode(beat));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.FULL_LOC.tag);
+        tempElem.appendChild(theDoc.createTextNode(fullLocation));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.TRUNC_LOC.tag);
+        tempElem.appendChild(theDoc.createTextNode(truncLocation));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.ORIGIN.tag);
+        tempElem.appendChild(theDoc.createTextNode(origin));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.INCIDENT_DATE.tag);
+        tempElem.appendChild(theDoc.createTextNode(incidentDate));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.INCIDENT_TIME.tag);
+        tempElem.appendChild(theDoc.createTextNode(incidentTime));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.DISPATCHER.tag);
+        tempElem.appendChild(theDoc.createTextNode(dispatcher));
+        currElem.appendChild(tempElem);
+    }    
+    
+    public void fromXML(Node modelNode) {   
+        
+        Node childNode = null;
+        
+        childNode = modelNode.getFirstChild();
+        logNumber = Integer.parseInt(childNode.getTextContent());
+        
+        childNode = childNode.getNextSibling();
+        logStatus = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        priority = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        type = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        callBoxNumber = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        beat = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        fullLocation = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        truncLocation = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        origin = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        incidentDate = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        incidentTime = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        dispatcher = childNode.getTextContent();
+            
+    }      
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryTows.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryTows.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryTows.java	(revision 82)
@@ -0,0 +1,147 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * IncidentInquiryTows extends from IncidentInquiryLogEntry to provide a model 
+ * object containing information used to display an assigned tow unit.
+ * Data for a tow includes the Tow Company's name, the confidential and public 
+ * phone numbers, assigned beat, and current status.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.<br/>
+ * <ROOT><br/>
+ *    <COMPANY/><br/>
+ *    <CONF_PHONE_NUM/>/<br/>
+ *    <PUB_PHONE_NUM/><br/>
+ *    <BEAT/><br/>
+ *    <STATUS/><br/>
+ *    <POSITION_INFO/><br/>
+ *    <TIMESTAMP/><br/>
+ * </ROOT><br/>
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class IncidentInquiryTows extends IncidentInquiryLogEntry 
+    implements Serializable {
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {  
+        /** Tow company's name. */
+        COMPANY        ("COMPANY"),
+        /** Tow company's confidential phone number. */
+        CONF_PHONE_NUM ("CONF_PHONE_NUM"),      
+        /** Tow company's public phone number. */
+        PUB_PHONE_NUM  ("PUB_PHONE_NUM"),       
+        /** Tow vehicle's assigned beat. */
+        BEAT           ("BEAT"),    
+        /** Tow vehicle's status. */
+        STATUS         ("STATUS");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    /** Tow's company name */
+    public String towCompany;
+    
+    /** Tow's confidential phone number */
+    public String confPhoneNum;
+    
+    /** Tow's public phone number */
+    public String publicPhoneNum;
+    
+    /** Tow's assigned beat */
+    public String beat;
+    
+    /** Tow's status */
+    public String statusInfo;
+        
+    /** 
+     * Constructor.  Initialize all Tow data to empty strings.
+     * 
+     *  @param newPosInfo String containing position info for this log entry
+     */
+    public IncidentInquiryTows(String newPosInfo) {
+        super(newPosInfo, "0000");
+        
+        towCompany     = "";
+        confPhoneNum   = "";
+        publicPhoneNum = "";
+        beat           = "";
+        statusInfo     = "";        
+    }
+    
+    /**
+     * Constructor.  Parse parameter node for Tow log entry data.
+     * 
+     * @param theNode Node containing data for this Tow log entry
+     */
+    public IncidentInquiryTows(Node theNode) {  
+        fromXML(theNode);
+    }
+    
+    public void toXML(Element currElem) {
+        
+        Document theDoc    = currElem.getOwnerDocument();
+        Element  tempElem  = null;
+        
+        tempElem = theDoc.createElement(XML_TAGS.COMPANY.tag);
+        tempElem.appendChild(theDoc.createTextNode(towCompany));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.CONF_PHONE_NUM.tag);
+        tempElem.appendChild(theDoc.createTextNode(confPhoneNum));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.PUB_PHONE_NUM.tag);
+        tempElem.appendChild(theDoc.createTextNode(publicPhoneNum));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.BEAT.tag);
+        tempElem.appendChild(theDoc.createTextNode(beat));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.STATUS.tag);
+        tempElem.appendChild(theDoc.createTextNode(statusInfo));
+        currElem.appendChild(tempElem);
+
+        super.toXML(currElem);
+    }    
+    
+    public void fromXML(Node modelNode) {   
+        
+        Node childNode = null;
+        
+        childNode = modelNode.getFirstChild();
+        towCompany      = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        confPhoneNum = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        publicPhoneNum = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        beat = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        statusInfo = childNode.getTextContent();
+
+        childNode = childNode.getNextSibling();
+        super.fromXML(childNode);
+        
+    }  
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentSummaryModel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentSummaryModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentSummaryModel.java	(revision 82)
@@ -0,0 +1,150 @@
+package tmcsim.cadmodels;
+
+import java.util.Vector;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.CADEnums.CADScreenNum;
+import tmcsim.common.CADEnums.CADScreenType;
+import tmcsim.common.CADProtocol.CAD_COMMANDS;
+
+/**
+ * IncidentSummaryModel is a CADScreenModel object containing data that is 
+ * displayed in the IncidentSummary CAD Screen.  The addModelObject() method 
+ * is used to update the model data with new information.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.  
+ * See the class description for the CADScreenModel and 
+ * IncidentSummaryModel_obj Objects for their XML schema.<br/>
+ * <ROOT>
+ *    <INCIDENT_SUMMARY>
+ *       <BASE_MODEL_INFO/>
+ *       <INCIDENT/>
+ *       ...
+ *       <INCIDENT/>
+ *    </INCIDENT_SUMMARY>
+ * </ROOT>
+ * 
+ * @see IncidentSummaryModel_obj
+ * @see CADScreenModel
+ * @author Matthew Cechini
+ * @version
+ */
+public class IncidentSummaryModel extends CADScreenModel {
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {  
+        /** Incident information. */
+        INCIDENT  ("INCIDENT");
+
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    /** String containing an string of areas, used in the CAD Client IncidentSummary screen. */
+    public static final String areas            = "3  5  9  14  18  29  51 "; //do we read this in?    
+    
+    /** Model data. List of IncidentsSummaryModel_obj objects. */
+    private Vector<IncidentSummaryModel_obj> incidentsList;    
+    
+    /**
+     * Constructor.
+     *
+     * @param num CADScreenNum for this model.
+     */
+    public IncidentSummaryModel(CADScreenNum num) {
+        super(CADScreenType.SA_INCIDENT_SUMMARY, num);
+
+        incidentsList = new Vector<IncidentSummaryModel_obj>(); 
+    }
+        
+    /**
+     * Constructor.  Create model data from parsed parameter XML node.
+     *
+     * @param newNode XML node containing model data.
+     * @throws ScriptException if there is an error in parsing the Node.
+     */
+    public IncidentSummaryModel(Node newNode) throws ScriptException {
+        super(CADScreenType.SA_INCIDENT_SUMMARY, CADScreenNum.ONE);
+        
+        incidentsList = new Vector<IncidentSummaryModel_obj>(); 
+        
+        fromXML(newNode);   
+    }
+
+
+
+    /**
+     * Add a new model object to the list of incidents.
+     *
+     * @param ismo IncidentSummaryModel_obj
+     * @throws ClassCastException if the parameter is not an 
+     *         IncidentSummaryModel_obj object.
+     */
+    public void addModelObject(Object ismo) throws ClassCastException {
+        
+        if(ismo instanceof IncidentSummaryModel_obj) {
+            incidentsList.add((IncidentSummaryModel_obj)ismo);
+        }
+        else {
+            throw new ClassCastException();
+        }       
+    } 
+    
+    /**
+     * Get the list of incidents in this model.
+     *
+     * @return Vector of IncidentSummaryModel_obj objects.
+     */
+    public Vector<IncidentSummaryModel_obj> getModelObjects() {
+        return incidentsList;   
+    }
+    
+    public void toXML(Element currElem) {
+                        
+        Document theDoc = currElem.getOwnerDocument();
+                
+        Element modelElem = theDoc.createElement(CAD_COMMANDS.INCIDENT_SUMMARY.fullName);
+        
+        baseToXML(modelElem);       
+                
+        Element ismoElem             = null;
+        for(IncidentSummaryModel_obj ismo : incidentsList) {
+            ismoElem = theDoc.createElement(XML_TAGS.INCIDENT.tag);
+
+            ismo.toXML(ismoElem);
+            
+            modelElem.appendChild(ismoElem);
+        }
+        
+        currElem.appendChild(modelElem);        
+    }
+   
+    public void fromXML(Node modelNode) throws ScriptException {    
+        
+        incidentsList.clear();
+        
+        modelNode = modelNode.getFirstChild();
+        
+        baseFromXML(modelNode);
+        
+        modelNode = modelNode.getNextSibling();
+        
+        while(modelNode != null) {      
+            incidentsList.add(new IncidentSummaryModel_obj(modelNode));
+            
+            modelNode = modelNode.getNextSibling();
+        }
+    }
+
+}
Index: /branches/trunk/src/tmcsim/cadmodels/Incident.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/Incident.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/Incident.java	(revision 82)
@@ -0,0 +1,231 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import tmcsim.cadmodels.IncidentEvent.EVENT_STATUS;
+import tmcsim.common.ParamicsLocation;
+
+/**
+ * Incident is the container class used to information relating to a 
+ * simulation incident.  An incident is identified by a unique integer log 
+ * number. Additional descriptive information includes a short description, 
+ * an IncidentInquiryHeader containing CAD related data, and a Map of
+ * IncidentLocations used for XMLIncident location referencing.  This object holds 
+ * counters to keep track of the simulation time when the incident is scheduled 
+ * to occur and to retain the time when it is does occur.  The Incident object 
+ * has a list of IncidentEvents that will occur during the simulation.  
+ * 
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:40 $ $Revision: 1.4 $
+ */
+@SuppressWarnings("serial")
+public class Incident implements Serializable {
+    
+    /** A brief description of the incident that is displayed in the Simulation Manager GUI. */
+    public String description;
+    
+    /** The CHP Incident Log Number assigned to this incident */
+    public Integer logNumber;
+
+    /**  Object containing the IncidentInquiry header information. */
+    public IncidentInquiryHeader header;
+
+    /**  
+     * TreeMap mapping IncidentLocation objects(values) to a String identifier(keys) 
+     * read as during script parsing. 
+     */
+    public TreeMap<String, ParamicsLocation> locationMap;   
+    
+    /** 
+     * The time, in seconds, in a simulation that the incident 'begins.'  
+     * This does not necessarily correspond to first event. 
+     */
+    private long startTime;
+    
+    /**
+     * Holds the time (number of seconds) that this incident occured. This may
+     * be different than the scriptIncidentStartTime if the user manually triggers
+     * the incident.
+     */     
+    private long secondsIncidentStarted = 0;
+ 
+    /** Boolean flag to designate whether the incident has occured or not. */    
+    private boolean incidentOccured = false;
+    
+    /** The incidents list of IncidentEvents that will occur in successive order. */
+    private Vector<IncidentEvent> eventList = null; 
+    
+        
+    /**
+     * Constructor.  Initialize local lists and Incident identifying data.
+     * 
+     * @param log   Unique log number for this incident.
+     * @param desc  Short description of this incident.
+     * @param start Simulation time (in seconds) for this incident to start.
+     */
+    public Incident(/*NetworkID*/ Integer log, String desc, long start)
+    {
+        logNumber   = log;
+        description = desc;
+        startTime   = start;
+        header      = new IncidentInquiryHeader();      
+        locationMap = new TreeMap<String, ParamicsLocation>();
+        
+        eventList    = new Vector<IncidentEvent>();
+        
+    }
+    
+    /**
+     * Method checks if the Incident can be triggered.  If the simulation
+     * time is equal to or greater than this Incident's start time, and the 
+     * Incident has not previously been triggered, then trigger the incident.
+     * The start time is recorded and true returned.  Else the Incident is
+     * already started or not ready, return false.
+     *
+     * @param scriptSeconds Current value of simulation time, in seconds.
+     * @return boolean Return true when this incident is first triggered, else return false.
+     */
+    public boolean tick(long scriptSeconds) {
+        
+        if(scriptSeconds >= startTime && !incidentOccured) {            
+            incidentOccured        = true;
+            secondsIncidentStarted = scriptSeconds;
+            
+            return true;
+        }
+        else
+            return false;
+    }   
+    
+    /**
+     * Method iterates through the list of events associated with this incident and returns 
+     * a list of those that are ready to be triggered.  
+     *
+     * @param simTime Current simulation time, in seconds.
+     * @return Vector of IncidentEvents that have triggered as a result of this tick().
+     */
+    public Vector<IncidentEvent> getTriggeredEvents(long simTime) {
+        
+        Vector<IncidentEvent> triggered = new Vector<IncidentEvent>();
+        
+        if(incidentOccured) {       
+            for(IncidentEvent evt : eventList) {
+                if(evt.triggerEvent(secondsIncidentStarted, simTime)) {
+                    triggered.add(evt);
+                }   
+            }                               
+        }
+        
+        return triggered;
+    }
+    
+    
+    /**
+     * This method returns a Vector of IncidentEvents which had previously been
+     * triggered and queued while it's associated audio file was being played.
+     * When the audio file has completed, this method will remove that event from
+     * the queuedEvents Vector. 
+     * 
+     * @return Vector of IncidentEvents which can be inserted into the simulation.
+     */
+    public Vector<IncidentEvent> getCompletedEvents() {
+        
+        Vector<IncidentEvent> completed = new Vector<IncidentEvent>();
+        
+        for(IncidentEvent evt : eventList) {
+            if(evt.eventStatus == EVENT_STATUS.COMPLETED) {             
+                completed.add(evt);
+            }       
+        }
+        
+        return completed;
+    }
+    
+    /**
+     * Get the script log number associated with this incident.
+     *
+     * @return String The script log number.
+     */
+    public Integer getLogNumber() {
+        return logNumber;   
+    }
+    
+
+    /**
+     * Manually trigger this incident.  Sets the variable that keeps track of
+     * when the incident occured to the parameter value, and sets the 
+     * incidentOccurred variable to true.  
+     *
+     * @param newtime The time in the script when the incident is being triggered.
+     */
+    public void manualTrigger(long newtime) {
+        secondsIncidentStarted = newtime;   
+        incidentOccured        = true; 
+    }
+    
+    /**
+     * Gets the time (in seconds) that the incident will occur.
+     *
+     * @return long Time(in seconds) that the incident will occur.
+     */
+    public long getSecondsToStart() {
+        return startTime;   
+    }
+    
+    /**
+     * Sets the time( in seconds) that the incident will occur.
+     *
+     * @param  newStartTime Time(in seconds) that the incident will occur.
+     */
+    public void setSecondsToStart(long newStartTime) {
+        startTime = newStartTime;   
+    }   
+    
+    
+    /**
+     * Called to calculate the length of this incident.  The length is the first
+     * event's time subtracted from the last event's time.  
+     *
+     * @return Length of the simulation incident (in seconds).
+     */
+    public Long getIncidentLength() {       
+        return eventList.lastElement().secondsToOccurInIncident -
+            eventList.firstElement().secondsToOccurInIncident;                  
+    }
+    
+    /**
+     * Check to see if incident has occured.
+     * @return true if incident has occured, false if not.
+     */
+    public boolean hasOccured() {
+        return incidentOccured; 
+    }
+
+    /**
+     * Reset the simulation time counters and incidentOccured flag.  Iterate
+     * through the event list and reset each event as well.
+     */
+    public void resetSimulation() {
+        secondsIncidentStarted    = 0;
+        incidentOccured           = false;
+            
+        for(IncidentEvent ie : eventList) 
+            ie.resetSimulation();
+                                
+    }
+    
+    /**
+     * Add an Incident Event to the Incident's list of events.  The new 
+     * event will also receive the current header data associated with this 
+     * incident.
+     * 
+     * @param newEvent The IncidentEvent to be added.
+     */
+    public void addEvent(IncidentEvent newEvent) {
+        newEvent.eventInfo.setHeader(header);
+        eventList.add(newEvent);    
+    }   
+
+}
Index: /branches/trunk/src/tmcsim/cadmodels/CMSInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/CMSInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/CMSInfo.java	(revision 82)
@@ -0,0 +1,171 @@
+package tmcsim.cadmodels;
+
+
+import java.io.Serializable;
+import java.util.Vector;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * CMSInfo is a container class to contain the id, postmile, initial route, 
+ * and diversion information for a single changeable message sign.  The 
+ * isCleared() method is used to determine if all diversions for this sign are 
+ * cleared.  The isUpdated() methods determines if any of the diversions for 
+ * this sign have been updated from user input. 
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class CMSInfo implements Serializable {
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        /** Diversion info. */
+        DIVERSION ("DIVERSION");
+
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+    }
+
+    /** The unique ID for this CMS. */
+    public String  cmsID;
+
+    /** The postmile for this CMS. */
+    public Float   postmile;
+
+    /** The initial route where this CMS is located. */
+    public String  initialRoute;
+
+    /** Vector of all possible diversions for this CMS. */
+    public Vector<CMSDiversion>  possibleDiversions;
+
+    /**
+     * Constructor.  
+     */
+    public CMSInfo() {
+        cmsID              = new String();
+        postmile           = new Float(0);
+        initialRoute       = new String();
+        possibleDiversions = new Vector<CMSDiversion>();    
+    }
+    
+    /**
+     * Constructor.
+     * 
+     * @param newID CMS ID
+     * @param newPM CMS postmile
+     * @param newInitRt CMS initial route
+     */
+    public CMSInfo(String newID, Float newPM, String newInitRt) {       
+        cmsID              = newID;
+        postmile           = newPM;
+        initialRoute       = newInitRt;
+        possibleDiversions = new Vector<CMSDiversion>();    
+    }
+    
+    /**
+     * Add a new CMS diversion option.  A new diversion includes information
+     * regarding the old and new paths that traffic will be diverted from and to.
+     * The diversion also includes the Paramics diversion string and the maximum
+     * percentage of traffic that can be diverted.
+     * 
+     * @param oPath Old path.
+     * @param nPath New path.
+     * @param dPath Paramics diversion path.
+     * @param perc Maximum diversion percentage.
+     */
+    public void addNewDiversion(String oPath, String nPath, String dPath, Integer perc) {
+        possibleDiversions.add(new CMSDiversion(oPath, nPath, dPath, perc));    
+    }
+
+    /**
+     * Determines if all possible diversions for this CMS sign are clear.  If
+     * so, true is returned, else false is returned.
+     * 
+     * @return True if all diversions are clear, false if not.
+     */
+    public boolean isCleared() {
+        
+        for(CMSDiversion theDiv : possibleDiversions) {                     
+            if(!theDiv.isCleared()) 
+                return false;           
+        }
+        return true;        
+    }
+    
+    /**
+     * Determines if any possible diversions for this CMS sign have 
+     * been upted.  If so, true is returned, else false is returned.
+     * 
+     * @return True if a diversions has been updated, false if not.
+     */    
+    public boolean isUpdated() {
+        
+        for(CMSDiversion div : possibleDiversions) {
+            if(div.isUpdated()) 
+                return true;            
+        }
+        return false;       
+    }
+    
+    /**
+     * Reset all possible diversions.
+     */
+    public void reset() {
+        for(CMSDiversion div : possibleDiversions) {
+            div.reset();
+        }
+    }
+    
+    /**
+     * Write the XML output for all the diversions represented
+     * in this object.  The format is as follows:
+     * 
+
+     * 
+     * @param xmlOut XMLWriter used for XML creation.
+
+    /**
+     * Creates XML tags with the diversion data represented in this object.
+     * The XML is creaetd with the following format.  The ROOT element is the 
+     * parameter for this method.<br/>
+     * <ROOT>
+     *    <DIVERSION>
+     *       <Diversion_path>
+     *          <Identifier/>
+     *          <Percentage/>
+     *       </Diversion_path>
+     *       ...
+     *       <Diversion_path/>
+     *    </DIVERSION>
+     * </ROOT>
+     *
+     * @param currElem XML Element used as a root for XML tag appending.
+     */    
+    public void toXML(Element currElem) {           
+        
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element divElem = null;
+        
+        for(CMSDiversion theDiv : possibleDiversions) {
+                        
+            if(!theDiv.isCleared() && theDiv.isUpdated()) {
+
+                divElem = theDoc.createElement(XML_TAGS.DIVERSION.tag);
+                currElem.appendChild(divElem);
+
+                theDiv.toXML(divElem);              
+                
+            }
+        }                 
+    }
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentResponse.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentResponse.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentResponse.java	(revision 82)
@@ -0,0 +1,68 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * @author Vincent
+ *
+ */
+public class IncidentResponse implements Serializable
+{
+    private String plan;
+    private String area;
+    
+    private static enum RESPONSE_ENUMS
+    {
+        PLAN     ("PLAN"),
+        AREA     ("AREA");
+        
+        public String tag;
+        
+        private RESPONSE_ENUMS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentResponse(){
+        plan = "";
+        area = "";
+    }
+    
+    public String getPlan() {
+        return plan;
+    }
+    
+    public void setPlan(String plan) {
+        this.plan = plan;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+    
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if(tag_name.equals(RESPONSE_ENUMS.PLAN.tag))
+        {
+            setPlan(value);
+        }
+        else if(tag_name.equals(RESPONSE_ENUMS.AREA.tag))
+        {
+            setArea(value);
+        }
+        
+    }
+    
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/package.html
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/package.html	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains the model classes for the CAD Simulator.
+  </body>
+</html>
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentBoardModel_obj.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentBoardModel_obj.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentBoardModel_obj.java	(revision 82)
@@ -0,0 +1,137 @@
+package tmcsim.cadmodels;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+
+/**
+ * IncidentBoardModel_obj is the model object containing all model 
+ * information for an IncidentBoard CAD Screen.  The model data includes
+ * a unique number, creation date and time, and message text.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.  The
+ * specific XML schema for each IncidentInquiry model can be found in its
+ * class header.<br/>
+ * <ROOT>
+ *    <NUM/>
+ *    <DATE/>
+ *    <TIME/>
+ *    <MESSAGE/>
+ * </ROOT>
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+public class IncidentBoardModel_obj {
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {      
+        /** Bulletin's number. */
+        BULLETIN_NUM ("NUM"),
+        /** Bulletin's create date. */
+        DATE         ("DATE"),
+        /** Bulletin's creation time. */
+        TIME         ("TIME"),
+        /** Bulletin's message text. */
+        MESSAGE      ("MESSAGE");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+        
+    }
+    
+    /** Bulletin number. */
+    public int bulletinNum;
+    
+    /** Bulletin creation date. */
+    public String date;
+    
+    /** Bulletin creation time. */
+    public String time;
+    
+    /** Bulletin message text. */   
+    public String message;
+    
+    
+    /**
+     * Constructor.
+     */
+    public IncidentBoardModel_obj() {
+        bulletinNum = 0;
+        date        = null;
+        time        = null;
+        message     = null;     
+    }   
+    
+    /**
+     * Constructor.
+     * 
+     * @param newBulletinNum Bulletin number.
+     * @param newDate Bulletin creation date.
+     * @param newTime Bulletin create time.
+     * @param newMessage Bulletin message text.
+     */
+    public IncidentBoardModel_obj(int newBulletinNum, 
+                                  String newDate, 
+                                  String newTime,
+                                  String newMessage) {
+        bulletinNum = newBulletinNum;
+        date        = newDate;
+        time        = newTime;
+        message     = newMessage;       
+        
+    }
+    
+    public IncidentBoardModel_obj(Node modelNode) {
+        fromXML(modelNode);
+    }
+    
+    public void toXML(Element currElem) {
+        
+        Document theDoc    = currElem.getOwnerDocument();
+        Element  tempElem  = null;
+        
+        tempElem = theDoc.createElement(XML_TAGS.BULLETIN_NUM.tag);
+        tempElem.appendChild(theDoc.createTextNode(String.valueOf(bulletinNum)));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.DATE.tag);
+        tempElem.appendChild(theDoc.createTextNode(date));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.TIME.tag);
+        tempElem.appendChild(theDoc.createTextNode(time));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.MESSAGE.tag);
+        tempElem.appendChild(theDoc.createTextNode(message));
+        currElem.appendChild(tempElem);
+    }    
+    
+    public void fromXML(Node modelNode) {   
+        
+        Node childNode = null;
+        
+        childNode = modelNode.getFirstChild();
+        bulletinNum = Integer.parseInt(childNode.getTextContent());
+        
+        childNode = childNode.getNextSibling();
+        date = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        time = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        message = childNode.getTextContent();
+            
+    }  
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryWitnesses.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryWitnesses.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryWitnesses.java	(revision 82)
@@ -0,0 +1,141 @@
+package tmcsim.cadmodels;
+
+import java.io.Serializable;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * IncidentInquiryWitnesses extends from IncidentInquiryLogEntry
+ * to provide a model object containing information used to display a Witness 
+ * entry on the IncidentInquiry CAD screen. Data for a witness includes the 
+ * reporting party's name, phone number, and address.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.<br/>
+ * <ROOT><br/>
+ *    <REPORT_PARTY/><br/>
+ *    <PHONE_NUM>/<br/>
+ *    <ADDRESS/><br/>
+ *    <POSITION_INFO/><br/>
+ *    <TIMESTAMP/><br/>
+ * </ROOT><br/>
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class IncidentInquiryWitnesses extends IncidentInquiryLogEntry 
+    implements Serializable {
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        /** Witness' name. */
+        REPORT_PARTY  ("REPORT_PARTY"),     
+        /** Witness' phone number. */
+        PHONE_NUM     ("PHONE_NUM"),    
+        /** Witness' address. */
+        ADDRESS       ("ADDRESS");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }       
+    }
+    
+    /** Witness' name. */
+    public String reportingParty;
+    
+    /** Witness' phone number. */
+    public String telephoneNum;
+    
+    /** Witness' address. */
+    public String address;      
+
+
+    /** 
+     * Constructor.  Initialize all Witness data to empty strings.
+     * 
+     *  @param newPosInfo String containing position info for this log entry
+     */
+    public IncidentInquiryWitnesses(String newPosInfo) {
+        super(newPosInfo, "0000");
+
+        reportingParty = "";
+        telephoneNum   = "";
+        address        = "";    
+    }
+    
+
+    /**
+     * Constructor.  Set local data and base data from parameters. 
+     * 
+     * @param newPositionInfo Position info for this log entry.
+     * @param name            Witness' name
+     * @param num             Witness' phone number
+     * @param add             Witness' address
+     * @param timestamp       Timestamp for this log entry
+     */
+    public IncidentInquiryWitnesses(String newPositionInfo, String name, 
+            String num, String add, String timeStamp) {
+        super(newPositionInfo, timeStamp);
+
+        reportingParty = name;
+        telephoneNum   = num;
+        address        = add;   
+    }       
+    
+    /**
+     * Constructor.  Parse parameter node for Witness log entry data.
+     * 
+     * @param theNode Node containing data for this Witness log entry
+     */
+    public IncidentInquiryWitnesses(Node theNode) { 
+        fromXML(theNode);   
+    }
+    
+
+    public void toXML(Element currElem) {
+        
+        Document theDoc    = currElem.getOwnerDocument();
+        Element  tempElem  = null;
+        
+        tempElem = theDoc.createElement(XML_TAGS.REPORT_PARTY.tag);
+        tempElem.appendChild(theDoc.createTextNode(reportingParty));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.PHONE_NUM.tag);
+        tempElem.appendChild(theDoc.createTextNode(telephoneNum));
+        currElem.appendChild(tempElem);
+        
+        tempElem = theDoc.createElement(XML_TAGS.ADDRESS.tag);
+        tempElem.appendChild(theDoc.createTextNode(address));
+        currElem.appendChild(tempElem);
+
+        super.toXML(currElem);
+    }    
+    
+    public void fromXML(Node modelNode) {   
+        
+        Node childNode = null;
+        
+        childNode = modelNode.getFirstChild();
+        reportingParty = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        telephoneNum = childNode.getTextContent();
+        
+        childNode = childNode.getNextSibling();
+        address = childNode.getTextContent();
+
+        childNode = childNode.getNextSibling();
+        super.fromXML(childNode);
+        
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryDetails.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryDetails.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryDetails.java	(revision 82)
@@ -0,0 +1,149 @@
+package tmcsim.cadmodels;
+
+
+import java.io.Serializable;
+import java.util.Vector;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * IncidentInquiryDetails extends from IncidentInquiryLogEntry to provide a 
+ * model object containing information used to display a detail log entry.
+ * Data for a detail includes a String of text.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.<br/>
+ * <ROOT><br/>
+ *    <TEXT/><br/>
+ *    <POSITION_INFO/><br/>
+ *    <TIMESTAMP/><br/>
+ * </ROOT><br/>
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class IncidentInquiryDetails extends IncidentInquiryLogEntry 
+    implements Serializable {
+        
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        /** Detail Text. */
+        TEXT  ("TEXT");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }       
+    }
+    
+    
+    /** Detail text. */
+    public String details;
+    
+    /**  */
+    public Boolean sensitive;
+    
+    //public boolean highlighted;
+    
+    /** 
+     * Constructor.  Initialize all detail data to empty strings or false.
+     * 
+     *  @param newPosInfo String containing position info for this log entry
+     */    
+    public IncidentInquiryDetails(String newPosInfo, Boolean sens) {
+        super(newPosInfo, "0000");
+
+        details   = "";
+        sensitive = sens;
+    }
+    
+    /** 
+     * Constructor.  Initialize all detail data to the parameter.
+     * 
+     *  @param newPosInfo String containing position info for this log entry.
+     *  @param newDetails String containing detail text for this log entry.
+     */        
+    public IncidentInquiryDetails(String newPosInfo, String newDetails, Boolean sens) {     
+        super(newPosInfo, "0000");
+        
+        details   = newDetails;
+        sensitive = sens;
+    }
+    
+    /**
+     * Constructor.  Parse parameter node for Detail log entry data.
+     * 
+     * @param theNode Node containing data for this Detail log entry
+     */    
+    public IncidentInquiryDetails(Node theNode) {   
+        fromXML(theNode);
+    }
+    
+    public void toXML(Element currElem) {       
+        Document theDoc    = currElem.getOwnerDocument();
+        Element  tempElem  = null;
+        
+        tempElem = theDoc.createElement(XML_TAGS.TEXT.tag);
+        tempElem.appendChild(theDoc.createTextNode(details));
+        currElem.appendChild(tempElem);
+
+        super.toXML(currElem);
+    }
+    
+    public void fromXML(Node modelNode) {   
+        
+        Node childNode = null;
+        
+        childNode = modelNode.getFirstChild();
+        details = childNode.getTextContent();
+
+        childNode = childNode.getNextSibling();
+        super.fromXML(childNode);
+        
+    }
+ 
+    /** 
+     * Parse the details text into a list of endline terminated strings which are
+     * no longer than the parameter width.  Words which would be split by an endline
+     * are moved in whole to the next line.  Words longer than a line width are split 
+     * accordingly.
+     * 
+     * @param width Line width used for parsing details
+     * @return A vector of endline terminated detail strings.
+     */
+    public Vector<String> parseDetails(int width) {
+        Vector<String> parsedDetails = new Vector<String>();
+        
+        int currPos  = 0;
+        int spaceIdx = 0;
+        
+        while((details.length() - currPos) > width) {
+            
+            spaceIdx = details.substring(currPos, currPos + width).lastIndexOf(" ");
+            
+            if(spaceIdx > 0) {
+                parsedDetails.add(details.substring(currPos, currPos + spaceIdx).trim() + "\n");
+                currPos += spaceIdx;
+            }
+            else {
+                parsedDetails.add(details.substring(currPos, currPos + width).trim() + "\n");   
+                currPos += width;
+            }                               
+        }       
+        
+        //remainder
+        parsedDetails.add(details.substring(currPos).trim() + "\n");        
+        
+        return parsedDetails;
+    }    
+    
+    
+    
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentBoardModel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentBoardModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentBoardModel.java	(revision 82)
@@ -0,0 +1,143 @@
+package tmcsim.cadmodels;
+
+import java.util.Vector;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.CADEnums.CADScreenNum;
+import tmcsim.common.CADEnums.CADScreenType;
+import tmcsim.common.CADProtocol.CAD_COMMANDS;
+
+
+/**
+ * IncidentBoardModel is a CADScreenModel object containing data that is 
+ * displayed in the IncidentBoard CAD Screen.  The addModelObject() method 
+ * is used to update the model data with new information.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.  
+ * See the class description for the CADScreenModel and 
+ * IncidentBoardModel_obj Objects for their XML schema.<br/>
+ * <ROOT>
+ *    <INCIDENT_BOARD>
+ *       <BASE_MODEL_INFO/>
+ *       <MESSAGE/>
+ *       ...
+ *       <MESSAGE/>
+ *    </INCIDENT_BOARD>
+ * </ROOT>
+ * 
+ * @see IncidentBoardModel_obj
+ * @see CADScreenModel
+ * @author Matthew Cechini
+ * @version
+ */
+public class IncidentBoardModel extends CADScreenModel {
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        MESSAGE ("MESSAGE");
+        
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    /** Model data. List of IncidentBoardModel_obj objects. */
+    private Vector<IncidentBoardModel_obj> messageList = null;
+    
+    /**
+     * Constructor.
+     *
+     * @param num CADScreenNum for this model.
+     */
+    public IncidentBoardModel(CADScreenNum num) {
+        super(CADScreenType.IB_INCIDENT_BOARD, num);
+        
+        messageList  = new Vector<IncidentBoardModel_obj>();
+    }
+    
+    /**
+     * Constructor.  Create model data from parsed parameter XML node.
+     *
+     * @param newNode XML node containing model data.
+     * @throws ScriptException if there is an error in parsing the Node.
+     */
+    public IncidentBoardModel(Node newNode) throws ScriptException {
+        super(CADScreenType.IB_INCIDENT_BOARD, CADScreenNum.ONE);
+        
+        messageList  = new Vector<IncidentBoardModel_obj>();
+                
+        fromXML(newNode);   
+    }
+        
+    /**
+     * Add a new model object to the list of messages.
+     *
+     * @param ismo IncidentBoardModel_obj
+     * @throws ClassCastException if the parameter is not an 
+     *         IncidentBoardModel_obj object.
+     */
+    public void addModelObject(Object ibmo) throws ClassCastException {
+        
+        if(ibmo instanceof IncidentBoardModel_obj)  
+            messageList.add((IncidentBoardModel_obj)ibmo);  
+        else 
+            throw new ClassCastException();
+    } 
+    
+    /**
+     * Get the list of messages in this model.
+     *
+     * @return Vector of IncidentBoardModel_obj objects.
+     */
+    public Vector<IncidentBoardModel_obj> getModelObjects() {
+        return messageList; 
+    }   
+    
+    public void toXML(Element currElem) {
+        
+        Document theDoc = currElem.getOwnerDocument();
+                
+        Element modelElem = theDoc.createElement(CAD_COMMANDS.INCIDENT_BOARD.fullName);
+        
+        baseToXML(modelElem);               
+        
+        Element ibmoElem             = null;
+        for(IncidentBoardModel_obj ibmo : messageList) {
+            ibmoElem = theDoc.createElement(XML_TAGS.MESSAGE.tag);
+
+            ibmo.toXML(ibmoElem);
+            
+            modelElem.appendChild(ibmoElem);
+        }
+        
+        currElem.appendChild(modelElem);
+
+    }
+
+    public void fromXML(Node modelNode) throws ScriptException {    
+        
+        messageList.clear();
+        
+        modelNode = modelNode.getFirstChild();
+        
+        baseFromXML(modelNode);
+        
+        NodeList messageNodes = ((Element)modelNode).getElementsByTagName(XML_TAGS.MESSAGE.tag);
+        
+        for(int i = 0; i < messageNodes.getLength(); i++)
+            messageList.add(new IncidentBoardModel_obj(messageNodes.item(i)));
+        
+        
+    }  
+}
Index: /branches/trunk/src/tmcsim/cadmodels/RoutedMessageModel.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/RoutedMessageModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/RoutedMessageModel.java	(revision 82)
@@ -0,0 +1,283 @@
+package tmcsim.cadmodels; 
+
+import java.util.LinkedList;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.CADEnums.CADScreenNum;
+import tmcsim.common.CADEnums.CADScreenType;
+import tmcsim.common.CADProtocol.CAD_COMMANDS;
+import tmcsim.common.CADProtocol.DATA_TAGS;
+
+
+/**
+ * RoutedMessageModel is a CADScreenModel object containing data that is 
+ * displayed in the RoutedMessage CAD Screen.  Data included in this
+ * object includes a list of CADRoutedMessages, the index of the current
+ * message item, and a boolean flag to designate whether the current message 
+ * has been deleted.  The addModelObject() method is used to update the model 
+ * data with new information.  The nextQueue(), deleteQueue(), and prevQueue() 
+ * methods are used to control which message is the "current" message. <br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.  
+ * See the class description for the CADScreenModel XML schema.<br/>
+ * <ROOT>
+ *    <ROUTED_MESSAGE>
+ *       <BASE_MODEL_INFO/>
+ *       <ORIGIN/>
+ *       <DESTINATION/>
+ *       <MESSAGE/>
+ *    </ROUTED_MESSAGE>
+ * </ROOT>
+ * 
+ * @see CADScreenModel
+ * @author Matthew Cechini
+ * @version
+ */
+public class RoutedMessageModel extends CADScreenModel {
+    
+    /** LinkedList containing received routed messages. */
+    private LinkedList<CADRoutedMessage> messageList = null;
+    
+    /**
+     * A manually incremented and decremented iterating count.  Initial value
+     * is 0 to point to the first element in the messageList.  As the list is 
+     * traversed, added to, and removed from, this count always contains the value
+     * of the current message that is being displayed.
+     */
+    private int currentListItem = 0;
+    
+    /**
+     * Flag to designate whether the current message has been deleted by the
+     * user.  The currentListItem counter is not updated when a queue is
+     * deleted until nextQueue() or prevQueue() is called.  This allows a
+     * message to remain on the screen after it has been deleted.
+     */
+    private boolean messageDeleted = false;
+    
+    /**
+     * Constructor.
+     * 
+     * @param num CADScreenNum for this model.
+     * @param messages New list of messags.
+     */
+    public RoutedMessageModel(CADScreenNum num, LinkedList<CADRoutedMessage> messages) {
+        super(CADScreenType.TO_ROUTED_MESSAGE, num);
+        
+        messageList = new LinkedList<CADRoutedMessage>();
+        messageList.addAll(messages);
+    }
+    
+    /**
+     * Constructor.  Parse the model data from the parameter node.
+     * 
+     * @param newNode XML node containing model data.
+     * @throws ScriptException if there is an error in parsing the node.
+     */
+    public RoutedMessageModel(Node newNode) throws ScriptException {
+        super(CADScreenType.TO_ROUTED_MESSAGE, CADScreenNum.ONE);
+
+        messageList = new LinkedList<CADRoutedMessage>();
+        
+        fromXML(newNode);   
+    }
+
+    /**
+     * Returns the number of routed messages received to this CAD Client model.
+     *
+     * @return int number of messages that have been sent to this terminal and
+     * retreived from the coordinator.
+     */
+    public int getMessageCount() {      
+        return messageList.size();  
+    }
+    
+    /**
+     * Append a new message to the local linked list of CADRoutedMessages.
+     *
+     * @param updateMessages Vector of CADRoutedMessage objects that have been
+     * sent to this CAD terminal.
+     */
+    public void addModelObject(Object o) {              
+        messageList.add((CADRoutedMessage)o);
+    } 
+
+    /**
+     * Method returns the routed message that was last viewed, or if this is the first
+     * time a method is being viewed, then the first message will be returned.
+     * This message may only be called if the numberOfMessages() returns a value
+     * greater than 0.  If there are no messages, this method will throw an 
+     * IndexOutOfBoundsException.
+     *
+     * @return CADRoutedMessage
+     */ 
+    public CADRoutedMessage getCurrentMessage() throws IndexOutOfBoundsException {      
+        
+        return messageList.get(currentListItem);    
+    }
+        
+    /**
+     * Method is called to advance to the next queued message object.  Update the 
+     * message list and current message counter if a message has been deleted.  If the
+     * currentListItem count is at the end of the message list, then start over
+     * at the beginning, otherwise increase the count by one.
+     * This method is only to be called if numberOfMessages() returns a value
+     * greater than 0.
+     */
+    public boolean nextQueue() {
+
+        //update the counter if a the previous queue message was deleted
+        if(messageDeleted) {
+            messageList.remove(currentListItem);
+            currentListItem--;
+            
+            if(currentListItem > messageList.size() - 1 ||
+               currentListItem < 0) {
+                currentListItem = 0;
+            }
+            
+            messageDeleted = false;
+        }
+        
+        if(messageList.size() > 0) {
+            if(currentListItem == messageList.size() - 1) 
+                currentListItem = 0;
+            else 
+                currentListItem++;
+                
+            return true;
+        }
+        else
+            return false;
+    }
+    
+    /**
+     * If the message being deleted is currently being viewed, set the messageDeleted
+     * flag to true so that the queued message will be deleted when nextQueue()
+     * or prevQueue() is called next.  Else, if the message being deleted
+     * does exist in this model's list of messages, remove that message.  Update
+     * the currentListItem counter if the message deleted is at a position
+     * prior to the current message.
+     * 
+     * @param delMsg Queue message being deleted
+     */
+    public void deleteQueue(CADRoutedMessage delMsg) {
+        
+        int msgIndex = messageList.indexOf(delMsg);
+        
+        if(msgIndex == currentListItem) {
+            messageDeleted = true;
+        }
+        else if(msgIndex != -1) {           
+            messageList.remove(delMsg);
+
+            if(currentListItem > msgIndex)
+                currentListItem--;
+        }
+        //else msgIndex == -1  Msg already removed
+    }
+    
+    /**
+     * Method is called to back up to the previous queued message object.  
+     * Update the message list and current message counter if a message
+     * has been deleted.  If the currentListItem count is at the beginning 
+     * of the message list, then move to the end, otherwise decrease the 
+     * count by one. This method is only to be called if numberOfMessages() 
+     * returns a value greater than 0.
+     */
+    public boolean prevQueue() {
+        
+        //update the counter if a the previous queue message was deleted
+        if(messageDeleted) {
+            messageList.remove(currentListItem);
+            currentListItem--;
+            
+            if(currentListItem > messageList.size() - 1 ||
+               currentListItem < 0){
+                currentListItem = 0;
+            }
+            
+            messageDeleted = false;
+        }
+        
+        if(messageList.size() > 0) {
+            if(currentListItem == 0) 
+                currentListItem = messageList.size() - 1;
+            else 
+                currentListItem--;
+                    
+            return true;
+        }
+        else
+            return false;           
+    }
+    
+    /**
+     * Determine if this routed message is a forwarded incident update.
+     * @return True if this message is an incident update, false if not.
+     */
+    public boolean isIncidentUpdate() {
+        return messageList.get(currentListItem).incidentUpdate;
+    }
+    
+    public void toXML(Element currElem) {
+        
+        //if this is an update, then the xmloutput is contained within
+        //the message text
+        if(getCurrentMessage().incidentUpdate) {
+
+        }
+        //else send the current message only
+        else {          
+            
+            Document theDoc = currElem.getOwnerDocument();
+                    
+            Element modelElem = theDoc.createElement(CAD_COMMANDS.ROUTED_MESSAGE.fullName);
+            
+            baseToXML(modelElem);
+            
+            Element originElem = theDoc.createElement(DATA_TAGS.ORIGIN.tag);
+            originElem.appendChild(theDoc.createTextNode(String.valueOf(getCurrentMessage().fromPosition)));
+            modelElem.appendChild(originElem);
+
+            Element destElem = theDoc.createElement(DATA_TAGS.DESTINATION.tag);
+            destElem.appendChild(theDoc.createTextNode(String.valueOf(getCurrentMessage().toPosition)));
+            modelElem.appendChild(destElem);
+
+            Element msgElem = theDoc.createElement(DATA_TAGS.ORIGIN.tag);
+            msgElem.appendChild(theDoc.createTextNode(getCurrentMessage().message));
+            modelElem.appendChild(msgElem);
+            
+            currElem.appendChild(modelElem);
+        }
+    }
+    
+    public void fromXML(Node modelNode) throws ScriptException {
+        messageList.clear();
+        currentListItem = 0;
+        
+        CADRoutedMessage newMessage = new CADRoutedMessage(0, 0, "", false);
+        
+        modelNode = modelNode.getFirstChild();
+        
+        baseFromXML(modelNode);
+        
+        modelNode = modelNode.getNextSibling();
+        newMessage.fromPosition = Integer.parseInt(modelNode.getTextContent());
+
+        modelNode = modelNode.getNextSibling();
+        newMessage.toPosition = Integer.parseInt(modelNode.getTextContent());
+
+        modelNode = modelNode.getNextSibling();
+        newMessage.message = modelNode.getTextContent();
+
+        
+        messageList.add(newMessage);
+        
+    }
+
+}
Index: /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryModel_obj.java
===================================================================
--- /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryModel_obj.java	(revision 82)
+++ /branches/trunk/src/tmcsim/cadmodels/IncidentInquiryModel_obj.java	(revision 82)
@@ -0,0 +1,399 @@
+package tmcsim.cadmodels;
+
+
+import java.io.Serializable;
+import java.util.Vector;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+
+/**
+ * IncidentInquiryModel_obj is the model object containing all model 
+ * information for an IncidentInquiry CAD Screen.  The model data includes
+ * a single IncidentInquiryHeader, and lists of IncidentInquiryDetails, 
+ * IncidentInquiryAssignedUnits, IncidentInquiryTows, IncidentInquiryWitnesses,
+ * and IncidentInquiryServices.  The add???() methods append a new 
+ * IncidentInquiry model object to the associated internal list.<br/>
+ * <br/>
+ * This element parses and creates the following XML schema in its toXML() and
+ * fromXML() methods.  The ROOT element is the parameter for those methods.  The
+ * specific XML schema for each IncidentInquiry model can be found in its
+ * class header.<br/>
+ * <ROOT>
+ *    <HEADER>
+ *    <DETAIL/>
+ *    ...
+ *    <DETAIL/>
+ *    <UNIT/>
+ *    ...
+ *    <UNIT/>
+ *    <WITNESS/>
+ *    ...
+ *    <WITNESS/>
+ *    <TOW/>
+ *    ...
+ *    <TOW/>
+ *    <SERVICE/>
+ *    ...
+ *    <SERVICE/>
+ * </ROOT>
+ * 
+ * @see IncidentInquiryHeader
+ * @see IncidentInquiryDetails
+ * @see IncidentInquiryAssignedUnits
+ * @see IncidentInquiryTows
+ * @see IncidentInquiryWitnesses
+ * @see IncidentInquiryServices
+ * @author Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class IncidentInquiryModel_obj implements Serializable {
+    
+    /** Log position info for a log entry.  */
+    public static final String SCRIPT_POS_INFO   = "000A17661";     
+    
+    /**
+     * Enumeration with XML tag names.
+     * @author Matthew Cechini
+     */
+    private static enum XML_TAGS {
+        /** Header information. */
+        HEADER  ("HEADER"),
+        /** Detail log entry. */
+        DETAIL  ("DETAIL"),
+        /** Unit log entry. */
+        UNIT    ("UNIT"),
+        /** Witness log entry. */
+        WITNESS ("WITNESS"),
+        /** Tow log entry. */
+        TOW     ("TOW"),
+        /** Service log entry. */
+        SERVICE ("SERVICE"),
+        /** Updated entries. */
+        UPDATES  ("UPDATES");
+    
+        public String tag;
+        
+        private XML_TAGS(String t) {
+            tag = t;
+        }       
+    }
+    
+    /**  Header data. */
+    private IncidentInquiryHeader                header    = null;
+    
+    /** List of Detail objects. */
+    private Vector<IncidentInquiryDetails>       details   = null;
+    
+    /** List of UnitsAssigned objects. */
+    private Vector<IncidentInquiryUnitsAssigned> units     = null;
+    
+    /** List of Detail objects. */
+    private Vector<IncidentInquiryWitnesses>     witnesses = null;
+    
+    /** List of Tow objects. */
+    private Vector<IncidentInquiryTows>          tows      = null;
+    
+    /** List of Service objects. */
+    private Vector<IncidentInquiryServices>      services  = null;  
+    
+    /*
+    private boolean detailsUpdated   = false;
+    private boolean unitsUpdated     = false;
+    private boolean towsUpdated      = false;
+    private boolean witnessesUpdated = false;
+    private boolean servicesUpdated  = false;
+    */
+    
+    /** 
+     * Origin of this object's data.  Options include "Script" or "CAD #", 
+     * where # is a CAD position 
+     */
+    private String source = "";            
+    
+    /** 
+     * Construtor.  Initialize all local lists of IncidentInquiry objects.  
+     * Set source to "Script". 
+     */
+    public IncidentInquiryModel_obj() {
+        source        = "Script";
+
+        header        = new IncidentInquiryHeader();
+        details       = new Vector<IncidentInquiryDetails>();
+        units         = new Vector<IncidentInquiryUnitsAssigned>();
+        witnesses     = new Vector<IncidentInquiryWitnesses>();
+        tows          = new Vector<IncidentInquiryTows>();
+        services      = new Vector<IncidentInquiryServices>(); 
+                      
+    }
+    
+    /**  
+     * Constructor.  Initialie all local lists of IncidentInquiry objects.
+     * Set srouce to "CAD #".
+     * 
+     * @param CADPosition Integer value for the originating CAD position of this object's data.
+     */
+    public IncidentInquiryModel_obj(int CADPosition) {
+        source        = "CAD " + CADPosition;
+
+        header        = new IncidentInquiryHeader();
+        details       = new Vector<IncidentInquiryDetails>();
+        units         = new Vector<IncidentInquiryUnitsAssigned>();
+        witnesses     = new Vector<IncidentInquiryWitnesses>();
+        tows          = new Vector<IncidentInquiryTows>();
+        services      = new Vector<IncidentInquiryServices>(); 
+                      
+    }    
+
+    /**  
+     * Copy Constructor.
+     * 
+     * @param newIIMO Object containing data to be copied into constructed object.
+     */
+    public IncidentInquiryModel_obj(IncidentInquiryModel_obj newIIMO) {
+        source        = newIIMO.source;
+        
+        header        = new IncidentInquiryHeader(newIIMO.header);
+        details       = new Vector<IncidentInquiryDetails>(newIIMO.details);
+        units         = new Vector<IncidentInquiryUnitsAssigned>(newIIMO.units);
+        witnesses     = new Vector<IncidentInquiryWitnesses>(newIIMO.witnesses);
+        tows          = new Vector<IncidentInquiryTows>(newIIMO.tows);
+        services      = new Vector<IncidentInquiryServices>(newIIMO.services); 
+    }
+
+    /**
+     * This method updates the private lists of IncidentInquiry data with `
+     * data contained in the parameter object.  
+     * 
+     * @param newObject Object containing IncidentInquiry data that will
+     *                  be used to update local IncidentInquiry lists.
+     */
+    public void update(IncidentInquiryModel_obj newObject) {
+                        
+        header.update(newObject.header);        
+        details.addAll(newObject.getDetails());
+        
+        //Do not want duplicate units in the vector
+        for(IncidentInquiryUnitsAssigned unit : newObject.getUnits()) {
+            if(units.contains(unit)) {
+                IncidentInquiryUnitsAssigned oldUnit = units.get(units.indexOf(unit));
+                /*
+                if(oldUnit.isActive != unit.isActive ||
+                   oldUnit.isPrimary != unit.isPrimary ||
+                   oldUnit.statusType != unit.statusType) 
+                {
+                    unitsUpdated |= true;
+                }    
+                */
+                units.remove(oldUnit);
+            }           
+            units.add(unit);            
+        }
+        
+        witnesses.addAll(newObject.getWitnesses());
+        tows.addAll(newObject.getTows());
+        services.addAll(newObject.getServices());        
+
+        /*
+        detailsUpdated   |= newObject.getDetails().size() > 0;
+        witnessesUpdated |= newObject.getWitnesses().size() > 0;
+        towsUpdated      |= newObject.getTows().size() > 0;
+        servicesUpdated  |= newObject.getServices().size() > 0;
+        */
+        
+    }
+    
+    public void toXML(Element currElem) {
+        
+        Document theDoc = currElem.getOwnerDocument();
+        /*
+        Element updatesElem = theDoc.createElement(UPDATES);
+        currElem.appendChild(updatesElem);
+        
+        Element updateElem  = theDoc.createElement(DETAIL);
+        updateElem.appendChild(theDoc.createTextNode(String.valueOf(detailsUpdated)));
+        updatesElem.appendChild(updateElem);
+        
+        updateElem  = theDoc.createElement(UNIT);
+        updateElem.appendChild(theDoc.createTextNode(String.valueOf(unitsUpdated)));
+        updatesElem.appendChild(updateElem);
+        
+        updateElem  = theDoc.createElement(WITNESS);
+        updateElem.appendChild(theDoc.createTextNode(String.valueOf(witnessesUpdated)));
+        updatesElem.appendChild(updateElem);
+        
+        updateElem  = theDoc.createElement(TOW);
+        updateElem.appendChild(theDoc.createTextNode(String.valueOf(towsUpdated)));
+        updatesElem.appendChild(updateElem);
+        
+        updateElem  = theDoc.createElement(SERVICE);
+        updateElem.appendChild(theDoc.createTextNode(String.valueOf(servicesUpdated)));
+        updatesElem.appendChild(updateElem);
+        */
+                
+        Element headerElem = theDoc.createElement(XML_TAGS.HEADER.tag);
+        header.toXML(headerElem);
+        currElem.appendChild(headerElem);
+        
+        Element detailElem = null;
+        for(IncidentInquiryDetails detail : details) {
+            detailElem = theDoc.createElement(XML_TAGS.DETAIL.tag);
+            detail.toXML(detailElem);
+            currElem.appendChild(detailElem);
+        }
+        
+        Element unitElem = null;        
+        for(IncidentInquiryUnitsAssigned unit : units) {
+            unitElem = theDoc.createElement(XML_TAGS.UNIT.tag);         
+            unit.toXML(unitElem);
+            currElem.appendChild(unitElem);
+        }
+        
+        Element witnessElem = null;     
+        for(IncidentInquiryWitnesses witness : witnesses) {
+            witnessElem = theDoc.createElement(XML_TAGS.WITNESS.tag);
+            witness.toXML(witnessElem);
+            currElem.appendChild(witnessElem);
+        }
+        
+        Element towElem = null;     
+        for(IncidentInquiryTows tow : tows) {
+            towElem = theDoc.createElement(XML_TAGS.TOW.tag);           
+            tow.toXML(towElem);
+            currElem.appendChild(towElem);          
+        }
+        
+        Element serviceElem = null;     
+        for(IncidentInquiryServices service : services) {
+            serviceElem = theDoc.createElement(XML_TAGS.SERVICE.tag);               
+            service.toXML(serviceElem);
+            currElem.appendChild(serviceElem);
+        }  
+        
+    }
+    
+    public void fromXML(Node modelNode) {
+
+        Node     currentNode = modelNode;
+        //Node     updateNode  = null;
+        String   nodeName    = null;
+        
+        details.clear();
+        units.clear();
+        witnesses.clear();
+        tows.clear();
+        services.clear();
+        
+        /*
+        updateNode = currentNode.getFirstChild();
+        detailsUpdated = Boolean.parseBoolean(updateNode.getTextContent());
+        updateNode = updateNode.getNextSibling();
+        unitsUpdated = Boolean.parseBoolean(updateNode.getTextContent());
+        updateNode = updateNode.getNextSibling();
+        witnessesUpdated = Boolean.parseBoolean(updateNode.getTextContent());
+        updateNode = updateNode.getNextSibling();
+        towsUpdated = Boolean.parseBoolean(updateNode.getTextContent());
+        updateNode = updateNode.getNextSibling();
+        servicesUpdated = Boolean.parseBoolean(updateNode.getTextContent());
+        */
+        
+        header = new IncidentInquiryHeader(currentNode);
+        
+        while((currentNode = currentNode.getNextSibling()) != null) {
+            nodeName    = currentNode.getNodeName();    
+            
+            if(nodeName.equals(XML_TAGS.DETAIL.tag)) { 
+                details.add(new IncidentInquiryDetails(currentNode));
+            }
+            else if(nodeName.equals(XML_TAGS.UNIT.tag)) { 
+                units.add(new IncidentInquiryUnitsAssigned(currentNode));
+            }
+            else if(nodeName.equals(XML_TAGS.WITNESS.tag)) { 
+                witnesses.add(new IncidentInquiryWitnesses(currentNode));
+            }
+            else if(nodeName.equals(XML_TAGS.TOW.tag)) { 
+                tows.add(new IncidentInquiryTows(currentNode));
+            }
+            else if(nodeName.equals(XML_TAGS.SERVICE.tag)) { 
+                services.add(new IncidentInquiryServices(currentNode));
+            }
+       }        
+    }
+    
+    /**
+     * Applies the parameter timestamp to all IncidentInquiry objects.
+     * 
+     * @param timeStamp String containing timestamp
+     */
+    public void timeStamp(String timeStamp) {
+        for(IncidentInquiryDetails detail : details)
+            detail.timeStamp(timeStamp);
+        
+        for(IncidentInquiryUnitsAssigned unit : units) {            
+            unit.timeStamp(timeStamp);
+        }
+        
+        for(IncidentInquiryWitnesses witness : witnesses) {
+            witness.timeStamp(timeStamp);
+        }       
+        for(IncidentInquiryTows tow : tows) {           
+            tow.timeStamp(timeStamp);           
+        }
+        for(IncidentInquiryServices service : services) {               
+            service.timeStamp(timeStamp);
+        }
+    }
+
+    /** 
+     * Gets the log number value for this IncidentInquiry object.
+     * 
+     * @return Integer Log number value
+     */
+    public Integer getLogNumber() {
+        return header.logNumber;
+    }
+    
+    /**
+     * Sets this objects log number to a new value.
+     * 
+     * @param logNum New log number.
+     */
+    public void setLogNumber(Integer logNum) {
+        header.logNumber = logNum;
+    }
+        
+    public IncidentInquiryHeader                getHeader()    {return header;}
+    public Vector<IncidentInquiryDetails>       getDetails()   {return details;}
+    public Vector<IncidentInquiryUnitsAssigned> getUnits()     {return units;}  
+    public Vector<IncidentInquiryWitnesses>     getWitnesses() {return witnesses;}
+    public Vector<IncidentInquiryTows>          getTows()      {return tows;}
+    public Vector<IncidentInquiryServices>      getServices()  {return services;}   
+    
+    public void setHeader(IncidentInquiryHeader newHeader)      {header = newHeader;}
+    public void addDetail(IncidentInquiryDetails newDetail)     {details.add(newDetail);}
+    public void addUnit(IncidentInquiryUnitsAssigned newUnit)   {
+        if(units.contains(newUnit)) {
+            units.remove(newUnit);
+        }
+        
+        units.add(newUnit); 
+    }  
+    public void addWitness(IncidentInquiryWitnesses newWitness) {witnesses.add(newWitness);}
+    public void addTow(IncidentInquiryTows newTow)              {tows.add(newTow);}
+    public void addService(IncidentInquiryServices newService)  {services.add(newService);}
+    
+    /*
+    public boolean getDetailsUpdated()   { return detailsUpdated; }
+    public boolean getUnitsUpdated()     { return unitsUpdated; }
+    public boolean getTowsUpdated()      { return towsUpdated; }
+    public boolean getWitnessesUpdated() { return witnessesUpdated; }
+    public boolean getServicesUpdated()  { return servicesUpdated; }
+    */  
+    
+    public String getSource() {
+        return source;
+    }   
+}
Index: /branches/trunk/src/tmcsim/application.properties
===================================================================
--- /branches/trunk/src/tmcsim/application.properties	(revision 82)
+++ /branches/trunk/src/tmcsim/application.properties	(revision 82)
@@ -0,0 +1,5 @@
+#Fri, 06 Oct 2017 19:49:49 -0700
+
+Application.revision=0
+
+Application.buildnumber=50
Index: /branches/trunk/src/tmcsim/client/CADCaret.java
===================================================================
--- /branches/trunk/src/tmcsim/client/CADCaret.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/CADCaret.java	(revision 82)
@@ -0,0 +1,161 @@
+package tmcsim.client;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.event.FocusEvent;
+import java.awt.event.MouseEvent;
+
+import javax.swing.text.BadLocationException;
+import javax.swing.text.DefaultCaret;
+import javax.swing.text.JTextComponent;
+
+/**
+ * CADCaret extends from DefaultCaret to provide a blinking Caret.  The Caret's
+ * blink rate is 500ms and appears as a solid underline that is the width of one 
+ * character.  All superclass methods that position the Caret are overloaded
+ * to control the position of the Caret manually.
+ * 
+ * @author Matthew
+ * @version
+ */
+@SuppressWarnings("serial")
+public class CADCaret extends DefaultCaret {
+
+    /** Caret's current position.  (>= 0) */
+    private int currentCaretPos = 0;
+
+    /** 
+     * Constructor.
+     */
+    public CADCaret() {
+        setBlinkRate(500); // half a second
+        setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
+    }
+    
+    /**
+     * Overloaded method.  The Caret's position is set with the internal
+     * position count. 
+     */
+    public void setMagicCaretPosition(Point arg0) {
+        super.setDot(currentCaretPos);
+    }
+    
+
+    /**
+     * The internal Caret position is incremented by the parameter offset
+     * value.  After position adjustment, the Caret is repositioned.
+     * 
+     * @param offset Number of characters to increment the Caret's position by. 
+     */
+    public void moveCaretForward(int offset) {
+        currentCaretPos += offset;
+        super.setDot(currentCaretPos);
+    }
+    
+    /**
+     * The internal Caret position is decremented by the parameter offset
+     * value.  If this resulting position is negative, the position is 
+     * set to 0.  After position adjustment, the Caret is repositioned.
+     * 
+     * @param offset Number of characters to decrement the Caret's position by. 
+     */
+    public void moveCaretBackward(int offset) {
+        currentCaretPos -= offset;      
+        
+        if(currentCaretPos < 0)
+            currentCaretPos = 0;
+        
+        super.setDot(currentCaretPos);
+    }
+    
+    /**
+     * The internal Caret position is reset to 0 and the Caret is repositioned.
+     */
+    public void resetCaretPosition() {
+        currentCaretPos = 0;
+        super.setDot(currentCaretPos);      
+    }
+
+    @Override
+    public void setVisible(boolean visible) 
+    {
+        if(visible)
+        {
+            getComponent().setCaretColor(Color.black);
+        }
+        else
+        {
+            getComponent().setCaretColor(Color.yellow);
+        }
+    }
+    
+    public void mouseClicked(MouseEvent arg0)     { }
+    public void mouseDragged(MouseEvent arg0)     { }
+    public void mouseEntered(MouseEvent arg0)     { }
+    public void mouseExited(MouseEvent arg0)      { }
+    public void mouseMoved(MouseEvent arg0)       { }
+    public void mousePressed(MouseEvent arg0)     { }   
+    public void mouseReleased(MouseEvent arg0)    { }
+    protected void moveCaret(MouseEvent arg0)     { }
+    public void moveDot(int arg0)                 { }
+    public void setDot(int arg0)                  { }    
+    protected void positionCaret(MouseEvent arg0) { }   
+    public void focusLost(FocusEvent arg0)        { }
+    
+    protected synchronized void damage(Rectangle r) 
+    {
+        if (r == null)
+            return;
+        // give values to x,y,width,height (inherited from
+        // java.awt.Rectangle)
+        x = r.x;
+        y = r.y + (r.height * 4 / 5 - 3);
+        width  = 10;
+        height = 5;
+        repaint(); // calls getComponent().repaint(x, y, width, height)
+    }
+
+    public void paint(Graphics g) {
+        JTextComponent comp = getComponent();
+        if (comp == null)
+            return;
+
+        int dot = getDot();
+        Rectangle r = null;
+        try {
+            r = comp.modelToView(dot);
+        } catch (BadLocationException e) {
+            return;
+        }
+        if (r == null)
+            return;
+
+        // will be distance from r.y to top
+        int dist = r.height * 4 / 5 - 3; 
+
+        if ((x != r.x) || (y != r.y + dist)) {
+            // paint() has been called directly, without a previous call to
+            // damage(), so do some cleanup. (This happens, for example,
+            // when
+            // the
+            // text component is resized.)
+            repaint(); // erase previous location of caret
+            x = r.x; // set new values for x,y,width,height
+            y = r.y + dist;
+            width  = 10;
+            height = 5;
+        }
+
+        if (isVisible()) {
+            g.setColor(comp.getCaretColor());
+            // 5 vertical pixels
+            //g.drawLine(r.x, r.y + dist, r.x, r.y + dist + 4);
+            
+            // 5 horizontal pixels
+            g.drawLine(r.x, r.y + dist + 4, r.x + 8, r.y + dist + 4); 
+        }
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/client/CADClient.java
===================================================================
--- /branches/trunk/src/tmcsim/client/CADClient.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/CADClient.java	(revision 82)
@@ -0,0 +1,514 @@
+package tmcsim.client;
+
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.rmi.Naming;
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+import java.util.Properties;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JWindow;
+import javax.swing.UIManager;
+
+import tmcsim.client.cadclientgui.CADClientGUI;
+import tmcsim.client.cadclientgui.CardfileReader;
+import tmcsim.client.cadclientgui.GUIScriptReader;
+import tmcsim.client.cadclientgui.data.CADData;
+import tmcsim.client.cadclientgui.screens.Login;
+import tmcsim.client.cadclientgui.screens.ScreenManager;
+import tmcsim.common.CADEnums;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CADClientInterface;
+import tmcsim.interfaces.CoordinatorInterface;
+
+/**
+ * CADClient is the main class for the CAD Client application. The main method
+ * instantiates an instance of the CADClient object with the default properties
+ * file "..\config\CADClient.properties" or the first argument fom the command
+ * line invocation. Properties data values are used to bind socket communication
+ * between the CAD Client and the CAD Simulator. The CADClientModel object is
+ * instantiated and the CAD Client registers itself with the CAD Simulator.
+ * Finally, the CADClientView is initialized, the model-view and observer
+ * relationships are established, and the view is shown.<br>
+ * <br>
+ * The properties file contains the following data: <br>
+ * <code>
+ * -----------------------------------------------------------------------------<br>
+ * Host Name     The host name where the CAD Simulator is located.<br>
+ * Port Number   The port number that the CAD Simulator is bound on.<br>
+ * CAD Position  The integer (>= 0) position for this CAD Client.<br>
+ * CAD User ID   The unique user id for this CAD Client.<br>
+ * Error File    Filename of error logging file.<br>
+ * -----------------------------------------------------------------------------<br>
+ * Example File: <br>
+ * CADSimulatorHost       = localhost<br>
+ * CADSimulatorSocketPort = 4444<br>
+ * CADPosition = 1 <br>
+ * CADUserID   = A12345<br>
+ * ErrorFile   = cad_client_err.txt<br>
+ * </code>
+ * 
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2009/04/17 16:27:47 $ $Revision: 1.8 $
+ */
+
+public class CADClient extends UnicastRemoteObject implements
+        CADClientInterface {
+
+    /** Error logger. */
+    private static Logger cadClientLogger = Logger.getLogger("tmcsim.client");
+
+    /**
+     * Enumeration containing properties name values. See CADClient class
+     * description for more information.
+     * 
+     * @author Matthew Cechini
+     * @see CADClient
+     */
+    private static enum PROPERTIES {
+        CAD_SIM_HOST("CADSimulatorHost"), CAD_SIM_PORT("CADSimulatorSocketPort"), CAD_RMI_PORT(
+                "CADRmiPort"), CLIENT_CAD_POS("CADPosition"), CLIENT_USER_ID(
+                "CADUserID"), KEYBOARD_TYPE("KeyboardType"), DISPLAY_TYPE(
+                "DisplayType");
+
+        public String name;
+
+        private PROPERTIES(String n) {
+            name = n;
+        }
+    }
+
+    /**
+     * CADClientSocket Object to handle socket communication between the Client
+     * and CAD Simulator.
+     */
+    private CADClientSocket theClientSocket;
+
+    /** Instance of the CADClientModel. */
+    private CADClientModel theClientScreenModel;
+
+    /** Instance of the CADClientView. */
+    private CADClientView theClientScreenView;
+
+    /**
+     * Instance of the CADCLientGUI Replaces CADClientView
+     */
+    private CADClientGUI theClientGUI;
+
+    /** Properties object for the CADClient class. */
+    private Properties cadClientProp;
+
+    /** RMI interface for communication with the remote Coordinator. */
+    private static CoordinatorInterface theCoorInt;
+
+    /** reference to itself to be used for disconnecting from CADSimulator */
+    private CADClientInterface client = this;
+
+    private static final String CONFIG_FILE_NAME = "cad_client_config.properties";
+    
+    /**
+     * Constructor. Initialize data from parsed properties file. Create a socket
+     * connection to the CADSimulator. The ClientScreenModel is initialized with
+     * the input and output I/O streams for socket communication. The
+     * ClientScreenModel registers with the CAD Simulator, using CAD position
+     * and userID read in from the properties file. The ClientScreenView is then
+     * created and initialized and set as an observer of the model.
+     * 
+     * A thread is created with the runnable ClientScreenModel and is started.
+     * When this thread is no longer alive, or the ClientScrenView and
+     * CADClientSocket are closed. The program then exits.
+     * 
+     * @param propertiesFile
+     *            File path (absolute or relative) to the properties file
+     *            containing configuration data.
+     */
+    public CADClient(String propertiesFile) throws SimulationException,
+            RemoteException {
+        if (!verifyProperties(propertiesFile))
+            System.exit(0);
+
+        connect(cadClientProp.getProperty(PROPERTIES.CAD_SIM_HOST.name).trim(),
+                cadClientProp.getProperty(PROPERTIES.CAD_RMI_PORT.name).trim());
+
+        // Instantiate the Socket and Model Objects.
+        theClientSocket = new CADClientSocket(cadClientProp.getProperty(
+                PROPERTIES.CAD_SIM_HOST.name).trim(),
+                Integer.parseInt(cadClientProp.getProperty(
+                        PROPERTIES.CAD_SIM_PORT.name).trim()));
+        theClientScreenModel = new CADClientModel();
+        theClientScreenModel.initializeScreen(theClientSocket.getInputStream(),
+                theClientSocket.getOutputStream());
+
+        // Register this CAD Client with the Simulation Manager
+        theClientScreenModel.register(Integer.parseInt(cadClientProp
+                .getProperty(PROPERTIES.CLIENT_CAD_POS.name)), cadClientProp
+                .getProperty(PROPERTIES.CLIENT_USER_ID.name));
+
+        // Instantiate the CADScreenView and set up the model-view observer
+        // relationship.
+        theClientScreenView = new CADClientView(theClientScreenModel);
+        theClientScreenView.setVisible(false);
+
+        // TODO: set up model-view relationship similar to ClientView and
+        // ScreenView
+        // Can repurpose the old model, but may be better to copy over and
+        // modify in parallel
+        // This is required to perform powerline commands on the data
+        theClientGUI = new CADClientGUI();
+
+        // Each screen of the UI should have a reference to either it's parent
+        // object or the main client
+        // This ensures they all have access to each other and the data model
+        theClientGUI.screen = new ScreenManager(theCoorInt);
+        theClientGUI.login = new Login();
+        theClientGUI.client = this;
+
+        // setup keyboard settings for CAD Client
+        if (cadClientProp.getProperty(PROPERTIES.KEYBOARD_TYPE.name).trim()
+                .equals("CAD")) {
+            CADEnums.CAD_KEYS.setupCADKeyboard();
+        }
+        // STD
+        else {
+            CADEnums.CAD_KEYS.setupStandardKeyboard();
+        }
+
+        theClientScreenModel.addObserver(theClientScreenView);
+
+        // Initialize the display
+        if (cadClientProp.getProperty(PROPERTIES.DISPLAY_TYPE.name).equals(
+                "FULL_SCREEN")) {
+
+            theClientScreenView.addWindowListener(new WindowListener() {
+                public void windowClosed(WindowEvent e) {
+                }
+
+                public void windowOpened(WindowEvent e) {
+                }
+
+                public void windowIconified(WindowEvent e) {
+                }
+
+                public void windowDeiconified(WindowEvent e) {
+                }
+
+                public void windowActivated(WindowEvent e) {
+                }
+
+                public void windowDeactivated(WindowEvent e) {
+                }
+
+                public void windowClosing(WindowEvent e) {
+
+                    try {
+                        theClientSocket.closeSocket();
+                    } catch (SimulationException se) {
+                    }
+
+                    System.exit(0);
+                }
+            });
+
+            theClientScreenView.initWindow();
+            theClientScreenView.setVisible(false);
+        } else {
+            JFrame cadFrame = new JFrame("CAD Client");
+            cadFrame.add(theClientScreenView.initBox());
+            cadFrame.setSize(800, 600);
+
+            cadFrame.addWindowListener(new WindowListener() {
+                public void windowClosed(WindowEvent e) {
+                }
+
+                public void windowOpened(WindowEvent e) {
+                }
+
+                public void windowIconified(WindowEvent e) {
+                }
+
+                public void windowDeiconified(WindowEvent e) {
+                }
+
+                public void windowActivated(WindowEvent e) {
+                }
+
+                public void windowDeactivated(WindowEvent e) {
+                }
+
+                public void windowClosing(WindowEvent e) {
+
+                    try {
+                        theClientSocket.closeSocket();
+                    } catch (SimulationException se) {
+                    }
+
+                    System.exit(0);
+                }
+            });
+
+            cadFrame.setVisible(true);
+        }
+
+        // Create the CAD Client thread to run the CADClientModel Object.
+        Thread clientThread = new Thread(theClientScreenModel);
+        clientThread.start();
+
+        ensureProperShutdown();
+    }
+
+    /**
+     * Connect to the Coordinator's RMI object, and register this object for
+     * callback with the Coordinator.
+     * 
+     * @param hostname
+     *            Host name of the CAD Simulator.
+     * @param portNumber
+     *            Port number of the CAD Simulator RMI communication.
+     * @throws SimulationException
+     *             if there is an error creating the RMI connection.
+     */
+    protected void connect(String hostname, String portNumber)
+            throws SimulationException {
+
+        String coorIntURL = "";
+
+        try {
+            coorIntURL = "rmi://" + hostname + ":" + portNumber
+                    + "/coordinator";
+            theCoorInt = (CoordinatorInterface) Naming.lookup(coorIntURL);
+            theCoorInt.registerForCallback(this);
+        } catch (Exception e) {
+            throw new SimulationException(SimulationException.CAD_SIM_CONNECT,
+                    e);
+        }
+    }
+
+    /**
+     * This method verifies that the CAD Simulator Host and Port values are not
+     * null. Also, if a CAD Position or User ID do not exist in the properties
+     * file, the user is prompted to enter values. These values are written to
+     * the properties file. If the user cancels the process of entering these
+     * values, the verification fails.
+     * 
+     * @param propertiesFile
+     *            File path (absolute or relative) to the properties file
+     *            containing configuration data.
+     * @return True if the properties file is valid, false if not.
+     * @throws SimulationException
+     *             if there is an exception in verifying the properties file, or
+     *             if the user cancels input.
+     */
+    private boolean verifyProperties(String propertiesFile)
+            throws SimulationException {
+
+        // Load the properties file.
+        try {
+            cadClientProp = new Properties();
+            cadClientProp.load(new FileInputStream(propertiesFile));
+        } catch (Exception e) {
+            cadClientLogger.logp(Level.SEVERE, "SimulationManager",
+                    "Constructor", "Exception in reading properties file.", e);
+
+            throw new SimulationException(SimulationException.INITIALIZE_ERROR,
+                    e);
+        }
+        
+
+        // Ensure that the properties file does not have null values for the
+        // CAD Simulator's connection information.
+        if (cadClientProp.getProperty(PROPERTIES.CAD_SIM_HOST.name) == null
+                || cadClientProp.getProperty(PROPERTIES.CAD_SIM_PORT.name) == null) {
+            cadClientLogger.logp(Level.SEVERE, "SimulationManager",
+                    "Constructor", "Null value in properties file.");
+            throw new SimulationException(SimulationException.INITIALIZE_ERROR);
+        }
+
+        try {
+            // If the properties file does not specify a CAD position, prompt
+            // the
+            // user to select one. If the user selects a position, write the
+            // new properties values to the file. If the user cancels, else
+            // throw an exception.
+            if (cadClientProp.getProperty(PROPERTIES.CLIENT_CAD_POS.name) == null) {
+                if (getCADPosition())
+                    cadClientProp.store(new FileOutputStream(propertiesFile),
+                            "");
+                else
+                    throw new SimulationException(
+                            SimulationException.INITIALIZE_ERROR);
+            }
+
+            // If the properties file does not specifiy a CAD User ID, prompt
+            // the
+            // user to enter a value. If the user enters a valid ID, write the
+            // new properties values to the file. If the user cancels, else
+            // throw an exception.
+            if (cadClientProp.getProperty(PROPERTIES.CLIENT_USER_ID.name) == null) {
+                if (getUserID())
+                    cadClientProp.store(new FileOutputStream(propertiesFile),
+                            "");
+                else
+                    throw new SimulationException(
+                            SimulationException.INITIALIZE_ERROR);
+            }
+        } catch (IOException ioe) {
+            cadClientLogger.logp(Level.SEVERE, "SimulationManager",
+                    "Constructor",
+                    "Exception in writing to the properties file.");
+            throw new SimulationException(SimulationException.INITIALIZE_ERROR);
+        }
+
+        // Ensure that the properties file has a valid display type
+        if (cadClientProp.getProperty(PROPERTIES.DISPLAY_TYPE.name) == null
+                || (!cadClientProp.getProperty(PROPERTIES.DISPLAY_TYPE.name)
+                        .equals("FULL_SCREEN") && !cadClientProp.getProperty(
+                        PROPERTIES.DISPLAY_TYPE.name).equals("FRAME"))) {
+            cadClientLogger.logp(Level.SEVERE, "SimulationManager",
+                    "Constructor", "Invalid display type.");
+            throw new SimulationException(SimulationException.INITIALIZE_ERROR);
+        }
+
+        return true;
+    }
+
+    /**
+     * This method prompts the user to select a value for the CAD position. If
+     * the user cancels the method returns false, else the Properties object is
+     * updated and true is returned.
+     * 
+     * @return True if the user successfully selected a CAD position, false if
+     *         not.
+     */
+    private boolean getCADPosition() {
+
+        Vector<Integer> positions = new Vector<Integer>();
+        for (int i = 0; i < 10; i++)
+            positions.add(i);
+
+        Object cadPos = null;
+
+        while (true) {
+            cadPos = JOptionPane.showInputDialog(null,
+                    "Please assign this workstation a CAD position number.",
+                    "CAD Position Asignment", JOptionPane.QUESTION_MESSAGE,
+                    null, positions.toArray(), positions.get(0));
+
+            // If the user pressed cancel, confirm the exit and return false.
+            if (cadPos == null) {
+                if (JOptionPane
+                        .showConfirmDialog(
+                                null,
+                                "CAD Client cannot load until a valid CAD "
+                                        + "position has been selected.  Do you wish to "
+                                        + "cancel loading the CAD Client?",
+                                "Confirm Exit", JOptionPane.YES_NO_OPTION,
+                                JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION)
+                    return false;
+            }
+            // Else the user selected a CAD position, exit the loop.
+            else {
+                break;
+            }
+        }
+
+        cadClientProp.setProperty(PROPERTIES.CLIENT_CAD_POS.name,
+                cadPos.toString());
+        return true;
+    }
+
+    /**
+     * This method prompts the user to enter a 5-character User ID. If the user
+     * cancels the method returns false, else the Properties object is updated
+     * and true is returned.
+     * 
+     * @return True if the user successfully selected a CAD position, false if
+     *         not.
+     */
+    private boolean getUserID() {
+        String cadUID = null;
+
+        while (true) {
+            cadUID = JOptionPane.showInputDialog(null,
+                    "Please assign this workstation a 6-character CAD "
+                            + "User ID.", "CAD User ID Asignment",
+                    JOptionPane.QUESTION_MESSAGE);
+
+            // /If the user pressed cancel, confirm the exit and return false.
+            if (cadUID == null) {
+                if (JOptionPane.showConfirmDialog(null,
+                        "CAD Client cannot load until a valid User ID "
+                                + "has been entered.  Do you wish to "
+                                + "cancel loading the CAD Client?",
+                        "Confirm Exit", JOptionPane.YES_NO_OPTION,
+                        JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION)
+                    return false;
+            }
+            // If the user does not enter a valid User ID, notify and reprompt.
+            else if (cadUID.length() != 6) {
+                JOptionPane.showMessageDialog(null,
+                        "The User ID must be 6 characters.", "Invalid User ID",
+                        JOptionPane.WARNING_MESSAGE);
+            }
+            // Else the user entered a valid value, exit the loop.
+            else {
+                break;
+            }
+        }
+
+        cadClientProp.setProperty(PROPERTIES.CLIENT_USER_ID.name, cadUID);
+        return true;
+    }
+
+    /**
+     * Construct the CADClient with the properties file path, either from the
+     * command line arguments or default.
+     * 
+     * @param args
+     *            Command line arguments.
+     */
+    public static void main(String[] args) {
+    	if(System.getProperty("CONFIG_DIR") == null){
+        	System.setProperty("CONFIG_DIR", "config");
+        }
+
+        try {
+            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+            new CADClient(System.getProperty("CONFIG_DIR") + System.getProperty("file.separator") + CONFIG_FILE_NAME);
+         
+        } catch (Exception e) {
+            cadClientLogger.logp(Level.SEVERE, "SimulationManager", "Main",
+                    "Error initializing application.");
+
+            JOptionPane.showMessageDialog(new JWindow(), e.getMessage(),
+                    "Error - Program Exiting", JOptionPane.ERROR_MESSAGE);
+
+            System.exit(-1);
+        }
+
+    }
+
+    public void refresh() {
+        theClientGUI.screen.refreshScreens();
+    }
+
+    public void ensureProperShutdown() {
+        Runtime.getRuntime().addShutdownHook(new Thread() {
+            public void run() {
+                try {
+                    theCoorInt.unregisterForCallback(client);
+                } catch (RemoteException e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/ClockView.java
===================================================================
--- /branches/trunk/src/tmcsim/client/ClockView.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/ClockView.java	(revision 82)
@@ -0,0 +1,59 @@
+package tmcsim.client;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.util.logging.Logger;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.WindowConstants;
+
+/**
+ * The CADClientView class is the view component to the CAD Client application.
+ *
+ * @author jdalbey
+ */
+@SuppressWarnings("serial")
+public class ClockView extends JFrame
+{
+    /**
+     * Error Logger.
+     */
+    private static Logger cadLogger = Logger.getLogger("tmcsim.client");
+    private JPanel mainPane;
+    private JLabel currentTime;
+    private final static Dimension SCREEN_SIZE = new Dimension(1100, 255);
+
+    /**
+     * Constructor. Build panes, add key listeners, and set up observer
+     * relationship between the footer and main panes. TODO: Consider having
+     * screen size and font size in properties file.
+     */
+    public ClockView()
+    {
+        super("Simulation Clock");
+        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+        currentTime = new JLabel("00:00:00");
+        currentTime.setAlignmentX(Box.CENTER_ALIGNMENT);
+        currentTime.setFont(new Font("Geneva", Font.BOLD, 200));
+        mainPane = new JPanel();
+        setSize(SCREEN_SIZE);
+        setMaximumSize(SCREEN_SIZE);
+        setMinimumSize(SCREEN_SIZE);
+        mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
+        mainPane.setBorder(BorderFactory.createLineBorder(Color.black));
+        mainPane.setBackground(new Color(230, 230, 230));  // #E6E6E6
+        mainPane.add(currentTime);
+        add(mainPane);
+        pack();
+    }
+
+    public void updateTime(String msg)
+    {
+        currentTime.setText(msg);
+    }
+}
Index: /branches/trunk/src/tmcsim/client/CADClientModel.java
===================================================================
--- /branches/trunk/src/tmcsim/client/CADClientModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/CADClientModel.java	(revision 82)
@@ -0,0 +1,336 @@
+package tmcsim.client;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.util.Observable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import tmcsim.cadmodels.BlankScreenModel;
+import tmcsim.cadmodels.CADScreenModel;
+import tmcsim.cadmodels.IncidentBoardModel;
+import tmcsim.cadmodels.IncidentInquiryModel;
+import tmcsim.cadmodels.IncidentSummaryModel;
+import tmcsim.cadmodels.RoutedMessageModel;
+import tmcsim.common.ObserverMessage;
+import tmcsim.common.SimulationException;
+import tmcsim.common.CADProtocol.CAD_CLIENT_CMD;
+import tmcsim.common.CADProtocol.CAD_COMMANDS;
+import tmcsim.common.CADProtocol.CAD_SIMULATOR_CMD;
+import tmcsim.common.CADProtocol.DATA_TAGS;
+
+
+/**
+ * CADClientModel handles data transmission between the CAD Client and CAD
+ * Simulator.  Data is read from the input stream and parsed for message updates
+ * from the CAD Simulator.  These updates are described in the receiveObject()
+ * method description.  The transmit() method is called to send Document objects
+ * to the CAD Simulator.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2009/04/20 17:58:27 $ $Revision: 1.5 $
+ */
+public class CADClientModel extends Observable implements Runnable {
+
+    /** Error Logger. */
+    private Logger clientLogger = Logger.getLogger("tmcsim.client");
+    
+    /** Output stream for writing data to the CAD Simulator. */    
+    private ObjectOutputStream out = null;
+
+    /** Input Stream for reading data to the CAD Simulator. */
+    private ObjectInputStream in = null;    
+   
+    /** Boolean flag to designate if Runnable object is running. */
+    private boolean running = true;
+
+
+    /**
+     * Constructor.
+     */
+    public CADClientModel() {  }
+    
+    /**
+     * This method sets the streams that are used for communication
+     * to and from the CAD Simulator.
+     *
+     * @param theIS The input stream to read packets from.
+     * @param theOS The output stream to write packets to.
+     * @throws SimulationException if there is an exception in 
+     * creating the Object(Input/Output)Streams.
+     */
+    public void initializeScreen(InputStream theIS,
+                                 OutputStream theOS) throws SimulationException {
+        
+        try  {
+            out = new ObjectOutputStream(theOS);
+            in  = new ObjectInputStream(theIS);
+        }
+        catch (Exception e) {
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, e);
+        }
+    
+    }
+    
+    /**
+     * This method register this CAD Client with the CAD Simulator.  The client 
+     * is registered with its CAD position number and user ID.  
+     * 
+     * @param CADPosition CAD Position number.
+     * @param userID User ID.
+     * @throws SimulationException if there is an exception in registering the client.
+     */
+    public void register(int CADPosition, String userID) throws SimulationException {
+        try {
+            Document cmdDoc = DocumentBuilderFactory.newInstance()
+                    .newDocumentBuilder().newDocument();
+            Element cmdElem = cmdDoc.createElement(CAD_CLIENT_CMD.TERMINAL_REGISTER.type);  
+            
+            Element posElem = cmdDoc.createElement(DATA_TAGS.POSITION_NUM.tag);
+            posElem.appendChild(cmdDoc.createTextNode(String.valueOf(CADPosition)));
+            cmdElem.appendChild(posElem);
+            
+            Element userIDElem = cmdDoc.createElement(DATA_TAGS.USER_ID.tag);
+            userIDElem.appendChild(cmdDoc.createTextNode(userID));
+            cmdElem.appendChild(userIDElem);
+
+            cmdDoc.appendChild(cmdElem);
+
+            transmitCommand(cmdDoc);
+
+        } catch (Exception e) {
+            clientLogger.logp(Level.SEVERE, "CADClientModel", "register()", 
+                    "Exception in registering client.", e);
+            throw new SimulationException(SimulationException.REGISTER_ERROR, e);
+        }
+    }
+    
+    /**
+     * Run method that must be defined in Runnable interface.  
+     * This method continuously calls the receiveObject() method 
+     * to check the input stream for data.  If an exception occurs
+     * reading from the input stream, the streams are closed and 
+     * observers are notified with a null object that the model has
+     * disconnected.
+     */
+    public void run() {
+        
+        while(running)  {
+            
+            try {               
+                Thread.sleep(250);
+                receiveObject(in.readObject());                 
+            }
+            catch (EOFException eofe) {
+                clientLogger.logp(Level.SEVERE, "CADClientModel", "run()", 
+                        "Exception in reading object from input stream.", eofe);
+            }
+            catch (Exception e) {
+                clientLogger.logp(Level.SEVERE, "CADClientModel", "run()", 
+                        "Exception in reading object from input stream. " +
+                        "Shutting down client.", e);
+                
+                running = false;
+                
+                closeStreams();
+                
+                setChanged();
+                notifyObservers();
+            }
+        }
+    }
+
+    
+    /**
+     * This method writes the parameter Document object to the 
+     * ObjectOutputStream which is transmitted eo the CAD Simulator.
+     * If there is an Exception in writing to the Socket, the streams
+     * are closed and observers are notified with a null object to
+     * signify that the connect has been lost.
+     * 
+     * @param command The Document being transmitted.
+     */
+    public void transmitCommand(Document command) {     
+        
+        try {
+            out.writeObject(command);
+            out.flush();
+        }
+        catch (IOException ioe) {
+            clientLogger.logp(Level.SEVERE, "CADClientModel", "transmitObject()", 
+                    "Exception in writing object to the input stream. " +
+                    "Shutting down client.", ioe);
+            
+            running = false;
+            
+            closeStreams();
+            
+            setChanged();
+            notifyObservers();
+        }
+    }
+    
+    /**
+     *<table cellpadding="2" cellspacing="2" border="1"
+     * style="text-align: left; width: 250px;">
+     *  <tbody>
+     *    <tr>
+     *      <th>CAD Protocol Command<br></th>
+     *      <th>Action Taken<br></th>
+     *    </tr>
+     *    <tr>
+     *      <td>UPDATE_SCREEN<br></td>
+     *      <td>A completely new window has been received.  Parse the received 
+     *          data into an XML Document.  The root node is used to determine
+     *          which type of CAD Screen is being shown.  Construct the new
+     *          CADScreenModel for that CAD Screem amd notify the view observer with the new
+     *          screen type and model.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>UPDATE_STATUS</td>
+     *      <td>Notify the view observer with the new screen update status value.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>UPDATE_TIME</td>
+     *      <td>Notify the view observer with the new CAD Time value.<br> </td>
+     *    </tr>
+     *    <tr>
+     *      <td>UPDATE_MSG_COUNT</td>
+     *      <td>Notify the view observer with the new queued message count value.<br> </td>
+     *    </tr>
+     *    <tr>
+     *      <td>UPDATE_MSG_UNREAD</td>
+     *      <td>Notify the view observer with the new boolean unread messages value.<br> </td>
+     *    </tr>
+     *    <tr>
+     *      <td>CAD_INFO</td>
+     *      <td>Notify the view observer with the received informational message value.<br> </td>
+     *    </tr>
+     *  </tbody>
+     *</table>
+     *
+     */
+    private void receiveObject(Object rxData) throws IOException {
+        
+        try {
+            
+            CADScreenModel theCADScreenModel = null;
+            
+            Element root  = ((Document)rxData).getDocumentElement();
+        
+            switch(CAD_SIMULATOR_CMD.fromString(root.getNodeName())) {
+        
+                case UPDATE_SCREEN:
+                                            
+                    Node screenNode = root.getChildNodes().item(0);
+
+                    if(screenNode.getNodeName().equals(CAD_COMMANDS.INCIDENT_INQUIRY.fullName)) {
+                        theCADScreenModel = new IncidentInquiryModel(screenNode);               
+                        
+                        setChanged();
+                        notifyObservers(new ObserverMessage(ObserverMessage.messageType.INCIDENT_INQUIRY, theCADScreenModel));  
+                    }
+                    else if(screenNode.getNodeName().equals(CAD_COMMANDS.INCIDENT_SUMMARY.fullName)) {                  
+                        theCADScreenModel = new IncidentSummaryModel(screenNode);
+                        
+                        setChanged();
+                        notifyObservers(new ObserverMessage(ObserverMessage.messageType.INCIDENT_SUMMARY, theCADScreenModel)); 
+            
+                    }
+                    else if(screenNode.getNodeName().equals(CAD_COMMANDS.INCIDENT_BOARD.fullName)) {
+                        theCADScreenModel = new IncidentBoardModel(screenNode);
+                        
+                        setChanged();
+                        notifyObservers(new ObserverMessage(ObserverMessage.messageType.INCIDENT_BOARD, theCADScreenModel)); 
+                    }   
+                    else if(screenNode.getNodeName().equals(CAD_COMMANDS.ROUTED_MESSAGE.fullName)) {
+                        theCADScreenModel = new RoutedMessageModel(screenNode);
+                        
+                        setChanged();
+                        notifyObservers(new ObserverMessage(ObserverMessage.messageType.ROUTED_MESSAGE, theCADScreenModel)); 
+                    }                       
+                    else if(screenNode.getNodeName().equals(CAD_COMMANDS.BLANK_SCREEN.fullName)) {
+                        theCADScreenModel = new BlankScreenModel(screenNode);
+                    
+                        setChanged();
+                        notifyObservers(new ObserverMessage(ObserverMessage.messageType.BLANK_SCREEN, theCADScreenModel)); 
+                    }
+                    break;   
+    
+                case UPDATE_STATUS:
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.SCREEN_UPDATE, 
+                            root.getTextContent()));
+                    break;
+                
+                case UPDATE_TIME:
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.TIME_UPDATE, 
+                            root.getTextContent()));
+                    break;
+                
+                case UPDATE_MSG_COUNT:
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.ROUTED_MESSAGE_COUNT_UPDATE,  
+                            Integer.parseInt(root.getTextContent())));
+                    break;
+                
+                case UPDATE_MSG_UNREAD:
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.ROUTED_MESSAGE_UNREAD_UPDATE,  
+                            Boolean.parseBoolean(root.getTextContent())));
+                    break;
+               
+                case CAD_INFO:
+                    setChanged();
+                    notifyObservers(new ObserverMessage(ObserverMessage.messageType.CAD_INFO_MESSAGE,  
+                            root.getTextContent()));
+                    break;
+                    
+                case APP_CLOSE:
+                    closeStreams();
+                    System.exit(0);
+                    break;
+            }           
+        } 
+        catch (Exception e) 
+        {
+            clientLogger.logp(Level.SEVERE, "CADClientModel", "receiveObject()", 
+                    "Exception in parsing xml object.", e);
+        }
+    }
+    
+    /**
+     * Close the ouput and input streams.
+     */
+    private void closeStreams() {
+        
+        
+        try {
+            out.close();
+        }
+        catch (Exception e) {
+            clientLogger.logp(Level.SEVERE, "CADClientModel", "closeStreams()", 
+                    "Exception in closing output stream.", e);
+        }
+        
+        try {
+            in.close();
+        }
+        catch (Exception e) {
+            clientLogger.logp(Level.SEVERE, "CADClientModel", "closeStreams()", 
+                    "Exception in closing input stream.", e);
+        }
+        
+    }
+}    
Index: /branches/trunk/src/tmcsim/client/KeyboardTester.java
===================================================================
--- /branches/trunk/src/tmcsim/client/KeyboardTester.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/KeyboardTester.java	(revision 82)
@@ -0,0 +1,42 @@
+package tmcsim.client;
+
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JFrame;
+import javax.swing.JTextArea;
+
+@SuppressWarnings("serial")
+public class KeyboardTester extends JFrame implements KeyListener {
+
+    public KeyboardTester() {
+        JTextArea ta = new JTextArea();
+        ta.addKeyListener(this);
+        
+        add(ta);
+        
+        pack();
+        setSize(200,00);
+        setVisible(true);
+    }
+    
+    public void keyTyped(KeyEvent evt) {
+        System.out.println(evt.getKeyCode() + " typed");
+    }
+
+    public void keyPressed(KeyEvent evt) {
+        System.out.println(evt.getKeyCode() + " pressed");
+    }
+
+    public void keyReleased(KeyEvent evt) {
+        System.out.println(evt.getKeyCode() + " released");
+    }
+
+    /**
+     * @param args
+     */
+    public static void main(String[] args) {
+        new KeyboardTester();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/ClockClient.java
===================================================================
--- /branches/trunk/src/tmcsim/client/ClockClient.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/ClockClient.java	(revision 82)
@@ -0,0 +1,261 @@
+package tmcsim.client;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.FileInputStream;
+import java.rmi.Naming;
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JOptionPane;
+import javax.swing.JWindow;
+import javax.swing.Timer;
+import javax.swing.UIManager;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CADClientInterface;
+import tmcsim.interfaces.CoordinatorInterface;
+
+/**
+ * ClockClient shows the simulation clock time. It operates as a client of the
+ * CAD server, using RMI to poll the server every second for the current
+ * simulation clock time.
+ *
+ * @author jdalbey
+ */
+public class ClockClient extends UnicastRemoteObject implements
+        CADClientInterface
+{
+    /**
+     * Error logger.
+     */
+    private static Logger cadClientLogger = Logger.getLogger("tmcsim.client");
+
+    @Override
+    public void refresh() throws RemoteException
+    {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    /**
+     * Enumeration containing properties name values. See CADClient class
+     * description for more information.
+     *
+     * @author Matthew Cechini
+     * @see CADClient
+     */
+    private static enum PROPERTIES
+    {
+        CAD_SIM_HOST("CADSimulatorHost"), CAD_SIM_PORT("CADSimulatorSocketPort"), CAD_RMI_PORT(
+        "CADRmiPort"), CLIENT_CAD_POS("CADPosition"), CLIENT_USER_ID(
+        "CADUserID"), KEYBOARD_TYPE("KeyboardType"), DISPLAY_TYPE(
+        "DisplayType");
+        public String name;
+
+        private PROPERTIES(String n)
+        {
+            name = n;
+        }
+    }
+    /**
+     * CADClientSocket Object to handle socket communication between the Client
+     * and CAD Simulator.
+     */
+    private CADClientSocket theClientSocket;
+    /**
+     * Instance of the ClockView.
+     */
+    private ClockView theView;
+    /**
+     * Properties object for the CADClient class.
+     */
+    private Properties cadClientProp;
+    /**
+     * RMI interface for communication with the remote Coordinator.
+     */
+    private static CoordinatorInterface theCoorInt;
+    /**
+     * reference to itself to be used for disconnecting from CADSimulator
+     */
+    private CADClientInterface client = this;
+    private static final String CONFIG_FILE_NAME = "cad_client_config.properties";
+    private final static int ONE_SECOND = 1000;
+
+    /**
+     * Constructor. Initialize data from parsed properties file. Create a socket
+     * connection to the CADSimulator.
+     *
+     * @param propertiesFile File path (absolute or relative) to the properties
+     * file containing configuration data.
+     */
+    public ClockClient(String propertiesFile) throws SimulationException,
+            RemoteException
+    {
+        if (!verifyProperties(propertiesFile))
+        {
+            System.exit(0);
+        }
+
+        connect(cadClientProp.getProperty(PROPERTIES.CAD_SIM_HOST.name).trim(),
+                cadClientProp.getProperty(PROPERTIES.CAD_RMI_PORT.name).trim());
+
+        theView = new ClockView();
+        theView.setVisible(true);
+
+        // Create a timer that fetches the simulation time every second.
+        Timer timer = new Timer(ONE_SECOND, new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                try
+                {
+                    long simtime = theCoorInt.getCurrentSimulationTime();
+                    theView.updateTime("" + formatInterval(simtime));
+                } catch (RemoteException ex)
+                {
+                    Logger.getLogger(ClockClient.class.getName()).log(Level.SEVERE, null, ex);
+                }
+            }
+        });
+        timer.start();
+
+        ensureProperShutdown();
+    }
+
+    /**
+     * Connect to the Coordinator's RMI object, and register this object for
+     * callback with the Coordinator.
+     *
+     * @param hostname Host name of the CAD Simulator.
+     * @param portNumber Port number of the CAD Simulator RMI communication.
+     * @throws SimulationException if there is an error creating the RMI
+     * connection.
+     */
+    protected void connect(String hostname, String portNumber)
+            throws SimulationException
+    {
+
+        String coorIntURL = "";
+
+        try
+        {
+            coorIntURL = "rmi://" + hostname + ":" + portNumber
+                    + "/coordinator";
+            theCoorInt = (CoordinatorInterface) Naming.lookup(coorIntURL);
+            theCoorInt.registerForCallback(this);
+        } catch (Exception e)
+        {
+            throw new SimulationException(SimulationException.CAD_SIM_CONNECT,
+                    e);
+        }
+    }
+
+    /**
+     * This method verifies that the CAD Simulator Host and Port values are not
+     * null. Also, if a CAD Position or User ID do not exist in the properties
+     * file, the user is prompted to enter values. These values are written to
+     * the properties file. If the user cancels the process of entering these
+     * values, the verification fails.
+     *
+     * @param propertiesFile File path (absolute or relative) to the properties
+     * file containing configuration data.
+     * @return True if the properties file is valid, false if not.
+     * @throws SimulationException if there is an exception in verifying the
+     * properties file, or if the user cancels input.
+     */
+    private boolean verifyProperties(String propertiesFile)
+            throws SimulationException
+    {
+
+        // Load the properties file.
+        try
+        {
+            cadClientProp = new Properties();
+            cadClientProp.load(new FileInputStream(propertiesFile));
+        } catch (Exception e)
+        {
+            cadClientLogger.logp(Level.SEVERE, "SimulationManager",
+                    "Constructor", "Exception in reading properties file.", e);
+
+            throw new SimulationException(SimulationException.INITIALIZE_ERROR,
+                    e);
+        }
+
+
+        // Ensure that the properties file does not have null values for the
+        // CAD Simulator's connection information.
+        if (cadClientProp.getProperty(PROPERTIES.CAD_SIM_HOST.name) == null
+                || cadClientProp.getProperty(PROPERTIES.CAD_SIM_PORT.name) == null)
+        {
+            cadClientLogger.logp(Level.SEVERE, "SimulationManager",
+                    "Constructor", "Null value in properties file.");
+            throw new SimulationException(SimulationException.INITIALIZE_ERROR);
+        }
+
+        return true;
+    }
+
+    /**
+     * Format a time in seconds as HH:MM:SS
+     *
+     * @param l
+     * @return
+     */
+    private String formatInterval(final long l)
+    {
+        final long hr = TimeUnit.SECONDS.toHours(l);
+        final long min = TimeUnit.SECONDS.toMinutes(l - TimeUnit.HOURS.toSeconds(hr));
+        final long sec = TimeUnit.SECONDS.toSeconds(l - TimeUnit.HOURS.toSeconds(hr) - TimeUnit.MINUTES.toSeconds(min));
+        return String.format("%02d:%02d:%02d", hr, min, sec);
+    }
+
+    public void ensureProperShutdown()
+    {
+        Runtime.getRuntime().addShutdownHook(new Thread()
+        {
+            public void run()
+            {
+                try
+                {
+                    theCoorInt.unregisterForCallback(client);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+            }
+        });
+    }
+
+    /**
+     * Construct the CADClient with the properties file path, either from the
+     * command line arguments or default.
+     *
+     * @param args Command line arguments.
+     */
+    public static void main(String[] args)
+    {
+        if (System.getProperty("CONFIG_DIR") == null)
+        {
+            System.setProperty("CONFIG_DIR", "config");
+        }
+
+        try
+        {
+            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+            new ClockClient(System.getProperty("CONFIG_DIR") + System.getProperty("file.separator") + CONFIG_FILE_NAME);
+
+        } catch (Exception e)
+        {
+            cadClientLogger.logp(Level.SEVERE, "SimulationManager", "Main",
+                    "Error initializing application.");
+
+            JOptionPane.showMessageDialog(new JWindow(), e.getMessage(),
+                    "Error - Program Exiting", JOptionPane.ERROR_MESSAGE);
+
+            System.exit(-1);
+        }
+
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadscreens/ON_LoginScreen.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadscreens/ON_LoginScreen.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadscreens/ON_LoginScreen.java	(revision 82)
@@ -0,0 +1,247 @@
+package tmcsim.client.cadscreens;
+
+import javax.swing.text.Document;
+
+import tmcsim.client.cadscreens.view.CADMainView;
+
+
+
+/**
+ * The View component to the ON_LoginScreen CAD Screen. There is no model data associated
+ * with this view.  All keyboard input is placed in corresponding input areas on the screen
+ * for user name, personal password, and function password.  Some of the CADScreenStyleSheet
+ * methods are overloaded in this class to provide for this functionality.  The inherited
+ * CADScreenStyleSheet is used to contain the updated view items and create the necessary
+ * objects for display.  <OUT OF DATE>
+ *
+ * @author Matthew Cechini 
+ * @version $Revision: 1.4 $ $Date: 2009/04/17 16:27:45 $
+ */
+public class ON_LoginScreen extends CADMainView {
+
+    /**
+     * Count of how many characters have been written to the user identity area.
+     */
+    private int  userIdentityLength     = 0;
+
+    /**
+     * Count of how many characters have been written to the personal password area.
+     */
+    private int  personalPasswordLength = 0;
+
+    /**
+     * Count of how many characters have been written to the function password area.
+     */
+    private int  functionPasswordLength = 0;
+    
+
+    /**
+     * Static final int value to designate the cursor's position on the user identity line.
+     */
+    static final int USER_IDENTITY     = 1;
+
+    /**
+     * Static final int value to designate the cursor's position on the function password line.
+     */
+    static final int FUNCTION_PASSWORD = 2;
+
+    /**
+     * Static final int value to designate the cursor's position on the personal password line.
+     */
+    static final int PERSONAL_PASSWORD = 3;
+
+    /**
+     * Keeps track of which line the cursor is currently on.  Initialize to the user identity line.
+     */
+    private int currentEntryLine = USER_IDENTITY;
+    
+
+    /**
+     * Array of character positions to begin outputting the text strings.
+     */
+    private int documentStartingPosition[] = {0, 125, 140, 165};
+
+    /**
+     * Array of vector positions to offeset the new characters that have been input.  
+     */
+    private int formatVectorStartingPosition[] = {0, 2, 8, 14};
+    
+    public ON_LoginScreen(Document viewDoc) {
+        super(viewDoc);                   
+                    
+    }   
+    
+    /**
+     * Constructor.  Initializes the view with the login screen info.
+     *
+     * @param newCADScreenNumber The ScreenNumber (1-4) for the instance of this view class.
+     * @param newCADScreenType The ScreenType for the instance of this view class.
+     
+    public ON_LoginScreen(int newCADScreenNumber, int newCADScreenType) {
+        String[] initString = {"   SIGN ON\n",
+                               "              USER IDENTITY:     ", "_", "_", 
+                               "_", "_", "_" , "_", "\n",
+                               "              PERSONAL PASSWORD: ", "_", "_", 
+                               "_", "_", "_" , "_", "\n",
+                               "              FUNCTION PASSWORD: ", "_", "_", 
+                               "_", "_", "_" , "_", "\n"};
+
+        String[] initStyles = {"cyan", "cyan", "yellow", "yellow", "yellow", 
+                               "yellow", "yellow", "yellow", "yellow", 
+                               "cyan", "red", "red", "red", "red", "red", "red", 
+                               "red", "cyan", "red", "red", "red", "red", "red", 
+                               "red", "red"};
+        
+        currentCADScreenNumber = newCADScreenNumber;
+        CADScreenType = newCADScreenType;
+        
+        addCADScreenStyleItems(initString, initStyles); 
+    }   
+    
+    
+    /**
+     * Overloading the CADScreenStyleSheet receiveArrow() method.  Up and down arrows move between input lines.
+     *
+     * @param direction The public static final int value of the arrow's direction. Defined in CADScreenStyleSheet.
+     * @return commandline caret position
+     
+    public int receiveArrow(int direction) {
+        switch(direction) {
+            
+            case LEFT:
+                break;
+                    
+            case UP:
+                break;
+                
+            case RIGHT:
+                break;
+                
+            case DOWN:
+                break;
+            
+        }   
+        return 0;
+    }   
+    
+   /**
+    * Overloading the CADSCerenStyleSheet recieveKeyPress() method.  The input character is added to the current input line.
+    * If the input line is full, the new character replaces the last character in that line
+    *
+    * @param newChar The character pressed by the user.
+    * @return boolean true always returned.
+    
+    public boolean receiveKeyPress(char newChar) {
+        
+        switch (currentEntryLine) {
+        
+           case USER_IDENTITY:
+              if(userIdentityLength < 6) {
+                 textAreaUpdateObject.formatVectorPosition = (formatVectorStartingPosition[USER_IDENTITY] + userIdentityLength);
+                 textAreaUpdateObject.documentPosition = (documentStartingPosition[USER_IDENTITY] + userIdentityLength);
+                 userIdentityLength++;
+              }
+           
+              break;
+              
+           case PERSONAL_PASSWORD:
+              if(personalPasswordLength < 8) {
+                 textAreaUpdateObject.formatVectorPosition = (formatVectorStartingPosition[PERSONAL_PASSWORD] + personalPasswordLength);
+                 textAreaUpdateObject.documentPosition = (documentStartingPosition[PERSONAL_PASSWORD] + personalPasswordLength);
+                 personalPasswordLength++;
+              }
+           
+              break;
+              
+           case FUNCTION_PASSWORD:
+              if(functionPasswordLength < 8) {
+                 textAreaUpdateObject.formatVectorPosition = (formatVectorStartingPosition[FUNCTION_PASSWORD] + functionPasswordLength);
+                 textAreaUpdateObject.documentPosition = (documentStartingPosition[FUNCTION_PASSWORD] + functionPasswordLength);
+                 functionPasswordLength++;
+              }
+            
+              break;    
+            
+        }
+        
+        formatStrings.setElementAt(String.valueOf(newChar), textAreaUpdateObject.formatVectorPosition);
+        formatStyleTypes.setElementAt("yellow", textAreaUpdateObject.formatVectorPosition);     
+        
+        textAreaUpdateObject.formatString = String.valueOf(newChar);
+        textAreaUpdateObject.formatStyleType = "yellow";
+        
+        
+        return true;
+    }
+    
+    /**
+     * Overloading the CADScreenStyleSheet backspace() method.  This method determines if the backspace command 
+     * can be executed.  If it can, the last character is removed and true is returned.  If not, the input line 
+     * is unchanged and false is returned.  
+     *
+     * @return boolean true if backspace was successful, false if not.
+     
+    public boolean backspace() {
+        boolean retVal = false;
+        switch (currentEntryLine) {
+        
+           case USER_IDENTITY:
+              if(userIdentityLength > 0) {
+                 userIdentityLength--;
+                 textAreaUpdateObject.formatVectorPosition = (formatVectorStartingPosition[USER_IDENTITY] + userIdentityLength);
+                 textAreaUpdateObject.documentPosition = (documentStartingPosition[USER_IDENTITY] + userIdentityLength);                 
+                 retVal = true;
+              }        
+              break;
+              
+           case PERSONAL_PASSWORD:
+              if(personalPasswordLength > 0) {
+                 personalPasswordLength--;
+                 textAreaUpdateObject.formatVectorPosition = (formatVectorStartingPosition[PERSONAL_PASSWORD] + personalPasswordLength);
+                 textAreaUpdateObject.documentPosition = (documentStartingPosition[PERSONAL_PASSWORD] + personalPasswordLength);                 
+                 retVal = true;
+              }        
+              break;
+              
+           case FUNCTION_PASSWORD:
+              if(functionPasswordLength > 0) {
+                 functionPasswordLength--;
+                 textAreaUpdateObject.formatVectorPosition = (formatVectorStartingPosition[FUNCTION_PASSWORD] + functionPasswordLength);
+                 textAreaUpdateObject.documentPosition = (documentStartingPosition[FUNCTION_PASSWORD] + functionPasswordLength);                 
+                 retVal = true;
+              }         
+              break;            
+        }
+        
+        if(retVal = true) {
+           formatStrings.setElementAt("_", textAreaUpdateObject.formatVectorPosition);
+           formatStyleTypes.setElementAt("yellow", textAreaUpdateObject.formatVectorPosition);      
+        
+           textAreaUpdateObject.formatString = "_";
+           textAreaUpdateObject.formatStyleType = "yellow";
+        }       
+        
+        return retVal;
+    }   
+    
+    /**
+     * Overloads the CADScreenStyleSheet cycle() method.  If the ON_Login Screen is being displayed, cycling should be
+     * disabled until the user logs in.
+     *
+     * @return boolean always returns false
+     
+    public boolean cycle () {
+       return true;  //should be false  
+    }
+
+    /**
+     * Overloads CADScreenStyleSheet isCommandLineActive() method.  Command line input is not used in the LoginScreen,
+     * so return the command line is not active, return false.
+     *
+     * @return boolean always returns true
+       
+    public boolean isCommandLineActive() {
+       return false;    
+    }    
+   */
+}
Index: /branches/trunk/src/tmcsim/client/cadscreens/TO_RoutedMessage.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadscreens/TO_RoutedMessage.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadscreens/TO_RoutedMessage.java	(revision 82)
@@ -0,0 +1,61 @@
+package tmcsim.client.cadscreens;
+
+
+import javax.swing.text.Document;
+
+import tmcsim.cadmodels.CADRoutedMessage;
+import tmcsim.cadmodels.RoutedMessageModel;
+import tmcsim.client.cadscreens.view.CADMainView;
+import tmcsim.common.CADEnums.TEXT_STYLES;
+
+/**
+ * TO_RoutedMessage is the view component to the RoutedMessageModel
+ * model object.  The screen is shown when the user views a queued message.
+ * When the class is instantiated with reference to the model data and 
+ * document, string and style pairs are added to the view document.  
+ * This class extends from the CADMainView object, which
+ * contains the common methods and data needed for display and user
+ * interaction.  
+ *
+ * @see RoutedMessageModel
+ * @author Matthew Cechini 
+ * @version $Revision: 1.4 $ $Date: 2009/04/17 16:27:45 $
+ */
+public class TO_RoutedMessage extends CADMainView {
+
+    /** Instance of the model, containing the message data for this view class. */
+    private RoutedMessageModel theModel;
+    
+    /**
+     * Constructor. Initializes the screen with the appropriate formatted text.
+     *
+     * @param newModel The model data object.
+     * @param viewdoc  The Document object used for displaying the model data.
+     */
+    public TO_RoutedMessage(RoutedMessageModel newModel, Document viewDoc) {
+        super(viewDoc);
+        
+        theModel    = newModel;     
+        
+        initialize();
+    }   
+    
+    
+    /**
+     * This method initializes the screen's Document object with 
+     * text and style pairs to create the correct screen format.
+     */
+    private void initialize() { 
+        
+        CADRoutedMessage displayMessage = theModel.getCurrentMessage();
+        
+        addDocElement("FROM POS " +  displayMessage.fromPosition
+                + "     MESSAGE      " + "TO POS " 
+                + displayMessage.toPosition + "\n", TEXT_STYLES.CYAN);
+                        
+
+        addDocElement(displayMessage.message + "\n",
+                TEXT_STYLES.CYAN);
+        
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadscreens/view/CADFooterView.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadscreens/view/CADFooterView.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadscreens/view/CADFooterView.java	(revision 82)
@@ -0,0 +1,565 @@
+package tmcsim.client.cadscreens.view;
+
+
+import java.awt.Color;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JTextPane;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.Style;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.StyleContext;
+
+import tmcsim.common.CADEnums.CADScreenNum;
+import tmcsim.common.CADEnums.TEXT_STYLES;
+
+
+/**
+ * CADFooterView is the base view class for the footer information displayed on
+ * all CAD Screens.  The footer is used to display the following information to
+ * the user:
+ * <br>
+ * <ul>
+ * <li>Information Messages</li>
+ * <li>CAD Date</li>
+ * <li>CAD Time</li>
+ * <li>Screen Updates</li>
+ * <li>Page Scrolling</li>
+ * <li>Queued Message Count/Update</li>
+ * <li>Current CAD Screen Number</li>
+ * </ul> 
+ * <br>
+ * The refreshView() method is used to add text/style pairs for the footer to the 
+ * local Document object.  Update methods are provided to modify values from the  
+ * previous list.  These updates only modify the portion of the footer that has
+ * changed.  This reduces redraw of the entire footer everytime a single value
+ * changes.
+ * 
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class CADFooterView implements Observer {
+    
+    /** Error Logger.  */
+    private static Logger viewLogger = Logger.getLogger("tmcsim.client.cadscreens");
+
+    /** Font size for text displayed on CAD Screen */
+    private static final int FONT_SIZE = 15;
+    
+    /** Maximum information message length */
+    private static final int MAX_INFO_MESSAGE_LENGTH   = 50;    
+    
+    /**
+     * Enumeration containing document position values for specific text items.
+     * @author Matthew Cechini
+     */
+    private static enum DOCUMENT_POSITIONS {
+        /** Document position of the screen update status. */
+        UPDATE_STATUS_DOC_POS    (260),
+        /** Document position of the CAD date. */
+        CAD_DATE_DOC_POS         (245),
+        /** Document position of the CAD time. */
+        CAD_TIME_DOC_POS         (250),
+        /** Document position of the routed messages count. */
+        ROUTED_MESSAGE_DOC_POS   (297),
+        /** Document position of the page scrolling text. */
+        PAGE_SCROLLING_DOC_POS   (272),
+        /** Document position of the information message text. */
+        INFO_MESSAGE_DOC_POS     (81);
+        
+        public int pos;
+        
+        private DOCUMENT_POSITIONS(int p) {
+            pos = p;
+        }
+        
+    }
+
+    /** Document displaying CAD Screen text. */
+    private Document  theDoc    = null;
+
+    /** JTextPane displaying CAD Screen text. */
+    private JTextPane stylePane = null;
+    
+    /** Current page scrolling text. */
+    private String pageScrolling  = null; 
+    
+    /** Current CAD Date text. */ 
+    private String theCADDate     = null;
+    
+    /** Current CAD Time text. */
+    private String theCADTime     = null;
+    
+    /** Current number of routed messages. */
+    private int numberRoutedMessages;
+
+    /** Current flag of whether there are unread routed messages. */
+    private boolean unreadRoutedMessages;
+    
+    /** Current CAD Screen number. */
+    private CADScreenNum currentCADScreenNum;
+
+    /** Current update status for all CAD screens. */
+    private TreeMap<CADScreenNum, Boolean> screenUpdateMap;
+    
+    /**
+     * Constructor.  Initialize data elements and styles.
+     * 
+     * @param viewDoc Target Document for text display.
+     */
+    public CADFooterView(Document viewDoc) {
+        
+        numberRoutedMessages = 0;
+        currentCADScreenNum  = CADScreenNum.ONE;
+        unreadRoutedMessages = false;
+        screenUpdateMap      = new TreeMap<CADScreenNum, Boolean>();
+        
+        for(CADScreenNum screen : CADScreenNum.orderedList()) {
+            screenUpdateMap.put(screen, false);
+        }
+        
+        theDoc = viewDoc;        
+        initStyles();   
+            
+    }
+
+    /**
+     * This method implements the Observer interface method.  The footer
+     * is set up to observe the main cad screen and listen for page
+     * scrolling text updates.  The update Object argument is cast
+     * to a string and the page scrolling text is replaced in the 
+     * footer's display Document.
+     */
+    public void update(Observable o, Object arg) {
+        
+        pageScrolling = (String)arg;
+        
+        try {
+            if(theDoc.getLength() > 0) {
+                theDoc.remove(
+                        DOCUMENT_POSITIONS.PAGE_SCROLLING_DOC_POS.pos, 
+                        pageScrolling.length());
+                
+                theDoc.insertString(
+                        DOCUMENT_POSITIONS.PAGE_SCROLLING_DOC_POS.pos, 
+                        pageScrolling,
+                        stylePane.getStyle(TEXT_STYLES.YELLOW.style));
+            }
+        }
+        catch( BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }
+    }
+    
+    /**
+     * Sets the footer's current CADScreen number.
+     * 
+     * @param screenNum New CADScreen number.
+     */
+    public void setCADScreenNum(CADScreenNum screenNum) {
+        currentCADScreenNum = screenNum;
+    }
+
+    /**
+     * This method updates the CAD Screen update portion of the footer.
+     * The screenUpdateMap is updated with the new update boolean 
+     * values from the parameter map.  The footer text is then
+     * updated with the new updates.  Screens with an update appear
+     * in yellow text, those without in green.    
+     *
+     * @param newStatus Map of CADScreenNum objects and their boolean update 
+     * values. Map entries for all CADScreenNum values are not needed.
+     */
+    public void updateStatus(TreeMap<CADScreenNum, Boolean> newUpdates) {       
+
+        for(CADScreenNum screen : CADScreenNum.orderedList()) {
+            if(newUpdates.get(screen) != null) { 
+                screenUpdateMap.put(screen, newUpdates.get(screen));
+            }
+        }
+
+        try {
+            if(theDoc.getLength() > 0) {        
+                for(CADScreenNum screen : CADScreenNum.orderedList()) {
+                    if(newUpdates.get(screen) != null && newUpdates.get(screen)) {
+                        theDoc.remove(
+                                DOCUMENT_POSITIONS.UPDATE_STATUS_DOC_POS.pos + 
+                                ((screen.intNum-1)*3), 1);
+                        theDoc.insertString(
+                                DOCUMENT_POSITIONS.UPDATE_STATUS_DOC_POS.pos + 
+                                ((screen.intNum-1)*3), 
+                                String.valueOf(screen.intNum),
+                                stylePane.getStyle(TEXT_STYLES.YELLOW.style));
+                    }
+                }
+            }
+        }
+        catch (BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }
+    }
+    
+    /**
+     * This method updates the date portion of the footer.  Only
+     * those digits in the date that have changed are changed.
+     *
+     * @param newDate The new date with format: MMYY
+     */
+    public void updateDate(String newDate) {
+        
+        try {
+            if(theDoc.getLength() > 0) {
+                for(int i = 0; i < 4; i++) {             
+                    if(theCADDate.charAt(i) != newDate.charAt(i)) {
+                        theDoc.remove(
+                                DOCUMENT_POSITIONS.CAD_DATE_DOC_POS.pos+(i), 1);
+                        theDoc.insertString(
+                                DOCUMENT_POSITIONS.CAD_DATE_DOC_POS.pos + (i), 
+                                String.valueOf(newDate.charAt(i)),
+                                stylePane.getStyle(TEXT_STYLES.GREEN.style));
+                    }
+                }
+            }
+        }
+        catch (BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }   
+        finally {
+            theCADDate = newDate;
+        }
+        
+    }
+    
+    /**
+     * This method updates the time portion of the footer.  Only
+     * those digits in the time that have changed are changed.
+     *
+     * @param newTime The new time with format: HHMM
+     */
+    public void updateTime(String newTime) {
+        
+        try {
+            if(theDoc.getLength() > 0) {
+                for(int i = 0; i < 4; i++) {
+             
+                    if(theCADTime.charAt(i) != newTime.charAt(i)) {
+                        theDoc.remove(
+                                DOCUMENT_POSITIONS.CAD_TIME_DOC_POS.pos +(i), 1);
+                        theDoc.insertString(
+                                DOCUMENT_POSITIONS.CAD_TIME_DOC_POS.pos + (i), 
+                                String.valueOf(newTime.charAt(i)),
+                                stylePane.getStyle(TEXT_STYLES.GREEN.style));
+                    }
+                }
+            }
+        }
+        catch (BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }       
+        finally {
+            theCADTime = newTime;
+        }
+    }   
+    
+    /**
+     * This method updates the queued messages portion of the footer.  The
+     * parameter boolean value specifies whether there are unread messages
+     * or not.  If unread messages exist, the number of messages is highlighted
+     * with green and the text is displayed yellow.  If there are no unread
+     * messages, the text is displayed unhighlighted and with green text.
+     * 
+     * @param unread Boolean flag to toggle unread message highlighting.  true
+     * if unread messages exist, false if not.
+     */
+    public void updateUnreadMessages(Boolean unread) {
+        unreadRoutedMessages = unread;
+        
+        try {
+            if(theDoc.getLength() > 0) {
+            
+                theDoc.remove(
+                        DOCUMENT_POSITIONS.ROUTED_MESSAGE_DOC_POS.pos, 
+                        String.valueOf(numberRoutedMessages).length());
+                
+                if(unreadRoutedMessages) { 
+                    theDoc.insertString(
+                            DOCUMENT_POSITIONS.ROUTED_MESSAGE_DOC_POS.pos, 
+                            String.valueOf(numberRoutedMessages), 
+                            stylePane.getStyle(TEXT_STYLES.GREEN_HIGHLIGHT.style));
+                }
+                else {
+                    theDoc.insertString(
+                            DOCUMENT_POSITIONS.ROUTED_MESSAGE_DOC_POS.pos, 
+                            String.valueOf(numberRoutedMessages), 
+                            stylePane.getStyle(TEXT_STYLES.GREEN.style));
+                }
+            }
+        }
+        catch (BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }
+        
+    }
+    
+    /**
+     * This method updates the queued messages portion of the footer.  The 
+     * parameter value is used to update the number of received routed 
+     * messages to this CAD position.  The current number of messages is 
+     * removed from the document and replaced with the new number.  If the 
+     * number of messages is 0, the text is written in yellow, else the text
+     * is written in green.
+     *
+     * @param newMessageCount Number of routed messages.
+     */
+    public void updateRoutedMessageCount(Integer newMessageCount) {
+        
+        numberRoutedMessages = newMessageCount;
+        
+        try {
+            if(theDoc.getLength() > 0) {
+            
+                theDoc.remove(
+                        DOCUMENT_POSITIONS.ROUTED_MESSAGE_DOC_POS.pos, 
+                        newMessageCount.toString().length());
+                if(numberRoutedMessages > 0) { 
+                    theDoc.insertString(
+                            DOCUMENT_POSITIONS.ROUTED_MESSAGE_DOC_POS.pos, 
+                            String.valueOf(numberRoutedMessages), 
+                            stylePane.getStyle(TEXT_STYLES.YELLOW.style));
+                }
+                else {
+                    theDoc.insertString(
+                            DOCUMENT_POSITIONS.ROUTED_MESSAGE_DOC_POS.pos, 
+                            String.valueOf(numberRoutedMessages), 
+                            stylePane.getStyle(TEXT_STYLES.GREEN.style));
+                }
+            }
+        }
+        catch (BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }
+    }       
+    
+    
+    /**
+     * This method displays an informational message on the info line of the 
+     * footer.  The message to be displayed will be truncated to the maximum
+     * length which specified by the final static MAX_INFO_MESSAGE_LENGTH.
+     * Text output is written in white.
+     *
+     * @param message Message to display.
+     */
+    public void displayInfoMessage(String message) {
+        try {
+            
+            theDoc.remove(
+                    DOCUMENT_POSITIONS.INFO_MESSAGE_DOC_POS.pos, 
+                    MAX_INFO_MESSAGE_LENGTH);
+            
+            //TODO test truncation
+            if(message.length() > MAX_INFO_MESSAGE_LENGTH)
+                message = message.substring(0, MAX_INFO_MESSAGE_LENGTH);
+            
+            while(message.length() < MAX_INFO_MESSAGE_LENGTH)
+                message += " ";
+            
+            theDoc.insertString(
+                    DOCUMENT_POSITIONS.INFO_MESSAGE_DOC_POS.pos, 
+                    message,
+                    stylePane.getStyle(TEXT_STYLES.WHITE.style));
+        }
+        catch (BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }
+    }
+    
+    
+    /**
+     * This method clears the display Document object and then adds text/style
+     * pairs to create the footer display document. A leading line of 80 '=' 
+     * characters in aqua is added for CAD Screen formatting, followed by a 
+     * blank line used to display info messages. The footer items then added in
+     * the following order:
+     * 
+     * <ul>
+     * <li>CAD Date</li>
+     * <li>CAD Time</li>
+     * <li>Screen Updates</li>
+     * <li>Page Scrolling</li>
+     * <li>Queued Message Count/Update</li>
+     * <li>Current CAD Screen Number</li>
+     * </ul>
+     */ 
+    public void refreshView() { 
+        try {
+                    
+            theDoc.remove(0, theDoc.getLength());
+         
+            //Load the text pane with styled text.
+            
+            theDoc.insertString(theDoc.getLength(), "==========================" +
+                    "======================================================\n", 
+                    stylePane.getStyle(TEXT_STYLES.AQUA.style));
+            theDoc.insertString(theDoc.getLength(), rPad("", 80) + "\n", 
+                    stylePane.getStyle(TEXT_STYLES.BLACK.style));       
+            theDoc.insertString(theDoc.getLength(), rPad("", 80) + "\n", 
+                    stylePane.getStyle(TEXT_STYLES.AQUA.style));    
+            theDoc.insertString(theDoc.getLength(), theCADDate +"/",
+                    stylePane.getStyle(TEXT_STYLES.GREEN.style));   
+            theDoc.insertString(theDoc.getLength(), rPad(theCADTime, 5),
+                    stylePane.getStyle(TEXT_STYLES.GREEN.style));                                
+                                                             
+            theDoc.insertString(theDoc.getLength(), "REF: ",
+                    stylePane.getStyle(TEXT_STYLES.GREEN.style));   
+
+            for(CADScreenNum screen : CADScreenNum.orderedList()) {
+                if(screenUpdateMap.get(screen)) {
+                      theDoc.insertString(theDoc.getLength(), String.valueOf(screen.intNum), 
+                              stylePane.getStyle(TEXT_STYLES.YELLOW.style));        
+                }
+                else {
+                      theDoc.insertString(theDoc.getLength(), String.valueOf(screen.intNum), 
+                              stylePane.getStyle(TEXT_STYLES.GREEN.style)); 
+                }
+                theDoc.insertString(theDoc.getLength(), "  ",
+                        stylePane.getStyle(TEXT_STYLES.GREEN.style));   
+            }
+                                                                          
+            theDoc.insertString(theDoc.getLength(), pageScrolling,
+                                stylePane.getStyle(TEXT_STYLES.YELLOW.style));                                                               
+    
+            theDoc.insertString(theDoc.getLength(), rPad(lPad("CAD: 0  0  0", 18), 20), 
+                    stylePane.getStyle(TEXT_STYLES.GREEN.style));                   
+            
+            if(unreadRoutedMessages)                 
+                theDoc.insertString(theDoc.getLength(), String.valueOf(numberRoutedMessages),
+                        stylePane.getStyle(TEXT_STYLES.GREEN_HIGHLIGHT.style));                 
+            else 
+                theDoc.insertString(theDoc.getLength(), String.valueOf(numberRoutedMessages),
+                        stylePane.getStyle(TEXT_STYLES.GREEN.style));
+            
+            theDoc.insertString(theDoc.getLength(), lPad("CLETS: 0 0", 13), 
+                                       stylePane.getStyle(TEXT_STYLES.GREEN.style));
+            theDoc.insertString(theDoc.getLength(), rPad(lPad("MIS: 0", 8), 10), 
+                       stylePane.getStyle(TEXT_STYLES.GREEN.style));
+                             
+            theDoc.insertString(theDoc.getLength(), String.valueOf(currentCADScreenNum.intNum), 
+                                       stylePane.getStyle("red"));                               
+                      
+        } 
+        catch (BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }
+        
+    }   
+        
+    /**
+     * Method pads the parameter string with spaces to the right
+     * of the string until the string length is equal to the parameter
+     * length.  If the parameter width is less than the length of the
+     * parameter String, no action is taken.
+     * 
+     * @param str String to pad.
+     * @param width Desired string length.
+     * @return Padded string.
+     */
+    protected String rPad(String str, int width) 
+    {
+        StringBuffer buf = new StringBuffer(str);
+        while(buf.length() < width)
+            buf.append(" ");
+        
+        return buf.toString();      
+    }
+    
+    /**
+     * Method pads the parameter string with spaces to the left
+     * of the string until the string length is equal to the parameter
+     * length.  If the parameter width is less than the length of the
+     * parameter String, no action is taken.
+     * 
+     * @param str String to pad.
+     * @param width Desired string length.
+     * @return Padded string.
+     */    
+    protected String lPad(String str, int width) 
+    {
+        StringBuffer buf = new StringBuffer(str);
+        while(buf.length() < width)
+            buf.insert(0, " ");
+        
+        return buf.toString();      
+    }
+    
+    /** 
+     * This method intializes the stylePane with the styles found in the 
+     * TEXT_STYLES enumeration that are needed for footer display. 
+     * The value of the static FONT_SIZE is used for text sizing, along
+     * with the COURIER font style.
+     */
+    private void initStyles() {
+              
+        stylePane = new JTextPane();
+              
+        Style def = StyleContext.getDefaultStyleContext().
+                                        getStyle(StyleContext.DEFAULT_STYLE);
+                                        
+        Style regular = stylePane.addStyle(TEXT_STYLES.REGULAR.style, def);
+        StyleConstants.setFontFamily(def, TEXT_STYLES.COURIER.style);                                        
+                                        
+        Style s = stylePane.addStyle(TEXT_STYLES.ITALIC.style, regular);
+        StyleConstants.setItalic(s, true);
+
+        s = stylePane.addStyle(TEXT_STYLES.BOLD.style, regular);
+        StyleConstants.setBold(s, true);
+        
+        s = stylePane.addStyle(TEXT_STYLES.BLUE.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.blue);
+        StyleConstants.setFontSize(s, FONT_SIZE);
+        
+        s = stylePane.addStyle(TEXT_STYLES.AQUA.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, new Color(0,128,128));
+        StyleConstants.setFontSize(s, FONT_SIZE);  
+        
+        s = stylePane.addStyle(TEXT_STYLES.RED.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.red);           
+        StyleConstants.setFontSize(s, FONT_SIZE);
+        
+        s = stylePane.addStyle(TEXT_STYLES.GRAY.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.gray);           
+        StyleConstants.setFontSize(s, FONT_SIZE);
+        
+        s = stylePane.addStyle(TEXT_STYLES.CYAN.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.cyan);           
+        StyleConstants.setFontSize(s, FONT_SIZE);                
+
+        s = stylePane.addStyle(TEXT_STYLES.YELLOW.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.yellow);           
+        StyleConstants.setFontSize(s, FONT_SIZE);  
+
+        s = stylePane.addStyle(TEXT_STYLES.WHITE.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.white);           
+        StyleConstants.setFontSize(s, FONT_SIZE); 
+
+        s = stylePane.addStyle(TEXT_STYLES.GREEN.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.green);           
+        StyleConstants.setFontSize(s, FONT_SIZE); 
+        
+        s = stylePane.addStyle(TEXT_STYLES.REVERSE_GREEN.style, regular);         
+        StyleConstants.ColorConstants.setBackground(s, Color.green);           
+        StyleConstants.ColorConstants.setForeground(s, Color.black);  
+        StyleConstants.setFontSize(s, FONT_SIZE);    
+
+        s = stylePane.addStyle(TEXT_STYLES.GREEN_HIGHLIGHT.style, regular);         
+        StyleConstants.ColorConstants.setBackground(s, Color.green);           
+        StyleConstants.ColorConstants.setForeground(s, Color.yellow);  
+        StyleConstants.setFontSize(s, FONT_SIZE);        
+        
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadscreens/view/CADDocElement.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadscreens/view/CADDocElement.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadscreens/view/CADDocElement.java	(revision 82)
@@ -0,0 +1,34 @@
+package tmcsim.client.cadscreens.view;
+
+import tmcsim.common.CADEnums.TEXT_STYLES;
+
+/**
+ * CADDocElement is a container class used in creation of document elements 
+ * for display in CADMainView Screens.  The CADDocElement contains a text 
+ * and style pair.  The style TEXT_STYLES enumeration value is used to 
+ * reference a specific style that has been initialized in the StylePane 
+ * that will be used for displaying the text.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class CADDocElement {
+
+    /** Document element text. */
+    public String text;
+
+    /** Document element style. */
+    public TEXT_STYLES style;
+    
+    /**
+     * Constructor. 
+     * 
+     * @param t New text String.
+     * @param s New style.
+     */
+    public CADDocElement(String t, TEXT_STYLES s) {
+        text  = t;
+        style = s;
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/client/cadscreens/view/CADMainView.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadscreens/view/CADMainView.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadscreens/view/CADMainView.java	(revision 82)
@@ -0,0 +1,403 @@
+package tmcsim.client.cadscreens.view;
+
+import java.awt.Color;
+import java.util.Observable;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JTextPane;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.Style;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.StyleContext;
+
+import tmcsim.common.CADEnums.TEXT_STYLES;
+
+
+/**
+ * The CADMainView is the base view class for all CAD Screens.  The 
+ * Vector of CADDocElement objects contains all text/style pairs
+ * that will be used in creating a document for display.  Within the list of 
+ * CADDocElements are separate "pages."  CADDocElements that contain an endline 
+ * character signify the end of a line.  Each CADMainView "page" is a collection 
+ * of these lines.  The static MAIN_CAD_SCREEN_LINES defines how many lines are 
+ * displayed on each page.  When the refreshView() method is called, the 
+ * text/style pairs for the current page are added to the local Document object.
+ * The CADMainView keeps track of the current page, total number of pages, current
+ * number lines on the page displayed, and the total number of lines.  
+ * 
+ * @author
+ * @version
+ */
+public class CADMainView extends Observable {
+    
+    /** Error Logger.  */
+    private static Logger viewLogger = Logger.getLogger("tmcsim.client.cadscreens");
+    
+    /** Number of viewable lines on a CAD Screen page.  */
+    protected final static int MAIN_CAD_SCREEN_LINES = 20;
+    
+    /** Font size for text displayed on CAD Screen */
+    private final static int FONT_SIZE = 15;   
+    
+    /** Vector of Document elements used to create the display. */
+    private Vector<CADDocElement> theDocElements;
+    
+    /** Document displaying CAD Screen text. */
+    private Document  theDoc    = null;
+
+    /** JTextPane displaying CAD Screen text. */
+    private JTextPane stylePane = null;
+           
+    /** Current page number being viewed in this screen. (# => 1)*/
+    private int currentPage;
+    
+    /** Total number of pages for this screen. (# => 1)*/
+    private int totalPages; 
+    
+    /** Total number of lines on all pages for this screen. (# => 0)*/
+    private int totalLines;
+    
+    /** The number of lines displayed on the last page for this screen. (# => 0) */
+    private int lastPageLineCount;
+    
+
+    /**
+     * Constructor.  Initialize data objects and styles.
+     * 
+     * @param viewDoc Target Document for text display.
+     */
+    public CADMainView(Document viewDoc) {
+        
+        theDocElements    = new Vector<CADDocElement>(); 
+        
+        currentPage       = 1;
+        totalPages        = 1;      
+        totalLines        = 0;
+        lastPageLineCount = 0;      
+        
+        theDoc = viewDoc;
+        initStyles();
+        
+    }
+    
+    /**
+     * Method pads the parameter string with spaces to the right
+     * of the string until the string length is equal to the parameter
+     * length.  If the parameter width is less than the length of the
+     * parameter String, no action is taken.
+     * 
+     * @param str String to pad.
+     * @param width Desired string length.
+     * @return Padded string.
+     */
+    protected String rPad(String str, int width) 
+    {
+        StringBuffer buf = new StringBuffer(str);
+        while(buf.length() < width)
+            buf.append(" ");
+        
+        return buf.toString();      
+    }
+    
+    /**
+     * Method pads the parameter string with spaces to the left
+     * of the string until the string length is equal to the parameter
+     * length.  If the parameter width is less than the length of the
+     * parameter String, no action is taken.
+     * 
+     * @param str String to pad.
+     * @param width Desired string length.
+     * @return Padded string.
+     */    
+    protected String lPad(String str, int width) 
+    {
+        StringBuffer buf = new StringBuffer(str);
+        while(buf.length() < width)
+            buf.insert(0, " ");
+        
+        return buf.toString();      
+    }
+        
+    
+    /**
+     * Adds a new string to the list of format strings.  The parameter string 
+     * is tokenized by '\n' characters.  Each token is considered a new 
+     * "line" of text.  Strings without an endline character will be treated 
+     * as a text chunk.  Each new line or text chunk is added to the document 
+     * with the associated parameter text style.  For every new "line" 
+     * being added, the lastPageLineCount is incremented. While the 
+     * lastPageLineCount is < the maximum number of MAIN_CAD_SCREEN_LINES, 
+     * increment it.  When this becomes false, reset the lastPageLineCount 
+     * to 1 and increment the totalPages count.
+     *
+     * @param text Text string to add to the screen document
+     * @param style Text style to associate with the text being added.
+     */
+    protected void addDocElement(String text, TEXT_STYLES style) {
+        
+        int beginPos = 0;
+        int endlPos  = text.indexOf('\n', 0);
+        
+        while(endlPos != -1) {
+            
+            //if current lines less than max per page, add line, else add new page
+            if(lastPageLineCount < MAIN_CAD_SCREEN_LINES) 
+                lastPageLineCount++;
+            else {
+                lastPageLineCount = 1;
+                totalPages++;
+            }           
+            
+            totalLines++; //keep track of how many total lines have been added
+            endlPos++;    //include the endline character
+            theDocElements.add(new CADDocElement(text.substring(beginPos, endlPos), style));
+            
+            beginPos = endlPos; 
+            endlPos  = text.indexOf('\n', endlPos);
+        }
+        
+        if(beginPos != text.length()) {
+            theDocElements.add(new CADDocElement(text.substring(beginPos, text.length()), style));
+        }
+    }
+    
+    /**
+     * This method is used to move the screen's displayed information up one 
+     * page.  If the current page is greater than one, decrement the 
+     * currentPage variable and refresh the view.
+     */
+    public void pageUp() {
+        if(currentPage > 1) {
+            currentPage--;
+            
+            try {
+                refreshView(currentPage);
+            } catch (Exception e) {
+                // due to conditional statement, parameter will never be
+                // invalid.
+            }
+        }
+    }   
+
+    /**
+     * This method is used to move the screen's displayed information down one 
+     * page. If the current page is less than the total number of pages, 
+     * increment the currentPage variable and refresh the view.
+     */
+    public void pageDown() {
+        if (currentPage < totalPages) {
+            currentPage++;
+
+            try {
+                refreshView(currentPage);
+            } catch (Exception e) {
+                // due to conditional statement, parameter will never be
+                // invalid.
+            }
+        }
+    }    
+    
+    /**
+     * Get the current page number.
+     * 
+     * @return Current page number. (# >= 1)
+     */
+    public int getCurrentPage() {
+        return currentPage;
+    }
+    
+    /**
+     * This method refreshes the screen to a specific page, passed in as a 
+     * parameter.  The current document is cleared and the page scrolling
+     * text is updated according the new page position on the screen. 
+     * The document element index for the first line of the new page is found.
+     * All text and style pairs in the document elements for the new page are 
+     * added to the Document object.  Each pair that is added is checked 
+     * for endline character, signifying a new line.  This process ends when 
+     * enough pairs have been added to display the maximum number of lines on 
+     * the screen, or there are no more document elements.
+     * 
+     * @param gotoPage Page number to display.  (# >= 1)
+     */
+   public void refreshView(int gotoPage) {
+            
+       if(gotoPage > totalPages) {
+           currentPage = totalPages;
+       }
+       else {
+           currentPage = gotoPage;
+       }
+            
+        int currIndex = 0;
+        int lineCount = 0;
+        
+        try {
+            theDoc.remove(0, theDoc.getLength());
+
+            notifyPageScrolling();
+                        
+            //If the page being viewed is not the first page, search through
+            //the formatStrings vector until the first string of the current
+            //page is found.
+            if(currentPage != 1) {
+                while(currIndex < theDocElements.size() && 
+                      lineCount < ((currentPage - 1)*MAIN_CAD_SCREEN_LINES)) {
+                            
+                    lineCount += countEndLines(theDocElements.get(currIndex).text); 
+                    
+                    currIndex++;
+                }       
+            }               
+            //else this is the first page   
+            lineCount = 0;
+       
+            //always output the header bar
+            theDoc.insertString(theDoc.getLength(), 
+                                "==================================================" +
+                                "==============================" + "\n", 
+                                stylePane.getStyle(TEXT_STYLES.AQUA.style));
+                                 
+            //start outputting strings from the formatStrings vector, counting
+            //how many lines have been output                   
+            while(currIndex < theDocElements.size() && 
+                  lineCount < MAIN_CAD_SCREEN_LINES) {
+                    
+               theDoc.insertString(theDoc.getLength(), 
+                                   theDocElements.get(currIndex).text,
+                                   stylePane.getStyle(theDocElements.get(currIndex).style.style));              
+               
+               lineCount += countEndLines(theDocElements.get(currIndex).text);         
+               
+               currIndex++;                  
+            }
+        } 
+        catch (BadLocationException ble) {
+            viewLogger.logp(Level.SEVERE, "CADMainView", "refreshView()", 
+                    "Exception in updating view document.", ble);
+        }
+        
+    }
+   
+   /**
+    * This method counts the number of endline terminated strings contained 
+    * within the parameter string.
+    * 
+    * @param text A text string.
+    * @return The number of lines contained in the parameter text string.
+    */
+   private int countEndLines(String text) {
+       
+       int lastPos   = 0;
+       int endlCount = 0;
+       
+       while(text.indexOf("\n", lastPos) != -1) {
+           lastPos = text.indexOf("\n", lastPos) + 1;
+           endlCount++;
+       }
+       
+       return endlCount;
+   }
+   
+   /**
+    * This method determines whether the current CAD Screen can be paged up 
+    * or down, then notifies observers with the associated scrolling string.  
+    * <br>
+    * The following are the possible outcomes:
+    * 
+    * - Only page up          - "PGUP"
+    * - Only page down        - "PGDN"
+    * - Page up and page down - "UPDN"
+    * - No scrolling          - "    "
+    */
+   private void notifyPageScrolling() {
+       
+        String pageScrolling = "     ";    
+
+        if(totalLines < MAIN_CAD_SCREEN_LINES) {
+            //smile, only one page
+        }
+        else if((currentPage)*MAIN_CAD_SCREEN_LINES < totalLines &&
+                currentPage == 1) {
+            //pgdn
+            pageScrolling = "PG DN";
+        }
+        else if((currentPage)*MAIN_CAD_SCREEN_LINES < totalLines &&
+                currentPage > 1) {
+            //page up and down
+            pageScrolling = "UP DN";
+        }
+        else if(currentPage > 1) {
+            pageScrolling = "PG UP";
+        }
+        
+        setChanged();
+        notifyObservers(pageScrolling);
+               
+   }
+    
+   /** 
+    * This method intializes the stylePane with the styles found in the 
+    * TEXT_STYLES enumeration that are needed for main screen display. 
+    * The value of the static FONT_SIZE is used for text sizing, along
+    * with the COURIER font style.
+    */
+    private void initStyles() {
+        
+        stylePane = new JTextPane();
+        
+        Style def = StyleContext.getDefaultStyleContext().
+                                    getStyle(StyleContext.DEFAULT_STYLE);
+
+        Style regular = stylePane.addStyle(TEXT_STYLES.REGULAR.style, def);
+        StyleConstants.setFontFamily(def, TEXT_STYLES.COURIER.style);
+
+        Style s = stylePane.addStyle(TEXT_STYLES.ITALIC.style, regular);
+        StyleConstants.setItalic(s, true);
+
+        s = stylePane.addStyle(TEXT_STYLES.BOLD.style, regular);
+        StyleConstants.setBold(s, true);
+        
+        s = stylePane.addStyle(TEXT_STYLES.BLUE.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.blue);
+        StyleConstants.setFontSize(s, FONT_SIZE);
+        
+        s = stylePane.addStyle(TEXT_STYLES.AQUA.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, new Color(0,128,128));
+        StyleConstants.setFontSize(s, FONT_SIZE);                
+        
+        s = stylePane.addStyle(TEXT_STYLES.RED.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.red);           
+        StyleConstants.setFontSize(s, FONT_SIZE);
+        
+        s = stylePane.addStyle(TEXT_STYLES.GRAY.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.gray);           
+        StyleConstants.setFontSize(s, FONT_SIZE);
+        
+        s = stylePane.addStyle(TEXT_STYLES.CYAN.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.cyan);           
+        StyleConstants.setFontSize(s, FONT_SIZE);                
+
+        s = stylePane.addStyle(TEXT_STYLES.YELLOW.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.yellow);           
+        StyleConstants.setFontSize(s, FONT_SIZE);  
+
+        s = stylePane.addStyle(TEXT_STYLES.GREEN.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.green);           
+        StyleConstants.setFontSize(s, FONT_SIZE); 
+
+        s = stylePane.addStyle(TEXT_STYLES.ORANGE.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.orange);           
+        StyleConstants.setFontSize(s, FONT_SIZE);
+
+        s = stylePane.addStyle(TEXT_STYLES.REVERSE_CYAN.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.black);   
+        StyleConstants.ColorConstants.setBackground(s, Color.cyan);           
+        StyleConstants.setFontSize(s, FONT_SIZE);
+        
+    }           
+        
+    
+}
Index: /branches/trunk/src/tmcsim/client/cadscreens/view/CADCommandLineView.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadscreens/view/CADCommandLineView.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadscreens/view/CADCommandLineView.java	(revision 82)
@@ -0,0 +1,380 @@
+package tmcsim.client.cadscreens.view;
+
+import java.awt.Color;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JTextPane;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.Style;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.StyleContext;
+
+import tmcsim.client.CADCaret;
+import tmcsim.common.CADEnums.ARROW;
+import tmcsim.common.CADEnums.TEXT_STYLES;
+
+
+/**
+ * CADCommandLineView is the view class used in the CAD Client to
+ * display the current command line and process key presses.
+ * As characters are added and removed from the command line, the current
+ * text is contained within the commandLineText StringBuffer object.  The
+ * Document object is used to display the current command line text to the user.
+ * A position counter for the Caret is used to keep track of where input
+ * is to be received and characters are to be removed.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class CADCommandLineView {
+    
+    /** Error Logger. */
+    private static Logger viewLogger = Logger.getLogger("tmcsim.client.cadscreens");
+
+    /** Font size for text displayed on CAD Screen */
+    private static int FONT_SIZE = 15;
+    
+    /** Document displaying CAD Screen text. */
+    private Document  theDoc    = null;
+
+    /** JTextPane displaying CAD Screen text. */
+    private JTextPane stylePane = null;
+    
+    /** Current position for text input. */
+    private int currentPosition;
+    
+    /** Current command line text. */
+    private StringBuffer commandLineText;    
+    
+    /** Caret used visually to track the current position of command line input. */
+    private CADCaret theCADCaret = null;
+    
+
+    /**
+     * Constructor.  Initialize data objects and styles.  Create the 
+     * CADCaret and add it to the parameter JTextPane.
+     * 
+     * @param textPane Target JTextPane whose Document object
+     * will be written to for command line display.
+     */
+    public CADCommandLineView(JTextPane textPane) {
+            
+        currentPosition = 0;
+        commandLineText = new StringBuffer(160);
+        
+        theCADCaret = new CADCaret();
+        
+        textPane.setCaret(theCADCaret);
+        textPane.setCaretColor(Color.yellow);
+        
+        theDoc = textPane.getDocument();    
+        initStyles();   
+        
+        clearCommandLine();
+        theCADCaret.setVisible(true);
+    }
+
+  
+    /**
+     * Sets the current command line with a new string.  Clear
+     * the current command line and then call the receiveKeyPress()
+     * method with each character in the new string.  The Caret
+     * is hidden during these operations to reduce erratic scroling.
+     * 
+     * @param cmdLine New command line text.
+     */
+    public void setCommandLine(String cmdLine) 
+    {
+        try
+        {
+            clearCommandLine();    
+    
+            theCADCaret.setVisible(false);
+            for(int i = 0; i < cmdLine.length(); i++) 
+                receiveKeyPress(cmdLine.charAt(i)); 
+            theCADCaret.setVisible(true);
+        }
+        catch (Exception e)
+        {
+            viewLogger.log(Level.SEVERE, "Exception occured while setting command line.", e);
+        }
+    } 
+    
+    /**
+     * Replaces the character at the curent command line position with an 
+     * empty space if the command line contains text. Decrement the position
+     * counter and move the caret back one space.
+     */
+    public void backspace() {
+            
+        try{
+            if(commandLineText.length() > 0 && currentPosition > 0) {
+                commandLineText.deleteCharAt(currentPosition-1);
+                
+                theDoc.remove(currentPosition-1, 1);
+                
+                if(currentPosition-1 == commandLineText.length()) {
+                    theDoc.insertString(currentPosition-1,
+                            " ",
+                            stylePane.getStyle(TEXT_STYLES.YELLOW.style));
+                }
+                else {
+                    theDoc.insertString(commandLineText.length(),
+                            " ",
+                            stylePane.getStyle(TEXT_STYLES.YELLOW.style));
+                }
+
+                currentPosition--;
+                theCADCaret.moveCaretBackward(1);
+            }
+            
+        } catch (BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }       
+    }
+    
+
+    /**
+     * Receive a new key press from user.  If the current position is at least 
+     * one character before the end of the current commmand line text, replace 
+     * the current character with the new character and move the caret forward
+     * one space.  If not, the current position is at the end of the command 
+     * line.  If the command line is not full, add the new character at the 
+     * end of the command line and move the caret forward one space.  Else the
+     * command line is full, replace the last character with the new character 
+     * and do not move the caret. 
+     *
+     * @param inputChar Character being added to command line     
+     */
+    public void receiveKeyPress(char inputChar) {
+        
+        try {
+            //doesn't matter where we are, replace
+            if(currentPosition <= commandLineText.length() - 1 &&
+               commandLineText.length() != 0) 
+            {
+                
+                commandLineText.setCharAt(currentPosition, inputChar);              
+                theDoc.remove(currentPosition, 1);
+                theDoc.insertString(currentPosition,
+                                           String.valueOf(inputChar),
+                                           stylePane.getStyle(TEXT_STYLES.YELLOW.style));
+                currentPosition++;
+                theCADCaret.moveCaretForward(1);
+                
+            }
+            //else we are appending, be sure that the StringBuffer isn't full
+            else if(commandLineText.length() < 160) 
+            {
+                commandLineText.append(inputChar);
+                
+                theDoc.remove(currentPosition, 1);
+                theDoc.insertString(currentPosition,
+                                    String.valueOf(inputChar),
+                                    stylePane.getStyle(TEXT_STYLES.YELLOW.style));              
+                currentPosition = commandLineText.length();  
+                theCADCaret.moveCaretForward(1);                                
+                
+            }
+            else if(commandLineText.length() == 160) 
+            {
+                commandLineText.setCharAt(currentPosition-1, inputChar);    
+                theDoc.remove(currentPosition-1, 1);
+                theDoc.insertString(currentPosition-1,
+                                    String.valueOf(inputChar),
+                                    stylePane.getStyle(TEXT_STYLES.YELLOW.style));
+            }
+            
+        } catch (BadLocationException ble) {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", ble);
+        }       
+    }
+    
+    /**
+     * Receive an arrow press by the user. The following actions are taken 
+     * for each direction:<br><br> 
+     * <br>
+     *<table cellpadding="2" cellspacing="2" border="1"
+     * style="text-align: left; width: 250px;">
+     *  <tbody>
+     *    <tr>
+     *      <th>Direction<br></th>
+     *      <th>Action Taken<br></th>
+     *    </tr>
+     *    <tr>
+     *      <td>LEFT<br></td>
+     *      <td>If command line position is not at the beginning of the command 
+     *          line, decrement the position and move the Caret back one space.</td>
+     *    </tr>
+     *    <tr>
+     *      <td>UP<br></td>
+     *      <td>If the command line position is at the end of a full(160 character) 
+     *          command, move back 81 characters to the end of the previous line.  
+     *          If the command line is not full, but the position is on the second 
+     *          line, move back 80 characters.  Move the Caret back the same
+     *          number of spaces.  (The descrepancy in moving 81 or 
+     *          80 charactes has to do with the value of the position counter 
+     *          when it is at the end of a full command line)</td>
+     *    </tr>
+     *    <tr>
+     *      <td>RIGHT</td>
+     *      <td>If command line position is not at the end of the command line,
+     *          increment the position and move the Caret foward one space.</td>
+     *    </tr>
+     *    <tr>
+     *      <td>DOWN</td>
+     *      <td>If the command line position is on the first line of the command 
+     *          line, and is directly above or to the left of the last character
+     *          on the second line, move forward 80 characters.  Else if the 
+     *          position is on the first line and there is a second line, move the 
+     *          position to the end of the command line.  Move the Caret forward
+     *          the same number of spaces.</td>
+     *    </tr>
+     *  </tbody>
+     *</table>
+     *
+     * @param direction Arrow direction.  
+     */
+    public void receiveArrow(ARROW direction) {
+
+        switch(direction) {
+            
+            case LEFT:
+                if(currentPosition > 0) { 
+                    currentPosition--;
+                    theCADCaret.moveCaretBackward(1);   
+                }
+                break;
+                    
+            case UP:
+                if(currentPosition == 160) {
+                    currentPosition -= 81;
+                    theCADCaret.moveCaretBackward(81);   
+                }
+                else if(currentPosition > 80) {
+                    currentPosition -= 80;
+                    theCADCaret.moveCaretBackward(80);   
+                }
+                break;
+                
+            case RIGHT:
+                if(currentPosition < commandLineText.length() - 1) {
+                    currentPosition++;
+                    theCADCaret.moveCaretForward(1);
+                }
+                break;
+                
+            case DOWN:
+                if(currentPosition < (commandLineText.length() - 80)) {
+                    currentPosition += 80;
+                    theCADCaret.moveCaretForward(80);
+                }
+                else if (currentPosition <= 80 && 
+                         commandLineText.length() <= currentPosition + 80) {
+
+                    theCADCaret.moveCaretForward(commandLineText.length() - 
+                            currentPosition);
+                    currentPosition = commandLineText.length();
+                }
+                break;
+            
+        }      
+    }
+
+
+    /**
+     * Refresh the command line by saving the text, clearing the current
+     * command line, and then calling the receiveKeyPress() method for all
+     * characters in the saved text.  The Caret is hidden during these 
+     * operations to eliminate erratic scrolling.
+     */
+    public void refreshView() {
+            
+        String savedCmdLine = commandLineText.toString();
+        
+        clearCommandLine();
+
+        theCADCaret.setVisible(false);
+
+        for(int pos = 0; pos < savedCmdLine.length(); pos++) {
+            receiveKeyPress(savedCmdLine.charAt(pos));
+        }
+        theCADCaret.setVisible(true);
+    }
+
+    /**
+     * Get the current command line string.
+     * @return Command line string.
+     */
+    public String getCommandLine() {
+        return commandLineText.toString();  
+    }  
+    
+    
+    /**
+     * Clears the command line by clearing the command line StringBuffer, 
+     * clearing the command line document, resetting the position count, and
+     * resetting the Caret. The Caret is hidden during these operations to 
+     * eliminate erratic scrolling.
+     */
+    public void clearCommandLine() 
+    {
+    
+        try 
+        {
+            theCADCaret.setVisible(false);
+            currentPosition = 0;
+            commandLineText.setLength(0);
+            
+            while(theDoc.getLength() > 0) 
+            {
+                theDoc.remove(0, 1);
+            }       
+            
+            for(int i = 0; i < 160; i++) 
+            {
+                theDoc.insertString(i,
+                        " ",
+                        stylePane.getStyle(TEXT_STYLES.YELLOW.style));
+            }
+
+            theCADCaret.resetCaretPosition();
+            theCADCaret.setVisible(true);
+        } 
+        catch (Exception e) 
+        {
+            viewLogger.log(Level.SEVERE, "Exception in updating view document.", e);
+        }           
+        
+    }   
+    
+
+    /** 
+     * This method intializes the stylePane with the styles found in the 
+     * TEXT_STYLES enumeration that are needed for command line display. 
+     * The value of the static FONT_SIZE is used for text sizing, along
+     * with the COURIER font style.
+     */
+    private void initStyles() {
+        
+        stylePane = new JTextPane();
+        
+        Style def = StyleContext.getDefaultStyleContext().
+                                        getStyle(StyleContext.DEFAULT_STYLE);
+                                        
+        Style regular = stylePane.addStyle(TEXT_STYLES.REGULAR.style, def);
+        StyleConstants.setFontFamily(def, TEXT_STYLES.COURIER.style);       
+        
+        Style s = stylePane.addStyle(TEXT_STYLES.YELLOW.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.yellow);           
+        StyleConstants.setFontSize(s, FONT_SIZE);  
+
+        s = stylePane.addStyle(TEXT_STYLES.GREEN.style, regular);
+        StyleConstants.ColorConstants.setForeground(s, Color.green);           
+        StyleConstants.setFontSize(s, FONT_SIZE);           
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/client/cadscreens/SA_IncidentSummary.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadscreens/SA_IncidentSummary.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadscreens/SA_IncidentSummary.java	(revision 82)
@@ -0,0 +1,79 @@
+package tmcsim.client.cadscreens;
+
+
+import javax.swing.text.Document;
+
+import tmcsim.cadmodels.IncidentSummaryModel;
+import tmcsim.cadmodels.IncidentSummaryModel_obj;
+import tmcsim.client.cadscreens.view.CADMainView;
+import tmcsim.common.CADEnums.TEXT_STYLES;
+
+
+/**
+ * SA_IncidentSummary is the view component to the IncidentSummaryModel
+ * model object.  The screen is shown when the user requests a "Summary
+ * of Incidents by Area."  When the class is instantiated with reference
+ * to the model data and document, string and style pairs are added to the 
+ * view document.  This class extends from the CADMainView object, which
+ * contains the common methods and data needed for display and user
+ * interaction.  
+ *
+ * @see IncidentSummaryModel
+ * @author Matthew Cechini 
+ * @version $Revision: 1.4 $ $Date: 2009/04/17 16:27:45 $
+ */
+public class SA_IncidentSummary extends CADMainView {
+    
+    /**
+     * Reference to the Model class for the Incident Summary data.
+     */
+    private IncidentSummaryModel theModel;
+    
+    
+    /**
+     * Constructor. Initializes the screen with the appropriate formatted text.
+     *
+     * @param newModel The model data object.
+     * @param viewdoc  The Document object used for displaying the model data.
+     */
+    public SA_IncidentSummary(IncidentSummaryModel newModel, Document viewDoc) {
+        super(viewDoc);                    
+                    
+        theModel = newModel;
+        
+        initialize();
+    }   
+    
+    
+    /**
+     * This method initializes the screen's Document object with 
+     * text and style pairs to create the correct screen format.
+     */
+    private void initialize() {     
+    
+        addDocElement("AREA(S)   ", TEXT_STYLES.CYAN);
+        
+        addDocElement(IncidentSummaryModel.areas, TEXT_STYLES.RED);
+        
+        addDocElement("- INCIDENT SUMMARY ------------ STATE: ", TEXT_STYLES.CYAN);
+        
+        addDocElement("I P A ", TEXT_STYLES.RED);
+        
+        addDocElement("F\n", TEXT_STYLES.CYAN);
+        
+                                        
+        for(IncidentSummaryModel_obj ismo : theModel.getModelObjects()) {       
+                
+            addDocElement(lPad(rPad(ismo.logNumber.toString(), 4), 6) 
+                               + rPad(ismo.date, 4) + "-"
+                               + rPad(ismo.time, 4) 
+                               + rPad(ismo.priority, 3) 
+                               + rPad(ismo.callType, 5) 
+                               + rPad(ismo.beatArea, 6) 
+                               + rPad(ismo.location, 35) 
+                               + rPad(ismo.beatAssigned, 5) + "\n",
+                               TEXT_STYLES.YELLOW);
+        }
+            
+    }   
+}
Index: /branches/trunk/src/tmcsim/client/cadscreens/IB_IncidentBoard.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadscreens/IB_IncidentBoard.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadscreens/IB_IncidentBoard.java	(revision 82)
@@ -0,0 +1,65 @@
+package tmcsim.client.cadscreens;
+
+
+import javax.swing.text.Document;
+
+import tmcsim.cadmodels.IncidentBoardModel;
+import tmcsim.cadmodels.IncidentBoardModel_obj;
+import tmcsim.client.cadscreens.view.CADMainView;
+import tmcsim.common.CADEnums.TEXT_STYLES;
+
+/**
+ * IB_IncidentBoard is the view component to the IncidentBoardModel
+ * model object.  The screen is shown when the user requests to view the
+ * Incident Board. When the class is instantiated with reference
+ * to the model data and document, string and style pairs are added to the 
+ * view document.  This class extends from the CADMainView object, which
+ * contains the common methods and data needed for display and user
+ *
+ * @see IncidentBoardModel
+ * @author Matthew Cechini 
+ * @version $Revision: 1.4 $ $Date: 2009/04/17 16:27:45 $
+ */
+public class IB_IncidentBoard extends CADMainView {
+
+    /**
+     * Reference to the Model class for the Incident Board data.
+     */
+    private IncidentBoardModel theModel;
+    
+    /**
+     * Constructor.  Initializes the screen with the appropriate formatted text.
+     *
+     * @param newModel The model data object.
+     * @param viewdoc  The Document object used for displaying the model data.
+     */
+    public IB_IncidentBoard(IncidentBoardModel newModel, Document viewDoc) {
+        super(viewDoc);
+        
+        theModel         = newModel;
+            
+        initialize();
+    }   
+    
+    
+    /**
+     * This method initializes the screen's Document object with 
+     * text and style pairs to create the correct screen format.
+     */
+    private void initialize() {
+                        
+        for(IncidentBoardModel_obj ibmo : theModel.getModelObjects()) {
+
+            addDocElement("------------------ BULLETIN " 
+                    + String.valueOf(ibmo.bulletinNum) 
+                    + " "  + ibmo.date 
+                    + "  " + ibmo.time
+                    + "           ---------------------\n", 
+                    TEXT_STYLES.CYAN);
+                
+            addDocElement(ibmo.message + "\n", 
+                    TEXT_STYLES.CYAN);
+        }
+
+    }   
+}
Index: /branches/trunk/src/tmcsim/client/cadscreens/II_IncidentInquiry.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadscreens/II_IncidentInquiry.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadscreens/II_IncidentInquiry.java	(revision 82)
@@ -0,0 +1,313 @@
+package tmcsim.client.cadscreens;
+
+import javax.swing.text.Document;
+
+import tmcsim.cadmodels.IncidentInquiryDetails;
+import tmcsim.cadmodels.IncidentInquiryModel;
+import tmcsim.cadmodels.IncidentInquiryModel_obj;
+import tmcsim.cadmodels.IncidentInquiryServices;
+import tmcsim.cadmodels.IncidentInquiryTows;
+import tmcsim.cadmodels.IncidentInquiryUnitsAssigned;
+import tmcsim.cadmodels.IncidentInquiryWitnesses;
+import tmcsim.client.cadscreens.view.CADMainView;
+import tmcsim.common.CADEnums.TEXT_STYLES;
+
+/**
+ * II_IncidentInquiry is the view component to the IncidentInquiryModel
+ * model object.  The screen is shown when the user requests a "Incident
+ * Inquiry."  When the class is instantiated with reference
+ * to the model data and document, string and style pairs are added to the 
+ * view document.  This class extends from the CADMainView object, which
+ * contains the common methods and data needed for display and user
+ * interaction.  
+ *
+ * @see IncidentInquiryModel
+ * @author Matthew Cechini 
+ * @version $Revision: 1.4 $ $Date: 2009/04/17 16:27:45 $
+ */
+public class II_IncidentInquiry extends CADMainView {
+
+
+    /** Reference to the Model class for the Incident Inquiry data. */
+    private IncidentInquiryModel theModel;
+    
+    /**
+     * Constructor.  Initializes the screen with the appropriate formatted text.
+     *
+     * @param newModel The model data object.
+     * @param viewdoc  The Document object used for displaying the model data.
+     */
+    public II_IncidentInquiry(IncidentInquiryModel newModel, Document viewDoc) {
+        super(viewDoc);
+        
+        theModel         = newModel;
+                
+        initialize();
+    }   
+    
+    /**
+     * This method initializes the screen's Document object with 
+     * text and style pairs to create the correct screen format.
+     * 
+     * The IncidentInquiry model data strings are created in the following
+     * order:
+     *
+     * <li>Header Info</li>
+     * <li>Details</li>
+     * <li>Units Assigned</li>
+     * <li>Tows</li>
+     * <li>Services</li>
+     * <li>Witnesses</li>
+     *
+     * The resulting text/style strings are set into the base CADMainView class for display.
+     */
+    private void initialize() {
+        
+        int counter = 1;
+        
+        IncidentInquiryModel_obj tempModelObj = theModel.getModelObject();      
+        
+        addDocElement("LOG: ", TEXT_STYLES.CYAN);
+          
+        addDocElement(rPad(tempModelObj.getHeader().logNumber.toString(), 3) + 
+                           rPad(tempModelObj.getHeader().logStatus, 5),
+                           TEXT_STYLES.YELLOW);
+        
+        addDocElement("PRI: ", TEXT_STYLES.CYAN);
+        
+        addDocElement(rPad(tempModelObj.getHeader().priority, 3),
+                TEXT_STYLES.YELLOW);            
+        
+        addDocElement("TYPE: ", TEXT_STYLES.CYAN);
+        
+        addDocElement(rPad(tempModelObj.getHeader().type, 7), 
+                TEXT_STYLES.YELLOW);    
+        
+        addDocElement("CB: ", TEXT_STYLES.CYAN);
+        
+        addDocElement(rPad(tempModelObj.getHeader().callBoxNumber, 18),
+                TEXT_STYLES.YELLOW);   
+        
+        addDocElement("BEAT: ", TEXT_STYLES.CYAN);
+        
+        addDocElement(rPad(tempModelObj.getHeader().beat, 7) + "\n",
+                TEXT_STYLES.YELLOW);     
+        
+        addDocElement("LOC: ", TEXT_STYLES.CYAN);
+        
+        addDocElement(rPad(tempModelObj.getHeader().fullLocation, 45),
+                TEXT_STYLES.YELLOW);                                        
+        
+        addDocElement("CS: " + "\n", TEXT_STYLES.CYAN);
+        
+        addDocElement(lPad("(" + tempModelObj.getHeader().truncLocation + ")", 23)  + "\n",
+                TEXT_STYLES.YELLOW); 
+        
+        addDocElement("ORI: ", TEXT_STYLES.CYAN);
+                    
+        addDocElement(rPad(tempModelObj.getHeader().origin, 8) 
+                           + rPad(tempModelObj.getHeader().incidentDate, 5)
+                           + rPad(tempModelObj.getHeader().incidentTime, 5),
+                           TEXT_STYLES.YELLOW);            
+        
+        addDocElement("DISP: ", TEXT_STYLES.CYAN);
+        
+        addDocElement(rPad(tempModelObj.getHeader().dispatcher, 9),
+                TEXT_STYLES.YELLOW);    
+        
+        addDocElement(rPad("FILED:", 18),
+                TEXT_STYLES.CYAN);
+    
+        addDocElement("X: \n", TEXT_STYLES.CYAN);
+        
+        addDocElement(rPad("ORI ACTION:", 34), TEXT_STYLES.CYAN);
+        
+        addDocElement(rPad("R/S:", 15), TEXT_STYLES.CYAN);             
+        
+        addDocElement(rPad("DUP:",14), TEXT_STYLES.CYAN);
+        
+        addDocElement(rPad("CBT:", 14), TEXT_STYLES.CYAN);
+        
+        addDocElement("Z:", TEXT_STYLES.CYAN);
+        
+        addDocElement("Y\n", TEXT_STYLES.YELLOW);             
+                      
+        
+        if(tempModelObj.getDetails().size() > 0){ 
+            addDocElement("-------------------------------------",  
+                    TEXT_STYLES.CYAN);
+            
+            //if(tempModelObj.getDetailsUpdated())
+            //  addDocElement(" DETAIL ", TEXT_STYLES.REVERSE_CYAN);
+            //else
+                addDocElement(" DETAIL ", TEXT_STYLES.CYAN);
+
+            addDocElement("-----------------------------------\n", 
+                    TEXT_STYLES.CYAN);
+                                
+        
+            boolean firstLine = true;
+            counter = 1;            
+            for(IncidentInquiryDetails detail : tempModelObj.getDetails()) {
+
+                for(String detail_string : detail.parseDetails(63)) {
+                    if(firstLine) {
+                        addDocElement(rPad(detail.getLogInfo(), 14),
+                                TEXT_STYLES.AQUA);    
+                        
+                        addDocElement(rPad(String.valueOf(counter++), 3),
+                                TEXT_STYLES.CYAN);
+
+                        firstLine = false;
+                    }
+                    else {
+                        addDocElement(rPad("", 17),
+                                TEXT_STYLES.GRAY);    
+                    }               
+                    addDocElement(detail_string,
+                            TEXT_STYLES.YELLOW);
+                }
+                firstLine = true;
+            }
+        }                     
+            
+        if(tempModelObj.getUnits().size() > 0) {
+            addDocElement("--------------------------------", 
+                    TEXT_STYLES.CYAN);
+            
+            //if(tempModelObj.getUnitsUpdated())
+            //  addDocElement(" UNITS ASSIGNED ", TEXT_STYLES.REVERSE_CYAN);
+            //else
+                addDocElement(" UNITS ASSIGNED ", TEXT_STYLES.CYAN);
+
+            addDocElement("--------------------------------\n", 
+                    TEXT_STYLES.CYAN);        
+      
+          
+            for(IncidentInquiryUnitsAssigned unit : tempModelObj.getUnits()) {
+            
+                addDocElement(rPad(unit.getLogInfo(), 14),
+                        TEXT_STYLES.AQUA);    
+            
+                if(unit.isPrimary) 
+                    addDocElement(rPad("<", 3), TEXT_STYLES.CYAN);
+                else 
+                    addDocElement(rPad("-", 3), TEXT_STYLES.CYAN);
+            
+                addDocElement(rPad(unit.beat, 6), TEXT_STYLES.YELLOW);    
+            
+                if(unit.isActive) 
+                    addDocElement(unit.statusType + "\n", TEXT_STYLES.RED);                            
+                else 
+                    addDocElement(unit.statusType + "\n", TEXT_STYLES.GREEN); 
+            
+            }       
+        }
+
+                      
+        if(tempModelObj.getTows().size() > 0){
+            addDocElement("-------------------------------------", 
+                    TEXT_STYLES.CYAN);
+            
+            //if(tempModelObj.getTowsUpdated())
+            //  addDocElement(" TOWS ", TEXT_STYLES.REVERSE_CYAN);
+            //else
+                addDocElement(" TOWS ", TEXT_STYLES.CYAN);
+
+            addDocElement("-------------------------------------\n", 
+                    TEXT_STYLES.CYAN);              
+        
+            counter = 1;
+            for(IncidentInquiryTows tow : tempModelObj.getTows()) {
+                    
+                addDocElement(rPad(tow.getLogInfo(), 14),
+                        TEXT_STYLES.AQUA);    
+            
+                addDocElement(rPad(String.valueOf(counter++), 3),
+                        TEXT_STYLES.CYAN);                 
+                                        
+                addDocElement(rPad(tow.towCompany, 40),
+                        TEXT_STYLES.YELLOW);  
+  
+                addDocElement("BEAT: ", TEXT_STYLES.CYAN);      
+            
+                addDocElement(tow.beat + "\n", TEXT_STYLES.YELLOW);                 
+            
+                addDocElement(lPad("CONF: ", 23), TEXT_STYLES.CYAN);
+            
+                addDocElement(rPad(tow.confPhoneNum, 22), TEXT_STYLES.YELLOW); 
+            
+                addDocElement("PUB: ", TEXT_STYLES.CYAN); 
+            
+                addDocElement(rPad(tow.publicPhoneNum, 14), TEXT_STYLES.YELLOW); 
+            
+                addDocElement(tow.statusInfo + "\n", TEXT_STYLES.YELLOW);                 
+            }            
+        }    
+            
+        if(tempModelObj.getServices().size() > 0){
+            addDocElement("-----------------------------------", 
+                    TEXT_STYLES.CYAN);
+            
+            //if(tempModelObj.getServicesUpdated())
+            //  addDocElement(" SERVICES ", TEXT_STYLES.REVERSE_CYAN);
+            //else
+                addDocElement(" SERVICES ", TEXT_STYLES.CYAN);
+
+            addDocElement("-----------------------------------\n", 
+                    TEXT_STYLES.CYAN);              
+            
+            counter = 1;
+            for(IncidentInquiryServices service : tempModelObj.getServices()) {
+            
+                addDocElement(rPad(service.getLogInfo(), 14), TEXT_STYLES.AQUA);    
+            
+                addDocElement(rPad(String.valueOf(counter++), 3), TEXT_STYLES.CYAN);                 
+                                        
+                addDocElement(service.serviceName + "\n", TEXT_STYLES.YELLOW);  
+            
+                addDocElement(lPad("CONF: ", 23), TEXT_STYLES.CYAN);
+            
+                addDocElement(rPad(service.confPhoneNum, 25), TEXT_STYLES.YELLOW); 
+            
+                addDocElement("PUB: ", TEXT_STYLES.CYAN); 
+            
+                addDocElement(service.publicPhoneNum + "\n", TEXT_STYLES.YELLOW); 
+            }
+        }
+                     
+        if(tempModelObj.getWitnesses().size() > 0){
+            addDocElement("-----------------------------------", 
+                    TEXT_STYLES.CYAN);
+            
+            //if(tempModelObj.getWitnessesUpdated())
+            //  addDocElement(" WITNESSES ", TEXT_STYLES.REVERSE_CYAN);
+            //else
+                addDocElement(" WITNESSES ", TEXT_STYLES.CYAN);
+
+            addDocElement("----------------------------------\n", 
+                    TEXT_STYLES.CYAN);          
+        
+            counter = 1;
+            for(IncidentInquiryWitnesses witness : tempModelObj.getWitnesses()) {
+            
+                addDocElement(rPad(witness.getLogInfo(), 14), TEXT_STYLES.AQUA);    
+            
+                addDocElement(rPad(String.valueOf(counter++), 3), TEXT_STYLES.CYAN);                 
+                                        
+                addDocElement(rPad(witness.reportingParty, 20), TEXT_STYLES.YELLOW);  
+            
+                addDocElement("TEL: ", TEXT_STYLES.CYAN); 
+                
+                addDocElement(witness.telephoneNum + "\n", TEXT_STYLES.YELLOW);                 
+            
+                addDocElement(lPad("ADDR: ", 23), TEXT_STYLES.CYAN);
+            
+                addDocElement(witness.address + "\n", TEXT_STYLES.YELLOW);               
+
+            }           
+        }
+        
+    }   
+     
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/CardfileHandler.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/CardfileHandler.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/CardfileHandler.java	(revision 82)
@@ -0,0 +1,193 @@
+package tmcsim.client.cadclientgui;
+
+import java.awt.List;
+import java.io.File;
+import java.util.LinkedList;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import javax.swing.DefaultListModel;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.DefaultHandler;
+
+import tmcsim.client.cadclientgui.data.CardfileData;
+import tmcsim.client.cadclientgui.data.CardfileDataObject;
+import tmcsim.client.cadclientgui.data.CardfileList;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.CARDFILE;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.CARDFILE_TAGS;
+import tmcsim.client.cadclientgui.screens.ScreenManager;
+
+/**
+ * This class is handles the XML script reading for Cardfile. It reads tags and
+ * assigns data accordingly.
+ * 
+ * @author Vincent
+ * 
+ */
+public class CardfileHandler extends DefaultHandler {
+
+    private static enum LEVEL {
+        CARDFILE, TITLE, NAME
+    };
+
+    private StringBuffer parsedValue = new StringBuffer();
+
+    private String currentTitle;
+
+    private CardfileDataObject cfdObj;
+
+    private CardfileData cardfileData;
+
+    private CardfileList cfdList;
+
+    public CardfileHandler(CardfileData cfd) {
+        cardfileData = cfd;
+        currentTitle = "";
+        cfdList = new CardfileList();
+    }
+
+    /*
+     * Performs action based on the start tag encountered
+     * 
+     * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
+     * java.lang.String, java.lang.String, org.xml.sax.Attributes)
+     */
+    public void startElement(String uri, String localName, String qName,
+            Attributes attributes) {
+
+        try {
+            if (qName.equals(CARDFILE_TAGS.TAB.tag)) {
+                currentTitle = attributes.getValue(CARDFILE_TAGS.TITLE.tag);
+            } else if (qName.equals(CARDFILE_TAGS.CARDFILE_OBJ.tag)) {
+                cfdObj = new CardfileDataObject(currentTitle,
+                        attributes.getValue(CARDFILE_TAGS.NAME.tag),
+                        cardfileData.obtainNewUniqueId());
+            }
+
+        } catch (Exception e) {
+            System.out
+                    .println("startElement error: " + e.getLocalizedMessage());
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
+     */
+    public void characters(char[] ch, int start, int length) {
+        parsedValue.append(new String(ch, start, length).trim());
+    }
+
+    /*
+     * Performs the action based on the end tag encountered
+     * 
+     * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
+     * java.lang.String, java.lang.String)
+     */
+    public void endElement(String uri, String localName, String qName) {
+
+        try {
+            if (qName.equals(CARDFILE_TAGS.ADDRESS.tag)) {
+                cfdObj.setAddress(parsedValue.toString());
+            } else if (qName.equals(CARDFILE_TAGS.CITY.tag)) {
+                cfdObj.setCity(parsedValue.toString());
+            } else if (qName.equals(CARDFILE_TAGS.STATE.tag)) {
+                cfdObj.setState(parsedValue.toString());
+            } else if (qName.equals(CARDFILE_TAGS.ZIP.tag)) {
+                cfdObj.setZip(parsedValue.toString());
+            } else if (qName.equals(CARDFILE_TAGS.PHONE1.tag)) {
+                cfdObj.setPhone1(parsedValue.toString());
+            } else if (qName.equals(CARDFILE_TAGS.PHONE2.tag)) {
+                cfdObj.setPhone2(parsedValue.toString());
+            } else if (qName.equals(CARDFILE_TAGS.FAX.tag)) {
+                cfdObj.setFax(parsedValue.toString());
+            } else if (qName.equals(CARDFILE_TAGS.CARDFILE_OBJ.tag)) {
+                cfdList.addDataObject(cfdObj);
+            } else if (qName.equals(CARDFILE_TAGS.TAB.tag)) {
+                addToCardfileData();
+                cfdList = new CardfileList();
+            }
+        } catch (Exception e) {
+            System.out.println("endElement error" + e.getLocalizedMessage());
+        }
+        parsedValue.setLength(0);
+    }
+
+    private void addToCardfileData() {
+        if (currentTitle.equals(CARDFILE.COASTAL_DIVISION_UNITS.tag)) {
+            cardfileData.setCoastalDivisionUnitsList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.POLICE_SHERIFF_CORONER.tag)) {
+            cardfileData.setPoliceSheriffCoronerList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.COURTS.tag)) {
+            cardfileData.setCourtsList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.PUBLIC_TRANSPORTATION.tag)) {
+            cardfileData.setPublicTransportationList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.GG_OTHER.tag)) {
+            cardfileData.setGgOtherList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.MY_MISC.tag)) {
+            cardfileData.setMyMiscList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.SL_MISC.tag)) {
+            cardfileData.setSlMiscList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.VT_MISC.tag)) {
+            cardfileData.setVlMiscList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.CHP_OFFICES.tag)) {
+            cardfileData.setChpOfficesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.STATE_AGENCIES_FACILITIES.tag)) {
+            cardfileData.setStateAgenciesFacilitiesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.GOVERNMENT_OFFICIALS.tag)) {
+            cardfileData.setGovernmentOfficialsList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.FEDERAL_AGENCIES.tag)) {
+            cardfileData.setFederalAgenciesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.FIRE_EMS.tag)) {
+            cardfileData.setFireEmsList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.JAILS.tag)) {
+            cardfileData.setJailsList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.HOSPITALS_MED_CENTERS.tag)) {
+            cardfileData.setHospitalsMedCentersList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.TOW_COMPANIES.tag)) {
+            cardfileData.setTowCompaniesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.CALTRANS.tag)) {
+            cardfileData.setCalTransList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.COUNTY_ROADS.tag)) {
+            cardfileData.setCountyRoadsList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.UTILITIES.tag)) {
+            cardfileData.setUtilitiesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.ANIMAL_CONTROL.tag)) {
+            cardfileData.setAnimalControlList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.AIRPORTS.tag)) {
+            cardfileData.setAirportsList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.CREDIT_CARDS.tag)) {
+            cardfileData.setCreditCardsList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.GG_CRISIS_SHELTERS.tag)) {
+            cardfileData.setGgCrisisSheltersList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.RANGES.tag)) {
+            cardfileData.setRangesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.HOTLINES.tag)) {
+            cardfileData.setHotlinesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.HWY_PATROLS_OOS.tag)) {
+            cardfileData.setHwyPatrolsOosList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.PARKS_RECREATION.tag)) {
+            cardfileData.setParksRecreationList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.SHELTERS)) {
+            cardfileData.setSheltersList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.SL_COUNTY_SERVICES.tag)) {
+            cardfileData.setSlCountyServicesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.SL_RESOURCES.tag)) {
+            cardfileData.setSlResourcesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.TRUCK_TIRE_REPAIR.tag)) {
+            cardfileData.setTruckTireRepairList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.MCC_EMPLOYEES.tag)) {
+            cardfileData.setMccEmployeesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.GATE_ACCESS_CODES.tag)) {
+            cardfileData.setGateAccessCodesList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.VT_CALL_SIGNS.tag)) {
+            cardfileData.setVtCallSignsList(cfdList);
+        } else if (currentTitle.equals(CARDFILE.SLCC_EMPLOYEES.tag)) {
+            cardfileData.setSlccEmployeesList(cfdList);
+        }
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/enums/TableHeaders.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/enums/TableHeaders.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/enums/TableHeaders.java	(revision 82)
@@ -0,0 +1,22 @@
+package tmcsim.client.cadclientgui.enums;
+
+public class TableHeaders {
+    
+    public static final String[] ASSIGNED_INCIDENTS_HEADERS = { "ID", "Master Inc #",
+            "Alerts    (Hub 2)", "Primary", "Unit/s", "Type", "Address",
+            "Location", "Beat", "Area", "OAU", "Time", "Log Time", "Type Code",
+            "P", "AGY" };
+
+    public static final String[] UNIT_STATUS_HEADERS = { "ID", "Master Inc #",
+            "Unit", "Status", "OOS", "Type", "Current Location", "Destination",
+            "Misc", "Stack", "Area", "Badge Number", "Officer", "Timer",
+            "Office", "P" };
+
+    public static final String[] PENDING_INCIDENTS_HEADERS = { "ID", "Master Inc #",
+            "Alerts    (Hub 2)", "P", "Type", "Address", "Location", "City",
+            "Beat", "Area", "OAU", "Timer", "Log Time", "Type Code", "AGY" };
+
+    public static final String[] INCIDENT_EDITOR_HEADERS = { "Date", "Type",
+            "Address", "Location", "City", "Incident #", "CC", "Area", "Units",
+            "Dispo" };
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/enums/ComboBoxConstants.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/enums/ComboBoxConstants.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/enums/ComboBoxConstants.java	(revision 82)
@@ -0,0 +1,261 @@
+package tmcsim.client.cadclientgui.enums;
+
+public class ComboBoxConstants {
+
+    public static final String[] AGENCY = {"CHP"};
+    
+    public static final String[] MEDIA = { " ", "BLOCK"};
+    
+    public static final String[] PRI = { "0", "1", "2", "3", "4", "5", "6", "7", "8" };
+    
+    public static final String[] RP_TYPE = { "", "Allied Agency", "Anonmymous",
+            "Cal Trans", "Freeway Service Patrol", "Involved Party",
+            "Passing Motorist", "Victim", "Witness"};
+    
+    public static final String[] TYPE = { "", "1031", "1179", "BOL", "INFO"};
+    
+    public static final String[] BEATS = { "", "9-9", "9-22", "14-13", "14-14", "17-14", "28-24"};
+    
+    public static final String[] LIST_OF_CA_CITIES = { "", "ACTON", "ADELANTO", "AGOURA HILLS",
+            "ALAMEDA", "ALAMO", "ALBANY", "ALHAMBRA", "ALISO VIEJO", "ALMANOR",
+            "ALONDRA PARK", "ALPAUGH", "ALPINE", "ALPINE VILLAGE", "ALTADENA",
+            "ALTA SIERRA", "ALTURAS", "ALUM ROCK", "AMADOR CITY",
+            "AMERICAN CANYON", "AMESTI", "ANAHEIM", "ANDERSON", "ANGELS CITY",
+            "ANGWIN", "ANTIOCH", "APPLE VALLEY", "APTOS",
+            "APTOS HILLS-LARKIN VALLEY", "ARBUCKLE", "ARCADIA", "ARCATA",
+            "ARDEN-ARCADE", "ARMONA", "ARNOLD", "AROMAS", "ARROYO GRANDE",
+            "ARTESIA", "ARVIN", "ASHLAND", "ATASCADERO", "ATHERTON", "ATWATER",
+            "AUBERRY", "AUBURN", "AUGUST", "AVALON", "AVENAL", "AVERY",
+            "AVOCADO HEIGHTS", "AZUSA", "BAKERSFIELD", "BALDWIN PARK", "BANNING",
+            "BARSTOW", "BAY POINT", "BAYVIEW", "BAYVIEW-MONTALVIN",
+            "BAYWOOD-LOS OSOS", "BEALE AFB", "BEAR VALLEY", "BEAR VALLEY SPRINGS",
+            "BEAUMONT", "BECKWOURTH", "BELDEN", "BELL", "BELLFLOWER",
+            "BELL GARDENS", "BELMONT", "BELVEDERE", "BENICIA", "BEN LOMOND",
+            "BERKELEY", "BERMUDA DUNES", "BERTSCH-OCEANVIEW", "BETHEL ISLAND",
+            "BEVERLY HILLS", "BIG BEAR CITY", "BIG BEAR LAKE", "BIG BEND",
+            "BIGGS", "BIG PINE", "BIG RIVER", "BIOLA", "BISHOP",
+            "BLACKHAWK-CAMINO TASSAJARA", "BLACK POINT-GREEN POINT", "BLAIRSDEN",
+            "BLOOMINGTON", "BLUE LAKE", "BLUEWATER", "BLYTHE", "BODEGA BAY",
+            "BODFISH", "BOLINAS", "BOMBAY BEACH",
+            "BONADELLE RANCHOS-MADERA RANCHOS", "BONITA", "BONSALL", "BOOTJACK",
+            "BORON", "BORONDA", "BORREGO SPRINGS", "BOSTONIA", "BOULDER CREEK",
+            "BOWLES", "BOYES HOT SPRINGS", "BRADBURY", "BRADLEY", "BRAWLEY",
+            "BREA", "BRENTWOOD", "BRET HARTE", "BRISBANE", "BROADMOOR",
+            "BUCKS LAKE", "BUELLTON", "BUENA PARK", "BUENA VISTA", "BURBANK",
+            "BURBANK", "BURLINGAME", "BURNEY", "BUTTONWILLOW", "BYRON", "BYSTROM",
+            "CABAZON", "CALABASAS", "CALEXICO", "CALIFORNIA CITY", "CALIMESA",
+            "CALIPATRIA", "CALISTOGA", "CALWA", "CAMARILLO", "CAMBRIA",
+            "CAMBRIAN PARK", "CAMERON PARK", "CAMPBELL", "CAMP PENDLETON NORTH",
+            "CAMP PENDLETON SOUTH", "CANTUA CREEK", "CANYONDAM", "CANYON LAKE",
+            "CAPITOLA", "CARIBOU", "CARLSBAD", "CARMEL-BY-THE-SEA",
+            "CARMEL VALLEY VILLAGE", "CARMICHAEL", "CARPINTERIA", "CARRICK",
+            "CARSON", "CARTAGO", "CARUTHERS", "CASA CONEJO",
+            "CASA DE ORO-MOUNT HELIX", "CASTRO VALLEY", "CASTROVILLE",
+            "CATHEDRAL CITY", "CAYUCOS", "CERES", "CERRITOS",
+            "CHALLENGE-BROWNSVILLE", "CHANNEL ISLANDS BEACH", "CHARTER OAK",
+            "CHERRYLAND", "CHERRY VALLEY", "CHESTER", "CHICO", "CHILCOOT-VINTON",
+            "CHINA LAKE ACRES", "CHINESE CAMP", "CHINO", "CHINO HILLS",
+            "CHOWCHILLA", "CHUALAR", "CHULA VISTA", "CITRUS", "CITRUS HEIGHTS",
+            "CLAREMONT", "CLAYTON", "CLEARLAKE", "CLEARLAKE OAKS", "CLIO",
+            "CLOVERDALE", "CLOVIS", "CLYDE", "COACHELLA", "COALINGA", "COBB",
+            "COLFAX", "COLMA", "COLTON", "COLUMBIA", "COLUSA", "COMMERCE",
+            "COMPTON", "CONCORD", "CONCOW", "COPPEROPOLIS", "CORCORAN", "CORNING",
+            "CORONA", "CORONADO", "CORRALITOS", "CORTE MADERA", "COSTA MESA",
+            "COTATI", "COTO DE CAZA", "COTTONWOOD", "COUNTRY CLUB", "COVELO",
+            "COVINA", "CRESCENT CITY", "CRESCENT CITY NORTH", "CRESCENT MILLS",
+            "CREST", "CRESTLINE", "C-ROAD", "CROCKETT", "CROMBERG", "CUDAHY",
+            "CULVER CITY", "CUPERTINO", "CUTLER", "CUTTEN", "CYPRESS",
+            "DALY CITY", "DANA POINT", "DANVILLE", "DARWIN", "DAVIS",
+            "DAY VALLEY", "DEER PARK", "DEL AIRE", "DELANO", "DELHI", "DELLEKER",
+            "DEL MAR", "DEL MONTE FOREST", "DEL REY", "DEL REY OAKS", "DEL RIO",
+            "DENAIR", "DERBY ACRES", "DESERT HOT SPRINGS", "DESERT SHORES",
+            "DESERT VIEW HIGHLANDS", "DIABLO", "DIAMOND BAR", "DIAMOND SPRINGS",
+            "DILLON BEACH", "DINUBA", "DISCOVERY BAY", "DIXON",
+            "DIXON LANE-MEADOW CREEK", "DOLLAR POINT", "DORRINGTON", "DORRIS",
+            "DOS PALOS", "DOWNEY", "DUARTE", "DUBLIN", "DUCOR", "DUNSMUIR",
+            "DURHAM", "DUSTIN ACRES", "EARLIMART", "EAST BLYTHE", "EAST COMPTON",
+            "EAST FOOTHILLS", "EAST HEMET", "EAST LA MIRADA", "EAST LOS ANGELES",
+            "EAST OAKDALE", "EASTON", "EAST OROSI", "EAST PALO ALTO",
+            "EAST PASADENA", "EAST PORTERVILLE", "EAST QUINCY",
+            "EAST RICHMOND HEIGHTS", "EAST SAN GABRIEL", "EAST SHORE",
+            "EAST SONORA", "EDGEWOOD", "EDWARDS AFB", "EL CAJON", "EL CENTRO",
+            "EL CERRITO", "EL CERRITO", "EL DORADO HILLS", "ELDRIDGE",
+            "EL GRANADA", "ELK GROVE", "ELKHORN", "ELMIRA", "EL MONTE",
+            "EL PASO DE ROBLES (PASO ROBLES)", "EL RIO", "EL SEGUNDO",
+            "EL SOBRANTE", "EL VERANO", "EMERALD LAKE HILLS", "EMERYVILLE",
+            "EMPIRE", "ENCINITAS", "ESCALON", "ESCONDIDO", "ESPARTO", "ETNA",
+            "EUREKA", "EXETER", "FAIRBANKS RANCH", "FAIRFAX", "FAIRFIELD",
+            "FAIR OAKS", "FAIRVIEW", "FALLBROOK", "FALL RIVER MILLS",
+            "FARMERSVILLE", "FARMINGTON", "FELLOWS", "FELTON", "FERNDALE",
+            "FETTERS HOT SPRINGS-AGUA CALIENTE", "FILLMORE", "FIREBAUGH",
+            "FLORENCE-GRAHAM", "FLORIN", "FOLSOM", "FONTANA", "FOOTHILL FARMS",
+            "FOOTHILL RANCH", "FORD CITY", "FORESTHILL", "FOREST MEADOWS",
+            "FORESTVILLE", "FORT BRAGG", "FORT JONES", "FORTUNA", "FOSTER CITY",
+            "FOUNTAIN VALLEY", "FOWLER", "FRAZIER PARK", "FREEDOM", "FREMONT",
+            "FRENCH CAMP", "FRENCH GULCH", "FRESNO", "FRIANT", "FRUITDALE",
+            "FULLERTON", "FURNACE CREEK", "GALT", "GARDENA", "GARDEN ACRES",
+            "GARDEN GROVE", "GAZELLE", "GEORGETOWN", "GERBER-LAS FLORES",
+            "GILROY", "GLEN AVON", "GLENDALE", "GLENDORA", "GLEN ELLEN",
+            "GOLDEN HILLS", "GOLD RIVER", "GOLETA", "GONZALES", "GOSHEN",
+            "GRAEAGLE", "GRAND TERRACE", "GRANITE BAY", "GRANITE HILLS",
+            "GRASS VALLEY", "GRATON", "GRAYSON", "GREENFIELD", "GREENHORN",
+            "GREEN VALLEY", "GREENVIEW", "GREENVILLE", "GRENADA", "GRIDLEY",
+            "GROVELAND-BIG OAK FLAT", "GROVER BEACH", "GUADALUPE", "GUERNEVILLE",
+            "GUSTINE", "HACIENDA HEIGHTS", "HALF MOON BAY", "HAMILTON BRANCH",
+            "HAMILTON CITY", "HANFORD", "HARBISON CANYON", "HAWAIIAN GARDENS",
+            "HAWTHORNE", "HAYFORK", "HAYWARD", "HEALDSBURG", "HEBER", "HEMET",
+            "HERCULES", "HERMOSA BEACH", "HESPERIA", "HICKMAN", "HIDDEN HILLS",
+            "HIDDEN MEADOWS", "HIDDEN VALLEY LAKE", "HIGHGROVE", "HIGHLAND",
+            "HIGHLANDS-BAYWOOD PARK", "HILLSBOROUGH", "HILMAR-IRWIN", "HOLLISTER",
+            "HOLTVILLE", "HOME GARDEN", "HOME GARDENS", "HOMELAND",
+            "HOMEWOOD CANYON-VALLEY WELLS", "HORNBROOK", "HUGHSON",
+            "HUMBOLDT HILL", "HUNTINGTON BEACH", "HUNTINGTON PARK", "HURON",
+            "HYDESVILLE", "IDYLLWILD-PINE COVE", "IMPERIAL", "IMPERIAL BEACH",
+            "INDEPENDENCE", "INDIAN FALLS", "INDIAN WELLS", "INDIO", "INDUSTRY",
+            "INGLEWOOD", "INTERLAKEN", "INVERNESS", "INYOKERN", "IONE",
+            "IRON HORSE", "IRVINE", "IRWINDALE", "ISLA VISTA", "ISLETON",
+            "IVANHOE", "JACKSON", "JAMESTOWN", "JAMUL", "JOHANNESBURG",
+            "JOHNSVILLE", "JOSHUA TREE", "JULIAN", "KEDDIE", "KEELER", "KEENE",
+            "KELSEYVILLE", "KENNEDY", "KENSINGTON", "KENTFIELD", "KERMAN",
+            "KERNVILLE", "KETTLEMAN CITY", "KEYES", "KING CITY", "KINGS BEACH",
+            "KINGSBURG", "KIRKWOOD", "KLAMATH", "KNIGHTSEN",
+            "LA CANADA FLINTRIDGE", "LA CRESCENTA-MONTROSE", "LADERA HEIGHTS",
+            "LAFAYETTE", "LAGUNA", "LAGUNA BEACH", "LAGUNA HILLS",
+            "LAGUNA NIGUEL", "LAGUNA WEST-LAKESIDE", "LAGUNA WOODS",
+            "LAGUNITAS-FOREST KNOLLS", "LA HABRA", "LA HABRA HEIGHTS",
+            "LAKE ALMANOR COUNTRY CLUB", "LAKE ALMANOR PENINSULA",
+            "LAKE ALMANOR WEST", "LAKE ARROWHEAD", "LAKE DAVIS", "LAKE ELSINORE",
+            "LAKE FOREST", "LAKEHEAD-LAKESHORE", "LAKE ISABELLA",
+            "LAKELAND VILLAGE", "LAKE LOS ANGELES", "LAKE NACIMIENTO",
+            "LAKE OF THE PINES", "LAKE OF THE WOODS", "LAKEPORT",
+            "LAKE SAN MARCOS", "LAKESIDE", "LAKEVIEW", "LAKE WILDWOOD",
+            "LAKEWOOD", "LA MESA", "LA MIRADA", "LAMONT", "LANARE", "LANCASTER",
+            "LA PALMA", "LA PORTE", "LA PRESA", "LA PUENTE", "LA QUINTA",
+            "LA RIVIERA", "LARKFIELD-WIKIUP", "LARKSPUR", "LAS FLORES",
+            "LAS LOMAS", "LATHROP", "LATON", "LA VERNE", "LAWNDALE",
+            "LAYTONVILLE", "LEBEC", "LE GRAND", "LEMON COVE", "LEMON GROVE",
+            "LEMOORE", "LEMOORE STATION", "LENNOX", "LENWOOD", "LEWISTON",
+            "LEXINGTON HILLS", "LINCOLN", "LINCOLN VILLAGE", "LINDA", "LINDEN",
+            "LINDSAY", "LITTLE GRASS VALLEY", "LITTLEROCK", "LIVE OAK",
+            "LIVE OAK", "LIVERMORE", "LIVINGSTON", "LOCKEFORD", "LODI",
+            "LOMA LINDA", "LOMA RICA", "LOMITA", "LOMPOC", "LONDON", "LONE PINE",
+            "LONG BEACH", "LOOMIS", "LOS ALAMITOS", "LOS ALAMOS", "LOS ALTOS",
+            "LOS ALTOS HILLS", "LOS ANGELES", "LOS BANOS", "LOS GATOS",
+            "LOS MOLINOS", "LOST HILLS", "LOWER LAKE", "LOYALTON", "LOYOLA",
+            "LUCAS VALLEY-MARINWOOD", "LUCERNE", "LYNWOOD", "MCARTHUR", "MCCLOUD",
+            "MACDOEL", "MCFARLAND", "MCKINLEYVILLE", "MCKITTRICK", "MADERA",
+            "MADERA ACRES", "MAGALIA", "MALIBU", "MAMMOTH LAKES",
+            "MANHATTAN BEACH", "MANTECA", "MANTON", "MARCH AFB", "MARICOPA",
+            "MARINA", "MARINA DEL REY", "MARIPOSA", "MARKLEEVILLE", "MARTINEZ",
+            "MARYSVILLE", "MAYFLOWER VILLAGE", "MAYWOOD", "MEADOW VALLEY",
+            "MEADOW VISTA", "MECCA", "MEINERS OAKS", "MENDOCINO", "MENDOTA",
+            "MENLO PARK", "MENTONE", "MERCED", "MESA", "MESA VISTA", "METTLER",
+            "MIDDLETOWN", "MILLBRAE", "MILL VALLEY", "MILLVILLE", "MILPITAS",
+            "MINERAL", "MIRA LOMA", "MIRA MONTE", "MISSION CANYON",
+            "MISSION HILLS", "MISSION VIEJO", "MI-WUK VILLAGE", "MODESTO",
+            "MOHAWK VISTA", "MOJAVE", "MOKELUMNE HILL", "MONO VISTA", "MONROVIA",
+            "MONTAGUE", "MONTARA", "MONTCLAIR", "MONTEBELLO", "MONTECITO",
+            "MONTEREY", "MONTEREY PARK", "MONTE RIO", "MONTE SERENO",
+            "MONTGOMERY CREEK", "MOORPARK", "MORADA", "MORAGA", "MORENO VALLEY",
+            "MORGAN HILL", "MORONGO VALLEY", "MORRO BAY", "MOSS BEACH",
+            "MOSS LANDING", "MOUNTAIN MESA", "MOUNTAIN RANCH", "MOUNTAIN VIEW",
+            "MOUNTAIN VIEW", "MOUNTAIN VIEW ACRES", "MOUNT HEBRON",
+            "MOUNT SHASTA", "MUIR BEACH", "MURPHYS", "MURRIETA",
+            "MURRIETA HOT SPRINGS", "MUSCOY", "MYRTLETOWN", "NAPA",
+            "NATIONAL CITY", "NEBO CENTER", "NEEDLES", "NEVADA CITY", "NEWARK",
+            "NEWMAN", "NEWPORT BEACH", "NEWPORT COAST", "NICE", "NILAND",
+            "NIPOMO", "NORCO", "NORTH AUBURN", "NORTH EDWARDS", "NORTH EL MONTE",
+            "NORTH FAIR OAKS", "NORTH HIGHLANDS", "NORTH LAKEPORT",
+            "NORTH WOODBRIDGE", "NORWALK", "NOVATO", "NUEVO", "OAKDALE",
+            "OAKHURST", "OAKLAND", "OAKLEY", "OAK PARK", "OAK VIEW", "OCCIDENTAL",
+            "OCEANO", "OCEANSIDE", "OCOTILLO", "OILDALE", "OJAI", "OLANCHA",
+            "OLIVEHURST", "ONTARIO", "ONYX", "OPAL CLIFFS", "ORANGE",
+            "ORANGE COVE", "ORANGEVALE", "ORCUTT", "ORINDA", "ORLAND", "OROSI",
+            "OROVILLE", "OROVILLE EAST", "OXNARD", "PACHECO", "PACIFICA",
+            "PACIFIC GROVE", "PAJARO", "PALERMO", "PALMDALE", "PALM DESERT",
+            "PALM SPRINGS", "PALO ALTO", "PALO CEDRO", "PALOS VERDES ESTATES",
+            "PALO VERDE", "PARADISE", "PARAMOUNT", "PARKSDALE",
+            "PARKWAY-SOUTH SACRAMENTO", "PARKWOOD", "PARLIER", "PASADENA",
+            "PATTERSON", "PAXTON", "PEARSONVILLE", "PEDLEY", "PENN VALLEY",
+            "PERRIS", "PETALUMA", "PHOENIX LAKE-CEDAR RIDGE", "PICO RIVERA",
+            "PIEDMONT", "PINE HILLS", "PINE MOUNTAIN CLUB", "PINE VALLEY",
+            "PINOLE", "PIRU", "PISMO BEACH", "PITTSBURG", "PIXLEY", "PLACENTIA",
+            "PLACERVILLE", "PLANADA", "PLEASANT HILL", "PLEASANTON",
+            "PLUMAS EUREKA", "PLYMOUTH", "POINT ARENA", "POINT REYES STATION",
+            "POLLOCK PINES", "POMONA", "POPLAR-COTTON CENTER", "PORT COSTA",
+            "PORTERVILLE", "PORT HUENEME", "PORTOLA", "PORTOLA HILLS",
+            "PORTOLA VALLEY", "POWAY", "PRATTVILLE", "PRUNEDALE", "QUAIL VALLEY",
+            "QUARTZ HILL", "QUINCY", "RAIL ROAD FLAT", "RAINBOW", "RAISIN CITY",
+            "RAMONA", "RANCHO CALAVERAS", "RANCHO CORDOVA", "RANCHO CUCAMONGA",
+            "RANCHO MIRAGE", "RANCHO MURIETA", "RANCHO PALOS VERDES",
+            "RANCHO SAN DIEGO", "RANCHO SANTA FE", "RANCHO SANTA MARGARITA",
+            "RANCHO TEHAMA RESERVE", "RANDSBURG", "RED BLUFF", "REDDING",
+            "REDLANDS", "REDONDO BEACH", "REDWAY", "REDWOOD CITY", "REEDLEY",
+            "RIALTO", "RICHGROVE", "RICHMOND", "RIDGECREST", "RIDGEMARK",
+            "RIO DELL", "RIO DEL MAR", "RIO LINDA", "RIO VISTA", "RIPON",
+            "RIVERBANK", "RIVERDALE", "RIVERDALE PARK", "RIVERSIDE", "ROCKLIN",
+            "RODEO", "ROHNERT PARK", "ROLLING HILLS", "ROLLING HILLS ESTATES",
+            "ROLLINGWOOD", "ROMOLAND", "ROSAMOND", "ROSEDALE", "ROSELAND",
+            "ROSEMEAD", "ROSEMONT", "ROSEVILLE", "ROSS", "ROSSMOOR",
+            "ROUND MOUNTAIN", "ROUND VALLEY", "ROWLAND HEIGHTS", "RUBIDOUX",
+            "RUNNING SPRINGS", "SACRAMENTO", "ST. HELENA", "SALIDA", "SALINAS",
+            "SALTON CITY", "SALTON SEA BEACH", "SAN ANDREAS", "SAN ANSELMO",
+            "SAN ANTONIO HEIGHTS", "SAN ARDO", "SAN BERNARDINO", "SAN BRUNO",
+            "SAN BUENAVENTURA (VENTURA)", "SAN CARLOS", "SAN CLEMENTE",
+            "SAND CITY", "SAN DIEGO", "SAN DIEGO COUNTRY ESTATES", "SAN DIMAS",
+            "SAN FERNANDO", "SAN FRANCISCO", "SAN GABRIEL", "SANGER",
+            "SAN GERONIMO", "SAN JACINTO", "SAN JOAQUIN", "SAN JOAQUIN HILLS",
+            "SAN JOSE", "SAN JUAN BAUTISTA", "SAN JUAN CAPISTRANO", "SAN LEANDRO",
+            "SAN LORENZO", "SAN LUCAS", "SAN LUIS OBISPO", "SAN MARCOS",
+            "SAN MARINO", "SAN MARTIN", "SAN MATEO", "SAN MIGUEL", "SAN PABLO",
+            "SAN RAFAEL", "SAN RAMON", "SANTA ANA", "SANTA BARBARA",
+            "SANTA CLARA", "SANTA CLARITA", "SANTA CRUZ", "SANTA FE SPRINGS",
+            "SANTA MARIA", "SANTA MONICA", "SANTA PAULA", "SANTA ROSA",
+            "SANTA VENETIA", "SANTA YNEZ", "SANTEE", "SARATOGA", "SAUSALITO",
+            "SCOTTS VALLEY", "SEAL BEACH", "SEARLES VALLEY", "SEASIDE",
+            "SEBASTOPOL", "SEDCO HILLS", "SEELEY", "SELMA", "SEVEN TREES",
+            "SHACKELFORD", "SHAFTER", "SHANDON", "SHASTA LAKE", "SHAVER LAKE",
+            "SHINGLE SPRINGS", "SHINGLETOWN", "SHOSHONE", "SIERRA MADRE",
+            "SIGNAL HILL", "SIMI VALLEY", "SOLANA BEACH", "SOLEDAD", "SOLVANG",
+            "SONOMA", "SONORA", "SOQUEL", "SOULSBYVILLE", "SOUTH DOS PALOS",
+            "SOUTH EL MONTE", "SOUTH GATE", "SOUTH LAKE TAHOE", "SOUTH OROVILLE",
+            "SOUTH PASADENA", "SOUTH SAN FRANCISCO", "SOUTH SAN GABRIEL",
+            "SOUTH SAN JOSE HILLS", "SOUTH TAFT", "SOUTH WHITTIER",
+            "SOUTH WOODBRIDGE", "SOUTH YUBA CITY", "SPRECKELS", "SPRING GARDEN",
+            "SPRING VALLEY", "SPRINGVILLE", "SQUAW VALLEY",
+            "SQUIRREL MOUNTAIN VALLEY", "STALLION SPRINGS", "STANFORD", "STANTON",
+            "STINSON BEACH", "STOCKTON", "STORRIE", "STRATFORD", "STRATHMORE",
+            "STRAWBERRY", "SUISUN CITY", "SUMMERLAND", "SUN CITY",
+            "SUNNYSIDE-TAHOE CITY", "SUNNYSLOPE", "SUNNYVALE", "SUNOL",
+            "SUNOL-MIDTOWN", "SUSANVILLE", "SUTTER", "SUTTER CREEK", "TAFT",
+            "TAFT HEIGHTS", "TAFT MOSSWOOD", "TAHOE VISTA", "TALMAGE",
+            "TAMALPAIS-HOMESTEAD VALLEY", "TARA HILLS", "TAYLORSVILLE", "TECOPA",
+            "TEHACHAPI", "TEHAMA", "TEMECULA", "TEMELEC", "TEMPLE CITY",
+            "TEMPLETON", "TENNANT", "TERRA BELLA", "THERMALITO", "THOUSAND OAKS",
+            "THOUSAND PALMS", "THREE RIVERS", "TIBURON", "TIERRA BUENA", "TIPTON",
+            "TOBIN", "TOMALES", "TORO CANYON", "TORRANCE", "TRACY",
+            "TRANQUILLITY", "TRAVER", "TRINIDAD", "TRUCKEE", "TULARE", "TULELAKE",
+            "TUOLUMNE CITY", "TUPMAN", "TURLOCK", "TUSTIN", "TUSTIN FOOTHILLS",
+            "TWAIN", "TWAIN HARTE", "TWENTYNINE PALMS", "TWENTYNINE PALMS BASE",
+            "TWIN LAKES", "UKIAH", "UNION CITY", "UPLAND", "UPPER LAKE",
+            "VACAVILLE", "VALINDA", "VALLECITO", "VALLEJO", "VALLE VISTA",
+            "VALLEY ACRES", "VALLEY CENTER", "VALLEY RANCH", "VALLEY SPRINGS",
+            "VAL VERDE", "VANDENBERG AFB", "VANDENBERG VILLAGE", "VERNON",
+            "VICTORVILLE", "VIEW PARK-WINDSOR HILLS", "VILLA PARK", "VINCENT",
+            "VINE HILL", "VINEYARD", "VISALIA", "VISTA", "WALDON", "WALLACE",
+            "WALNUT", "WALNUT CREEK", "WALNUT GROVE", "WALNUT PARK", "WASCO",
+            "WATERFORD", "WATSONVILLE", "WEAVERVILLE", "WEED", "WEEDPATCH",
+            "WELDON", "WEST ATHENS", "WEST BISHOP", "WEST CARSON", "WEST COMPTON",
+            "WEST COVINA", "WESTHAVEN-MOONSTONE", "WEST HOLLYWOOD",
+            "WESTLAKE VILLAGE", "WESTLEY", "WEST MENLO PARK", "WESTMINSTER",
+            "WEST MODESTO", "WESTMONT", "WESTMORLAND", "WEST POINT",
+            "WEST PUENTE VALLEY", "WEST SACRAMENTO", "WEST WHITTIER-LOS NIETOS",
+            "WESTWOOD", "WHEATLAND", "WHITEHAWK", "WHITTIER", "WILDOMAR",
+            "WILKERSON", "WILLIAMS", "WILLITS", "WILLOWBROOK", "WILLOW CREEK",
+            "WILLOWS", "WILTON", "WINCHESTER", "WINDSOR", "WINTER GARDENS",
+            "WINTERHAVEN", "WINTERS", "WINTON", "WOFFORD HEIGHTS", "WOODACRE",
+            "WOODCREST", "WOODLAKE", "WOODLAND", "WOODSIDE", "WOODVILLE",
+            "WRIGHTWOOD", "YORBA LINDA", "YOSEMITE LAKES", "YOSEMITE VALLEY",
+            "YOUNTVILLE", "YREKA", "YUBA CITY", "YUCAIPA", "YUCCA VALLEY" };
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/enums/IncidentEnums.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/enums/IncidentEnums.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/enums/IncidentEnums.java	(revision 82)
@@ -0,0 +1,9 @@
+package tmcsim.client.cadclientgui.enums;
+
+public enum IncidentEnums {
+
+    Not_Started,
+    Pending,
+    Assigned,
+    Closed,
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/enums/CADDataEnums.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/enums/CADDataEnums.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/enums/CADDataEnums.java	(revision 82)
@@ -0,0 +1,307 @@
+package tmcsim.client.cadclientgui.enums;
+
+public class CADDataEnums {
+    
+    public static enum TABLE
+    {
+        ASSIGNED_INCIDENTS  ("ASSIGNED_INCIDENTS"),
+        UNIT_STATUS             ("UNIT_STATUS"),
+        PENDING_INCIDENTS       ("PENDING_INCIDENTS"),
+        INCIDENT_EDITOR     ("INCIDENT_EDITOR");
+        
+        public String tag;
+        
+        private TABLE(String t) {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_TABLE
+    {
+        COMMENTS_NOTES          ("COMMENTS_NOTES");
+        
+        public String tag;
+        
+        private INC_TABLE(String t) {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_VAL
+    {
+        LOG_NUM                 ("LOG_NUM"),
+        MASTER_INC              ("MASTER_INC"),
+        ALERT                       ("ALERT"),
+        OAU                     ("OAU"),
+        P                           ("P"),
+        DESCRIPTION             ("DESCRIPTION"),
+        RP                          ("RP"),
+        ALI                     ("ALI"),
+        RP_TYPE                 ("RP_TYPE"),
+        MEDIA                       ("MEDIA");
+        
+        public String tag;
+        
+        private INC_VAL(String t) {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_LOC
+    {
+        ADDRESS                 ("ADDRESS"),
+        LOC                     ("LOC"),
+        CITY                        ("CITY"),
+        COUNTY                  ("COUNTY"),
+        STATE                       ("STATE"),
+        ZIP                     ("ZIP"),
+        BEAT                        ("BEAT"),
+        AREA                        ("AREA"),
+        SECTOR                  ("SECTOR"),
+        SECTOR_CODE             ("SECTOR_CODE"),
+        DIVISION                    ("DIVISION"),
+        APT                     ("APT"),
+        BUILDING                    ("BUILDING"),
+        CROSS_ST                    ("CROSS_ST"),
+        LAW                     ("LAW"),
+        FIRE                        ("FIRE"),
+        EMS                     ("EMS");
+        
+        public String tag;
+        
+        private INC_LOC(String t) {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_CALLER
+    {
+        TYPE                        ("TYPE"),
+        NAME                        ("NAME"),
+        PHONE                       ("PHONE"),
+        EXT                     ("EXT");
+        
+        public String tag;
+        
+        private INC_CALLER(String t) {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_PROBLEM
+    {
+       PROBLEM                  ("PROBLEM"),
+        CODE                    ("CODE"), 
+        PRIORITY                ("PRIORITY");
+        
+        public String tag;
+        
+        private INC_PROBLEM(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_GEN_INFO
+    {
+        ID                      ("ID"),
+        MASTER_INC_NUM          ("MASTER_INC_NUM"),
+        JURISDICTION            ("JURISDICTION"), 
+        ALARM                       ("ALARM"),
+        AGY                         ("AGY");
+        
+        public String tag;
+        
+        private INC_GEN_INFO(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_RESP
+    {
+        PLAN                    ("PLAN"),
+        AREA                    ("AREA");
+        
+        public String tag;
+        
+        private INC_RESP(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_ADD_INFO
+    {
+        TYPE                        ("TYPE"),
+        TYPE_CODE                   ("TYPE_CODE"),
+        MACHINE                     ("MACHINE"), 
+        CALL_STATUS                 ("CALL_STATUS"),
+        CALL_TAKER_EXT              ("CALL_TAKER_EXT"),
+        ALARM_LEVEL                 ("ALARM_LEVEL"),
+        ROTATION_PROVIDER_AREA  ("ROTATION_PROVIDER_AREA"),
+        COMMENT                     ("COMMENT");
+        
+        public String tag;
+        
+        private INC_ADD_INFO(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_ACTIVITIES
+    {
+        VEHICLE                 ("VEHICLE"),
+        ACTIVITY                ("ACTIVITY"),
+        LOCATION                ("LOCATION"), 
+        COMMENT                 ("COMMENT"),
+        DISP                    ("DISP");
+        
+        public String tag;
+        
+        private INC_ACTIVITIES(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_CALLBACK
+    {
+        INITIAL                 ("INITIAL"),
+        COMMENT                 ("COMMENT");
+        
+        public String tag;
+        
+        private INC_CALLBACK(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_EDIT_LOG
+    {
+        EDIT                    ("EDIT"),
+        REASON                      ("REASON"),
+        CHANGE_BY               ("CHANGE_BY"), 
+        TERMINAL                ("TERMINAL");
+        
+        public String tag;
+        
+        private INC_EDIT_LOG(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_INFO
+    {
+        CALL_INITIATED    ("CALL_INITIATED"),
+        CALL_TAKEN          ("CALL_TAKEN"),
+        TIME_IN_Q           ("TIME_IN_Q"), 
+        LAST_UPDATED        ("LAST_UPDATED");
+        
+        public String tag;
+        
+        private INC_INFO(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum INC_TIMES
+    {
+        UNIT                ("UNIT"),
+        ALARM               ("ALARM"),
+        ASSIGNED            ("ASSIGNED"), 
+        ENROUTE             ("ENROUTE"),
+        STAGED              ("STAGED"),
+        ARRIVAL             ("ARRIVAL"),
+        ACCESS                  ("ACCESS"),
+        DEPART              ("DEPART"), 
+        AT_DEST             ("AT_DEST"),
+        STATUS_5            ("STATUS_5"),
+        AVAILABLE           ("AVAILABLE"),
+        RESP_NUM            ("RESP_NUM"),
+        
+        RING                    ("RING"),
+        IN_QUEUE                ("IN_QUEUE"),
+        ALL_AVAILABLE       ("ALL_AVAILABLE"),
+        CALL_CLOSED         ("CALL_CLOSED");
+        
+        public String tag;
+        
+        private INC_TIMES(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum CARDFILE
+    {
+//        COASTAL_DIVISION_UNITS  ("Coastal Division Units"),
+        COASTAL_DIVISION_UNITS  ("Santa Lucia TMC (D14)"),
+//        POLICE_SHERIFF_CORONER  ("Police/Sheriff/Coroner"),
+        POLICE_SHERIFF_CORONER  ("Santa Lucia Caltrans"),
+//        COURTS                      ("Courts"),
+          COURTS                      ("Caltrans District Offices"),
+//        PUBLIC_TRANSPORTATION   ("Public Transportation"),
+        PUBLIC_TRANSPORTATION   ("Allied Agencies"),
+//        GG_OTHER                        ("GG Other"),
+        GG_OTHER                        ("Radio Stations"),        
+//        MY_MISC                     ("MY Misc"),
+        MY_MISC                     ("TV Stations"),
+        SL_MISC                     ("SL Misc"),
+        VT_MISC                     ("VT Misc"),
+        CHP_OFFICES                 ("CHP Offices"),
+        STATE_AGENCIES_FACILITIES   ("State Agencies/Facilities"),
+        GOVERNMENT_OFFICIALS        ("Government Officials"),
+        FEDERAL_AGENCIES            ("Federal Agencies"),
+        RANCHES_LIVESTOCK           ("Ranches/Livestock"),
+        FIRE_EMS                        ("Fire/EMS"),
+        JAILS                           ("Jails"),
+        HOSPITALS_MED_CENTERS   ("Hospitals/Med Centers"),
+        TOW_COMPANIES               ("Tow Companies"),
+        CALTRANS                        ("CalTrans"),
+        COUNTY_ROADS                ("County Roads"),
+        UTILITIES                   ("Utilities"),
+        ANIMAL_CONTROL              ("Animal Control"),
+        AIRPORTS                        ("Airports"),
+        CREDIT_CARDS                ("Credit Cards"),
+        GG_CRISIS_SHELTERS      ("GG Crisis Shelters"),
+        RANGES                      ("Ranges"),
+        HOTLINES                        ("Hotlines"),
+        HWY_PATROLS_OOS         ("Hwy Patrols OOS"),
+        PARKS_RECREATION            ("Parks/Recreation"),
+        SHELTERS                        ("Shelters"),
+        SL_COUNTY_SERVICES      ("SL County Services"),
+        SL_RESOURCES                ("SL Resources"),
+        TRUCK_TIRE_REPAIR           ("Truck/Tire Repair"),
+        MCC_EMPLOYEES               ("MCC Employees"),
+        GATE_ACCESS_CODES           ("Gate Access Codes"),
+        VT_CALL_SIGNS               ("VT Call Signs"),
+        SLCC_EMPLOYEES              ("SLCC Employees");
+        
+        public String tag;
+        
+        private CARDFILE(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public enum EditCommand{
+         OBJECT_ADD,
+         OBJECT_DELETE,
+         TABLE_ADD,
+         TABLE_DELETE,
+         NAME,
+         ADDRESS,
+         CITY,
+         STATE,
+         ZIP,
+         PHONE1,
+         PHONE2,
+         FAX,
+     }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/enums/CADScriptTags.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/enums/CADScriptTags.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/enums/CADScriptTags.java	(revision 82)
@@ -0,0 +1,158 @@
+package tmcsim.client.cadclientgui.enums;
+
+public class CADScriptTags {
+
+    public static enum SCRIPT_LEVEL_TAGS 
+    {
+        TMC_SCRIPT         ("TMC_SCRIPT"),
+        SCRIPT_DATA        ("SCRIPT_DATA"),
+        CAD_DATA           ("CAD_DATA"),
+        SCRIPT_EVENT       ("SCRIPT_EVENT"),
+        NEW_UNIT            ("NEW_UNIT"),
+        HEADER_INFO         ("HEADER_INFO"),
+        LOCATION_INFO       ("LOCATION_INFO"),
+        CAD_INCIDENT_EVENT  ("CAD_INCIDENT_EVENT"), 
+        PARAMICS            ("PARAMICS");
+        
+        public String tag;
+        
+        private SCRIPT_LEVEL_TAGS(String t) {
+            tag = t;
+        }
+    }
+    
+    public static enum UNIT_TAGS
+    {
+        UNIT_NUM       ("UnitNum"),
+        ID             ("ID"),
+        MASTER_INC_NUM ("MASTER_INC_NUM"),
+        STATUS         ("STATUS"),
+        OOS            ("OOS"),
+        TYPE           ("TYPE"),
+        CURR_LOC       ("CURR_LOC"),
+        DESTINATION    ("DESTINATION"),
+        MISC_INFO      ("MISC_INFO"),
+        STACK          ("STACK"),
+        AREA           ("AREA"),
+        OFFICER        ("OFFICER"),
+        BADGE_NUM      ("BADGE_NUM"),
+        TIMER          ("TIMER"),
+        OFFICE         ("OFFICE"),
+        P              ("P"),
+        AGY            ("AGY"),
+        ALIAS          ("ALIAS"),
+        UNIT_STATUS    ("UNIT_STATUS");
+        
+        
+        public String tag;
+        
+        private UNIT_TAGS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum SCRIPT_EVENT_TAGS
+    {
+        TIME_INDEX     ("TIME_INDEX"), 
+        INCIDENT       ("INCIDENT"), 
+        LOG_NUMBER     ("LogNum"),
+        LOCATION_INFO  ("LOCATION_INFO"),
+        ASSIGN         ("ASSIGN"),
+        UNIT_NUM       ("UnitNum"),
+        CAD_DATA       ("CAD_DATA");
+        
+        public String tag;
+        
+        private SCRIPT_EVENT_TAGS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum CAD_DATA_TAGS
+    {
+        MASTER_INC_NUM    ("MASTER_INC_NUM"),
+        LOCATION    ("LOCATION"),
+        CALLER     ("CALLER"), 
+        PROBLEM       ("PROBLEM"), 
+        GENERAL  ("GENERAL"),
+        RESPONSE   ("RESPONSE"),
+        ADDITIONAL_INFO  ("ADDITIONAL_INFO"),
+        ACTIVITIES     ("ACTIVITIES"),
+        CALL_BACKS    ("CALL_BACKS"),
+        EDIT_LOG      ("EDIT_LOG"),
+        INFO        ("INFO"),
+        TIMES       ("TIMES"),
+        TRANSPORT_INFO  ("TRANSPORT_INFO"),
+        USER_DATA    ("USER_DATA"),
+        ATTACHMENTS   ("ATTACHMENTS"),
+        RP  ("RP"),
+        ALI ("ALI"),
+        RP_TYPE ("RP_TYPE"),
+        PRI ("PRI"),
+        MEDIA   ("MEDIA"),
+        TYPE_CODE ("TYPE_CODE"), 
+        P   ("P");
+        
+        
+        public String tag;
+        
+        private CAD_DATA_TAGS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum INCIDENT_LOCATION_TAGS
+    {
+        ADDRESS       ("ADDRESS"),
+        LOC           ("LOC"),
+        CITY          ("CITY"),
+        COUNTY        ("COUNTY"),
+        STATE         ("STATE"),
+        ZIP           ("ZIP"),
+        BEAT          ("BEAT"),
+        AREA          ("AREA"),
+        SECTOR        ("SECTOR"),
+        SECTOR_CODE   ("SECTOR_CODE"),
+        DIVISION      ("DIVISION"),
+        APT           ("APT"),
+        BUILDING      ("BUILDING"),
+        CROSS_STREET  ("CROSS_STREET"),
+        LAW           ("LAW"),
+        FIRE              ("FIRE"),
+        EMS           ("EMS");
+        
+        public String tag;
+        
+        private INCIDENT_LOCATION_TAGS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+    public static enum CARDFILE_TAGS
+    {
+        CARDFILE            ("CARDFILE"),
+        TAB             ("TAB"),
+        TITLE               ("title"),//this is lowercase on purpose to match XML
+        CARDFILE_OBJ    ("CARDFILE_OBJ"),
+        NAME                ("name"),
+        ADDRESS         ("ADDRESS"),
+        CITY                ("CITY"),
+        STATE               ("STATE"),
+        ZIP             ("ZIP"),
+        PHONE1          ("PHONE1"),
+        PHONE2          ("PHONE2"),
+        FAX             ("FAX");
+        
+        public String tag;
+        
+        private CARDFILE_TAGS(String t)
+        {
+            tag = t;
+        }
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/enums/UnitStatusEnums.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/enums/UnitStatusEnums.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/enums/UnitStatusEnums.java	(revision 82)
@@ -0,0 +1,9 @@
+package tmcsim.client.cadclientgui.enums;
+
+public enum UnitStatusEnums {
+
+    Assignable, // green
+    Arrived, //yellow
+    NotAssignable, //grey
+    Enroute, //LightBlue
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentResponse.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentResponse.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentResponse.java	(revision 82)
@@ -0,0 +1,68 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentResponse implements Serializable {
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_plan = "";
+    private String init_area = "";
+    
+    private String plan;
+    private String area;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentResponse() {
+        plan = "";
+        area = "";
+    }
+
+    public void resetCADDataSimulation(){
+        plan = init_plan;
+        area = init_area;
+    }
+    
+    public String getPlan() {
+        return plan;
+    }
+
+    public void setPlan(String plan) {
+        this.plan = plan;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_RESP.PLAN.tag)) {
+            init_plan = value;
+            setPlan(value);
+        } else if (tag_name.equals(CADDataEnums.INC_RESP.AREA.tag)) {
+            init_area = value;
+            setArea(value);
+        }
+
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentProblem.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentProblem.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentProblem.java	(revision 82)
@@ -0,0 +1,88 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentProblem implements Serializable {
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_problem = "";
+    private String init_problemCode = "";
+    private String init_priority = "";
+    
+    private String problem;
+    private String problemCode;
+    private String priority;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentProblem(String code, String prio) {
+        problem = "";
+        setProblemCode(code);
+        setPriority(prio);
+    }
+
+    public IncidentProblem() {
+        problem = "";
+        problemCode = "";
+        priority = "";
+    }
+    
+    public void resetCADDataSimulation(){
+        problem = init_problem;
+        problemCode = init_problemCode;
+        priority = init_priority;
+    }
+
+    public String getProblem() {
+        return problem;
+    }
+
+    public void setProblem(String problem) {
+        this.problem = problem;
+    }
+
+    public String getProblemCode() {
+        return problemCode;
+    }
+
+    public void setProblemCode(String problemCode) {
+        this.problemCode = problemCode;
+    }
+
+    public String getPriority() {
+        return priority;
+    }
+
+    public void setPriority(String priority) {
+        this.priority = priority;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_PROBLEM.PROBLEM.tag)) {
+            init_problem = value;
+            setProblem(value);
+        } else if (tag_name.equals(CADDataEnums.INC_PROBLEM.CODE.tag)) {
+            init_problemCode = value;
+            setProblemCode(value);
+        } else if (tag_name.equals(CADDataEnums.INC_PROBLEM.PRIORITY.tag)) {
+            init_priority = value;
+            setPriority(value);
+        }
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/Unit.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/Unit.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/Unit.java	(revision 82)
@@ -0,0 +1,400 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.text.SimpleDateFormat;
+import java.util.Vector;
+
+import tmcsim.client.cadclientgui.enums.UnitStatusEnums;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.UNIT_TAGS;
+import tmcsim.client.cadclientgui.screens.ScreenManager;
+
+/**
+ * This class holds all the data for a unit Object.
+ * 
+ * @author Vincent
+ * 
+ */
+public class Unit {
+
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_id = "";
+    private String init_masterInc = "";
+    private String init_status  = "";
+    private String init_oos  = "";
+    private String init_type  = "";
+    private String init_currentLocation  = "";
+    private String init_destination  = "";
+    private String init_misc  = "";
+    private String init_stack  = "";
+    private String init_area  = "";
+    private String init_badge  = "";
+    private String init_officer  = "";
+    private int init_timer  = 0;
+    private String init_office  = "";
+    private String init_p  = "";
+    private String init_agy  = "";
+    private String init_alias  = "";
+    private UnitStatusEnums init_unitStatus = null;
+    
+    private String id;
+    private String masterInc;
+    private String unitNum;
+    private String status;
+    private String oos;
+    private String type;
+    private String currentLocation;
+    private String destination;
+    private String misc;
+    private String stack;
+    private String area;
+    private String badge;
+    private String officer;
+    private int timer;
+    private String office;
+    private String p;
+    private String agy;
+    private String alias;
+    private UnitStatusEnums unitStatus;
+    private int assignedIncidentId; // -1 means not assigned
+
+    private Vector<Object> toTableVector;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public Unit(String unitNum) {
+        this.unitNum = unitNum;
+        id = "";
+        masterInc = "";
+        status = "";
+        oos = "";
+        type = "";
+        currentLocation = "";
+        destination = "";
+        misc = "";
+        stack = "";
+        area = "";
+        badge = "";
+        officer = "";
+        timer = 0;
+        office = "";
+        p = "";
+        agy = "";
+        alias = "";
+        unitStatus = UnitStatusEnums.Assignable;
+        assignedIncidentId = -1; // Negative means not assigned
+
+        toTableVector = new Vector<Object>();
+    }
+
+    public void resetCADDataSimulation(){
+        id = init_id;
+        masterInc = init_masterInc;
+        status = init_status;
+        oos = init_oos;
+        type = init_type;
+        currentLocation = init_currentLocation;
+        destination = init_destination;
+        misc = init_misc;
+        stack = init_stack;
+        area = init_area;
+        badge = init_badge;
+        officer = init_officer;
+        timer = init_timer;
+        office = init_office;
+        p = init_p;
+        agy = init_agy;
+        alias = init_alias;
+        if(init_unitStatus == null){
+            unitStatus = UnitStatusEnums.Assignable;
+        }else{
+            unitStatus = init_unitStatus;
+        }
+        assignedIncidentId = -1; // Negative means not assigned
+    }
+    
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getMasterInc() {
+        return masterInc;
+    }
+
+    public void setMasterInc(String masterInc) {
+        this.masterInc = masterInc;
+    }
+
+    public String getUnitNum() {
+        return unitNum;
+    }
+
+    public void setUnitNum(String unitNum) {
+        this.unitNum = unitNum;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getOos() {
+        return oos;
+    }
+
+    public void setOos(String oos) {
+        this.oos = oos;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getCurrentLocation() {
+        return currentLocation;
+    }
+
+    public void setCurrentLocation(String currentLocation) {
+        this.currentLocation = currentLocation;
+    }
+
+    public String getDestination() {
+        return destination;
+    }
+
+    public void setDestination(String destination) {
+        this.destination = destination;
+    }
+
+    public String getMisc() {
+        return misc;
+    }
+
+    public void setMisc(String misc) {
+        this.misc = misc;
+    }
+
+    public String getStack() {
+        return stack;
+    }
+
+    public void setStack(String stack) {
+        this.stack = stack;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    public String getBadge() {
+        return badge;
+    }
+
+    public void setBadge(String badge) {
+        this.badge = badge;
+    }
+
+    public String getOfficer() {
+        return officer;
+    }
+
+    public void setOfficer(String officer) {
+        this.officer = officer;
+    }
+
+    public int getTimer() {
+        return timer;
+    }
+
+    public void setTimer(int timer) {
+        this.timer = timer;
+    }
+
+    public String getOffice() {
+        return office;
+    }
+
+    public void setOffice(String office) {
+        this.office = office;
+    }
+
+    public String getP() {
+        return p;
+    }
+
+    public void setP(String p) {
+        this.p = p;
+    }
+
+    public String getAgy() {
+        return agy;
+    }
+
+    public void setAgy(String agy) {
+        this.agy = agy;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    public UnitStatusEnums getUnitStatus() {
+        return unitStatus;
+    }
+
+    public void setUnitStatus(UnitStatusEnums unitStatus) {
+        this.unitStatus = unitStatus;
+    }
+
+    public int getAssignedIncidentId() {
+        return assignedIncidentId;
+    }
+
+    public void setAssignedIncidentId(int id) {
+        this.assignedIncidentId = id;
+    }
+
+    public void resetAssignedIncidentId() {
+        id = "";
+        unitStatus = UnitStatusEnums.Assignable;
+        this.assignedIncidentId = -1; // represents not assigned
+    }
+
+    public Vector<Object> toVector() {
+        toTableVector.clear();
+
+        if (assignedIncidentId >= 0) {
+            id = ((Integer) assignedIncidentId).toString();
+        }
+        toTableVector.add(id);
+        toTableVector.add(masterInc);
+        toTableVector.add(unitNum);
+        toTableVector.add(status);
+        toTableVector.add(oos);
+        toTableVector.add(type);
+        toTableVector.add(currentLocation);
+        toTableVector.add(destination);
+        toTableVector.add(misc);
+        toTableVector.add(stack);
+        toTableVector.add(area);
+        toTableVector.add(badge);
+        toTableVector.add(officer);
+        toTableVector.add(intToHHMMSS(timer));
+        toTableVector.add(office);
+        toTableVector.add(p);
+        toTableVector.add(agy);
+        toTableVector.add(alias);
+        toTableVector.add(unitStatus);
+        return toTableVector;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.ScriptHandler.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(UNIT_TAGS.ID.tag)) {
+            init_id = value;
+            setId(value);
+        }
+        if (tag_name.equals(UNIT_TAGS.STATUS.tag)) {
+            init_status = value;
+            setStatus(value);
+        } else if (tag_name.equals(UNIT_TAGS.MASTER_INC_NUM.tag)) {
+            init_masterInc = value;
+            setMasterInc(value);
+        } else if (tag_name.equals(UNIT_TAGS.OOS.tag)) {
+            init_oos = value;
+            setOos(value);
+        } else if (tag_name.equals(UNIT_TAGS.TYPE.tag)) {
+            init_type = value;
+            setType(value);
+        } else if (tag_name.equals(UNIT_TAGS.CURR_LOC.tag)) {
+            init_currentLocation = value;
+            setCurrentLocation(value);
+        } else if (tag_name.equals(UNIT_TAGS.DESTINATION.tag)) {
+            init_destination = value;
+            setDestination(value);
+        } else if (tag_name.equals(UNIT_TAGS.MISC_INFO.tag)) {
+            init_misc = value;
+            setMisc(value);
+        } else if (tag_name.equals(UNIT_TAGS.STACK.tag)) {
+            init_stack = value;
+            setStack(value);
+        } else if (tag_name.equals(UNIT_TAGS.AREA.tag)) {
+            init_area = value;
+            setArea(value);
+        } else if (tag_name.equals(UNIT_TAGS.OFFICER.tag)) {
+            init_officer = value;
+            setOfficer(value);
+        } else if (tag_name.equals(UNIT_TAGS.BADGE_NUM.tag)) {
+            init_badge = value;
+            setBadge(value);
+        } else if (tag_name.equals(UNIT_TAGS.TIMER.tag)) {
+            init_timer = Integer.parseInt(value);
+            setTimer(Integer.parseInt(value));
+        } else if (tag_name.equals(UNIT_TAGS.OFFICE.tag)) {
+            init_office = value;
+            setOffice(value);
+        } else if (tag_name.equals(UNIT_TAGS.P.tag)) {
+            init_p = value;
+            setP(value);
+        } else if (tag_name.equals(UNIT_TAGS.AGY.tag)) {
+            init_agy = value;
+            setAgy(value);
+        } else if (tag_name.equals(UNIT_TAGS.ALIAS.tag)) {
+            init_alias = value;
+            setAlias(value);
+        } else if (tag_name.equals(UNIT_TAGS.UNIT_STATUS.tag)) {
+            init_unitStatus = UnitStatusEnums.valueOf(value);
+            setUnitStatus(UnitStatusEnums.valueOf(value));
+        }
+
+    }
+
+    public String intToHHMMSS(int time) {
+        String hhmmss = "";
+        int hms;
+
+        hms = time / 3600;
+        time = time % 3600;
+        hhmmss = hhmmss.concat(((Integer) hms).toString() + ":");
+
+        hms = time / 60;
+        time = time % 60;
+        hhmmss = hhmmss.concat(((Integer) hms).toString() + ":"
+                + ((Integer) time).toString());
+
+        return hhmmss;
+    }
+
+    public void TimerMinusSecond() {
+        if (timer > 0) {
+            this.timer--;
+        }
+    }
+
+    public String getTimerInString() {
+        return intToHHMMSS(timer);
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentCaller.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentCaller.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentCaller.java	(revision 82)
@@ -0,0 +1,99 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentCaller implements Serializable {
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_callerType = "";
+    private String init_callerName = "";
+    private String init_phone = "";
+    private String init_ext = "";
+    
+    private String callerType;
+    private String callerName;
+    private String phone;
+    private String ext;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentCaller(String type, String name) {
+        setCallerType(type);
+        setCallerName(name);
+    }
+
+    public IncidentCaller() {
+        callerType = "";
+        callerName = "";
+    }
+    
+    public void resetCADDataSimulation(){
+        callerType = init_callerType;
+        callerName = init_callerName;
+        phone = init_phone;
+        ext = init_ext;
+    }
+
+    public String getCallerType() {
+        return callerType;
+    }
+
+    public void setCallerType(String callerType) {
+        this.callerType = callerType;
+    }
+
+    public String getCallerName() {
+        return callerName;
+    }
+
+    public void setCallerName(String callerName) {
+        this.callerName = callerName;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getExt() {
+        return ext;
+    }
+
+    public void setExt(String ext) {
+        this.ext = ext;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_CALLER.TYPE.tag)) {
+            init_callerType = value;
+            setCallerType(value);
+        } else if (tag_name.equals(CADDataEnums.INC_CALLER.NAME.tag)) {
+            init_callerName = value;
+            setCallerName(value);
+        } else if (tag_name.equals(CADDataEnums.INC_CALLER.PHONE.tag)) {
+            init_phone = value;
+            setPhone(value);
+        } else if (tag_name.equals(CADDataEnums.INC_CALLER.EXT.tag)) {
+            init_ext = value;
+            setExt(value);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/CADData.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/CADData.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/CADData.java	(revision 82)
@@ -0,0 +1,404 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.Timer;
+import javax.swing.table.DefaultTableModel;
+import tmcsim.client.cadclientgui.enums.IncidentEnums;
+import tmcsim.client.cadclientgui.enums.TableHeaders;
+import tmcsim.client.cadclientgui.enums.UnitStatusEnums;
+
+/**
+ * This class holds the data for all the units and incidents. It is responsible
+ * for sending out data to all the screens.
+ *
+ * @author Vincent
+ *
+ */
+public class CADData implements Serializable
+{
+    private final int ONE_SECOND = 1000;
+    private static Vector<Unit> units;
+    private static Vector<Incident> incidents;
+    private static Vector<String> assignedIncidentsHeaders;
+    private static Vector<String> unitStatusHeaders;
+    private static Vector<String> pendingIncidentsHeaders;
+    private static Vector<String> incidentEditorHeaders;
+    private static Vector<Object> toUnitTableVector;
+    private static Vector<Object> toPendingTableVector;
+    private static Vector<Object> toAssignedTableVector;
+    private static Vector<Object> toIncidentEditorVector;
+    private static Vector<Object> toCommentsNotesVector;
+    private static DefaultTableModel pendingIncidentsTableModel;
+    private static DefaultTableModel unitStatusTableModel;
+    private static DefaultTableModel assignedIncidentsTableModel;
+    private static DefaultTableModel incidentEditorModel;
+    private static Logger logger = Logger.getLogger("tmcsim.client");
+
+    public CADData()
+    {
+        units = new Vector<Unit>();
+        incidents = new Vector<Incident>();
+
+        toUnitTableVector = new Vector<Object>();
+        toPendingTableVector = new Vector<Object>();
+        toAssignedTableVector = new Vector<Object>();
+        toIncidentEditorVector = new Vector<Object>();
+        toCommentsNotesVector = new Vector<Object>();
+        assignedIncidentsHeaders = new Vector<String>();
+        pendingIncidentsHeaders = new Vector<String>();
+        unitStatusHeaders = new Vector<String>();
+        incidentEditorHeaders = new Vector<String>();
+        initializeAssignedIncidentsSettings();
+        initializeUnitStatusSettings();
+        initializePendingIncidentsSettings();
+        initializeIncidentEditorSettings();
+
+        handleUpdateTimes();
+    }
+
+    public void clearData()
+    {
+        units = new Vector<Unit>();
+        incidents = new Vector<Incident>();
+    }
+
+    public void resetSimulation()
+    {
+        for (Incident inc : incidents)
+        {
+            inc.resetCADDataSimulation();
+        }
+        for (Unit unit : units)
+        {
+            unit.resetCADDataSimulation();
+        }
+    }
+
+    private void initializeAssignedIncidentsSettings()
+    {
+        Collections
+                .addAll(assignedIncidentsHeaders, TableHeaders.ASSIGNED_INCIDENTS_HEADERS);
+        assignedIncidentsTableModel = new DefaultTableModel()
+        {
+            public boolean isCellEditable(int row, int column)
+            {
+                return false;// This causes all cells to be not editable
+            }
+        };
+        assignedIncidentsTableModel
+                .setColumnIdentifiers(TableHeaders.ASSIGNED_INCIDENTS_HEADERS);
+    }
+
+    private void initializeUnitStatusSettings()
+    {
+        Collections.addAll(unitStatusHeaders, TableHeaders.UNIT_STATUS_HEADERS);
+        unitStatusTableModel = new DefaultTableModel()
+        {
+            public boolean isCellEditable(int row, int column)
+            {
+                return false;// This causes all cells to be not editable
+            }
+        };
+        unitStatusTableModel.setColumnIdentifiers(TableHeaders.UNIT_STATUS_HEADERS);
+    }
+
+    private void initializeIncidentEditorSettings()
+    {
+        Collections.addAll(incidentEditorHeaders, TableHeaders.INCIDENT_EDITOR_HEADERS);
+        incidentEditorModel = new DefaultTableModel()
+        {
+            public boolean isCellEditable(int row, int column)
+            {
+                return false;// This causes all cells to be not editable
+            }
+        };
+        incidentEditorModel.setColumnIdentifiers(TableHeaders.INCIDENT_EDITOR_HEADERS);
+    }
+
+    private void initializePendingIncidentsSettings()
+    {
+        Collections.addAll(pendingIncidentsHeaders, TableHeaders.PENDING_INCIDENTS_HEADERS);
+        pendingIncidentsTableModel = new DefaultTableModel()
+        {
+            public boolean isCellEditable(int row, int column)
+            {
+                return false;// This causes all cells to be not editable
+            }
+        };
+        pendingIncidentsTableModel
+                .setColumnIdentifiers(TableHeaders.PENDING_INCIDENTS_HEADERS);
+    }
+
+    /**
+     * Obtains the list of units from the XML.
+     *
+     * @param unit the new list of units.
+     */
+    public void setUnitsFromXML(Vector<Unit> unit)
+    {
+        units = unit;
+    }
+
+    /**
+     * Obtains the list of incidents from the XML.
+     *
+     * @param incident the new list of incidents.
+     */
+    public void setIncidentsFromXML(Vector<Incident> incident)
+    {
+        incidents = incident;
+    }
+
+    /**
+     * Returns the specified unitNum
+     */
+    public Unit getUnit(String unitNum)
+    {
+        for (int i = 0; i < units.size(); i++)
+        {
+            if (units.get(i).getUnitNum().equals(unitNum))
+            {
+                return units.get(i);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Check if it contains an incident with the specified Id.
+     */
+    public boolean checkForValidId(int incidentId)
+    {
+        for (int i = 0; i < incidents.size(); i++)
+        {
+            if (incidents.get(i).getLogNum() == incidentId)
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Uses an Incident's masterInc to look up its corresponding ID.
+     *
+     * @param masterInc the Incident's masterInc
+     * @return the Incident's ID, -1 if invalid masterInc
+     */
+    public int getIncidentId(String masterInc)
+    {
+        for (int i = 0; i < incidents.size(); i++)
+        {
+            if (incidents.get(i).getMasterInc().equals(masterInc))
+            {
+                return incidents.get(i).getLogNum();
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Returns the specified incident
+     */
+    public Incident getIncident(int incidentId)
+    {
+        for (int i = 0; i < incidents.size(); i++)
+        {
+            if (incidents.get(i).getLogNum() == incidentId)
+            {
+                return incidents.get(i);
+            }
+        }
+        logger.logp(Level.INFO, "CADData",
+                "getIncident", "id=" + incidentId, "incident not found.");
+        return new Incident(0, "", 0);
+    }
+
+    /**
+     * Sends all the objects for UnitStatus
+     *
+     * @return DefaultTableModel for UnitStatus
+     */
+    public DefaultTableModel tableForUnitStatus()
+    {
+        toUnitTableVector.clear();
+        for (int i = 0; i < units.size(); i++)
+        {
+            toUnitTableVector.add(units.get(i).toVector());
+        }
+        // Exception occurred here: http://pastebin.com/fvifM5i8
+        unitStatusTableModel
+                .setDataVector(toUnitTableVector, unitStatusHeaders);
+        return unitStatusTableModel;
+    }
+
+    /**
+     * Sends all the objects for AssignedIncidents
+     *
+     * @return DefaultTableModel for AssignedIncidents
+     */
+    public DefaultTableModel tableForAssignedIncidents()
+    {
+        toAssignedTableVector.clear();
+        for (int i = 0; i < incidents.size(); i++)
+        {
+            if (incidents.get(i).hasOccured()
+                    && incidents.get(i).getIncidentStatus() == IncidentEnums.Assigned)
+            {
+                toAssignedTableVector.add(incidents.get(i)
+                        .toVectorForAssignedIncidents());
+            }
+        }
+        assignedIncidentsTableModel.setDataVector(toAssignedTableVector,
+                assignedIncidentsHeaders);
+        return assignedIncidentsTableModel;
+    }
+
+    /**
+     * Sends all the objects for PendingIncidents
+     *
+     * @return DefaultTableModel for PendingIncidents
+     */
+    public DefaultTableModel tableForPendingIncidents()
+    {
+        toPendingTableVector.clear();
+        for (int i = 0; i < incidents.size(); i++)
+        {
+            if (incidents.get(i).hasOccured()
+                    && incidents.get(i).getIncidentStatus() == IncidentEnums.Pending)
+            {
+                toPendingTableVector.add(incidents.get(i)
+                        .toVectorForPendingIncidents());
+            }
+        }
+        pendingIncidentsTableModel.setDataVector(toPendingTableVector,
+                pendingIncidentsHeaders);
+        return pendingIncidentsTableModel;
+    }
+
+    /**
+     * Sends all the objects for IncidentEditor
+     *
+     * @return DefaultTableModel for IncidentEditor
+     */
+    public DefaultTableModel tableForIncidentEditor()
+    {
+        toIncidentEditorVector.clear();
+        for (int i = 0; i < incidents.size(); i++)
+        {
+            if (incidents.get(i).hasOccured())
+            {
+                toIncidentEditorVector.add(incidents.get(i)
+                        .toVectorForIncidentEditor());
+            }
+        }
+        incidentEditorModel.setDataVector(toIncidentEditorVector,
+                incidentEditorHeaders);
+        return incidentEditorModel;
+    }
+
+    /**
+     * Sets up a timer to subtract one from the unit's timer every second.
+     */
+    public void handleUpdateTimes()
+    {
+        Timer timer = new Timer(ONE_SECOND, new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                for (int i = 0; i < units.size(); i++)
+                {
+                    units.get(i).TimerMinusSecond();
+                }
+            }
+        });
+        timer.start();
+    }
+
+    /**
+     * Assigns the specified unit to the specified incident and updates
+     * information in both screens
+     *
+     * @param unitNum the unit being assigned
+     * @param incidentNum the incident being assigned to
+     * @param primary whether or not the assigned unit is the primary unit
+     */
+    public void unitAssignedToIncident(String unitNum, int incidentNum, boolean primary)
+    {
+        if (primary)
+        {
+            getIncident(incidentNum).setPrimaryAssignedUnitNum(unitNum);
+            getIncident(incidentNum).setIncidentStatus(IncidentEnums.Assigned);
+        }
+        else
+        {
+            getIncident(incidentNum).addAssignedUnitNum(unitNum);
+        }
+
+        getUnit(unitNum).setAssignedIncidentId(incidentNum);
+        getUnit(unitNum).setMasterInc(getIncident(incidentNum).getMasterInc());
+        getUnit(unitNum).setStatus("ENRT");
+        getUnit(unitNum).setUnitStatus(UnitStatusEnums.Enroute);
+        getUnit(unitNum).setType(getIncident(incidentNum).getAdditionalInfo().getType());
+        getUnit(unitNum).setDestination(getIncident(incidentNum).getIncidentLocation().getAddress());
+        getUnit(unitNum).setArea(getIncident(incidentNum).getIncidentLocation().getArea());
+        getUnit(unitNum).setP(getIncident(incidentNum).getP());
+    }
+
+    /**
+     * Updates information in both incident and unit screens for when a unit has
+     * arrived at scene aka that the unit status is "10-97"
+     *
+     * @param unitNum the unit which arrived at the scene
+     */
+    public void unitArrivedAtIncidentScene(String unitNum, int incidentNum, boolean primary)
+    {
+        if (getUnit(unitNum).getAssignedIncidentId() != incidentNum)
+        {
+            if (primary)
+            {
+                getIncident(incidentNum).setPrimaryAssignedUnitNum(unitNum);
+                getIncident(incidentNum).setIncidentStatus(IncidentEnums.Assigned);
+            }
+            else
+            {
+                getIncident(incidentNum).addAssignedUnitNum(unitNum);
+            }
+            getUnit(unitNum).setAssignedIncidentId(incidentNum);
+            getUnit(unitNum).setMasterInc(getIncident(incidentNum).getMasterInc());
+            getUnit(unitNum).setType(getIncident(incidentNum).getAdditionalInfo().getType());
+            getUnit(unitNum).setDestination(getIncident(incidentNum).getIncidentLocation().getAddress());
+            getUnit(unitNum).setArea(getIncident(incidentNum).getIncidentLocation().getArea());
+            getUnit(unitNum).setP(getIncident(incidentNum).getP());
+        }
+        getUnit(unitNum).setStatus("10-97");
+        getUnit(unitNum).setUnitStatus(UnitStatusEnums.Arrived);
+        getUnit(unitNum).setCurrentLocation(getUnit(unitNum).getDestination());
+    }
+
+    /**
+     * Updates information in both incident and unit screens for when a unit has
+     * become available again aka that the unit status is "10-98"
+     *
+     * @param unitNum the unit which arrived at the scene
+     */
+    public void unitAvailable(String unitNum)
+    {
+        getIncident(getUnit(unitNum).getAssignedIncidentId()).removeAssignedUnitNum(unitNum);
+
+        getUnit(unitNum).setStatus("10-98");
+        getUnit(unitNum).setUnitStatus(UnitStatusEnums.Assignable);
+        getUnit(unitNum).setAssignedIncidentId(-1);
+        getUnit(unitNum).setMasterInc("");
+        getUnit(unitNum).setType("");
+        getUnit(unitNum).setDestination("");
+        getUnit(unitNum).setP("");
+
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentActivities.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentActivities.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentActivities.java	(revision 82)
@@ -0,0 +1,112 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentActivities implements Serializable {
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_vehicle = "";
+    private String init_activity = "";
+    private String init_location = "";
+    private String init_comment = "";
+    private String init_disp = "";
+    
+    private String vehicle;
+    private String activity;
+    private String location;
+    private String comment;
+    private String disp;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentActivities() {
+        vehicle = "";
+        activity = "";
+        location = "";
+        comment = "";
+        disp = "";
+    }
+    
+    public void resetCADDataSimulation(){
+        vehicle = init_vehicle;
+        activity = init_activity;
+        location = init_location;
+        comment = init_comment;
+        disp = init_disp;
+    }
+
+    public String getVehicle() {
+        return vehicle;
+    }
+
+    public void setVehicle(String vehicle) {
+        this.vehicle = vehicle;
+    }
+
+    public String getActivity() {
+        return activity;
+    }
+
+    public void setActivity(String activity) {
+        this.activity = activity;
+    }
+
+    public String getLocation() {
+        return location;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+
+    public String getDisp() {
+        return disp;
+    }
+
+    public void setDisp(String disp) {
+        this.disp = disp;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_ACTIVITIES.VEHICLE.tag)) {
+            init_vehicle = value;
+            setVehicle(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ACTIVITIES.ACTIVITY.tag)) {
+            init_activity = value;
+            setActivity(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ACTIVITIES.LOCATION.tag)) {
+            init_location = value;
+            setLocation(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ACTIVITIES.COMMENT.tag)) {
+            init_comment = value;
+            setComment(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ACTIVITIES.DISP.tag)) {
+            init_disp = value;
+            setDisp(value);
+        }
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentLocation.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentLocation.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentLocation.java	(revision 82)
@@ -0,0 +1,292 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADScriptTags.INCIDENT_LOCATION_TAGS;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentLocation implements Serializable {
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_address = "";
+    private String init_loc = "";
+    private String init_city = "";
+    private String init_county = "";
+    private String init_state = "";
+    private String init_zip = "";
+    private String init_beat = "";
+    private String init_area = "";
+    private String init_sector = "";
+    private String init_sectorCode = "";
+    private String init_division = "";
+    private String init_apt = "";
+    private String init_building = "";
+    private String init_crossSt = "";
+    private String init_law = "";
+    private String init_fire = "";
+    private String init_ems = "";
+    
+    private String address;
+    private String loc;
+    private String city;
+    private String county;
+    private String state;
+    private String zip;
+    private String beat;
+    private String area;
+    private String sector;
+    private String sectorCode;
+    private String division;
+    private String apt;
+    private String building;
+    private String crossSt;
+    private String law;
+    private String fire;
+    private String ems;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentLocation() {
+        address = "";
+        loc = "";
+        city = "";
+        county = "";
+        state = "";
+        zip = "";
+        beat = "";
+        area = "";
+        sector = "";
+        sectorCode = "";
+        division = "";
+        apt = "";
+        building = "";
+        crossSt = "";
+        law = "";
+        fire = "";
+        ems = "";
+    }
+
+    public void resetCADDataSimulation(){
+        address = init_address;
+        loc = init_loc;
+        city = init_city;
+        county = init_county;
+        state = init_state;
+        zip = init_zip;
+        beat = init_beat;
+        area = init_area;
+        sector = init_sector;
+        sectorCode = init_sectorCode;
+        division = init_division;
+        apt = init_apt;
+        building = init_building;
+        crossSt = init_crossSt;
+        law = init_law;
+        fire = init_fire;
+        ems = init_ems;
+    }
+    
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getLoc() {
+        return loc;
+    }
+
+    public void setLoc(String loc) {
+        this.loc = loc;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getCounty() {
+        return county;
+    }
+
+    public void setCounty(String county) {
+        this.county = county;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getZip() {
+        return zip;
+    }
+
+    public void setZip(String zip) {
+        this.zip = zip;
+    }
+
+    public String getBeat() {
+        return beat;
+    }
+
+    public void setBeat(String beat) {
+        this.beat = beat;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    public String getSector() {
+        return sector;
+    }
+
+    public void setSector(String sector) {
+        this.sector = sector;
+    }
+
+    public String getSectorCode() {
+        return sectorCode;
+    }
+
+    public void setSectorCode(String sectorCode) {
+        this.sectorCode = sectorCode;
+    }
+
+    public String getDivision() {
+        return division;
+    }
+
+    public void setDivision(String division) {
+        this.division = division;
+    }
+
+    public String getApt() {
+        return apt;
+    }
+
+    public void setApt(String apt) {
+        this.apt = apt;
+    }
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getCrossSt() {
+        return crossSt;
+    }
+
+    public void setCrossSt(String crossSt) {
+        this.crossSt = crossSt;
+    }
+
+    public String getLaw() {
+        return law;
+    }
+
+    public void setLaw(String law) {
+        this.law = law;
+    }
+
+    public String getFire() {
+        return fire;
+    }
+
+    public void setFire(String fire) {
+        this.fire = fire;
+    }
+
+    public String getEms() {
+        return ems;
+    }
+
+    public void setEms(String ems) {
+        this.ems = ems;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(INCIDENT_LOCATION_TAGS.ADDRESS.tag)) {
+            init_address = value;
+            setAddress(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.LOC.tag)) {
+            init_loc = value;
+            setLoc(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.CITY.tag)) {
+            init_city = value;
+            setCity(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.COUNTY.tag)) {
+            init_county = value;
+            setCounty(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.STATE.tag)) {
+            init_state = value;
+            setState(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.ZIP.tag)) {
+            init_zip = value;
+            setZip(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.BEAT.tag)) {
+            init_beat = value;
+            setBeat(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.AREA.tag)) {
+            init_area = value;
+            setArea(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.SECTOR.tag)) {
+            init_sector = value;
+            setSector(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.SECTOR_CODE.tag)) {
+            init_sectorCode = value;
+            setSectorCode(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.DIVISION.tag)) {
+            init_division = value;
+            setDivision(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.APT.tag)) {
+            init_apt = value;
+            setApt(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.BUILDING.tag)) {
+            init_building = value;
+            setBuilding(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.CROSS_STREET.tag)) {
+            init_crossSt = value;
+            setCrossSt(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.LAW.tag)) {
+            init_law = value;
+            setLaw(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.FIRE.tag)) {
+            init_fire = value;
+            setFire(value);
+        } else if (tag_name.equals(INCIDENT_LOCATION_TAGS.EMS.tag)) {
+            init_ems = value;
+            setEms(value);
+        }
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentTransportInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentTransportInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentTransportInfo.java	(revision 82)
@@ -0,0 +1,87 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+/**
+ * NOT IN USE. Originally meant for TransportInfo Tab in IncidentViewer.
+ * This class is a
+ * further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentTransportInfo implements Serializable {
+    private String name;
+    private String toCity;
+    private String toLocation;
+    private String toState;
+
+    private static enum TRANSPORT_INFO_ENUMS {
+        NAME("NAME"), TO_CITY("TO_CITY"), TO_LOCATION("TO_LOCATION"), TO_STATE(
+                "TO_STATE");
+
+        public String tag;
+
+        private TRANSPORT_INFO_ENUMS(String t) {
+            tag = t;
+        }
+    }
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentTransportInfo() {
+        name = "";
+        toCity = "";
+        toLocation = "";
+        toState = "";
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getToCity() {
+        return toCity;
+    }
+
+    public void setToCity(String toCity) {
+        this.toCity = toCity;
+    }
+
+    public String getToLocation() {
+        return toLocation;
+    }
+
+    public void setToLocation(String toLocation) {
+        this.toLocation = toLocation;
+    }
+
+    public String getToState() {
+        return toState;
+    }
+
+    public void setToState(String toState) {
+        this.toState = toState;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(TRANSPORT_INFO_ENUMS.NAME.tag)) {
+            setName(value);
+        } else if (tag_name.equals(TRANSPORT_INFO_ENUMS.TO_CITY.tag)) {
+            setToCity(value);
+        } else if (tag_name.equals(TRANSPORT_INFO_ENUMS.TO_LOCATION.tag)) {
+            setToLocation(value);
+        } else if (tag_name.equals(TRANSPORT_INFO_ENUMS.TO_STATE.tag)) {
+            setToState(value);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/ChangeLog.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/ChangeLog.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/ChangeLog.java	(revision 82)
@@ -0,0 +1,66 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums.EditCommand;
+
+/**
+ * Each changelog holds enough data to remember which object was changed and
+ * what was changed, so that upon close, the user can choose to keep or forget
+ * the changes.
+ * 
+ * @author Vincent
+ * 
+ */
+public class ChangeLog implements Serializable {
+
+    public EditCommand command;
+    public String listTitle;
+    public int id;
+    public String newValue;
+    public CardfileDataObject newCardfileObject;
+    public String[] tableFields = new String[4];
+    public String timeStamp;
+
+    // creates an edit log to modify any one field of a CardfileDataObject
+    public ChangeLog(EditCommand command, String listTitle, int id,
+            String newValue) {
+        this.command = command;
+        this.listTitle = listTitle;
+        this.id = id;
+        this.newValue = newValue;
+    }
+
+    // creates an add log for a CardfileDataObject
+    public ChangeLog(EditCommand command, String listTitle,
+            CardfileDataObject newObj) {
+        this.command = command;
+        this.listTitle = listTitle;
+        this.newCardfileObject = newObj;
+    }
+
+    // create a delete log for a CardfileDataObject
+    public ChangeLog(EditCommand command, String listTitle, int id) {
+        this.command = command;
+        this.listTitle = listTitle;
+        this.id = id;
+    }
+
+    // create an add log for a CardfileDataObject's table
+    public ChangeLog(EditCommand command, String listTitle, int id,
+            String[] tableFields) {
+        this.command = command;
+        this.listTitle = listTitle;
+        this.id = id;
+        this.tableFields = tableFields;
+    }
+
+    // create a delete log for a CardfileDataObject's table
+    public ChangeLog(EditCommand command, String listTitle, String timeStamp,
+            int id) {
+        this.command = command;
+        this.listTitle = listTitle;
+        this.timeStamp = timeStamp;
+        this.id = id;
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/CardfileDataObject.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/CardfileDataObject.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/CardfileDataObject.java	(revision 82)
@@ -0,0 +1,137 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+
+import javax.swing.table.DefaultTableModel;
+
+public class CardfileDataObject implements Serializable {
+
+    private int idTag;
+
+    private String category;
+    private String name;
+    private String address;
+    private String city;
+    private String state;
+    private String zip;
+    private String phone1;
+    private String phone2;
+    private String fax;
+    private LinkedList<String[]> commentsTableFields;
+
+    public CardfileDataObject(String category, String name, int idTag) {
+        this.idTag = idTag;
+        this.category = category;
+        this.name = name;
+        address = "";
+        city = "";
+        state = "";
+        zip = "";
+        phone1 = "";
+        phone2 = "";
+        fax = "";
+        commentsTableFields = new LinkedList<String[]>();
+    }
+
+    public int getId() {
+        return idTag;
+    }
+
+    public String getCategory() {
+        return category;
+    }
+    
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setZip(String zip) {
+        this.zip = zip;
+    }
+
+    public String getZip() {
+        return zip;
+    }
+
+    public void setPhone1(String phone1) {
+        this.phone1 = phone1;
+    }
+
+    public String getPhone1() {
+        return phone1;
+    }
+
+    public void setPhone2(String phone2) {
+        this.phone2 = phone2;
+    }
+
+    public String getPhone2() {
+        return phone2;
+    }
+
+    public void setFax(String fax) {
+        this.fax = fax;
+    }
+
+    public String getFax() {
+        return fax;
+    }
+
+    public LinkedList<String[]> getCommentsTableFields() {
+        return commentsTableFields;
+    }
+
+    public void addComment(String[] fields) {
+        commentsTableFields.add(fields);
+    }
+
+    public void removeComment(String timeStamp) {
+        for (int i = 0; i < commentsTableFields.size(); i++) {
+            String[] temp = commentsTableFields.get(i);
+            if (temp[1].equals(timeStamp)) {
+                commentsTableFields.remove(i);
+                return;
+            }
+        }
+    }
+
+    public boolean equals(Object obj) {
+        if (obj.getClass() != getClass()) {
+            return false;
+        }
+        if (idTag != ((CardfileDataObject) obj).idTag) {
+            return false;
+        }
+        return true;
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentVehicle.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentVehicle.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentVehicle.java	(revision 82)
@@ -0,0 +1,90 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+
+import javax.swing.table.DefaultTableModel;
+
+/**
+ * NOTE THIS CLASS IS CURRENTLY UNUSED. This class is a
+ * further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentVehicle implements Serializable {
+
+    private LinkedList<String> plate;
+    private LinkedList<String> state;
+    private LinkedList<String> type;
+    private LinkedList<String> year;
+    private DefaultTableModel licenseTable;
+
+    private static enum RESPONSE_ENUMS {
+        PLATE("PLATE"), STATE("STATE"), TYPE("TYPE"), YEAR("YEAR");
+
+        public String tag;
+
+        private RESPONSE_ENUMS(String t) {
+            tag = t;
+        }
+    }
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentVehicle() {
+        plate = new LinkedList<String>();
+        state = new LinkedList<String>();
+        type = new LinkedList<String>();
+        year = new LinkedList<String>();
+        licenseTable = new DefaultTableModel();
+        licenseTable.setColumnIdentifiers(new String[] { "Plate", "State" });
+    }
+
+    public LinkedList<String> getPlate() {
+        return plate;
+    }
+
+    /*
+     * public void addPlate(String plate) { this.plate.add(plate); }
+     */
+
+    public LinkedList<String> getState() {
+        return state;
+    }
+
+    /*
+     * public void addState(String state) { this.state.add(state); }
+     */
+
+    public LinkedList<String> getType() {
+        return type;
+    }
+
+    /*
+     * public void addType(String type){ this.type.add(type); }
+     */
+
+    public LinkedList<String> getYear() {
+        return year;
+    }
+
+    /*
+     * public void addYear(String year){ this.year.add(year); }
+     */
+
+    public DefaultTableModel getLicenseTable() {
+        return licenseTable;
+    }
+
+    public void addVehicleInformation(String plate, String state, String type,
+            String year) {
+        this.plate.add(plate);
+        this.state.add(state);
+        this.type.add(type);
+        this.year.add(year);
+        licenseTable.addRow(new String[] { plate, state });
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/Incident.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/Incident.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/Incident.java	(revision 82)
@@ -0,0 +1,677 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.util.LinkedList;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import java.io.Serializable;
+
+import javax.swing.ImageIcon;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.cadmodels.IncidentEditLog;
+import tmcsim.cadmodels.IncidentInquiryHeader;
+import tmcsim.client.cadclientgui.data.IncidentEvent.EVENT_STATUS;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.CAD_DATA_TAGS;
+import tmcsim.client.cadclientgui.enums.IncidentEnums;
+import tmcsim.common.ParamicsLocation;
+
+/**
+ * This class holds for the data for an incident.
+ * 
+ * @author Vincent
+ * 
+ */
+public class Incident implements Serializable {
+    
+    public Integer logNum;
+    private String masterInc;
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_oau = "";
+    private String init_logTime = "";
+    private String init_p = "";
+    private String init_userData = "";
+    private String init_attachments = "";
+    private String init_rp = "";
+    private String init_ali = "";
+    private String init_rpType = "";
+    private String init_media = "";
+    
+    private ImageIcon alert;
+    private String oau;
+    private String logTime;
+    private String p;
+    private LinkedList<String> assignedUnitNums;
+    private String userData;
+    private String attachments;
+    private String rp;
+    private String ali;
+    private String rpType;
+    private String media;
+    private DefaultTableModel commentsNotesTable;
+    
+    private long startTime;
+    private long secondsIncidentStarted = 0;
+    private boolean incidentOccured = false;
+    public TreeMap<String, ParamicsLocation> locationMap;
+    private Vector<IncidentEvent> eventList = null;
+    public String description;
+    
+    private IncidentLocation incidentLocation;
+    private IncidentCaller incidentCaller;
+    private IncidentProblem problem;
+    private IncidentGeneralInfo genInfo;
+    private IncidentResponse response;
+    private IncidentAdditionalInfo additionalInfo;
+    private IncidentActivities activities;
+    private IncidentCallBacks callBacks;
+    private IncidentEditLog editLog;
+    private IncidentInfo info;
+    private IncidentTimes times;
+    private IncidentTransportInfo transpInfo;
+    private IncidentVehicle incidentVehicle;
+    private IncidentEnums status;
+
+    private Vector<Object> toTableVector;
+
+    public IncidentInquiryHeader header = new IncidentInquiryHeader();
+
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    /*public Incident(int logNum) {
+        masterInc = "";
+        alert = new ImageIcon("images/IncidentPanelsImages/blank.png");
+        oau = "";
+        p = "";
+        description = "";
+        incidentLocation = new IncidentLocation();
+        incidentCaller = new IncidentCaller();
+        problem = new IncidentProblem();
+        genInfo = new IncidentGeneralInfo();
+        assignedUnitNums = new LinkedList<String>();
+        response = new IncidentResponse();
+        additionalInfo = new IncidentAdditionalInfo();
+        activities = new IncidentActivities();
+        callBacks = new IncidentCallBacks();
+        editLog = new IncidentEditLog();
+        info = new IncidentInfo();
+        times = new IncidentTimes();
+        transpInfo = new IncidentTransportInfo();
+        incidentVehicle = new IncidentVehicle();
+        userData = "";
+        attachments = "";
+        status = IncidentEnums.Pending;
+        assignedUnitNums = new LinkedList<String>();
+        rp = "";
+        ali = "";
+        rpType = "";
+        media = "";
+        eventList = new Vector<IncidentEvent>();
+
+        toTableVector = new Vector<Object>();
+
+        commentsNotesTable = new DefaultTableModel() {
+            public boolean isCellEditable(int row, int column) {
+                return false;// This causes all cells to be not editable
+            }
+        };
+        commentsNotesTable.setColumnIdentifiers(new String[] { "Date", "Time",
+                "Initial", "Block", "Comment" });
+
+        setLogNum(logNum);
+    }*/
+
+    public Incident(Integer log, String desc, long start) {
+        logNum = log;
+        description = desc;
+        startTime = start;
+        header      = new IncidentInquiryHeader();      
+        locationMap = new TreeMap<String, ParamicsLocation>();
+        eventList    = new Vector<IncidentEvent>();
+        
+        masterInc = "";
+        alert = new ImageIcon("images/IncidentPanelsImages/blank.png");
+        oau = "";
+        p = "";
+        incidentLocation = new IncidentLocation();
+        incidentCaller = new IncidentCaller();
+        problem = new IncidentProblem();
+        genInfo = new IncidentGeneralInfo();
+        assignedUnitNums = new LinkedList<String>();
+        response = new IncidentResponse();
+        additionalInfo = new IncidentAdditionalInfo();
+        activities = new IncidentActivities();
+        callBacks = new IncidentCallBacks();
+        editLog = new IncidentEditLog();
+        info = new IncidentInfo();
+        times = new IncidentTimes();
+        transpInfo = new IncidentTransportInfo();
+        userData = "";
+        attachments = "";
+        status = IncidentEnums.Pending;
+        assignedUnitNums = new LinkedList();
+        rp = "";
+        ali = "";
+        rpType = "";
+        media = "";
+        eventList = new Vector<IncidentEvent>();
+
+        toTableVector = new Vector<Object>();
+        
+        commentsNotesTable = new DefaultTableModel() {
+            public boolean isCellEditable(int row, int column) {
+                return false;// This causes all cells to be not editable
+            }
+        };
+        commentsNotesTable.setColumnIdentifiers(new String[] { "Date", "Time",
+                "Initial", "Block", "Comment" });
+    }
+
+    /*This method is to be called alongside resetSimulation for true reset.
+     * resetSimulation handles the variables from prior version, while this method resets all the variables
+     * specific to the CADData version. This method is called in the Coordinator following resetSimulation.
+     */
+    public void resetCADDataSimulation(){
+        oau = init_oau;
+        logTime = init_logTime;
+        p = init_p;
+        userData = init_userData;
+        attachments = init_attachments;
+        rp = init_rp;
+        ali = init_ali;
+        rpType = init_rpType;
+        media = init_media;
+        assignedUnitNums.clear();
+        while(commentsNotesTable.getRowCount() > 0){
+            commentsNotesTable.removeRow(0);
+        }
+        
+        incidentLocation.resetCADDataSimulation();
+        incidentCaller.resetCADDataSimulation();
+        problem.resetCADDataSimulation();
+        genInfo.resetCADDataSimulation();
+        response.resetCADDataSimulation();
+        additionalInfo.resetCADDataSimulation();
+        activities.resetCADDataSimulation();
+        callBacks.resetCADDataSimulation();
+        //editLog.resetCADDataSimulation();
+        info.resetCADDataSimulation();
+        //times.resetCADDataSimulation();
+        //transpInfo.resetCADDataSimulation();
+    }
+    
+    public boolean tick(long scriptSeconds) {
+
+        if (scriptSeconds >= startTime && !incidentOccured) {
+            incidentOccured = true;
+            secondsIncidentStarted = scriptSeconds;
+
+            return true;
+        } else
+            return false;
+    }
+
+    public Vector<IncidentEvent> getTriggeredEvents(long simTime) {
+
+        Vector<IncidentEvent> triggered = new Vector<IncidentEvent>();
+
+        if (incidentOccured) {
+            for (IncidentEvent evt : eventList) {
+                if (evt.triggerEvent(secondsIncidentStarted, simTime)) {
+                    triggered.add(evt);
+                }
+            }
+        }
+
+        return triggered;
+    }
+
+    public Vector<IncidentEvent> getCompletedEvents() {
+
+        Vector<IncidentEvent> completed = new Vector<IncidentEvent>();
+
+        for (IncidentEvent evt : eventList) {
+            if (evt.eventStatus == EVENT_STATUS.COMPLETED) {
+                completed.add(evt);
+            }
+        }
+
+        return completed;
+    }
+
+    public Integer getLogNumber() {
+        return logNum;
+    }
+
+    public void manualTrigger(long newtime) {
+        secondsIncidentStarted = newtime;
+        incidentOccured = true;
+    }
+
+    public long getSecondsToStart() {
+        return startTime;
+    }
+
+    public void setSecondsToStart(long newStartTime) {
+        startTime = newStartTime;
+    }
+
+    public Long getIncidentLength() {
+        return eventList.lastElement().secondsToOccurInIncident
+                - eventList.firstElement().secondsToOccurInIncident;
+    }
+
+    public boolean hasOccured() {
+        return incidentOccured;
+    }
+
+    public void resetSimulation() {
+        secondsIncidentStarted = 0;
+        incidentOccured = false;
+
+        for (IncidentEvent ie : eventList)
+            ie.resetSimulation();
+
+    }
+
+    public void addEvent(IncidentEvent newEvent) {
+        newEvent.eventInfo.setHeader(header);
+        eventList.add(newEvent);
+    }
+    
+    public String getMasterInc() {
+        return masterInc;
+    }
+
+    public void setMasterInc(String masterInc) {
+        this.masterInc = masterInc;
+    }
+
+    public int getLogNum() {
+        return logNum;
+    }
+
+    public void setLogNum(int logNum) {
+        this.logNum = logNum;
+    }
+
+    public String getOau() {
+        return oau;
+    }
+
+    public void setOau(String oau) {
+        this.oau = oau;
+    }
+
+    public long getTime() {
+        return startTime;
+    }
+
+    public void setTime(long time) {
+        this.startTime = time;
+    }
+
+    public String getLogTime() {
+        return logTime;
+    }
+
+    public void setLogTime(String logTime) {
+        this.logTime = logTime;
+    }
+    
+    public String getP() {
+        return p;
+    }
+
+    public void setP(String p) {
+        this.p = p;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public IncidentCaller getIncidentCaller() {
+        return incidentCaller;
+    }
+
+    public void setIncidentCaller(IncidentCaller incidentCaller) {
+        this.incidentCaller = incidentCaller;
+    }
+
+    public IncidentLocation getIncidentLocation() {
+        return incidentLocation;
+    }
+
+    public void setIncidentLocation(IncidentLocation incidentLocation) {
+        this.incidentLocation = incidentLocation;
+    }
+
+    public IncidentProblem getProblem() {
+        return problem;
+    }
+
+    public void setProblem(IncidentProblem problem) {
+        this.problem = problem;
+    }
+
+    public IncidentGeneralInfo getGenInfo() {
+        return genInfo;
+    }
+
+    public void setGenInfo(IncidentGeneralInfo genInfo) {
+        this.genInfo = genInfo;
+    }
+
+    public LinkedList<String> getAssignedUnitNums() {
+        return assignedUnitNums;
+    }
+
+    public void setPrimaryAssignedUnitNum(String assignedUnitNum) {
+        assignedUnitNums.remove(assignedUnitNum);
+        assignedUnitNums.addFirst(assignedUnitNum);
+    }
+
+    public void addAssignedUnitNum(String assignedUnitNum) {
+        assignedUnitNums.addLast(assignedUnitNum);
+    }
+    
+    public void removeAssignedUnitNum(String assignedUnitNum){
+        assignedUnitNums.remove(assignedUnitNum);
+        if(assignedUnitNums.size() == 0){
+            status = IncidentEnums.Closed;
+        }
+    }
+
+    public IncidentResponse getResponse() {
+        return response;
+    }
+
+    public void setResponse(IncidentResponse response) {
+        this.response = response;
+    }
+
+    public IncidentAdditionalInfo getAdditionalInfo() {
+        return additionalInfo;
+    }
+
+    public void setAdditionalInfo(IncidentAdditionalInfo additionalInfo) {
+        this.additionalInfo = additionalInfo;
+    }
+
+    public IncidentActivities getActivities() {
+        return activities;
+    }
+
+    public void setActivities(IncidentActivities activities) {
+        this.activities = activities;
+    }
+
+    public IncidentCallBacks getCallBacks() {
+        return callBacks;
+    }
+
+    public void setCallBacks(IncidentCallBacks callBacks) {
+        this.callBacks = callBacks;
+    }
+
+    public IncidentEditLog getEditLog() {
+        return editLog;
+    }
+
+    public void setEditLog(IncidentEditLog editLog) {
+        this.editLog = editLog;
+    }
+
+    public IncidentInfo getInfo() {
+        return info;
+    }
+
+    public void setInfo(IncidentInfo info) {
+        this.info = info;
+    }
+
+    public IncidentTimes getTimes() {
+        return times;
+    }
+
+    public void setTimes(IncidentTimes times) {
+        this.times = times;
+    }
+
+    public IncidentTransportInfo getTranspInfo() {
+        return transpInfo;
+    }
+
+    public void setTranspInfo(IncidentTransportInfo transpInfo) {
+        this.transpInfo = transpInfo;
+    }
+
+    public IncidentVehicle getIncidentVehicle() {
+        return incidentVehicle;
+    }
+
+    public void setIncidentVehicle(IncidentVehicle incidentVehicle) {
+        this.incidentVehicle = incidentVehicle;
+    }
+
+    public String getUserData() {
+        return userData;
+    }
+
+    public void setUserData(String userData) {
+        this.userData = userData;
+    }
+
+    public String getAttachments() {
+        return attachments;
+    }
+
+    public void setAttachments(String attachments) {
+        this.attachments = attachments;
+    }
+
+    public IncidentEnums getIncidentStatus() {
+        return status;
+    }
+
+    public void setIncidentStatus(IncidentEnums status) {
+        this.status = status;
+    }
+
+    public String getRp() {
+        return rp;
+    }
+
+    public void setRp(String rp) {
+        this.rp = rp;
+    }
+
+    public String getAli() {
+        return ali;
+    }
+
+    public void setAli(String ali) {
+        this.ali = ali;
+    }
+
+    public String getRpType() {
+        return rpType;
+    }
+
+    public void setRpType(String rpType) {
+        this.rpType = rpType;
+    }
+
+    public String getMedia() {
+        return media;
+    }
+
+    public void setMedia(String media) {
+        this.media = media;
+    }
+
+    public DefaultTableModel getCommentsNotesTable() {
+        return commentsNotesTable;
+    }
+
+    public void addToCommentsNotesTable(String[] fields) {
+        this.commentsNotesTable.insertRow(0, fields); // new notes go 1st
+    }
+
+    /*
+     * Stores the data needed to be displayed in the AssignedIncidents panel and
+     * sends it out as a toTableVector.
+     */
+    public Vector<Object> toVectorForAssignedIncidents() {
+        Vector<Object> vector = new Vector<Object>();
+
+        toTableVector.clear();
+        toTableVector.add(logNum);
+        toTableVector.add(masterInc);
+        toTableVector.add(alert);
+        if (assignedUnitNums.size() != 0) {
+            toTableVector.add(assignedUnitNums.getFirst());
+        } else {
+            toTableVector.add("");
+        }
+
+        String unitNums = "";
+        for (int i = 0; i < assignedUnitNums.size(); i++) {
+            unitNums = unitNums.concat((String) assignedUnitNums.get(i));
+            if (i == assignedUnitNums.size() - 1) {
+                break;
+            }
+            unitNums = unitNums.concat(", ");
+        }
+        toTableVector.add(unitNums);
+        toTableVector.add(additionalInfo.getType());
+        toTableVector.add(incidentLocation.getAddress());
+        toTableVector.add(incidentLocation.getLoc());
+        toTableVector.add(incidentLocation.getBeat());
+        toTableVector.add(incidentLocation.getArea());
+        toTableVector.add(oau);
+        toTableVector.add(startTime);
+        toTableVector.add(logTime);
+        toTableVector.add(additionalInfo.getTypeCode());
+        toTableVector.add(p);
+        toTableVector.add(genInfo.getAgy());
+        return toTableVector;
+    }
+
+    /*
+     * Stores the data needed to be displayed in the PendingIncidents panel and
+     * sends it out as a toTableVector.
+     */
+    public Vector<Object> toVectorForPendingIncidents() {
+        Vector<Object> vector = new Vector<Object>();
+        vector.add(logNum);
+        vector.add(masterInc);
+        vector.add(alert);
+        vector.add(p);
+        vector.add(additionalInfo.getType());
+        vector.add(incidentLocation.getAddress());
+        vector.add(incidentLocation.getLoc());
+        vector.add(incidentLocation.getCity());
+        vector.add(incidentLocation.getBeat());
+        vector.add(incidentLocation.getArea());
+        vector.add(oau);
+        vector.add(startTime);
+        vector.add(logTime);
+        vector.add(additionalInfo.getTypeCode());
+        vector.add(genInfo.getAgy());
+
+        return vector;
+    }
+
+    public Vector<Object> toVectorForIncidentEditor() {
+        toTableVector.clear();
+        toTableVector.add(logTime);
+        toTableVector.add(additionalInfo.getTypeCode());
+        toTableVector.add(incidentLocation.getAddress());
+        toTableVector.add(incidentLocation.getLoc());
+        toTableVector.add(incidentLocation.getCity());
+        toTableVector.add(masterInc);
+        toTableVector.add("GG");
+        toTableVector.add(incidentLocation.getArea());
+        
+        String unitNums = "";
+        for (int i = 0; i < assignedUnitNums.size(); i++) {
+            unitNums = unitNums.concat((String) assignedUnitNums.get(i));
+            if (i == assignedUnitNums.size() - 1) {
+                break;
+            }
+            unitNums = unitNums.concat(", ");
+        }
+        
+        toTableVector.add("F-File");
+        return toTableVector;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.ScriptHandler.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String outer_tag_name, String inner_tag_name,
+            String value) {
+        if (outer_tag_name.equals(CAD_DATA_TAGS.LOCATION.tag)) {
+            incidentLocation.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.CALLER.tag)) {
+            incidentCaller.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.PROBLEM.tag)) {
+            problem.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.GENERAL.tag)) {
+            genInfo.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.RESPONSE.tag)) {
+            response.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.ADDITIONAL_INFO.tag)) {
+            additionalInfo.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.ACTIVITIES.tag)) {
+            activities.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.CALL_BACKS.tag)) {
+            callBacks.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.EDIT_LOG.tag)) {
+            editLog.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.INFO.tag)) {
+            info.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.TIMES.tag)) {
+            times.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.TRANSPORT_INFO.tag)) {
+            transpInfo.readXMLNode(inner_tag_name, value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.USER_DATA.tag)) {
+            init_userData = value;
+            setUserData(value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.ATTACHMENTS.tag)) {
+            init_attachments = value;
+            setAttachments(value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.RP.tag)) {
+            init_rp = value;
+            setRp(value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.ALI.tag)) {
+            init_ali = value;
+            setAli(value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.RP_TYPE.tag)) {
+            init_rpType = value;
+            setRpType(value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.MEDIA.tag)) {
+            init_media = value;
+            setMedia(value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.MASTER_INC_NUM.tag)) {
+            //masterInc should be unchanged,no init
+            setMasterInc(value);
+        } else if (outer_tag_name.equals(CAD_DATA_TAGS.P.tag)) {
+            init_p = value;
+            setP(value);
+        } 
+
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentCallBacks.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentCallBacks.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentCallBacks.java	(revision 82)
@@ -0,0 +1,67 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentCallBacks implements Serializable {
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_initial = "";
+    private String init_comment = "";
+    
+    private String initial;
+    private String comment;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentCallBacks() {
+        initial = "";
+        comment = "";
+    }
+    
+    public void resetCADDataSimulation(){
+        initial = init_initial;
+        comment = init_comment;
+    }
+
+    public String getInitial() {
+        return initial;
+    }
+
+    public void setInitial(String initial) {
+        this.initial = initial;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_CALLBACK.INITIAL.tag)) {
+            init_initial = value;
+            setInitial(value);
+        } else if (tag_name.equals(CADDataEnums.INC_CALLBACK.COMMENT.tag)) {
+            init_comment = value;
+            setComment(value);
+        }
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentTimes.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentTimes.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentTimes.java	(revision 82)
@@ -0,0 +1,218 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+/**
+ * NOT IN USE. Originally meant for Times Tab in IncidentViewer.
+ * This class is a further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentTimes implements Serializable {
+    private String unit;
+    private String alarm;
+    private String assigned;
+    private String enroute;
+    private String staged;
+    private String arrival;
+    private String access;
+    private String depart;
+    private String atDest;
+    private String status5;
+    private String available;
+    private String respNum;
+
+    private String ring;
+    private String inQueue;
+    private String allAvailable;
+    private String callClosed;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentTimes() {
+        unit = "";
+        alarm = "";
+        assigned = "";
+        enroute = "";
+        staged = "";
+        arrival = "";
+        access = "";
+        depart = "";
+        atDest = "";
+        status5 = "";
+        available = "";
+        respNum = "";
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public String getAlarm() {
+        return alarm;
+    }
+
+    public void setAlarm(String alarm) {
+        this.alarm = alarm;
+    }
+
+    public String getAssigned() {
+        return assigned;
+    }
+
+    public void setAssigned(String assigned) {
+        this.assigned = assigned;
+    }
+
+    public String getEnroute() {
+        return enroute;
+    }
+
+    public void setEnroute(String enroute) {
+        this.enroute = enroute;
+    }
+
+    public String getStaged() {
+        return staged;
+    }
+
+    public void setStaged(String staged) {
+        this.staged = staged;
+    }
+
+    public String getArrival() {
+        return arrival;
+    }
+
+    public void setArrival(String arrival) {
+        this.arrival = arrival;
+    }
+
+    public String getAccess() {
+        return access;
+    }
+
+    public void setAccess(String access) {
+        this.access = access;
+    }
+
+    public String getDepart() {
+        return depart;
+    }
+
+    public void setDepart(String depart) {
+        this.depart = depart;
+    }
+
+    public String getAtDest() {
+        return atDest;
+    }
+
+    public void setAtDest(String atDest) {
+        this.atDest = atDest;
+    }
+
+    public String getStatus5() {
+        return status5;
+    }
+
+    public void setStatus5(String status5) {
+        this.status5 = status5;
+    }
+
+    public String getAvailable() {
+        return available;
+    }
+
+    public void setAvailable(String available) {
+        this.available = available;
+    }
+
+    public String getRespNum() {
+        return respNum;
+    }
+
+    public void setRespNum(String respNum) {
+        this.respNum = respNum;
+    }
+
+    public String getRing() {
+        return ring;
+    }
+
+    public void setRing(String ring) {
+        this.ring = ring;
+    }
+
+    public String getInQueue() {
+        return inQueue;
+    }
+
+    public void setInQueue(String inQueue) {
+        this.inQueue = inQueue;
+    }
+
+    public String getAllAvailable() {
+        return allAvailable;
+    }
+
+    public void setAllAvailable(String allAvailable) {
+        this.allAvailable = allAvailable;
+    }
+
+    public String getCallClosed() {
+        return callClosed;
+    }
+
+    public void setCallClosed(String callClosed) {
+        this.callClosed = callClosed;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_TIMES.UNIT.tag)) {
+            setUnit(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.ALARM.tag)) {
+            setAlarm(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.ASSIGNED.tag)) {
+            setAssigned(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.ENROUTE.tag)) {
+            setEnroute(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.STAGED.tag)) {
+            setStaged(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.ARRIVAL.tag)) {
+            setArrival(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.ACCESS.tag)) {
+            setAccess(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.DEPART.tag)) {
+            setDepart(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.AT_DEST.tag)) {
+            setAtDest(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.STATUS_5.tag)) {
+            setStatus5(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.AVAILABLE.tag)) {
+            setAvailable(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.RESP_NUM.tag)) {
+            setRespNum(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.RING.tag)) {
+            setRing(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.IN_QUEUE.tag)) {
+            setInQueue(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.ALL_AVAILABLE.tag)) {
+            setAllAvailable(value);
+        } else if (tag_name.equals(CADDataEnums.INC_TIMES.CALL_CLOSED.tag)) {
+            setCallClosed(value);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentEvent.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentEvent.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentEvent.java	(revision 82)
@@ -0,0 +1,241 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+import java.util.Vector;
+
+import tmcsim.cadmodels.IncidentInquiryModel_obj;
+import tmcsim.common.CCTVInfo;
+import tmcsim.common.XMLIncident;
+
+/**
+ * IncidentEvent class contains data for an event that occurs during a 
+ * simulation.  Incident event information includes the following:<br/>
+ * <ul>
+ * <li>Second after Incident begins Event is schedule to occur.</li>
+ * <li>Simulation time Event occurs.</li>
+ * <li>IncidentInquiry model data.</li>
+ * <li>Audio file name and duration.</li>
+ * <li>XMLIncident Objects</li>
+ * <li>CCTVInfo Objects</li>
+ * <li>Current Event status.</li>
+ * </ul>
+ * <br/>
+ * <br/>
+ * The EVENT_STATUS is used to keep track of what state this event is in.  An 
+ * event is WAITING until its time to occur is reached in the simulation.  The 
+ * event will then enter the TRIGGERED state if it has a wave file length 
+ * greater than 0, otherwise it will enter the COMPLETED state.  When an 
+ * audio file is completed, the wavePlayed() method is called, and the Event 
+ * enters the COMPLETED state.  The finalizeEvent method finalizes the Event by
+ * timestamping the model data and setting the number of seconds the event 
+ * occured in the simulation.  The EVENT_STATUS is then set to FINALIZED.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:40 $ $Revision: 1.4 $
+ */
+@SuppressWarnings("serial")
+public class IncidentEvent implements Comparable<IncidentEvent>, Serializable {
+    
+    /**
+     * Enumeration
+     * @author Matthew Cechini
+     */
+    public static enum EVENT_STATUS {
+        /** Waiting to be triggered. */
+        WAITING,
+        /** Event has been triggered. */
+        TRIGGERED,  
+        /** Completed audio playing, if necessary. */
+        COMPLETED,   
+        /** 
+         * Incident has been triggered, audio file has been played, 
+         * and model data timestamped. 
+         */
+        FINALIZED
+    };
+
+    /** Number of seconds after the incident begins that this event will trigger. */    
+    public long secondsToOccurInIncident;
+    
+    /** Number of seconds after the simulation started that this event occured. */  
+    public long secondsOccuredInSimulation;
+    
+    /** Model object containing the data that will be added to the incident when this event occurs. */  
+    public IncidentInquiryModel_obj eventInfo = null;
+    
+    /** Audio wav file associated with this event. */   
+    public String waveFile;
+    
+    /** Duration(in seconds) of the waveFile. */    
+    public int waveLength;
+            
+    /** Vector of XMLIncident objects which are associated with this incident event. */
+    public Vector<XMLIncident> XMLIncidents;
+    
+    /** Vector of CCTV objects which are associated with this incident event. */
+    public Vector<CCTVInfo> cctvInfos;
+    
+    /** Current Incident Event status. */
+    public EVENT_STATUS eventStatus;
+    
+
+    /**  
+     * Constructor.
+     *
+     * @param timeToOccur Time (in seconds) in simulation for this incident event to occur.
+     */
+    public IncidentEvent(long timeToOccur) {
+            
+        eventInfo       = new IncidentInquiryModel_obj();   
+        waveFile        = "";
+        waveLength      = 0;
+        eventStatus     = EVENT_STATUS.WAITING;
+        XMLIncidents    = new Vector<XMLIncident>();
+        cctvInfos       = new Vector<CCTVInfo>();
+
+        secondsToOccurInIncident   = timeToOccur;
+        secondsOccuredInSimulation = 0;   
+            
+    }    
+     
+   /**
+    * Constructor.
+    *
+    * @param timeToOccur      Time (in seconds) in simulation for this incident event to occur.
+    * @param info             IncidentInquiry model data.
+    * @param newWaveFile      Filename of audio wav file to be played with this event.
+    * @param newWaveLength    Duration (in seconds) of audio wav file
+    * @param newXMLIncidents  List of XMLIncidents for this event.
+    * @param newCCTVInfos     List of CCTVInfos for this event.
+    */
+    public IncidentEvent(long timeToOccur, 
+                         IncidentInquiryModel_obj info, 
+                         String newWaveFile, 
+                         int newWaveLength,
+                         Vector<XMLIncident> newXMLIncidents,
+                         Vector<CCTVInfo> newCCTVInfos){
+        
+        eventInfo       = info;
+        eventStatus     = EVENT_STATUS.WAITING;
+        waveFile        = newWaveFile;
+        waveLength      = newWaveLength;
+
+        XMLIncidents    = new Vector<XMLIncident>();
+        XMLIncidents.addAll(newXMLIncidents);
+        
+        cctvInfos       = new Vector<CCTVInfo>();
+        cctvInfos.addAll(newCCTVInfos);     
+        
+        secondsToOccurInIncident   = timeToOccur;
+        secondsOccuredInSimulation = 0;     
+    }
+    
+    /**
+     * Copy Constructor.
+     *
+     * @param timeToOccur      Time (in seconds) in simulation for this incident event to occur.
+     * @param info             IncidentInquiry model data.
+     * @param newWaveFile      Filename of audio wav file to be played with this event.
+     * @param newWaveLength    Duration (in seconds) of audio wav file
+     * @param newXMLIncidents  List of XMLIncidents for this event.
+     * @param newCCTVInfos     List of CCTVInfos for this event.
+     */
+     public IncidentEvent(final IncidentEvent copyEvent){
+        
+        eventInfo       = copyEvent.eventInfo;
+        eventStatus     = copyEvent.eventStatus;
+        waveFile        = copyEvent.waveFile;
+        waveLength      = copyEvent.waveLength;
+
+        XMLIncidents    = new Vector<XMLIncident>();
+        XMLIncidents.addAll(copyEvent.XMLIncidents);
+        
+        cctvInfos       = new Vector<CCTVInfo>();
+        cctvInfos.addAll(copyEvent.cctvInfos);      
+        
+        secondsToOccurInIncident   = copyEvent.secondsToOccurInIncident;
+        secondsOccuredInSimulation = copyEvent.secondsOccuredInSimulation;      
+     }    
+    
+    /** Compare objects according o comparison of secondsToOccurInIncident member data. */
+    public int compareTo(IncidentEvent o) {
+        if(secondsToOccurInIncident < o.secondsToOccurInIncident)
+            return -1;
+            
+        else if(secondsToOccurInIncident > o.secondsToOccurInIncident)
+            return 1;
+        
+        else 
+            return 0;
+    }
+    
+    /**
+     * Method determines if the Event is ready to be triggered.  This is 
+     * determined by assessing the current Event status and simulation
+     * time.  The Event will be triggered if the Event is WAITING and the
+     * Event's time to start has been reached.  The Event's relative start 
+     * time is added to the Incident start time parameter and compared
+     * against the current simulation time parameter.  If the audio file 
+     * duration is greater than  zero seconds, then the Event status is set to 
+     * TRIGGERED, and true is returned.  If the audio file is zero, the status 
+     * is set to COMPLETED and false is returned.
+     *
+     * @param incidentStartTime Simulation time that Event's Incident began (in seconds).
+     * @param simulationTime Current simulation time (in seconds).
+     * @return true if incident enters the TRIGGERED state, false if it is not 
+     * ready to be triggered or has entered the COMPLETED state.
+     */
+    public boolean triggerEvent(long incidentStartTime, long simulationTime) {
+        boolean retVal = false;
+        
+        if(eventStatus == EVENT_STATUS.WAITING &&
+           simulationTime > (incidentStartTime + secondsToOccurInIncident) )
+        {               
+            if(waveLength == 0) {
+                eventStatus = EVENT_STATUS.COMPLETED;
+            }
+            else {
+                retVal = true;
+                eventStatus = EVENT_STATUS.TRIGGERED;
+            }
+        }
+        
+        return retVal;
+    }        
+    
+  
+    /**
+     * Method is called when the Event's audio file completes.  The Event 
+     * status is set to COMPLETED.
+     */
+    public void wavePlayed() {
+        eventStatus = EVENT_STATUS.COMPLETED;
+    }
+    
+    /**
+     * Method is called to finalize and Event.  The Event info
+     * is timestamped with the parameter and the  secondsInSimulationOccured
+     * member is set to the current time in the simulation.  The Event
+     * status is set to FINALIZED.
+     *
+     * @param occured Current simulation time (in seconds). 
+     * @param timestamp CAD time stamp for model data. 
+     */
+    public void finalizeEvent(long occured, String timestamp) {
+        //set time stamp
+        eventInfo.timeStamp(timestamp);     
+        secondsOccuredInSimulation = occured;
+        
+        eventStatus = EVENT_STATUS.FINALIZED;
+    }
+    
+    /**
+     * Called to reset the simulation.  The Event status is set to WAITING and
+     * the secondsOccuredinSimulation is reset to 0.
+     */
+    public void resetSimulation() {
+        eventStatus = EVENT_STATUS.WAITING;
+        secondsOccuredInSimulation = 0;
+    }
+
+} 
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentAdditionalInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentAdditionalInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentAdditionalInfo.java	(revision 82)
@@ -0,0 +1,157 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentAdditionalInfo implements Serializable {
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_type = "";
+    private String init_typeCode = "";
+    private String init_machine = "";
+    private String init_callStatus = "";
+    private String init_callTakerExt = "";
+    private String init_alarmLevel = "";
+    private String init_rotationProviderArea = "";
+    private String init_comment = "";
+    
+    private String type;
+    private String typeCode;
+    private String machine;
+    private String callStatus;
+    private String callTakerExt;
+    private String alarmLevel;
+    private String rotationProviderArea;
+    private String comment;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentAdditionalInfo() {
+        type = "";
+        typeCode = "";
+        machine = "";
+        callStatus = "";
+        callTakerExt = "";
+        alarmLevel = "";
+        rotationProviderArea = "";
+        comment = "";
+    }
+
+    public void resetCADDataSimulation(){
+        type = init_type;
+        typeCode = init_typeCode;
+        machine = init_machine;
+        callStatus = init_callStatus;
+        callTakerExt = init_callTakerExt;
+        alarmLevel = init_alarmLevel;
+        rotationProviderArea = init_rotationProviderArea;
+        comment = init_comment;
+    }
+    
+    public String getMachine() {
+        return machine;
+    }
+
+    public void setMachine(String machine) {
+        this.machine = machine;
+    }
+
+    public String getCallStatus() {
+        return callStatus;
+    }
+
+    public void setCallStatus(String callStatus) {
+        this.callStatus = callStatus;
+    }
+
+    public String getCallTakerExt() {
+        return callTakerExt;
+    }
+
+    public void setCallTakerExt(String callTakerExt) {
+        this.callTakerExt = callTakerExt;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+    
+    public String getTypeCode() {
+        return typeCode;
+    }
+
+    public void setTypeCode(String type) {
+        this.typeCode = type;
+    }
+
+    public String getAlarmLevel() {
+        return alarmLevel;
+    }
+
+    public void setAlarmLevel(String alarmLevel) {
+        this.alarmLevel = alarmLevel;
+    }
+
+    public String getRotationProviderArea() {
+        return rotationProviderArea;
+    }
+
+    public void setRotationProviderArea(String rotationProviderArea) {
+        this.rotationProviderArea = rotationProviderArea;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_ADD_INFO.TYPE.tag)) {
+            init_type = value;
+            setType(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ADD_INFO.TYPE_CODE.tag)) {
+            init_typeCode = value;
+            setTypeCode(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ADD_INFO.MACHINE.tag)) {
+            init_machine = value;
+            setMachine(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ADD_INFO.CALL_STATUS.tag)) {
+            init_callStatus = value;
+            setCallStatus(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ADD_INFO.CALL_TAKER_EXT.tag)) {
+            init_callTakerExt = value;
+            setCallTakerExt(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ADD_INFO.ALARM_LEVEL.tag)) {
+            init_alarmLevel = value;
+            setAlarmLevel(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ADD_INFO.ROTATION_PROVIDER_AREA.tag)) {
+            init_rotationProviderArea = value;
+            setRotationProviderArea(value);
+        } else if (tag_name.equals(CADDataEnums.INC_ADD_INFO.COMMENT.tag)) {
+            init_comment = value;
+            setComment(value);
+        }
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/CardfileData.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/CardfileData.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/CardfileData.java	(revision 82)
@@ -0,0 +1,566 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+
+/**
+ * This class holds all the necessarily data for the Cardfile. It contains a
+ * CardfileList for each tabbed panel in Cardfile.
+ * 
+ * @author Vincent
+ * 
+ */
+public class CardfileData implements Serializable {
+
+    private int newestId = 0;
+
+    private static CardfileList coastalDivisionUnitsList;
+    private static CardfileList policeSheriffCoronerList;
+    private static CardfileList courtsList;
+    private static CardfileList publicTransportationList;
+    private static CardfileList ggOtherList;
+    private static CardfileList myMiscList;
+    private static CardfileList slMiscList;
+    private static CardfileList vtMiscList;
+    private static CardfileList chpOfficesList;
+    private static CardfileList stateAgenciesFacilitiesList;
+    private static CardfileList governmentOfficialsList;
+    private static CardfileList federalAgenciesList;
+    private static CardfileList ranchesLivestockList;
+    private static CardfileList fireEmsList;
+    private static CardfileList jailsList;
+    private static CardfileList hospitalsMedCentersList;
+    private static CardfileList towCompaniesList;
+    private static CardfileList calTransList;
+    private static CardfileList countyRoadsList;
+    private static CardfileList utilitiesList;
+    private static CardfileList animalControlList;
+    private static CardfileList airportsList;
+    private static CardfileList creditCardsList;
+    private static CardfileList ggCrisisSheltersList;
+    private static CardfileList rangesList;
+    private static CardfileList hotlinesList;
+    private static CardfileList hwyPatrolsOosList;
+    private static CardfileList parksRecreationList;
+    private static CardfileList sheltersList;
+    private static CardfileList slCountyServicesList;
+    private static CardfileList slResourcesList;
+    private static CardfileList truckTireRepairList;
+    private static CardfileList mccEmployeesList;
+    private static CardfileList gateAccessCodesList;
+    private static CardfileList vtCallSignsList;
+    private static CardfileList slccEmployeesList;
+
+    public CardfileData() {
+        coastalDivisionUnitsList = new CardfileList();
+        policeSheriffCoronerList = new CardfileList();
+        courtsList = new CardfileList();
+        publicTransportationList = new CardfileList();
+        ggOtherList = new CardfileList();
+        myMiscList = new CardfileList();
+        slMiscList = new CardfileList();
+        vtMiscList = new CardfileList();
+        chpOfficesList = new CardfileList();
+        stateAgenciesFacilitiesList = new CardfileList();
+        governmentOfficialsList = new CardfileList();
+        federalAgenciesList = new CardfileList();
+        ranchesLivestockList = new CardfileList();
+        fireEmsList = new CardfileList();
+        jailsList = new CardfileList();
+        hospitalsMedCentersList = new CardfileList();
+        towCompaniesList = new CardfileList();
+        calTransList = new CardfileList();
+        countyRoadsList = new CardfileList();
+        utilitiesList = new CardfileList();
+        animalControlList = new CardfileList();
+        airportsList = new CardfileList();
+        creditCardsList = new CardfileList();
+        ggCrisisSheltersList = new CardfileList();
+        rangesList = new CardfileList();
+        hotlinesList = new CardfileList();
+        hwyPatrolsOosList = new CardfileList();
+        parksRecreationList = new CardfileList();
+        sheltersList = new CardfileList();
+        slCountyServicesList = new CardfileList();
+        slResourcesList = new CardfileList();
+        truckTireRepairList = new CardfileList();
+        mccEmployeesList = new CardfileList();
+        gateAccessCodesList = new CardfileList();
+        vtCallSignsList = new CardfileList();
+        slccEmployeesList = new CardfileList();
+    }
+
+    public int obtainNewUniqueId() {
+        int temp = newestId;
+        newestId++;
+        return temp;
+    }
+
+    public CardfileList getCoastalDivisionUnitList() {
+        return coastalDivisionUnitsList;
+    }
+
+    public void setCoastalDivisionUnitsList(CardfileList objList) {
+        coastalDivisionUnitsList = objList;
+    }
+
+    public CardfileList getPoliceSheriffCoronerList() {
+        return policeSheriffCoronerList;
+    }
+
+    public void setPoliceSheriffCoronerList(CardfileList objList) {
+        policeSheriffCoronerList = objList;
+    }
+
+    public CardfileList getCourtsList() {
+        return courtsList;
+    }
+
+    public void setCourtsList(CardfileList objList) {
+        courtsList = objList;
+    }
+
+    public CardfileList getPublicTransportationList() {
+        return publicTransportationList;
+    }
+
+    public void setPublicTransportationList(CardfileList objList) {
+        publicTransportationList = objList;
+    }
+
+    public CardfileList getGgOtherList() {
+        return ggOtherList;
+    }
+
+    public void setGgOtherList(CardfileList objList) {
+        ggOtherList = objList;
+    }
+
+    public CardfileList getMyMiscList() {
+        return myMiscList;
+    }
+
+    public void setMyMiscList(CardfileList objList) {
+        myMiscList = objList;
+    }
+
+    public CardfileList getSlMiscList() {
+        return slMiscList;
+    }
+
+    public void setSlMiscList(CardfileList objList) {
+        slMiscList = objList;
+    }
+
+    public CardfileList getVlMiscList() {
+        return vtMiscList;
+    }
+
+    public void setVlMiscList(CardfileList objList) {
+        vtMiscList = objList;
+    }
+
+    public CardfileList getChpOfficesList() {
+        return chpOfficesList;
+    }
+
+    public void setChpOfficesList(CardfileList objList) {
+        chpOfficesList = objList;
+    }
+
+    public CardfileList getStateAgenciesFacilitiesList() {
+        return stateAgenciesFacilitiesList;
+    }
+
+    public void setStateAgenciesFacilitiesList(CardfileList objList) {
+        stateAgenciesFacilitiesList = objList;
+    }
+
+    public CardfileList getGovernmentOfficialsList() {
+        return governmentOfficialsList;
+    }
+
+    public void setGovernmentOfficialsList(CardfileList objList) {
+        governmentOfficialsList = objList;
+    }
+
+    public CardfileList getFederalAgenciesList() {
+        return federalAgenciesList;
+    }
+
+    public void setFederalAgenciesList(CardfileList objList) {
+        federalAgenciesList = objList;
+    }
+
+    public CardfileList getRanchesLivestockList() {
+        return ranchesLivestockList;
+    }
+
+    public void setRanchesLivestockList(CardfileList objList) {
+        ranchesLivestockList = objList;
+    }
+
+    public CardfileList getFireEmsList() {
+        return fireEmsList;
+    }
+
+    public void setFireEmsList(CardfileList objList) {
+        fireEmsList = objList;
+    }
+
+    public CardfileList getJailsList() {
+        return jailsList;
+    }
+
+    public void setJailsList(CardfileList objList) {
+        jailsList = objList;
+    }
+
+    public CardfileList getHospitalsMedCentersList() {
+        return hospitalsMedCentersList;
+    }
+
+    public void setHospitalsMedCentersList(CardfileList objList) {
+        hospitalsMedCentersList = objList;
+    }
+
+    public CardfileList getTowCompaniesList() {
+        return towCompaniesList;
+    }
+
+    public void setTowCompaniesList(CardfileList objList) {
+        towCompaniesList = objList;
+    }
+
+    public CardfileList getCalTransList() {
+        return calTransList;
+    }
+
+    public void setCalTransList(CardfileList objList) {
+        calTransList = objList;
+    }
+
+    public CardfileList getCountyRoadsList() {
+        return countyRoadsList;
+    }
+
+    public void setCountyRoadsList(CardfileList objList) {
+        countyRoadsList = objList;
+    }
+
+    public CardfileList getUtilitiesList() {
+        return utilitiesList;
+    }
+
+    public void setUtilitiesList(CardfileList objList) {
+        utilitiesList = objList;
+    }
+
+    public CardfileList getAnimalControlList() {
+        return animalControlList;
+    }
+
+    public void setAnimalControlList(CardfileList objList) {
+        animalControlList = objList;
+    }
+
+    public CardfileList getAirportsList() {
+        return airportsList;
+    }
+
+    public void setAirportsList(CardfileList objList) {
+        airportsList = objList;
+    }
+
+    public CardfileList getCreditCardsList() {
+        return creditCardsList;
+    }
+
+    public void setCreditCardsList(CardfileList objList) {
+        creditCardsList = objList;
+    }
+
+    public CardfileList getGgCrisisSheltersList() {
+        return ggCrisisSheltersList;
+    }
+
+    public void setGgCrisisSheltersList(CardfileList objList) {
+        ggCrisisSheltersList = objList;
+    }
+
+    public CardfileList getRangesList() {
+        return rangesList;
+    }
+
+    public void setRangesList(CardfileList objList) {
+        rangesList = objList;
+    }
+
+    public CardfileList getHotlinesList() {
+        return hotlinesList;
+    }
+
+    public void setHotlinesList(CardfileList objList) {
+        hotlinesList = objList;
+    }
+
+    public CardfileList getHwyPatrolsOosList() {
+        return hwyPatrolsOosList;
+    }
+
+    public void setHwyPatrolsOosList(CardfileList objList) {
+        hwyPatrolsOosList = objList;
+    }
+
+    public CardfileList getParksRecreationList() {
+        return parksRecreationList;
+    }
+
+    public void setParksRecreationList(CardfileList objList) {
+        parksRecreationList = objList;
+    }
+
+    public CardfileList getSheltersList() {
+        return sheltersList;
+    }
+
+    public void setSheltersList(CardfileList objList) {
+        sheltersList = objList;
+    }
+
+    public CardfileList getSlCountyServicesList() {
+        return slCountyServicesList;
+    }
+
+    public void setSlCountyServicesList(CardfileList objList) {
+        slCountyServicesList = objList;
+    }
+
+    public CardfileList getSlResourcesList() {
+        return slResourcesList;
+    }
+
+    public void setSlResourcesList(CardfileList objList) {
+        slResourcesList = objList;
+    }
+
+    public CardfileList getTruckTireRepairList() {
+        return truckTireRepairList;
+    }
+
+    public void setTruckTireRepairList(CardfileList objList) {
+        truckTireRepairList = objList;
+    }
+
+    public CardfileList getMccEmployeesList() {
+        return mccEmployeesList;
+    }
+
+    public void setMccEmployeesList(CardfileList objList) {
+        mccEmployeesList = objList;
+    }
+
+    public CardfileList getGateAccessCodesList() {
+        return gateAccessCodesList;
+    }
+
+    public void setGateAccessCodesList(CardfileList objList) {
+        gateAccessCodesList = objList;
+    }
+
+    public CardfileList getVtCallSignsList() {
+        return vtCallSignsList;
+    }
+
+    public void setVtCallSignsList(CardfileList objList) {
+        vtCallSignsList = objList;
+    }
+
+    public CardfileList getSlccEmployeesList() {
+        return slccEmployeesList;
+    }
+
+    public void setSlccEmployeesList(CardfileList objList) {
+        slccEmployeesList = objList;
+    }
+
+    /**
+     * Loops through the list until it finds a matching object with the
+     * specified id.
+     * 
+     * @returns the CardfileDataObject with the specified id.
+     */
+    public CardfileDataObject getCardfileDataObject(CardfileList list, int id) {
+        for (int i = 0; i < list.getItemCount(); i++) {
+            if (list.getCFDO(i).getId() == id) {
+                return list.getCFDO(i);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Loops through the list until it finds a matching object with the
+     * specified id.
+     * 
+     * @returns the index of CardfileDataObject with the specified id.
+     */
+    public int getCardfileDataIndex(CardfileList list, int id) {
+        for (int i = 0; i < list.getItemCount(); i++) {
+            if (list.getCFDO(i).getId() == id) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    public LinkedList<CardfileDataObject> getSearchList(String search){
+        LinkedList<CardfileDataObject> returnList = new LinkedList<CardfileDataObject>();
+        LinkedList<CardfileDataObject> tempList = coastalDivisionUnitsList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = policeSheriffCoronerList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = courtsList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = publicTransportationList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = ggOtherList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = myMiscList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = slMiscList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = vtMiscList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = chpOfficesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = stateAgenciesFacilitiesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = governmentOfficialsList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = federalAgenciesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = ranchesLivestockList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = fireEmsList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = jailsList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = hospitalsMedCentersList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = towCompaniesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = calTransList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = countyRoadsList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = utilitiesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = animalControlList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = airportsList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = creditCardsList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = ggCrisisSheltersList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = rangesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = hotlinesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = hwyPatrolsOosList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = parksRecreationList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = sheltersList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = slCountyServicesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = slResourcesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = truckTireRepairList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = mccEmployeesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = gateAccessCodesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = vtCallSignsList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        tempList = slccEmployeesList.search(search);
+        for(int i = 0; i < tempList.size(); i++){
+            returnList.add(tempList.get(i));
+        }
+        return returnList;
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/CardfileList.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/CardfileList.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/CardfileList.java	(revision 82)
@@ -0,0 +1,114 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.awt.List;
+import java.io.Serializable;
+import java.util.LinkedList;
+
+/**
+ * This class extends a list and holds a list of CardfileDataObject alongside a
+ * list of CardfileDataObject's Name Field. The index of the CFDO and Name field
+ * should match at all times. Each instance of this class is meant to display
+ * any one list in the Cardfile's tabbed panel.
+ * 
+ * @author Vincent
+ * 
+ */
+
+public class CardfileList extends List implements Serializable {
+
+    LinkedList<CardfileDataObject> list;
+
+    public CardfileList() {
+        super();
+        list = new LinkedList<CardfileDataObject>();
+    }
+
+    /**
+     * Inserts the object so it remains in sorted order lexicographically.
+     * 
+     * @param cfdo
+     *            the object to be inserted
+     * @return the inserted position
+     */
+    public int addDataObject(CardfileDataObject cfdo) {
+        int insertPosition = 0;
+        if (list.size() == 0) {
+            super.add(cfdo.getName());
+            list.add(cfdo);
+            return 0;
+        }
+        if (cfdo.getName().compareTo(list.get(insertPosition).getName()) < 0) {
+            super.add(cfdo.getName(), insertPosition);
+            list.add(insertPosition, cfdo);
+            return insertPosition;
+        }
+        while (insertPosition < list.size()
+                && cfdo.getName().compareTo(list.get(insertPosition).getName()) > 0) {
+            insertPosition++;
+        }
+        if (insertPosition < list.size()) {
+            super.add(cfdo.getName(), insertPosition);
+            list.add(insertPosition, cfdo);
+        } else {
+            super.add(cfdo.getName());
+            list.add(cfdo);
+        }
+        return insertPosition;
+    }
+
+    /**
+     * Removes the CFDO and name field from both lists at the specified index.
+     * 
+     * @param index
+     */
+    public void removeDataObject(int index) {
+        if (index >= 0 && index < list.size()) {
+            super.remove(index);
+            list.remove(index);
+        }
+    }
+
+    /**
+     * returns the CFDO as the specified index, null if a bad index was sent.
+     * 
+     * @param index
+     * @return the CFDO at the given index, or null if a bad index.
+     */
+    public CardfileDataObject getCFDO(int index) {
+        if (!(index < 0)) {
+            return list.get(index);
+        }
+        return null;
+    }
+
+    /**
+     * Removes the object at the specified index to be reinserted and sorted
+     * into the list.
+     */
+    public int resort(int index) {
+        CardfileDataObject cfdoToInsert = list.remove(index);
+        super.remove(index);
+        return addDataObject(cfdoToInsert);
+    }
+    
+    /**
+     * Returns a LinkedList of CFDO that contain the search string.
+     */
+    public LinkedList<CardfileDataObject> search(String search){
+        LinkedList<CardfileDataObject> returnList = new LinkedList<CardfileDataObject>();
+        for(int i = 0; i < list.size(); i++){
+            if(search.toLowerCase().equals(list.get(i).getCategory().toLowerCase()) ||
+               search.toLowerCase().equals(list.get(i).getName().toLowerCase()) ||
+               search.toLowerCase().equals(list.get(i).getAddress().toLowerCase()) ||
+               search.toLowerCase().equals(list.get(i).getCity().toLowerCase()) ||
+               search.toLowerCase().equals(list.get(i).getState().toLowerCase()) ||
+               search.toLowerCase().equals(list.get(i).getZip().toLowerCase()) ||
+               search.toLowerCase().equals(list.get(i).getPhone1().toLowerCase()) ||
+               search.toLowerCase().equals(list.get(i).getPhone2().toLowerCase()) ||
+               search.toLowerCase().equals(list.get(i).getFax().toLowerCase())){
+                returnList.add(list.get(i));
+               }
+        }
+        return returnList;
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentEditLog.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentEditLog.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentEditLog.java	(revision 82)
@@ -0,0 +1,82 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * Originally meant for Edit Log Tab in IncidentViewer, not really in use at the moment.
+ * If this is used, this class 
+ * @author Vincent
+ * 
+ */
+public class IncidentEditLog implements Serializable {
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    
+    private String edit;
+    private String reason;
+    private String changeBy;
+    private String terminal;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentEditLog() {
+        edit = "";
+        reason = "";
+        changeBy = "";
+        terminal = "";
+    }
+
+    public String getEdit() {
+        return edit;
+    }
+
+    public void setEdit(String edit) {
+        this.edit = edit;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getChangeBy() {
+        return changeBy;
+    }
+
+    public void setChangeBy(String changeBy) {
+        this.changeBy = changeBy;
+    }
+
+    public String getTerminal() {
+        return terminal;
+    }
+
+    public void setTerminal(String terminal) {
+        this.terminal = terminal;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_EDIT_LOG.EDIT.tag)) {
+            setEdit(value);
+        } else if (tag_name.equals(CADDataEnums.INC_EDIT_LOG.REASON.tag)) {
+            setReason(value);
+        } else if (tag_name.equals(CADDataEnums.INC_EDIT_LOG.CHANGE_BY.tag)) {
+            setChangeBy(value);
+        } else if (tag_name.equals(CADDataEnums.INC_EDIT_LOG.TERMINAL.tag)) {
+            setTerminal(value);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentGeneralInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentGeneralInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentGeneralInfo.java	(revision 82)
@@ -0,0 +1,82 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+/**
+ * This class is a further subdivision of Incident to hold data.
+ * 
+ * @author Vincent
+ * 
+ */
+public class IncidentGeneralInfo implements Serializable {
+    
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_jurisdiction = "";
+    private String init_alarm = "";
+    private String init_agy = "";
+    
+    private String jurisdiction;
+    private String alarm;
+    private String agy;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentGeneralInfo() {
+        jurisdiction = "";
+        alarm = "";
+        agy = "";
+    }
+
+    public void resetCADDataSimulation(){
+        jurisdiction = init_jurisdiction;
+        alarm = init_alarm;
+        agy = init_agy;
+    }
+    
+    public String getJurisdiction() {
+        return jurisdiction;
+    }
+
+    public void setJurisdiction(String jurisdiction) {
+        this.jurisdiction = jurisdiction;
+    }
+
+    public String getAlarm() {
+        return alarm;
+    }
+
+    public void setAlarm(String alarm) {
+        this.alarm = alarm;
+    }
+
+    public String getAgy() {
+        return agy;
+    }
+
+    public void setAgy(String agy) {
+        this.agy = agy;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_GEN_INFO.JURISDICTION.tag)) {
+            init_jurisdiction = value;
+            setJurisdiction(value);
+        } else if (tag_name.equals(CADDataEnums.INC_GEN_INFO.ALARM.tag)) {
+            init_alarm = value;
+            setAlarm(value);
+        } else if (tag_name.equals(CADDataEnums.INC_GEN_INFO.AGY.tag)) {
+            init_agy = value;
+            setAgy(value);
+        }
+    }
+
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/data/IncidentInfo.java	(revision 82)
@@ -0,0 +1,91 @@
+package tmcsim.client.cadclientgui.data;
+
+import java.io.Serializable;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+
+public class IncidentInfo implements Serializable {
+
+    /* The init variables are set only from the XML script (readXMLNode method)
+     * and are only used for resetCADDataSimulation purposes
+     */
+    private String init_callInit = "";
+    private String init_callTaken = "";
+    private String init_timeInQ = "";
+    private String init_lastUpdated = "";
+    
+    
+    private String callInit;
+    private String callTaken;
+    private String timeInQ;
+    private String lastUpdated;
+
+    /*
+     * Constructor. Initializes all objects to avoid null pointers.
+     */
+    public IncidentInfo() {
+        callInit = "";
+        callTaken = "";
+        timeInQ = "";
+        lastUpdated = "";
+    }
+    
+    public void resetCADDataSimulation(){
+        callInit = init_callInit;
+        callTaken = init_callTaken;
+        timeInQ = init_timeInQ;
+        lastUpdated = init_lastUpdated;
+    }
+
+    public String getCallInit() {
+        return callInit;
+    }
+
+    public void setCallInit(String callInit) {
+        this.callInit = callInit;
+    }
+
+    public String getCallTaken() {
+        return callTaken;
+    }
+
+    public void setCallTaken(String callTaken) {
+        this.callTaken = callTaken;
+    }
+
+    public String getTimeInQ() {
+        return timeInQ;
+    }
+
+    public void setTimeInQ(String timeInQ) {
+        this.timeInQ = timeInQ;
+    }
+
+    public String getLastUpdated() {
+        return lastUpdated;
+    }
+
+    public void setLastUpdated(String lastUpdated) {
+        this.lastUpdated = lastUpdated;
+    }
+
+    /*
+     * Called from the tmc.simulator.cadclient.data.Incident.java. Handles
+     * storing data based on script tag.
+     */
+    public void readXMLNode(String tag_name, String value) {
+        if (tag_name.equals(CADDataEnums.INC_INFO.CALL_INITIATED.tag)) {
+            init_callInit = value;
+            setCallInit(value);
+        } else if (tag_name.equals(CADDataEnums.INC_INFO.CALL_TAKEN.tag)) {
+            init_callTaken = value;
+            setCallTaken(value);
+        } else if (tag_name.equals(CADDataEnums.INC_INFO.TIME_IN_Q.tag)) {
+            init_timeInQ = value;
+            setTimeInQ(value);
+        } else if (tag_name.equals(CADDataEnums.INC_INFO.LAST_UPDATED.tag)) {
+            init_lastUpdated = value;
+            setLastUpdated(value);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/CADClientGUI.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/CADClientGUI.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/CADClientGUI.java	(revision 82)
@@ -0,0 +1,48 @@
+package tmcsim.client.cadclientgui;
+
+import java.rmi.RemoteException;
+
+import tmcsim.client.cadclientgui.data.CADData;
+import tmcsim.client.cadclientgui.data.CardfileData;
+import tmcsim.client.cadclientgui.screens.Login;
+import tmcsim.client.cadclientgui.screens.ScreenManager;
+import tmcsim.client.CADClient;
+
+/**
+ * Main class to run CADClient.
+ * @author Nicholas
+ *
+ */
+
+
+public class CADClientGUI {
+
+    private CADData cadData;
+    private CardfileData cardfileData;
+    public static ScreenManager screen;
+    public static Login login;
+    public static CADClient client;
+    
+    public CADClientGUI(){
+        //cadData = new CADData();
+        cardfileData = new CardfileData();
+    }
+    
+    public CADData getCadData(){
+        return this.cadData;
+    }
+    
+    public void setCadData(CADData cadData){
+        this.cadData = cadData;
+    }
+    
+    public CardfileData getCardfileData(){
+        return this.cardfileData;
+    }
+    
+    public void setCardfileData(CardfileData cardfileData){
+        this.cardfileData = cardfileData;
+    }
+
+    
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/CardfileReader.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/CardfileReader.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/CardfileReader.java	(revision 82)
@@ -0,0 +1,34 @@
+package tmcsim.client.cadclientgui;
+
+import java.io.File;
+import java.io.IOException;
+import java.rmi.RemoteException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.SAXException;
+
+import tmcsim.client.cadclientgui.data.CardfileData;
+
+public class CardfileReader {
+
+    public CardfileReader(String filePath, CardfileData cfd)
+            throws RemoteException {
+        CardfileHandler ch = new CardfileHandler(cfd);
+        try {
+            SAXParserFactory.newInstance().newSAXParser()
+                    .parse(new File(filePath), ch);
+        } catch (SAXException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (ParserConfigurationException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/GUIScriptReader.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/GUIScriptReader.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/GUIScriptReader.java	(revision 82)
@@ -0,0 +1,37 @@
+package tmcsim.client.cadclientgui;
+
+import java.io.File;
+import java.rmi.RemoteException;
+
+import javax.xml.parsers.SAXParserFactory;
+
+import tmcsim.client.cadclientgui.data.CADData;
+
+/**
+ * This class loads the XML script and parses through it in the ScriptHandler. Finally it stores the data from the XML 
+ * into the CADData.
+ * @author Nicholas
+ *
+ */
+public class GUIScriptReader {
+    
+    public GUIScriptReader(String fp, CADData cadData) throws RemoteException
+    {
+        loadScriptFile(new File(fp),cadData);
+    }
+    
+    /*
+     * loads the script from the XML and stores the data in the CADData class.
+     */
+    public static void loadScriptFile(File scriptFile,CADData cadData) throws RemoteException {     
+        try {
+                
+            ScriptHandler sh = new ScriptHandler();
+            SAXParserFactory.newInstance().newSAXParser().parse(scriptFile, sh);
+            //cadData.setUnitsFromXML(sh.getUnits());
+            cadData.setIncidentsFromXML(sh.getIncidents());
+               
+        }
+        catch (Exception e) {e.printStackTrace();}
+    }   
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/ScriptHandler.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/ScriptHandler.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/ScriptHandler.java	(revision 82)
@@ -0,0 +1,416 @@
+package tmcsim.client.cadclientgui;
+
+import java.util.TreeMap;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.client.cadclientgui.data.Unit;
+import tmcsim.cadmodels.IncidentInquiryDetails;
+import tmcsim.cadmodels.IncidentInquiryHeader;
+import tmcsim.cadmodels.IncidentInquiryModel_obj;
+import tmcsim.cadmodels.IncidentInquiryServices;
+import tmcsim.cadmodels.IncidentInquiryTows;
+import tmcsim.cadmodels.IncidentInquiryUnitsAssigned;
+import tmcsim.cadmodels.IncidentInquiryWitnesses;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.SCRIPT_LEVEL_TAGS;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.UNIT_TAGS;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.SCRIPT_EVENT_TAGS;
+import tmcsim.common.CADScriptTags.AUDIO_TAGS;
+import tmcsim.common.CADScriptTags.CAD_INCIDENT_DATA_TAGS;
+import tmcsim.common.CADScriptTags.CCTV_TAGS;
+import tmcsim.common.CADScriptTags.INCIDENT_HEADER_TAGS;
+import tmcsim.common.CADScriptTags.LOCATION_INFO_TAGS;
+import tmcsim.common.CADScriptTags.PARAMICS_TAGS;
+import tmcsim.common.CADScriptTags.SERVICE_TAGS;
+import tmcsim.common.CADScriptTags.TOW_TAGS;
+import tmcsim.common.CADScriptTags.WITNESS_TAGS;
+import tmcsim.common.CCTVDirections;
+import tmcsim.common.CCTVInfo;
+import tmcsim.common.ParamicsLocation;
+import tmcsim.common.XMLIncident;
+
+
+/**
+ * SAX Handler that parses a script file and creates a list of Incident objects 
+ * containing all script information that will be used by the CAD.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class ScriptHandler extends DefaultHandler { 
+
+    /** Error Logger. */
+    private Logger scriptLogger = Logger.getLogger("tmcsim.common");
+    
+    /** 
+     * Enumeration used to keep track of the current tab level that the
+     * parser is reading data in.
+     */
+    private static enum LEVEL { NONE, TMC_SCRIPT, SCRIPT_EVENT, SCRIPT_DATA,
+        NEW_UNIT, CAD_DATA, LOCATION_INFO, CAD_INCIDENT_EVENT, PARAMICS, HEADER_INFO};
+    
+    /** Buffer used to hold parsed tag content */
+    private StringBuffer parsedValue = new StringBuffer();
+    
+    /** Current Tag level within the script that is being parsed */
+    private LEVEL currentLevel       = LEVEL.NONE;
+    
+    /** Log number for the current ScriptEvent being parsed */
+    private Integer currentLogNumber     = 0;
+    
+    /** Incident description for the current ScriptEvent being parsed */
+    private String  currentIncidentDesc  = "";
+    
+    /** Time index value (in seconds) for the current ScriptEvent being parsed */
+    private long    currentEventTime     = 0;
+    
+    /** ParamicsLocation object for current script event */
+    private ParamicsLocation currLoc      = null;
+    
+    /** IncidentInquiryHeader object for current script event */
+    private IncidentInquiryHeader currIIH = null;
+    
+    /** IncidentEvent object for current script event */
+    private IncidentEvent currEvent       = null;
+    
+    /** XMLIncident object for current script event */
+    private XMLIncident currXMLInc        = null;
+    
+    private TreeMap<String, Unit> unitMap;
+    
+    private TreeMap<Integer, Incident> incidentMap;
+    
+    private String currUnitNum;
+    
+    private Unit currUnit;
+    
+    private Incident currentIncident;
+    
+    private long currentIncidentTime;
+    
+    private String cadDataTag;
+    
+    
+    
+    /** Constructor.  Initializes incident map. */
+    public ScriptHandler() {
+        unitMap = new TreeMap<String, Unit>();
+        incidentMap = new TreeMap<Integer, Incident>();
+    }
+    
+    public Vector<Unit> getUnits() {
+        return new Vector<Unit>(unitMap.values());
+    }   
+    
+    /**  
+     * Get the list of incidents that have been parsed from the script file.
+     * 
+     * @returns Vector of Incident objects.
+     */
+    public Vector<Incident> getIncidents() {
+        return new Vector<Incident>(incidentMap.values());
+    }       
+    
+    /** SAX Handler method.  Clear incident map and reset the error flag. */
+    public void startDocument() {       
+        unitMap.clear();
+        incidentMap.clear();        
+    }   
+    
+    /** SAX Handler method.   */
+    public void startElement(String uri, String localName, String qName, Attributes attributes)  {
+        
+        try {
+            if(qName.equals(SCRIPT_LEVEL_TAGS.TMC_SCRIPT.tag)) {
+                currentLevel = LEVEL.TMC_SCRIPT;
+            }   
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.SCRIPT_DATA.tag))
+            {
+                currentLevel = LEVEL.SCRIPT_DATA;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.NEW_UNIT.tag))
+            {
+                currUnitNum = attributes.getValue(UNIT_TAGS.UNIT_NUM.tag);
+                currentLevel = LEVEL.NEW_UNIT;
+                if(unitMap.containsKey(currUnitNum))
+                {
+                    currUnit = unitMap.get(currUnitNum);
+                }
+                else
+                {
+                    currUnit = new Unit(currUnitNum);
+                }
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.SCRIPT_EVENT.tag)) {
+                currentLevel = LEVEL.SCRIPT_EVENT;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.CAD_DATA.tag)) {
+                currentLevel = LEVEL.CAD_DATA;              
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.HEADER_INFO.tag)) {
+                currIIH           = new IncidentInquiryHeader();
+                currIIH.logNumber = currentLogNumber;
+                
+                currentLevel = LEVEL.HEADER_INFO;               
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.LOCATION_INFO.tag)) {
+                currLoc      = new ParamicsLocation(attributes.getValue(
+                        LOCATION_INFO_TAGS.ID.tag));
+                currentLevel = LEVEL.LOCATION_INFO;             
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.CAD_INCIDENT_EVENT.tag)) {
+                currEvent    = new IncidentEvent(currentEventTime - incidentMap.get(
+                        currentLogNumber).getSecondsToStart());         
+                currentLevel = LEVEL.CAD_INCIDENT_EVENT;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.PARAMICS.tag)) {
+                String locationID = attributes.getValue(
+                        PARAMICS_TAGS.LOCATION_ID.tag);
+                
+                currXMLInc = new XMLIncident(locationID, incidentMap.get(
+                        currentLogNumber).locationMap.get(locationID));
+                currentLevel = LEVEL.PARAMICS;
+            }
+            else if(qName.equals(SCRIPT_EVENT_TAGS.INCIDENT.tag)) {
+                try {
+                    currentLogNumber = Integer.parseInt(attributes.getValue(
+                            SCRIPT_EVENT_TAGS.LOG_NUMBER.tag));
+                }
+                catch (Exception e)  { 
+                    scriptLogger.logp(Level.SEVERE, "ScriptHandler", "startElement", 
+                            "Invalid LogNumber " + attributes.getValue(
+                                    SCRIPT_EVENT_TAGS.LOG_NUMBER.tag), e);
+                    currentLogNumber = 0;
+                }               
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.UNIT.tag)) {
+                IncidentInquiryUnitsAssigned iiu = new IncidentInquiryUnitsAssigned(IncidentInquiryModel_obj.SCRIPT_POS_INFO);
+                
+                iiu.beat = attributes.getValue(tmcsim.common.CADScriptTags.UNIT_TAGS.UNIT_NUMBER.tag);
+                iiu.statusType = attributes.getValue(tmcsim.common.CADScriptTags.UNIT_TAGS.UNIT_STATUS.tag);
+                iiu.isPrimary  = new Boolean(attributes.getValue(tmcsim.common.CADScriptTags.UNIT_TAGS.UNIT_PRIMARY.tag)).booleanValue();
+                iiu.isActive   = new Boolean(attributes.getValue(tmcsim.common.CADScriptTags.UNIT_TAGS.UNIT_ACTIVE.tag)).booleanValue();
+                
+                currEvent.eventInfo.addUnit(iiu);
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.WITNESS.tag)) {
+                IncidentInquiryWitnesses iiw = new IncidentInquiryWitnesses(IncidentInquiryModel_obj.SCRIPT_POS_INFO);
+    
+                iiw.reportingParty = attributes.getValue(WITNESS_TAGS.WITNESS_NAME.tag);
+                iiw.telephoneNum   = attributes.getValue(WITNESS_TAGS.WITNESS_PHONE.tag);
+                iiw.address        = attributes.getValue(WITNESS_TAGS.WITNESS_ADDRESS.tag);
+                                
+                currEvent.eventInfo.addWitness(iiw);
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.TOW.tag)) {
+                IncidentInquiryTows iit = new IncidentInquiryTows(IncidentInquiryModel_obj.SCRIPT_POS_INFO);
+                
+                iit.towCompany     = attributes.getValue(TOW_TAGS.TOW_COMPANY_NAME.tag);
+                iit.confPhoneNum   = attributes.getValue(TOW_TAGS.CONF_PHONE_NUM.tag);
+                iit.publicPhoneNum = attributes.getValue(TOW_TAGS.PUBLIC_PHONE_NUM.tag);
+                iit.beat           = attributes.getValue(TOW_TAGS.BEAT.tag);
+                
+                currEvent.eventInfo.addTow(iit);                
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.SERVICE.tag)) {
+                IncidentInquiryServices iis = new IncidentInquiryServices(IncidentInquiryModel_obj.SCRIPT_POS_INFO);
+                
+                iis.serviceName    = attributes.getValue(SERVICE_TAGS.SERVICE_NAME.tag);
+                iis.confPhoneNum   = attributes.getValue(SERVICE_TAGS.CONF_PHONE_NUM.tag);
+                iis.publicPhoneNum = attributes.getValue(SERVICE_TAGS.PUBLIC_PHONE_NUM.tag);
+                
+                currEvent.eventInfo.addService(iis);        
+            }       
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.AUDIO.tag)) {
+                currEvent.waveFile   = attributes.getValue(AUDIO_TAGS.FILE_PATH.tag);
+                currEvent.waveLength = new Integer(attributes.getValue(AUDIO_TAGS.FILE_LENGTH.tag)).intValue();
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.CCTV_INFO.tag)) {
+                CCTVInfo newInfo = new CCTVInfo();
+                
+                try {
+                    newInfo.cctv_id   = Integer.parseInt(attributes.getValue(CCTV_TAGS.CCTV_ID.tag));
+                    newInfo.direction = CCTVDirections.fromChar(attributes.getValue(CCTV_TAGS.CCTV_DIR.tag).charAt(0));
+                    newInfo.toggle    = Boolean.parseBoolean(attributes.getValue(CCTV_TAGS.CCTV_TOGGLE.tag));
+                
+                    currEvent.cctvInfos.add(newInfo);
+                } 
+                catch (Exception e) {
+                    scriptLogger.logp(Level.SEVERE, "ScriptHandler", "startElement", 
+                            "Exception in parsing CCTV_INFO node.", e);
+                }
+                            
+            }
+            else if(currentLevel == LEVEL.CAD_DATA)
+            {
+                if(cadDataTag == null)
+                {
+                    cadDataTag = qName;
+                }
+            }
+
+        } catch (Exception e) {
+            scriptLogger.logp(Level.SEVERE, "ScriptHandler", "startElement", 
+                    "Exception in starting element <" + qName + ">.", e);
+        }
+    }
+
+    /** SAX Handler method.  Append read characters to local buffer. */
+    public void characters(char[] ch, int start, int length) {      
+        parsedValue.append(new String(ch, start, length).trim());               
+    }
+
+    /** SAX Handler method. */
+    public void endElement(String uri, String localName, String qName)  {
+
+        try {
+            if(qName.equals(SCRIPT_LEVEL_TAGS.SCRIPT_DATA.tag))
+            {
+                currentLevel = LEVEL.TMC_SCRIPT;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.NEW_UNIT.tag))
+            {
+                unitMap.put(currUnitNum, currUnit);
+                currentLevel = LEVEL.SCRIPT_DATA;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.SCRIPT_EVENT.tag)) {
+                currentLevel = LEVEL.TMC_SCRIPT;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.CAD_DATA.tag)) {
+                currentLevel = LEVEL.SCRIPT_EVENT;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.HEADER_INFO.tag)) {
+                incidentMap.get(currentLogNumber).header = currIIH;
+                currentLevel = LEVEL.CAD_DATA;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.LOCATION_INFO.tag)) {
+                incidentMap.get(currentLogNumber).locationMap.put(currLoc.locationID, currLoc);
+                currentLevel = LEVEL.CAD_DATA;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.CAD_INCIDENT_EVENT.tag)) {
+                incidentMap.get(currentLogNumber).addEvent(currEvent);
+                currentLevel = LEVEL.CAD_DATA;
+            }
+            else if(qName.equals(SCRIPT_LEVEL_TAGS.PARAMICS.tag)) {     
+                currEvent.XMLIncidents.add(currXMLInc);
+                currentLevel = LEVEL.CAD_INCIDENT_EVENT;
+            }
+            else if(qName.equals(SCRIPT_EVENT_TAGS.INCIDENT.tag)) {
+                currentIncidentDesc = parsedValue.toString();
+                
+                if(incidentMap.get(currentLogNumber) == null) {             
+                
+                    incidentMap.put(currentLogNumber, 
+                            new Incident(currentLogNumber, 
+                                         currentIncidentDesc, 
+                                         currentEventTime));
+                }
+                currentIncident = incidentMap.get(currentLogNumber);
+            }
+            else if(qName.equals(SCRIPT_EVENT_TAGS.TIME_INDEX.tag)) {
+                currentEventTime = timeBytesToSeconds(parsedValue.toString().trim());
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.TYPE.tag)){
+                currIIH.type = parsedValue.toString();
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.BEAT.tag)){
+                currIIH.beat = parsedValue.toString();
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.FULL_LOCATION.tag)){
+                currIIH.fullLocation = parsedValue.toString();
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.TRUNC_LOCATION.tag)){
+                currIIH.truncLocation = parsedValue.toString();
+            }
+            else if(qName.equals(INCIDENT_HEADER_TAGS.LOG_NUMBER.tag)){
+                currIIH.logNumber = Integer.parseInt(parsedValue.toString());
+            }
+            else if(qName.equals(CAD_INCIDENT_DATA_TAGS.DETAIL.tag)) {
+                currEvent.eventInfo.addDetail(new IncidentInquiryDetails(
+                        IncidentInquiryModel_obj.SCRIPT_POS_INFO, 
+                        parsedValue.toString(), false));
+            }   
+            else if(currentLevel == LEVEL.PARAMICS) {
+                try {
+                    currXMLInc.readXMLNode(qName, parsedValue.toString());
+                }
+                catch (Exception e) {
+                    scriptLogger.logp(Level.SEVERE, "ScriptHandler", "endElement", 
+                            "Exception in parsing PARAMICS node.", e);
+                }
+            }
+            else if(currentLevel == LEVEL.LOCATION_INFO) {
+                currLoc.readXMLNode(qName, parsedValue.toString());
+            }
+            else if(currentLevel == LEVEL.NEW_UNIT)
+            {
+                currUnit.readXMLNode(qName, parsedValue.toString());
+            }
+            else if(currentLevel == LEVEL.CAD_DATA)
+            {
+                currentIncident.readXMLNode(cadDataTag, qName, parsedValue.toString());
+            }
+            if(qName.equals(cadDataTag)) 
+            {
+                cadDataTag = null;
+            }
+    
+            parsedValue.setLength(0);
+        } catch (Exception e) {
+            scriptLogger.logp(Level.SEVERE, "ScriptHandler", "endElement", 
+                    "Exception in ending element <" + qName + ">.", e);
+        }
+    }   
+    
+    public void endDocument() {
+    }
+    
+    public void error(SAXParseException e) {
+        scriptLogger.logp(Level.SEVERE, "ScriptHandler", "error", 
+                "SAX Parsing error.", e);
+    }
+    
+    public void fatalError(SAXParseException e) {
+        scriptLogger.logp(Level.SEVERE, "ScriptHandler", "fatalError", 
+                "SAX Parsing fatal error.", e);
+    }
+    
+    public void warning(SAXParseException e) {
+        scriptLogger.logp(Level.SEVERE, "ScriptHandler", "warning", 
+                "SAX Parsing warning.", e);
+    }
+    
+
+    /**
+     * Private method to convert a time object from format HH:MM:SS to a long value of the
+     * corresponding number of seconds.
+     *
+     * @param time String time representation of format HH:MM:SS
+     * @return long Number of seconds
+     * @throws StringIndexOutOfBoundsException if the input parameter is not valid
+     */
+    private long timeBytesToSeconds(String time) 
+        throws StringIndexOutOfBoundsException
+    {
+        long seconds = 0;
+
+        seconds =  ((long) Character.digit(time.charAt(0), 10) * 36000 +
+                        Character.digit(time.charAt(1), 10) * 3600 +
+                        Character.digit(time.charAt(3), 10) * 600 + 
+                        Character.digit(time.charAt(4), 10) * 60 + 
+                        Character.digit(time.charAt(6), 10) * 10 +
+                        Character.digit(time.charAt(7), 10));
+
+              
+        return seconds;
+    }       
+    
+    
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/AssignedIncidents.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/AssignedIncidents.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/AssignedIncidents.java	(revision 82)
@@ -0,0 +1,635 @@
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.rmi.RemoteException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.RowSorter.SortKey;
+import javax.swing.SwingUtilities;
+import javax.swing.TransferHandler;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.UNIT_TAGS;
+import tmcsim.client.cadclientgui.enums.IncidentEnums;
+import tmcsim.client.cadclientgui.enums.TableHeaders;
+import tmcsim.client.cadclientgui.enums.UnitStatusEnums;
+
+/**
+ * This class contains the view and controller for the AssignedIncidents screen.
+ * The view was not built using a GUI builder plug-in (but may want to consider
+ * doing so in the future), and the controller uses listeners to control how the
+ * view and data act.
+ *
+ * @author Vincent
+ */
+public class AssignedIncidents extends JFrame
+{
+    private final String SCREEN_TITLE = "(Shift + F3)  Assigned Incidents";
+    private final Dimension SCREEN_DIMENSIONS = new Dimension(1400, 250);
+    private final Dimension DROP_DOWN_MENU_LABEL_DIMENSIONS = new Dimension(
+            170, 20);
+    private final Dimension DROP_DOWN_MENU_DIMENSIONS = new Dimension(170, 230);
+    private final int COLUMN_WIDTH = 120;
+    private final String[] LABELS =
+    {
+        "Add Resources...", "Greater Alarm...",
+        "Reconfigure", "Open", "Recall Incident", "Cancel", "Reassign",
+        "Link/Append", "Map", "Recall Linked Incidents", "Read Notes",
+        "Page...", "Mail...", "Fax..."
+    };
+    private final String LABEL_SPACING = "     ";
+    private JTable assignedIncidentsTable;
+    private JFrame assignedIncidentsMenu;
+    // labels for the drop down menu
+    private JLabel[] dropDownLabels = new JLabel[LABELS.length];
+    private static Logger clientLogger = Logger.getLogger("tmcsim.client");
+    private long lastLeftClick;// used for double clicking feature
+
+    public AssignedIncidents()
+    {
+        initComponents();
+    }
+
+    private void initComponents()
+    {
+        initializeTable();
+        initController();
+        initializeDropDownMenu();
+
+        JScrollPane scrollpane = new JScrollPane(assignedIncidentsTable);
+        scrollpane.getViewport().setBackground(Color.WHITE);
+
+        setTitle(SCREEN_TITLE);
+        setPreferredSize(SCREEN_DIMENSIONS);
+        getContentPane().add(scrollpane);
+        setResizable(true);
+        pack();
+        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+        setLocation(0, (int) (dim.getHeight() / 4));
+        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
+        setVisible(false);
+    }
+
+    /*
+     * Initializes the table and prepares the cell renderer for color
+     * management. It initializes the default settings and handles the drag and
+     * drop feature.
+     */
+    private void initializeTable()
+    {
+        assignedIncidentsTable = new JTable()
+        {
+            /*
+             * Custom renderer to set different background/foreground colors
+             * @see javax.swing.JTable#prepareRenderer(javax.swing.table.TableCellRenderer, int, int)
+             */
+            public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
+            {
+                Component comp;
+                // In a rare odd circumstance of timing, this exception is thrown:
+                // http://pastebin.com/A3tZe07a
+                try
+                {
+                    comp = super.prepareRenderer(renderer, row, column);
+                } catch (Exception ex)
+                {
+                    clientLogger.logp(Level.INFO, "AssignedIncidents",
+                            "prepareRenderer", "row=" + row + " col=" + column, ex);
+
+                    // Our workaround is to just return a dummy value.
+                    // It will be erased in the next one second refresh
+                    return new JLabel("?");
+                }
+
+                comp.setForeground(Color.BLACK);
+                comp.setBackground(Color.CYAN);
+                if (assignedIncidentsTable.getModel().getColumnName(column).equals("Unit/s"))
+                {//4 is the column for "Unit/s"
+                    //System.out.println("Diagnostic: in AssignedIncidents.prepareRenderer()"); //Commenting this line breaks the client
+                    comp.setBackground(Color.BLACK);
+                    int primaryColumn = 3;
+                    try
+                    {
+                        // get the unit name from the table   JD
+                        String unitname = (String) assignedIncidentsTable.getValueAt(row, primaryColumn);
+                        // Validate that unitname isn't blank
+                        if (!unitname.equals(""))
+                        {
+                            // Fetch the unit's current status from server
+                            UnitStatusEnums ustatus = ScreenManager.theCoordinator.getCadDataUnitStatus(unitname);
+                            // Decide which color to use for displaying the status
+                            switch (ustatus)
+                            {
+                                case Assignable:
+                                    comp.setForeground(Color.GREEN);
+                                    break;
+                                case Arrived:
+                                    comp.setForeground(Color.YELLOW);
+                                    break;
+                                case Enroute:
+                                    comp.setForeground(Color.CYAN);
+                                    break;
+                            }
+                        }
+                    } catch (RemoteException e)
+                    {
+                        e.printStackTrace();
+                    }
+                }
+
+                if (getSelectedRow() == row)
+                {
+                    comp.setForeground(Color.WHITE);
+                    comp.setBackground(Color.BLUE);
+                }
+
+                return comp;
+            }
+
+            public Class getColumnClass(int c)
+            {
+                return getValueAt(0, c).getClass();
+            }
+        };
+
+        assignedIncidentsTable.setOpaque(true);
+        assignedIncidentsTable.setIntercellSpacing(new Dimension(1, 0));
+        assignedIncidentsTable.setGridColor(Color.WHITE);
+        assignedIncidentsTable.getTableHeader().setReorderingAllowed(false);
+        assignedIncidentsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        assignedIncidentsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        assignedIncidentsTable.setAutoCreateRowSorter(true);
+        assignedIncidentsTable.setModel(new DefaultTableModel());
+
+        ((DefaultTableModel) assignedIncidentsTable.getModel()).setColumnIdentifiers(TableHeaders.ASSIGNED_INCIDENTS_HEADERS);
+
+        assignedIncidentsTable.setTransferHandler(new TransferHandler()
+        {
+            public boolean canImport(TransferHandler.TransferSupport info)
+            {
+                // Check for String flavor
+                if (!info.isDataFlavorSupported(DataFlavor.stringFlavor))
+                {
+                    return false;
+                }
+                return true;
+            }
+
+            public boolean importData(TransferHandler.TransferSupport info)
+            {
+                if (!info.isDrop())
+                {
+                    return false;
+                }
+
+                DefaultTableModel tableModel = (DefaultTableModel) assignedIncidentsTable.getModel();
+                JTable.DropLocation dl = (JTable.DropLocation) info.getDropLocation();
+                int index = dl.getRow();
+
+                // Get the string that is being dropped.
+                Transferable t = info.getTransferable();
+                String data;
+                try
+                {
+                    data = (String) t.getTransferData(DataFlavor.stringFlavor);
+                } catch (Exception e)
+                {
+                    return false;
+                }
+
+                // Perform the actual import
+                int incidentId = (Integer) assignedIncidentsTable.getValueAt(dl.getRow(), 0);
+                try
+                {
+                    ScreenManager.theCoordinator.setCadDataUnitAssignedId(data, incidentId);
+                    ScreenManager.theCoordinator.setCadDataUnitValue(data,
+                            UNIT_TAGS.UNIT_STATUS, UnitStatusEnums.Arrived);
+                    ScreenManager.theCoordinator.addCadDataIncidentAssignedUnitNum(incidentId, data);
+                    ScreenManager.theCoordinator.setCadDataIncidentStatus(incidentId, IncidentEnums.Assigned);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+                ScreenManager.refreshScreens();
+                return true;
+            }
+        });
+
+        for (int i = 0; i < assignedIncidentsTable.getColumnCount(); i++)
+        {
+            assignedIncidentsTable.getColumnModel().getColumn(i).setPreferredWidth(120);
+        }
+    }
+
+    /*
+     * Adds the key and mouse listeners for the table and component listener for
+     * screen.
+     */
+    private void initController()
+    {
+        assignedIncidentsTable.addMouseListener(new MouseListener()
+        {
+            public void mouseClicked(MouseEvent e)
+            {
+                if (SwingUtilities.isLeftMouseButton(e))
+                {
+                    // TODO:  Use e.getClickCount() == 2
+                    if (System.currentTimeMillis() - lastLeftClick < 1000)
+                    {
+                        int idColumn = 0;
+                        int selectedRow = assignedIncidentsTable.getSelectedRow();
+                        try
+                        {
+                            int selectedValue = (Integer) assignedIncidentsTable.getValueAt(selectedRow, idColumn);
+                            ScreenManager.openIncidentViewer(selectedValue);
+                        } catch (IndexOutOfBoundsException ex)
+                        {
+                            ex.printStackTrace();
+                        }
+                    }
+                    else
+                    {
+                        lastLeftClick = System.currentTimeMillis();
+                    }
+                }
+                if (SwingUtilities.isRightMouseButton(e))
+                {
+                    // Fixed to force right click to cause the row to be selected. JD
+                    // get the coordinates of the mouse click
+                    Point p = e.getPoint();
+                    // get the row index that contains that coordinate
+                    int rowNumber = assignedIncidentsTable.rowAtPoint(p);
+                    // Get the ListSelectionModel of the JTable
+                    ListSelectionModel model = assignedIncidentsTable.getSelectionModel();
+                    // set the selected interval of rows. Using the "rowNumber"
+                    // variable for the beginning and end selects only that one row.
+                    model.setSelectionInterval(rowNumber, rowNumber);
+                    // go open the drop down menu
+                    openDropDownMenu(e);
+                }
+                else
+                {
+                    closeDropDownMenu();
+                }
+            }
+
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+        });
+
+        addComponentListener(new ComponentListener()
+        {
+            public void componentHidden(ComponentEvent e)
+            {
+            }
+
+            public void componentMoved(ComponentEvent e)
+            {
+                closeDropDownMenu();
+            }
+
+            public void componentResized(ComponentEvent e)
+            {
+            }
+
+            public void componentShown(ComponentEvent e)
+            {
+            }
+        });
+    }
+
+    /*
+     * Creates the drop down menu that appears when a right click is performed
+     * on the table.
+     */
+    private void initializeDropDownMenu()
+    {
+        Box menu = new Box(BoxLayout.Y_AXIS);
+        initializeDropDownLabels();
+        addLabelsToBox(menu);
+
+        // Sets the highlighted background color, note that it does not become
+        // "Highlighted" until opaque(true) is called
+        setMenuHighlightedBackground(Color.BLUE);
+
+        assignedIncidentsMenu = new JFrame();
+        assignedIncidentsMenu.getContentPane().add(menu);
+        assignedIncidentsMenu.setPreferredSize(DROP_DOWN_MENU_DIMENSIONS);
+        assignedIncidentsMenu.setUndecorated(true);
+        assignedIncidentsMenu.pack();
+        assignedIncidentsMenu.setVisible(false);
+    }
+
+    /*
+     * Sets the text and size and adds a listener to each activated label.
+     */
+    private void initializeDropDownLabels()
+    {
+        for (int i = 0; i < dropDownLabels.length; i++)
+        {
+            dropDownLabels[i] = new JLabel(LABEL_SPACING + LABELS[i]);
+            dropDownLabels[i].setMaximumSize(DROP_DOWN_MENU_LABEL_DIMENSIONS);
+            dropDownLabels[i].setForeground(Color.GRAY);
+        }
+        dropDownLabels[3].setForeground(Color.BLACK);
+        addMouseListenersToLabel(dropDownLabels[3]);
+        dropDownLabels[10].setForeground(Color.BLACK);
+        addMouseListenersToLabel(dropDownLabels[10]);
+    }
+
+    /*
+     * Add the labels to the box in order with separators and spacings in
+     * between.
+     */
+    private void addLabelsToBox(Box menu)
+    {
+        menu.add(dropDownLabels[0]);
+        menu.add(dropDownLabels[1]);
+        menu.add(dropDownLabels[2]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[3]);
+        menu.add(dropDownLabels[4]);
+        menu.add(dropDownLabels[5]);
+        menu.add(dropDownLabels[6]);
+        menu.add(dropDownLabels[7]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[8]);
+        menu.add(dropDownLabels[9]);
+        menu.add(dropDownLabels[10]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[11]);
+        menu.add(dropDownLabels[12]);
+        menu.add(dropDownLabels[13]);
+
+        menu.add(Box.createVerticalStrut(5));
+    }
+
+    /*
+     * Sets the highlighted color(when the mouse is over it) of the JLabels.
+     * Note: the color is not shown until .setOpaque(true) is called.
+     *
+     * @param color the highlighted color
+     */
+    public void setMenuHighlightedBackground(Color color)
+    {
+        for (int i = 0; i < dropDownLabels.length; i++)
+        {
+            dropDownLabels[i].setBackground(color);
+        }
+    }
+
+    /*
+     * Sets all JLabels to not display a highlighted background
+     */
+    public void unSelectAllLabels()
+    {
+        for (int i = 0; i < dropDownLabels.length; i++)
+        {
+            dropDownLabels[i].setOpaque(false);
+        }
+    }
+
+    /*
+     * Sets the label to have a highlighted background.
+     *
+     * @param label the label that is selected/highlighted
+     */
+    public void selectLabel(Object label)
+    {
+        ((JLabel) label).setOpaque(true);
+    }
+
+    /*
+     * Performs the label action depending on which label was clicked.
+     */
+    public void performLabelAction(Object label)
+    {
+        if (label.equals(dropDownLabels[0]))
+        {// Add Resources
+        }
+        else if (label.equals(dropDownLabels[1]))
+        {// Greater Alarm
+        }
+        else if (label.equals(dropDownLabels[2]))
+        {// Reconfigure
+        }
+        else if (label.equals(dropDownLabels[3]))
+        {// Open
+            int idColumn = 0;
+            int selectedRow = assignedIncidentsTable.getSelectedRow();
+            try
+            {
+                int selectedValue = (Integer) assignedIncidentsTable.getValueAt(selectedRow, idColumn);
+                ScreenManager.openIncidentViewer(selectedValue);
+            } catch (IndexOutOfBoundsException ex)
+            {
+                ex.printStackTrace();
+            }
+        }
+        else if (label.equals(dropDownLabels[4]))
+        {// Recall Incident
+        }
+        else if (label.equals(dropDownLabels[5]))
+        {// Cancel
+        }
+        else if (label.equals(dropDownLabels[6]))
+        {// Reassign
+        }
+        else if (label.equals(dropDownLabels[7]))
+        {// Link append
+        }
+        else if (label.equals(dropDownLabels[8]))
+        {// Map
+        }
+        else if (label.equals(dropDownLabels[9]))
+        {// Recall Linked Incidents
+        }
+        else if (label.equals(dropDownLabels[10]))
+        {// Read Notes
+            int idColumn = 0;
+            ScreenManager.openIncidentViewer((Integer) assignedIncidentsTable
+                    .getValueAt(assignedIncidentsTable.getSelectedRow(),
+                    idColumn));
+        }
+        else if (label.equals(dropDownLabels[11]))
+        {// Page
+        }
+        else if (label.equals(dropDownLabels[12]))
+        {// Mail
+        }
+        else if (label.equals(dropDownLabels[13]))
+        {// Fax
+        }
+    }
+
+    /*
+     * Factory method. Adds a mouse listeners to the label. The
+     * MouseMotionListener detects the mouse's location to highlight the label.
+     * The MouseListener detects for clicks and performs the action of the label
+     * designates.
+     */
+    public void addMouseListenersToLabel(JLabel label)
+    {
+        label.addMouseMotionListener(new MouseMotionListener()
+        {
+            public void mouseDragged(MouseEvent e)
+            {
+            }
+
+            public void mouseMoved(MouseEvent e)
+            {
+                unSelectAllLabels();
+                selectLabel(e.getSource());
+                assignedIncidentsMenu.revalidate();
+                assignedIncidentsMenu.repaint();
+            }
+        });
+        label.addMouseListener(new MouseListener()
+        {
+            public void mouseClicked(MouseEvent e)
+            {
+                performLabelAction(e.getSource());
+                unSelectAllLabels();
+                assignedIncidentsMenu.revalidate();
+                assignedIncidentsMenu.repaint();
+                assignedIncidentsMenu.setVisible(false);
+            }
+
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+        });
+    }
+
+    /*
+     * Displays the menu where the right click occurred.
+     */
+    public void openDropDownMenu(MouseEvent e)
+    {
+        assignedIncidentsMenu.setLocation(e.getX() + this.getX(), e.getY()
+                + this.getY());
+        assignedIncidentsMenu.setVisible(true);
+    }
+
+    /*
+     * Hides the menu.
+     */
+    public void closeDropDownMenu()
+    {
+        unSelectAllLabels();
+        assignedIncidentsMenu.revalidate();
+        assignedIncidentsMenu.repaint();
+        assignedIncidentsMenu.setVisible(false);
+    }
+
+    /*
+     * Refreshes the data in the table by updating all data and repainting the
+     * screen. It saves user preferences(like column sizes, selected row, sorted preferences)
+     * and applies them to the updated model it receives from the server.
+     */
+    public void refreshTable()
+    {
+
+        if (assignedIncidentsTable.getTableHeader().getResizingColumn() == null)
+        {//only update info if resize not in progress
+            try
+            {
+                int index = assignedIncidentsTable.getSelectedRow();
+                int[] columnWidths = new int[20];
+                List<? extends SortKey> keys = assignedIncidentsTable.getRowSorter().getSortKeys();
+                for (int i = 0; i < assignedIncidentsTable.getColumnCount(); i++)
+                {
+                    columnWidths[i] = assignedIncidentsTable.getColumnModel().getColumn(i).getWidth();
+                }
+
+                assignedIncidentsTable.setModel(ScreenManager.theCoordinator.getCadDataTable(CADDataEnums.TABLE.ASSIGNED_INCIDENTS));
+
+                for (int i = 0; i < assignedIncidentsTable.getColumnCount(); i++)
+                {
+                    assignedIncidentsTable.getColumnModel().getColumn(i).setPreferredWidth(columnWidths[i]);
+                }
+                assignedIncidentsTable.getRowSorter().setSortKeys(keys);
+                assignedIncidentsTable.getSelectionModel().setSelectionInterval(index, index);
+            } catch (RemoteException e)
+            {
+                e.printStackTrace();
+            }
+            revalidate();
+            repaint();
+        }
+    }
+
+    /*
+     * Makes screen visible.
+     */
+    public void open()
+    {
+        setVisible(true);
+    }
+
+    /*
+     * Hides screen.
+     */
+    public void close()
+    {
+        setVisible(false);
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/PowerlineUI.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/PowerlineUI.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/PowerlineUI.java	(revision 82)
@@ -0,0 +1,301 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.rmi.RemoteException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Scanner;
+
+import javax.swing.JComponent;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.text.BadLocationException;
+
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_TABLE;
+
+/**
+ *
+ * @author Stuart
+ */
+public class PowerlineUI extends javax.swing.JFrame {
+
+    public static enum HINT{
+        II  ("II <Incident> Comment"),
+        UI              ("UI <Incident> Comment"),
+        RCARD       ("RCARD SearchText[NEW]"),
+        CARD        ("CARD"),
+        OFF ("OFF");
+        
+        public String tag;
+        
+        private HINT(String t) {
+            tag = t;
+        }
+    }
+    
+    public static enum DESCRIPTION{
+        II  ("Inquire Incident/Update Incident"),
+        UI              ("Update Incident Details"),
+        RCARD       ("Recall: Cardfile Search"),
+        CARD        ("Open Cardfile"),
+        OFF ("Exit System");
+        
+        public String tag;
+        
+        private DESCRIPTION(String t) {
+            tag = t;
+        }
+    }
+    
+    /**
+     * Creates new form PrototypeUI
+     */
+    public PowerlineUI(boolean visible, int number) {
+        initComponents(visible,number);
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents(boolean visible, int number) {
+
+        jTabbedPane1 = new javax.swing.JTabbedPane();
+        jDesktopPane1 = new javax.swing.JDesktopPane();
+        jToolBar1 = new javax.swing.JToolBar();
+        cmdLabel = new javax.swing.JLabel();
+        cmdComboField = new javax.swing.JComboBox();
+        hintLabel = new javax.swing.JLabel();
+        descriptionLabel = new javax.swing.JLabel();
+
+        jToolBar1.setRollover(true);
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+        setTitle("Powerline");
+
+        cmdLabel.setText("CMD:");
+        
+        cmdComboField.setEditable(true);
+        ((javax.swing.text.JTextComponent) cmdComboField.getEditor().getEditorComponent())
+            .getDocument().addDocumentListener(new DocumentListener(){
+                
+            public void changedUpdate(DocumentEvent e) {
+                updateHint(e);
+            }
+            public void insertUpdate(DocumentEvent e) {
+                updateHint(e);
+            }
+            public void removeUpdate(DocumentEvent e) {
+                updateHint(e);
+            }
+         });
+        
+        cmdComboField.addActionListener(new ActionListener(){
+            public void actionPerformed(ActionEvent e) {
+                if(((String)cmdComboField.getEditor().getItem()).equals("OFF")){
+                    System.exit(0);
+                }
+                else if(((String)cmdComboField.getEditor().getItem()).equals("CARD")){
+                    ScreenManager.openCardfile();
+                }
+                else if(((String)cmdComboField.getEditor().getItem()).startsWith("RCARD")){
+                    Scanner scanner = new Scanner((String)cmdComboField.getEditor().getItem());
+                    scanner.next();
+                    if(!scanner.hasNext()){
+                        return;
+                    }
+                    String search = scanner.next();
+                    ScreenManager.createPowerlineSearch(search);
+                    
+                }
+                else if(((String)cmdComboField.getEditor().getItem()).startsWith("II")){
+                    Scanner scanner = new Scanner((String)cmdComboField.getEditor().getItem());
+                    scanner.next();
+                    if(!scanner.hasNextInt()){
+                        return;
+                    }
+                    int incidentId = scanner.nextInt();
+                    ScreenManager.openIncidentViewer(incidentId);
+                }
+                else if(((String)cmdComboField.getEditor().getItem()).startsWith("UI")){
+                    Scanner scanner = new Scanner((String)cmdComboField.getEditor().getItem());
+                    scanner.next();
+                    if(!scanner.hasNextInt()){
+                        return;
+                    }
+                    int incidentId = scanner.nextInt();
+                    try {
+                        if(ScreenManager.theCoordinator.checkForValidIncidentID(incidentId)){
+                            if(!scanner.hasNext()){
+                                return;
+                            }
+                            String comment = scanner.next();
+                            DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
+                       DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
+                       String[] fields = {dateFormat.format(new Date()),
+                                                  timeFormat.format(new Date()),
+                                                  "","",comment};
+                            try {
+                                ScreenManager.theCoordinator.addCadDataIncidentTable(
+                                 INC_TABLE.COMMENTS_NOTES, incidentId, fields);
+                            } catch (RemoteException e1) {
+                                e1.printStackTrace();
+                            }
+                            ScreenManager.openIncidentViewer(incidentId);
+                            cmdComboField.getEditor().setItem("");
+                        }
+                    } catch (RemoteException e1) {
+                        e1.printStackTrace();
+                    }
+                }
+                
+                cmdComboField.getEditor().setItem("");
+                hintLabel.setText("");
+                descriptionLabel.setText("");
+            }
+        });
+        
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(cmdLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(cmdComboField, 0, 454, Short.MAX_VALUE)
+                .addContainerGap())
+             .addGroup(layout.createSequentialGroup()
+                .addGap(42, 42, 42)
+                .addComponent(hintLabel))
+             .addGroup(layout.createSequentialGroup()
+                .addGap(42, 42, 42)
+                .addComponent(descriptionLabel))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addGap(29, 29, 29)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(cmdLabel)
+                    .addComponent(cmdComboField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+            .addComponent(hintLabel)
+            .addComponent(descriptionLabel)
+            .addContainerGap(35, Short.MAX_VALUE))
+        );
+
+        setTitle("<" + number + ">Powerline");
+        if (visible){
+            setVisible(true);
+        }else{
+            setVisible(false);
+        }
+        pack();
+        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+        setLocation((int)(dim.getWidth() - this.getWidth()),0);
+    }// </editor-fold>//GEN-END:initComponents
+
+    public void updateHint(DocumentEvent e){
+        try {
+            if(e.getDocument().getLength() > 0){
+                String firstLetter = e.getDocument().getText(0, 1);
+                if(firstLetter.equals("O")){
+                    hintLabel.setText(HINT.OFF.tag);
+                    descriptionLabel.setText(DESCRIPTION.OFF.tag);
+                }
+                else if(firstLetter.equals("I")){
+                    hintLabel.setText(HINT.II.tag);
+                    descriptionLabel.setText(DESCRIPTION.II.tag);
+                }
+                else if(firstLetter.equals("U")){
+                    hintLabel.setText(HINT.UI.tag);
+                    descriptionLabel.setText(DESCRIPTION.UI.tag);
+                }
+                else if(firstLetter.equals("R")){
+                    hintLabel.setText(HINT.RCARD.tag);
+                    descriptionLabel.setText(DESCRIPTION.RCARD.tag);
+                }
+                else if(firstLetter.equals("C")){
+                    hintLabel.setText(HINT.CARD.tag);
+                    descriptionLabel.setText(DESCRIPTION.CARD.tag);
+                }
+                else {
+                    hintLabel.setText("");
+                    descriptionLabel.setText("");
+                }
+            }
+            
+        } catch (BadLocationException e1) {
+            e1.printStackTrace();
+        }
+    }
+    
+    /*
+     * Clears text.
+     */
+    public void clearText(){
+     cmdComboField.getEditor().setItem("");
+    }
+    
+    /*
+     * Puts "RCARD" in textfield.
+     */
+    public void putRCARD(){
+     cmdComboField.getEditor().setItem("RCARD");
+    }
+    
+    /* 
+     * Makes screen visible.
+     */
+    public void open(){
+        setVisible(true);
+    }
+    
+    /*
+     * Hides screen.
+     */
+    public void close(){
+        setVisible(false);
+    }
+    
+    /*public void submitCmd() {     
+        if (jComboBox1.getSelectedItem() instanceof String) {
+            try {
+                Document cmdDoc = DocumentBuilderFactory.newInstance()
+                 .newDocumentBuilder().newDocument();
+                Element cmdElem = cmdDoc.createElement(CAD_CLIENT_CMD.TERMINAL_CMD_LINE.type);
+                
+                parser.parseCommand(cmdElem, (String)jComboBox1.getSelectedItem());
+                cmdDoc.appendChild(cmdElem);
+            
+                theModel.transmitCommand(cmdDoc);
+            }
+            catch (Exception ex) {
+                System.out.println(ex.getMessage());
+            }
+        }
+    }*/
+    
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JComboBox cmdComboField;
+    private javax.swing.JLabel cmdLabel;
+    private javax.swing.JDesktopPane jDesktopPane1;
+    private javax.swing.JTabbedPane jTabbedPane1;
+    private javax.swing.JToolBar jToolBar1;
+    private javax.swing.JLabel hintLabel;
+    private javax.swing.JLabel descriptionLabel;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentEditor.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentEditor.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentEditor.java	(revision 82)
@@ -0,0 +1,553 @@
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.rmi.RemoteException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListModel;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollBar;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingConstants;
+import javax.swing.border.LineBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.TABLE;
+import tmcsim.client.cadclientgui.enums.TableHeaders;
+
+/**
+ * This class contains the view and controller for the IncidentEditor screen.
+ * The view is built using a GUI builder plug-in, and the controller uses
+ * listeners to control how the view and data act.
+ *
+ * @author Stuart
+ */
+public class IncidentEditor extends javax.swing.JFrame
+{
+    private final String[] monthNames =
+    {
+        "January", "February",
+        "March", "April", "May", "June", "July", "August", "September",
+        "October", "November", "December"
+    };
+    private final String[] dayNames =
+    {
+        "Sun", "Mon", "Tue", "Wed",
+        "Thu", "Fri", "Sat"
+    };
+    private DefaultTableModel blankTable;
+    private JTable calendarTable;
+    private int todayRow;
+    private int todayCol;
+
+    /**
+     * Creates new form IncidentEditor
+     */
+    public IncidentEditor()
+    {
+        declareComponents();
+        initControllers();
+        initLayout();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed"
+    // desc="Generated Code">//GEN-BEGIN:initComponents
+    private void declareComponents()
+    {
+
+        incidentLogScroll = new javax.swing.JScrollPane();
+        incidentLogTable = new javax.swing.JTable();
+        agencyTypeLabel = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        agencyTypeList = new javax.swing.JList();
+        currentDatabaseLabel = new javax.swing.JLabel();
+        currentDatabaseCombo = new javax.swing.JComboBox();
+        searchLimitLabel = new javax.swing.JLabel();
+        reopenButton = new javax.swing.JButton();
+        duplicateCellButton = new javax.swing.JButton();
+        searchButton = new javax.swing.JButton();
+        printButton = new javax.swing.JButton();
+        viewButton = new javax.swing.JButton();
+        refreshButton = new javax.swing.JButton();
+        exitButton = new javax.swing.JButton();
+        fromLabel = new javax.swing.JLabel();
+        toLabel = new javax.swing.JLabel();
+        fromCalendar = new javax.swing.JPanel();
+        toCalendar = new javax.swing.JPanel();
+    }
+
+    public MouseListener newMouseListener()
+    {
+        return new MouseListener()
+        {
+            public void mouseClicked(MouseEvent e)
+            {
+                viewButton.setEnabled(true);
+            }
+
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+        };
+    }
+
+    public ActionListener newSearchActionListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                ScreenManager.openSearch();
+            }
+        };
+    }
+
+    public ActionListener newViewActionListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                String masterInc = (String) incidentLogTable.getValueAt(
+                        incidentLogTable.getSelectedRow(), 5);
+                int incidentId = 0;
+                try
+                {
+                    incidentId = ScreenManager.theCoordinator
+                            .getIncidentId(masterInc);
+                } catch (RemoteException e1)
+                {
+                    e1.printStackTrace();
+                }
+                ScreenManager.openIncidentViewer(incidentId);
+            }
+        };
+    }
+
+    public ActionListener newRefreshActionListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                refreshInformation();
+            }
+        };
+    }
+
+    public ActionListener newExitActionListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                close();
+            }
+        };
+    }
+
+    private void initControllers()
+    {
+
+        incidentLogTable.addMouseListener(newMouseListener());
+
+        searchButton.addActionListener(newSearchActionListener());
+        viewButton.addActionListener(newViewActionListener());
+        refreshButton.addActionListener(newRefreshActionListener());
+        exitButton.addActionListener(newExitActionListener());
+    }
+
+    private void initLayout()
+    {
+        blankTable = new DefaultTableModel();
+        blankTable.setColumnIdentifiers(TableHeaders.INCIDENT_EDITOR_HEADERS);
+
+        setTitle("Incident Editor");
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+        setPreferredSize(new java.awt.Dimension(800, 600));
+
+        incidentLogTable.setOpaque(true);
+        incidentLogTable.setIntercellSpacing(new Dimension(1, 0));
+        incidentLogTable.setGridColor(Color.WHITE);
+        incidentLogTable.getTableHeader().setReorderingAllowed(false);
+        incidentLogTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        incidentLogTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        incidentLogTable.setAutoCreateRowSorter(true);
+        incidentLogScroll.setViewportView(incidentLogTable);
+
+        agencyTypeLabel.setText("Agency Type:");
+
+        DefaultListModel<String> dlm = new DefaultListModel();
+        dlm.addElement("CHP");
+        agencyTypeList.setModel(dlm);
+        agencyTypeList.setEnabled(false);
+
+        jScrollPane1.setViewportView(agencyTypeList);
+
+        currentDatabaseLabel.setText("Current Database:");
+
+        currentDatabaseCombo.setModel(new javax.swing.DefaultComboBoxModel(
+                new String[]
+        {
+            "System"
+        }));
+        currentDatabaseCombo.setEnabled(false);
+
+        searchLimitLabel.setText("Search Limit On Live System: 30 Days");
+
+        fromCalendar = createCalendar();
+        toCalendar = createCalendar();
+
+        reopenButton.setText("ReOpen");
+        reopenButton.setEnabled(false);
+
+        duplicateCellButton.setText("Duplicate Cell");
+        duplicateCellButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        duplicateCellButton.setEnabled(false);
+
+        searchButton.setText("Search");
+
+        printButton.setText("Print");
+        printButton.setEnabled(false);
+
+        viewButton.setText("View");
+        viewButton.setEnabled(false);
+
+        refreshButton.setText("Refresh");
+        exitButton.setText("Exit");
+
+        fromLabel.setText("From...");
+
+        toLabel.setText("To...");
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(incidentLogScroll)
+                .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(agencyTypeLabel)
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGroup(layout.createSequentialGroup()
+                .addGap(10, 10, 10)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(currentDatabaseLabel)
+                .addComponent(currentDatabaseCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addComponent(searchLimitLabel))
+                .addGap(32, 32, 32)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(fromLabel)
+                .addComponent(fromCalendar, 200, 200, 200))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 45, Short.MAX_VALUE)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(toLabel)
+                .addComponent(toCalendar, 200, 200, 200))
+                .addGap(25, 25, 25)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(reopenButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(duplicateCellButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(searchButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(printButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(viewButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(refreshButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(exitButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))));
+        layout.setVerticalGroup(
+                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(incidentLogScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(agencyTypeLabel)
+                .addComponent(reopenButton)
+                .addComponent(fromLabel)
+                .addComponent(toLabel))
+                .addGap(2, 2, 2)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(currentDatabaseLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(currentDatabaseCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addComponent(searchLimitLabel))
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(fromCalendar, 150, 150, 150)
+                .addComponent(toCalendar, 150, 150, 150)))
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(duplicateCellButton)
+                .addGap(2, 2, 2)
+                .addComponent(searchButton)
+                .addGap(2, 2, 2)
+                .addComponent(printButton)
+                .addGap(2, 2, 2)
+                .addComponent(viewButton)
+                .addGap(2, 2, 2)
+                .addComponent(refreshButton)
+                .addGap(2, 2, 2)
+                .addComponent(exitButton)))
+                .addGap(0, 41, Short.MAX_VALUE)));
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    public JPanel createCalendar()
+    {
+
+        JPanel calendarPanel = new JPanel();
+        Calendar now = Calendar.getInstance();
+        calendarPanel.setBorder(new LineBorder(new Color(0, 0, 0)));
+        calendarPanel.setLayout(null);
+
+        JLabel monthLabel = new JLabel("New label");
+        monthLabel.setBounds(0, 0, 140, 20);
+        monthLabel.setHorizontalAlignment(SwingConstants.CENTER);
+        monthLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+        monthLabel.setText(monthNames[now.get(Calendar.MONTH)]);
+        calendarPanel.add(monthLabel);
+
+        JLabel yearLabel = new JLabel("New label");
+        yearLabel.setHorizontalAlignment(SwingConstants.CENTER);
+        yearLabel.setBounds(140, 0, 60, 20);
+        yearLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+        yearLabel.setText(Integer.toString(now.get(Calendar.YEAR)));
+        calendarPanel.add(yearLabel);
+
+        Date date = new Date();
+        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
+        String dateString = dateFormat.format(date);
+
+        JLabel dateLabel1 = new JLabel("New label");
+        dateLabel1.setBounds(0, 130, 60, 20);
+        dateLabel1.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+        dateLabel1.setText(dateString);
+        dateLabel1.setHorizontalAlignment(JLabel.CENTER);
+        calendarPanel.add(dateLabel1);
+
+        JLabel dateLabel2 = new JLabel("New label");
+        dateLabel2.setBounds(140, 130, 60, 20);
+        dateLabel2.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+        dateLabel2.setText(dateString);
+        dateLabel2.setHorizontalAlignment(JLabel.CENTER);
+        calendarPanel.add(dateLabel2);
+
+        JScrollBar scrollBar = new JScrollBar();
+        scrollBar.setOrientation(JScrollBar.HORIZONTAL);
+        scrollBar.setBounds(60, 130, 80, 20);
+        scrollBar.setBorder(BorderFactory.createLineBorder(Color.BLACK));
+        scrollBar.setEnabled(false);
+        calendarPanel.add(scrollBar);
+
+        calendarTable = new JTable()
+        {
+            /*
+             * Custom renderer to set different background/foreground colors
+             * @see javax.swing.JTable#prepareRenderer(javax.swing.table.TableCellRenderer, int, int)
+             */
+            public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
+            {
+                Component comp = super.prepareRenderer(renderer, row, column);
+                if (todayRow == row && todayCol == column)
+                {
+                    comp.setBackground(Color.BLUE);
+                    comp.setForeground(Color.WHITE);
+                }
+                else
+                {
+                    comp.setBackground(new Color(235, 235, 235));
+                    comp.setForeground(Color.BLACK);
+                }
+                return comp;
+            }
+        };
+        calendarTable.setModel(createDaysModel());
+        DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
+        centerRenderer.setHorizontalAlignment(JLabel.CENTER);
+        for (int i = 0; i < dayNames.length; i++)
+        {
+            calendarTable.getColumnModel().getColumn(i).setCellRenderer(centerRenderer);
+        }
+        calendarTable.setEnabled(false);
+        calendarTable.setBounds(0, 20, 200, 110);
+        calendarPanel.add(calendarTable);
+
+        return calendarPanel;
+    }
+
+    protected DefaultTableModel createDaysModel()
+    {
+
+        String[][] emptyModel =
+        {
+            {
+                "", "", "", "", "", "", ""
+            },
+            {
+                "", "", "", "", "", "", ""
+            },
+            {
+                "", "", "", "", "", "", ""
+            },
+            {
+                "", "", "", "", "", "", ""
+            },
+            {
+                "", "", "", "", "", "", ""
+            },
+            {
+                "", "", "", "", "", "", ""
+            },
+            {
+                "", "", "", "", "", "", ""
+            },
+            {
+                "", "", "", "", "", "", ""
+            }
+        };
+
+        String[] emptyHeader =
+        {
+            "", "", "", "", "", "", ""
+        };
+        DefaultTableModel calendarModel = new DefaultTableModel(emptyModel, emptyHeader);
+        int row = 0;
+        int col = 0;
+
+        Calendar today = Calendar.getInstance();
+        int tMonth = today.get(Calendar.MONTH);
+        int tYear = today.get(Calendar.YEAR);
+        int tDay = today.get(Calendar.DAY_OF_MONTH);
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.MONTH, tMonth);
+        calendar.set(Calendar.YEAR, tYear);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+
+        Calendar iterator = (Calendar) calendar.clone();
+        iterator.add(Calendar.DAY_OF_MONTH,
+                -(iterator.get(Calendar.DAY_OF_WEEK) - 1));
+
+        Calendar maximum = (Calendar) calendar.clone();
+        maximum.add(Calendar.MONTH, +1);
+
+        for (int i = 0; i < dayNames.length; i++)
+        {
+            calendarModel.setValueAt(dayNames[i], row, col);
+            col++;
+        }
+        col = 0;
+        row = 1;
+
+        while (iterator.getTimeInMillis() < maximum.getTimeInMillis())
+        {
+            int lMonth = iterator.get(Calendar.MONTH);
+            int lYear = iterator.get(Calendar.YEAR);
+
+            if ((lMonth == tMonth) && (lYear == tYear))
+            {
+                int lDay = iterator.get(Calendar.DAY_OF_MONTH);
+                calendarModel.setValueAt(Integer.toString(lDay), row, col);
+                if ((tMonth == lMonth) && (tYear == lYear) && (tDay == lDay))
+                {
+                    todayRow = row;
+                    todayCol = col;
+                }
+            }
+            iterator.add(Calendar.DAY_OF_YEAR, +1);
+
+            col++;
+            if (col >= calendarModel.getColumnCount())
+            {
+                row++;
+                col = 0;
+            }
+        }
+
+
+        return calendarModel;
+    }
+
+    public void refreshInformation()
+    {
+        try
+        {
+            incidentLogTable.setModel(ScreenManager.theCoordinator
+                    .getCadDataTable(TABLE.INCIDENT_EDITOR));
+        } catch (RemoteException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /*
+     * Makes screen visible.
+     */
+    public void open()
+    {
+        incidentLogTable.setModel(blankTable);
+        viewButton.setEnabled(false);
+        setVisible(true);
+    }
+
+    /*
+     * Hides screen.
+     */
+    public void close()
+    {
+        setVisible(false);
+    }
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JLabel agencyTypeLabel;
+    private javax.swing.JList agencyTypeList;
+    private javax.swing.JComboBox currentDatabaseCombo;
+    private javax.swing.JLabel currentDatabaseLabel;
+    private javax.swing.JButton duplicateCellButton;
+    private javax.swing.JButton exitButton;
+    private javax.swing.JPanel fromCalendar;
+    private javax.swing.JLabel fromLabel;
+    private javax.swing.JScrollPane incidentLogScroll;
+    private javax.swing.JTable incidentLogTable;
+    private javax.swing.JPanel toCalendar;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JButton printButton;
+    private javax.swing.JButton refreshButton;
+    private javax.swing.JButton reopenButton;
+    private javax.swing.JButton searchButton;
+    private javax.swing.JLabel searchLimitLabel;
+    private javax.swing.JLabel toLabel;
+    private javax.swing.JButton viewButton;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/Search.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/Search.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/Search.java	(revision 82)
@@ -0,0 +1,931 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JComponent;
+
+import tmcsim.client.cadclientgui.enums.ComboBoxConstants;
+
+/**
+ *
+ * @author Stuart
+ */
+public class Search extends javax.swing.JFrame {
+
+    /**
+     * Creates new form Search
+     */
+    public Search() {
+        declareComponents();
+        initLayout();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
+    private void declareComponents() {
+
+        jTabbedPane1 = new javax.swing.JTabbedPane();
+        basicSearchPane = new javax.swing.JPanel();
+        priorityLabel = new javax.swing.JLabel();
+        natureProblemLabel = new javax.swing.JLabel();
+        responseLocationLabel = new javax.swing.JLabel();
+        cityLabel = new javax.swing.JLabel();
+        addressLabel = new javax.swing.JLabel();
+        apartmentNumberLabel = new javax.swing.JLabel();
+        stateLabel = new javax.swing.JLabel();
+        crossStreetLabel = new javax.swing.JLabel();
+        mapCoordinatesLabel = new javax.swing.JLabel();
+        callTakenLabel = new javax.swing.JLabel();
+        unitLabel = new javax.swing.JLabel();
+        alarmLevelLabel = new javax.swing.JLabel();
+        priorityCombo = new javax.swing.JComboBox();
+        natureProblemCombo = new javax.swing.JComboBox();
+        responseLocationField = new javax.swing.JTextField();
+        cityCombo = new javax.swing.JComboBox();
+        addressField = new javax.swing.JTextField();
+        apartmentLabelField = new javax.swing.JTextField();
+        buildingNumberField = new javax.swing.JTextField();
+        buildingNumberLabel = new javax.swing.JLabel();
+        stateField = new javax.swing.JTextField();
+        zipCodeLabel = new javax.swing.JLabel();
+        zipCodeField = new javax.swing.JTextField();
+        crossStreetField = new javax.swing.JTextField();
+        mapCoordinatesField = new javax.swing.JTextField();
+        callTakenCombo = new javax.swing.JComboBox();
+        unitCombo = new javax.swing.JComboBox();
+        alarmLevelCombo = new javax.swing.JComboBox();
+        jTabbedPane2 = new javax.swing.JTabbedPane();
+        callBacksPane = new javax.swing.JPanel();
+        jPanel4 = new javax.swing.JPanel();
+        callerTypeLabel = new javax.swing.JLabel();
+        callerNameLabel = new javax.swing.JLabel();
+        calledFromLocationLabel = new javax.swing.JLabel();
+        calledFromAddressLabel = new javax.swing.JLabel();
+        callBackPhoneLabel = new javax.swing.JLabel();
+        callerTypeCombo = new javax.swing.JComboBox();
+        callerNameField = new javax.swing.JTextField();
+        calledFromLocationField = new javax.swing.JTextField();
+        calledFromAddressField = new javax.swing.JTextField();
+        callBackPhoneField = new javax.swing.JTextField();
+        transportationPane = new javax.swing.JPanel();
+        transportationLocationLabel = new javax.swing.JLabel();
+        transportationAddressLabel = new javax.swing.JLabel();
+        transportationLocationField = new javax.swing.JTextField();
+        transportationAddressField = new javax.swing.JTextField();
+        jPanel1 = new javax.swing.JPanel();
+        patientFirstNameLabel = new javax.swing.JLabel();
+        patientFirstNameField = new javax.swing.JTextField();
+        patientLastNameLabel = new javax.swing.JLabel();
+        transportToCityLabel = new javax.swing.JLabel();
+        patientLastNameField = new javax.swing.JTextField();
+        transportToCityCombo = new javax.swing.JComboBox();
+        transportToLocationLabel = new javax.swing.JLabel();
+        transportToLocationField = new javax.swing.JTextField();
+        scheduledInfoAddressLabel = new javax.swing.JLabel();
+        transportToStateLabel = new javax.swing.JLabel();
+        scheduledInfoAddressField = new javax.swing.JTextField();
+        transportToStateField = new javax.swing.JTextField();
+        scheduledInfoZipCodeField = new javax.swing.JTextField();
+        scheduledInfoZipCodeLabel = new javax.swing.JLabel();
+        roomAptEtcLabel = new javax.swing.JLabel();
+        roomAptEtcField = new javax.swing.JTextField();
+        scheduledInfoPhoneLabel = new javax.swing.JLabel();
+        scheduledInfoPhoneField = new javax.swing.JTextField();
+        jPanel3 = new javax.swing.JPanel();
+        jPanel2 = new javax.swing.JPanel();
+        sspSafetyServicesProgramLabel = new javax.swing.JLabel();
+        sspSafetyServicesProgramField = new javax.swing.JTextField();
+        userDateField17Label = new javax.swing.JLabel();
+        userDataField18Label = new javax.swing.JLabel();
+        userDataField19Label = new javax.swing.JLabel();
+        lawLabel = new javax.swing.JLabel();
+        userDataField17Field = new javax.swing.JTextField();
+        userDataField18Field = new javax.swing.JTextField();
+        userDataField19Field = new javax.swing.JTextField();
+        lawField = new javax.swing.JTextField();
+        fireLabel = new javax.swing.JLabel();
+        fireField = new javax.swing.JTextField();
+        emsLabel = new javax.swing.JLabel();
+        emsField = new javax.swing.JTextField();
+        incidentNumberLabel = new javax.swing.JLabel();
+        incidentNumberField = new javax.swing.JTextField();
+        baseResponseNumberLabel = new javax.swing.JLabel();
+        baseResponseNumberField = new javax.swing.JTextField();
+        caseNumberLabel = new javax.swing.JLabel();
+        caseNumberField = new javax.swing.JTextField();
+        incidentTypeLabel = new javax.swing.JLabel();
+        incidentTypeCombo = new javax.swing.JComboBox();
+        jurisdictionLabel = new javax.swing.JLabel();
+        jurisdictionCombo = new javax.swing.JComboBox();
+        divisionLabel = new javax.swing.JLabel();
+        divisionCombo = new javax.swing.JComboBox();
+        batallionLabel = new javax.swing.JLabel();
+        batallionCombo = new javax.swing.JComboBox();
+        responseAreaLabel = new javax.swing.JLabel();
+        responsePlanLabel = new javax.swing.JLabel();
+        responseAreaCombo = new javax.swing.JComboBox();
+        responsePlanCombo = new javax.swing.JComboBox();
+        commandChannelLabel = new javax.swing.JLabel();
+        commandChannelCombo = new javax.swing.JComboBox();
+        primaryTacChannelLabel = new javax.swing.JLabel();
+        primaryTacChannelCombo = new javax.swing.JComboBox();
+        alternateTacChannelLabel = new javax.swing.JLabel();
+        alternateTacChannelCombo = new javax.swing.JComboBox();
+        sectorLabel = new javax.swing.JLabel();
+        sectorCombo = new javax.swing.JComboBox();
+        advancedSearchPane = new javax.swing.JPanel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        databaseTable = new javax.swing.JTable();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        advancedDatabaseTable = new javax.swing.JTable();
+        jButton3 = new javax.swing.JButton();
+        jButton4 = new javax.swing.JButton();
+        searchButton = new javax.swing.JButton();
+        exitButton = new javax.swing.JButton();
+    }
+    
+    private void initLayout() {
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+
+        priorityLabel.setText("Priority:");
+
+        natureProblemLabel.setText("Nature/Problem:");
+
+        responseLocationLabel.setText("Response Location:");
+
+        cityLabel.setText("City:");
+
+        addressLabel.setText("Address:");
+
+        apartmentNumberLabel.setText("Apt #:");
+
+        stateLabel.setText("State:");
+
+        crossStreetLabel.setText("Cross Street:");
+
+        mapCoordinatesLabel.setText("Map Coordinates:");
+
+        callTakenLabel.setText("Call Taken:");
+
+        unitLabel.setText("Unit:");
+
+        alarmLevelLabel.setText("Alarm Level:");
+
+        buildingNumberLabel.setText("Bldg #:");
+
+        zipCodeLabel.setText("Zip Code:");
+
+        callerTypeLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        callerTypeLabel.setText("Caller Type:");
+
+        callerNameLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        callerNameLabel.setText("Caller Name:");
+
+        calledFromLocationLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        calledFromLocationLabel.setText("Called from Location:");
+
+        calledFromAddressLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        calledFromAddressLabel.setText("Called From Address:");
+
+        callBackPhoneLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        callBackPhoneLabel.setText("Phone:");
+
+        callerTypeCombo.setModel(new javax.swing.DefaultComboBoxModel(ComboBoxConstants.RP_TYPE));
+
+        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
+        jPanel4.setLayout(jPanel4Layout);
+        jPanel4Layout.setHorizontalGroup(
+            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel4Layout.createSequentialGroup()
+                .addGap(169, 169, 169)
+                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(callBackPhoneLabel)
+                    .addComponent(callerNameLabel)
+                    .addComponent(callerTypeLabel)
+                    .addComponent(calledFromLocationLabel)
+                    .addComponent(calledFromAddressLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                        .addComponent(callerTypeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(callerNameField, javax.swing.GroupLayout.DEFAULT_SIZE, 173, Short.MAX_VALUE)
+                        .addComponent(calledFromLocationField)
+                        .addComponent(calledFromAddressField))
+                    .addComponent(callBackPhoneField, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(145, Short.MAX_VALUE))
+        );
+        jPanel4Layout.setVerticalGroup(
+            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel4Layout.createSequentialGroup()
+                .addGap(24, 24, 24)
+                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(callerTypeLabel)
+                    .addComponent(callerTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(callerNameLabel)
+                    .addComponent(callerNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(calledFromLocationLabel)
+                    .addComponent(calledFromLocationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(calledFromAddressLabel)
+                    .addComponent(calledFromAddressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(callBackPhoneLabel)
+                    .addComponent(callBackPhoneField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(12, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout callBacksPaneLayout = new javax.swing.GroupLayout(callBacksPane);
+        callBacksPane.setLayout(callBacksPaneLayout);
+        callBacksPaneLayout.setHorizontalGroup(
+            callBacksPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(callBacksPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+        callBacksPaneLayout.setVerticalGroup(
+            callBacksPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(callBacksPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+
+        jTabbedPane2.addTab("Call-Backs", callBacksPane);
+
+        transportationLocationLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        transportationLocationLabel.setText("Location:");
+
+        transportationAddressLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
+        transportationAddressLabel.setText("Address:");
+
+        javax.swing.GroupLayout transportationPaneLayout = new javax.swing.GroupLayout(transportationPane);
+        transportationPane.setLayout(transportationPaneLayout);
+        transportationPaneLayout.setHorizontalGroup(
+            transportationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(transportationPaneLayout.createSequentialGroup()
+                .addGap(202, 202, 202)
+                .addGroup(transportationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(transportationAddressLabel)
+                    .addComponent(transportationLocationLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(transportationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(transportationLocationField, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE)
+                    .addComponent(transportationAddressField))
+                .addContainerGap(189, Short.MAX_VALUE))
+        );
+        transportationPaneLayout.setVerticalGroup(
+            transportationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(transportationPaneLayout.createSequentialGroup()
+                .addGap(59, 59, 59)
+                .addGroup(transportationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(transportationLocationLabel)
+                    .addComponent(transportationLocationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(transportationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(transportationAddressLabel)
+                    .addComponent(transportationAddressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(72, Short.MAX_VALUE))
+        );
+
+        jTabbedPane2.addTab("Transportation", transportationPane);
+
+        patientFirstNameLabel.setText("Patient First Name:");
+
+        patientLastNameLabel.setText("Patient Last Name:");
+
+        transportToCityLabel.setText("Transport to City:");
+
+        transportToCityCombo.setModel(new javax.swing.DefaultComboBoxModel(ComboBoxConstants.LIST_OF_CA_CITIES));
+
+        transportToLocationLabel.setText("Transport to Location:");
+
+        scheduledInfoAddressLabel.setText("Address:");
+
+        transportToStateLabel.setText("Transport to State:");
+
+        scheduledInfoZipCodeLabel.setText("Zip Code:");
+
+        roomAptEtcLabel.setText("Room, Apt., etc.:");
+
+        scheduledInfoPhoneLabel.setText("Phone:");
+
+        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
+        jPanel1.setLayout(jPanel1Layout);
+        jPanel1Layout.setHorizontalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGap(20, 20, 20)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(transportToLocationLabel)
+                    .addComponent(transportToCityLabel)
+                    .addComponent(patientLastNameLabel)
+                    .addComponent(patientFirstNameLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(patientLastNameField, javax.swing.GroupLayout.DEFAULT_SIZE, 170, Short.MAX_VALUE)
+                    .addComponent(transportToCityCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(transportToLocationField)
+                    .addComponent(patientFirstNameField))
+                .addGap(35, 35, 35)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(scheduledInfoAddressLabel)
+                    .addComponent(transportToStateLabel)
+                    .addComponent(roomAptEtcLabel)
+                    .addComponent(scheduledInfoPhoneLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                        .addGroup(jPanel1Layout.createSequentialGroup()
+                            .addComponent(transportToStateField, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 24, Short.MAX_VALUE)
+                            .addComponent(scheduledInfoZipCodeLabel)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(scheduledInfoZipCodeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addComponent(roomAptEtcField)
+                        .addComponent(scheduledInfoAddressField))
+                    .addComponent(scheduledInfoPhoneField, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(23, Short.MAX_VALUE))
+        );
+        jPanel1Layout.setVerticalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGap(36, 36, 36)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(patientFirstNameLabel)
+                    .addComponent(patientFirstNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(scheduledInfoAddressLabel)
+                    .addComponent(scheduledInfoAddressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(patientLastNameLabel)
+                    .addComponent(patientLastNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(transportToStateLabel)
+                    .addComponent(transportToStateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(scheduledInfoZipCodeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(scheduledInfoZipCodeLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(transportToCityLabel)
+                    .addComponent(transportToCityCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(roomAptEtcLabel)
+                    .addComponent(roomAptEtcField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(transportToLocationLabel)
+                    .addComponent(transportToLocationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(scheduledInfoPhoneLabel)
+                    .addComponent(scheduledInfoPhoneField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(33, Short.MAX_VALUE))
+        );
+
+        jTabbedPane2.addTab("Scheduled Info", jPanel1);
+
+        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
+        jPanel3.setLayout(jPanel3Layout);
+        jPanel3Layout.setHorizontalGroup(
+            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 625, Short.MAX_VALUE)
+        );
+        jPanel3Layout.setVerticalGroup(
+            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 182, Short.MAX_VALUE)
+        );
+
+        jTabbedPane2.addTab("Time Stamps", jPanel3);
+
+        sspSafetyServicesProgramLabel.setText("SSP-Safety Services Program:");
+
+        userDateField17Label.setText("User data field #17:");
+
+        userDataField18Label.setText("User data field #18:");
+
+        userDataField19Label.setText("User data field #19:");
+
+        lawLabel.setText("LAW:");
+
+        fireLabel.setText("FIRE:");
+
+        emsLabel.setText("EMS:");
+
+        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
+        jPanel2.setLayout(jPanel2Layout);
+        jPanel2Layout.setHorizontalGroup(
+            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel2Layout.createSequentialGroup()
+                .addGap(15, 15, 15)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(userDataField19Label)
+                    .addComponent(lawLabel)
+                    .addComponent(userDataField18Label)
+                    .addComponent(userDateField17Label)
+                    .addComponent(sspSafetyServicesProgramLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(jPanel2Layout.createSequentialGroup()
+                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(sspSafetyServicesProgramField, javax.swing.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE)
+                            .addComponent(userDataField17Field)
+                            .addComponent(userDataField18Field)
+                            .addComponent(lawField))
+                        .addGap(79, 79, 79)
+                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(fireLabel)
+                            .addComponent(emsLabel))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(fireField, javax.swing.GroupLayout.DEFAULT_SIZE, 182, Short.MAX_VALUE)
+                            .addComponent(emsField)))
+                    .addGroup(jPanel2Layout.createSequentialGroup()
+                        .addComponent(userDataField19Field, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        jPanel2Layout.setVerticalGroup(
+            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel2Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(sspSafetyServicesProgramLabel)
+                    .addComponent(sspSafetyServicesProgramField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(fireLabel)
+                    .addComponent(fireField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(5, 5, 5)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(userDataField17Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(userDateField17Label)
+                    .addComponent(emsLabel)
+                    .addComponent(emsField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(5, 5, 5)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(userDataField18Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(userDataField18Label, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(5, 5, 5)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(userDataField19Label)
+                    .addComponent(userDataField19Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lawField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(lawLabel))
+                .addContainerGap(50, Short.MAX_VALUE))
+        );
+
+        jTabbedPane2.addTab("Custom Data Fields", jPanel2);
+
+        incidentNumberLabel.setText("Incident Number:");
+
+        baseResponseNumberLabel.setText("Base Response Number:");
+
+        caseNumberLabel.setText("Case Number:");
+
+        incidentTypeLabel.setText("Incident Type:");
+
+        jurisdictionLabel.setText("Jurisdiction:");
+
+        divisionLabel.setText("Division:");
+
+        batallionLabel.setText("Batallion:");
+
+        responseAreaLabel.setText("Response Area:");
+
+
+        commandChannelLabel.setText("Command Channel:");
+
+        primaryTacChannelLabel.setText("Primary Tac. Channel:");
+
+        alternateTacChannelLabel.setText("Alternate Tac. Channel:");
+
+        sectorLabel.setText("Sector:");
+
+        javax.swing.GroupLayout basicSearchPaneLayout = new javax.swing.GroupLayout(basicSearchPane);
+        basicSearchPane.setLayout(basicSearchPaneLayout);
+        basicSearchPaneLayout.setHorizontalGroup(
+            basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(basicSearchPaneLayout.createSequentialGroup()
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(basicSearchPaneLayout.createSequentialGroup()
+                        .addGap(35, 35, 35)
+                        .addComponent(jTabbedPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 630, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(basicSearchPaneLayout.createSequentialGroup()
+                        .addGap(60, 60, 60)
+                        .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(alarmLevelLabel)
+                            .addComponent(unitLabel)
+                            .addComponent(callTakenLabel)
+                            .addComponent(mapCoordinatesLabel)
+                            .addComponent(crossStreetLabel)
+                            .addComponent(stateLabel)
+                            .addComponent(natureProblemLabel)
+                            .addComponent(responseLocationLabel)
+                            .addComponent(priorityLabel)
+                            .addComponent(cityLabel)
+                            .addComponent(addressLabel)
+                            .addComponent(apartmentNumberLabel))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(priorityCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(natureProblemCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(responseLocationField)
+                            .addComponent(cityCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(addressField)
+                            .addGroup(basicSearchPaneLayout.createSequentialGroup()
+                                .addComponent(apartmentLabelField, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(61, 61, 61)
+                                .addComponent(buildingNumberLabel)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(buildingNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addGroup(basicSearchPaneLayout.createSequentialGroup()
+                                .addComponent(stateField, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(46, 46, 46)
+                                .addComponent(zipCodeLabel)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(zipCodeField, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addComponent(crossStreetField)
+                            .addComponent(mapCoordinatesField)
+                            .addComponent(callTakenCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(unitCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(alarmLevelCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                        .addGap(42, 42, 42)
+                        .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(incidentNumberLabel)
+                            .addComponent(baseResponseNumberLabel)
+                            .addComponent(caseNumberLabel)
+                            .addComponent(incidentTypeLabel)
+                            .addComponent(jurisdictionLabel)
+                            .addComponent(divisionLabel)
+                            .addComponent(batallionLabel)
+                            .addComponent(responseAreaLabel)
+                            .addComponent(commandChannelLabel)
+                            .addComponent(primaryTacChannelLabel)
+                            .addComponent(alternateTacChannelLabel)
+                            .addComponent(sectorLabel)
+                            .addComponent(responsePlanLabel))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(incidentNumberField)
+                            .addComponent(baseResponseNumberField, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE)
+                            .addComponent(caseNumberField)
+                            .addComponent(incidentTypeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(jurisdictionCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(divisionCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(batallionCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(responseAreaCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(responsePlanCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(commandChannelCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(primaryTacChannelCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(alternateTacChannelCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(sectorCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
+                .addContainerGap(84, Short.MAX_VALUE))
+        );
+        basicSearchPaneLayout.setVerticalGroup(
+            basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(basicSearchPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(priorityLabel)
+                    .addComponent(priorityCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentNumberLabel)
+                    .addComponent(incidentNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(natureProblemLabel)
+                    .addComponent(natureProblemCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(baseResponseNumberLabel)
+                    .addComponent(baseResponseNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(responseLocationLabel)
+                    .addComponent(responseLocationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(caseNumberLabel)
+                    .addComponent(caseNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(1, 1, 1)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(cityLabel)
+                    .addComponent(cityCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentTypeLabel)
+                    .addComponent(incidentTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(addressLabel)
+                    .addComponent(addressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jurisdictionLabel)
+                    .addComponent(jurisdictionCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(apartmentNumberLabel)
+                    .addComponent(apartmentLabelField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(buildingNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(buildingNumberLabel)
+                    .addComponent(divisionLabel)
+                    .addComponent(divisionCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(stateLabel)
+                    .addComponent(stateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(zipCodeLabel)
+                    .addComponent(zipCodeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(batallionLabel)
+                    .addComponent(batallionCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(crossStreetLabel)
+                    .addComponent(crossStreetField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(responseAreaLabel)
+                    .addComponent(responseAreaCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(mapCoordinatesLabel)
+                    .addComponent(mapCoordinatesField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(responsePlanLabel)
+                    .addComponent(responsePlanCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(callTakenLabel)
+                    .addComponent(callTakenCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(commandChannelLabel)
+                    .addComponent(commandChannelCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(unitLabel)
+                    .addComponent(unitCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(primaryTacChannelLabel)
+                    .addComponent(primaryTacChannelCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(alarmLevelLabel)
+                    .addComponent(alarmLevelCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(alternateTacChannelLabel)
+                    .addComponent(alternateTacChannelCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(2, 2, 2)
+                .addGroup(basicSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(sectorLabel)
+                    .addComponent(sectorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jTabbedPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 210, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(62, Short.MAX_VALUE))
+        );
+
+        jTabbedPane1.addTab("Basic", basicSearchPane);
+
+        databaseTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null, null},
+                {null, null},
+                {null, null},
+                {null, null}
+            },
+            new String [] {
+                "dB Field Name", "dB Table Name"
+            }
+        ));
+        jScrollPane1.setViewportView(databaseTable);
+
+        advancedDatabaseTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null, null, null, null, null},
+                {null, null, null, null, null},
+                {null, null, null, null, null},
+                {null, null, null, null, null}
+            },
+            new String [] {
+                "dB Field Name", "dB Table Name", "Operator", "Criteria", "Other Criteria"
+            }
+        ));
+        jScrollPane2.setViewportView(advancedDatabaseTable);
+
+        jButton3.setText("jButton3");
+
+        jButton4.setText("jButton4");
+
+        javax.swing.GroupLayout advancedSearchPaneLayout = new javax.swing.GroupLayout(advancedSearchPane);
+        advancedSearchPane.setLayout(advancedSearchPaneLayout);
+        advancedSearchPaneLayout.setHorizontalGroup(
+            advancedSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(advancedSearchPaneLayout.createSequentialGroup()
+                .addGroup(advancedSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(advancedSearchPaneLayout.createSequentialGroup()
+                        .addContainerGap()
+                        .addComponent(jScrollPane2))
+                    .addGroup(advancedSearchPaneLayout.createSequentialGroup()
+                        .addGap(124, 124, 124)
+                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 179, Short.MAX_VALUE)))
+                .addContainerGap())
+            .addGroup(advancedSearchPaneLayout.createSequentialGroup()
+                .addGap(307, 307, 307)
+                .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        advancedSearchPaneLayout.setVerticalGroup(
+            advancedSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(advancedSearchPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 0, 0)
+                .addGroup(advancedSearchPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(25, Short.MAX_VALUE))
+        );
+
+        //jTabbedPane1.addTab("Advanced", advancedSearchPane);
+
+        searchButton.setText("Search");
+        searchButton.addActionListener(new ActionListener() {
+           public void actionPerformed(ActionEvent evt) {
+               ScreenManager.refreshIncidentEditor();
+               ScreenManager.closeSearch();
+           }
+        });
+
+        exitButton.setText("Exit");
+        exitButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                ScreenManager.closeSearch();
+            }
+        });
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(0, 0, Short.MAX_VALUE)
+                        .addComponent(searchButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(jTabbedPane1)))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 640, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 17, Short.MAX_VALUE)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(exitButton)
+                    .addComponent(searchButton))
+                .addGap(5, 5, 5))
+        );
+
+        pack();
+    }// </editor-fold>                                                      
+
+    /* 
+     * Makes screen visible.
+     */
+    public void open(){
+        setVisible(true);
+    }
+    
+    /*
+     * Hides screen.
+     */
+    public void close(){
+        setVisible(false);
+    }
+    
+    // Variables declaration - do not modify                     
+    private javax.swing.JTextField addressField;
+    private javax.swing.JLabel addressLabel;
+    private javax.swing.JTable advancedDatabaseTable;
+    private javax.swing.JPanel advancedSearchPane;
+    private javax.swing.JComboBox alarmLevelCombo;
+    private javax.swing.JLabel alarmLevelLabel;
+    private javax.swing.JComboBox alternateTacChannelCombo;
+    private javax.swing.JLabel alternateTacChannelLabel;
+    private javax.swing.JTextField apartmentLabelField;
+    private javax.swing.JLabel apartmentNumberLabel;
+    private javax.swing.JTextField baseResponseNumberField;
+    private javax.swing.JLabel baseResponseNumberLabel;
+    private javax.swing.JPanel basicSearchPane;
+    private javax.swing.JComboBox batallionCombo;
+    private javax.swing.JLabel batallionLabel;
+    private javax.swing.JTextField buildingNumberField;
+    private javax.swing.JLabel buildingNumberLabel;
+    private javax.swing.JTextField callBackPhoneField;
+    private javax.swing.JLabel callBackPhoneLabel;
+    private javax.swing.JPanel callBacksPane;
+    private javax.swing.JComboBox callTakenCombo;
+    private javax.swing.JLabel callTakenLabel;
+    private javax.swing.JTextField calledFromAddressField;
+    private javax.swing.JLabel calledFromAddressLabel;
+    private javax.swing.JTextField calledFromLocationField;
+    private javax.swing.JLabel calledFromLocationLabel;
+    private javax.swing.JTextField callerNameField;
+    private javax.swing.JLabel callerNameLabel;
+    private javax.swing.JComboBox callerTypeCombo;
+    private javax.swing.JLabel callerTypeLabel;
+    private javax.swing.JTextField caseNumberField;
+    private javax.swing.JLabel caseNumberLabel;
+    private javax.swing.JComboBox cityCombo;
+    private javax.swing.JLabel cityLabel;
+    private javax.swing.JComboBox commandChannelCombo;
+    private javax.swing.JLabel commandChannelLabel;
+    private javax.swing.JTextField crossStreetField;
+    private javax.swing.JLabel crossStreetLabel;
+    private javax.swing.JTable databaseTable;
+    private javax.swing.JComboBox divisionCombo;
+    private javax.swing.JLabel divisionLabel;
+    private javax.swing.JTextField emsField;
+    private javax.swing.JLabel emsLabel;
+    private javax.swing.JButton exitButton;
+    private javax.swing.JTextField fireField;
+    private javax.swing.JLabel fireLabel;
+    private javax.swing.JTextField incidentNumberField;
+    private javax.swing.JLabel incidentNumberLabel;
+    private javax.swing.JComboBox incidentTypeCombo;
+    private javax.swing.JLabel incidentTypeLabel;
+    private javax.swing.JButton jButton3;
+    private javax.swing.JButton jButton4;
+    private javax.swing.JPanel jPanel1;
+    private javax.swing.JPanel jPanel2;
+    private javax.swing.JPanel jPanel3;
+    private javax.swing.JPanel jPanel4;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JScrollPane jScrollPane2;
+    private javax.swing.JTabbedPane jTabbedPane1;
+    private javax.swing.JTabbedPane jTabbedPane2;
+    private javax.swing.JComboBox jurisdictionCombo;
+    private javax.swing.JLabel jurisdictionLabel;
+    private javax.swing.JTextField lawField;
+    private javax.swing.JLabel lawLabel;
+    private javax.swing.JTextField mapCoordinatesField;
+    private javax.swing.JLabel mapCoordinatesLabel;
+    private javax.swing.JComboBox natureProblemCombo;
+    private javax.swing.JLabel natureProblemLabel;
+    private javax.swing.JTextField patientFirstNameField;
+    private javax.swing.JLabel patientFirstNameLabel;
+    private javax.swing.JTextField patientLastNameField;
+    private javax.swing.JLabel patientLastNameLabel;
+    private javax.swing.JComboBox primaryTacChannelCombo;
+    private javax.swing.JLabel primaryTacChannelLabel;
+    private javax.swing.JComboBox priorityCombo;
+    private javax.swing.JLabel priorityLabel;
+    private javax.swing.JComboBox responseAreaCombo;
+    private javax.swing.JLabel responseAreaLabel;
+    private javax.swing.JTextField responseLocationField;
+    private javax.swing.JLabel responseLocationLabel;
+    private javax.swing.JComboBox responsePlanCombo;
+    private javax.swing.JLabel responsePlanLabel;
+    private javax.swing.JTextField roomAptEtcField;
+    private javax.swing.JLabel roomAptEtcLabel;
+    private javax.swing.JTextField scheduledInfoAddressField;
+    private javax.swing.JLabel scheduledInfoAddressLabel;
+    private javax.swing.JTextField scheduledInfoPhoneField;
+    private javax.swing.JLabel scheduledInfoPhoneLabel;
+    private javax.swing.JTextField scheduledInfoZipCodeField;
+    private javax.swing.JLabel scheduledInfoZipCodeLabel;
+    private javax.swing.JButton searchButton;
+    private javax.swing.JComboBox sectorCombo;
+    private javax.swing.JLabel sectorLabel;
+    private javax.swing.JTextField sspSafetyServicesProgramField;
+    private javax.swing.JLabel sspSafetyServicesProgramLabel;
+    private javax.swing.JTextField stateField;
+    private javax.swing.JLabel stateLabel;
+    private javax.swing.JComboBox transportToCityCombo;
+    private javax.swing.JLabel transportToCityLabel;
+    private javax.swing.JTextField transportToLocationField;
+    private javax.swing.JLabel transportToLocationLabel;
+    private javax.swing.JTextField transportToStateField;
+    private javax.swing.JLabel transportToStateLabel;
+    private javax.swing.JTextField transportationAddressField;
+    private javax.swing.JLabel transportationAddressLabel;
+    private javax.swing.JTextField transportationLocationField;
+    private javax.swing.JLabel transportationLocationLabel;
+    private javax.swing.JPanel transportationPane;
+    private javax.swing.JComboBox unitCombo;
+    private javax.swing.JLabel unitLabel;
+    private javax.swing.JTextField userDataField17Field;
+    private javax.swing.JTextField userDataField18Field;
+    private javax.swing.JLabel userDataField18Label;
+    private javax.swing.JTextField userDataField19Field;
+    private javax.swing.JLabel userDataField19Label;
+    private javax.swing.JLabel userDateField17Label;
+    private javax.swing.JTextField zipCodeField;
+    private javax.swing.JLabel zipCodeLabel;
+    // End of variables declaration                   
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/VehicleInformationEntry.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/VehicleInformationEntry.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/VehicleInformationEntry.java	(revision 82)
@@ -0,0 +1,382 @@
+package tmcsim.client.cadclientgui.screens;
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ * CURRENTLY NOT IN USE.
+ * @author Stuart
+ */
+public class VehicleInformationEntry extends javax.swing.JFrame {
+
+    /**
+     * Creates new form VehicleInformationEntry
+     */
+    public VehicleInformationEntry() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        incidentNumberLabel = new javax.swing.JLabel();
+        incidentNumberField = new javax.swing.JTextField();
+        involvementTypeLabel = new javax.swing.JLabel();
+        involvementTypeCombo = new javax.swing.JComboBox();
+        towedByLabel = new javax.swing.JLabel();
+        towedByField = new javax.swing.JTextField();
+        vehicleCharacteristicsPane = new javax.swing.JPanel();
+        makeYearLabel = new javax.swing.JLabel();
+        makeLabel = new javax.swing.JLabel();
+        modelLabel = new javax.swing.JLabel();
+        makeYearField = new javax.swing.JTextField();
+        makeCombo = new javax.swing.JComboBox();
+        modelField = new javax.swing.JTextField();
+        styleLabel = new javax.swing.JLabel();
+        color1Label = new javax.swing.JLabel();
+        color2Label = new javax.swing.JLabel();
+        styleField = new javax.swing.JTextField();
+        color1Field = new javax.swing.JTextField();
+        color2Field = new javax.swing.JTextField();
+        registrationInformationPane = new javax.swing.JPanel();
+        licensePlateNoLabel = new javax.swing.JLabel();
+        licensePlateStateLabel = new javax.swing.JLabel();
+        licensePlateYearLabel = new javax.swing.JLabel();
+        licensePlateTypeLabel = new javax.swing.JLabel();
+        vinLabel = new javax.swing.JLabel();
+        licensePlateNoField = new javax.swing.JTextField();
+        licensePlateStateCombo = new javax.swing.JComboBox();
+        licensePlateYearField = new javax.swing.JTextField();
+        licensePlateTypeCombo = new javax.swing.JComboBox();
+        vinField = new javax.swing.JTextField();
+        commentsField = new javax.swing.JTextField();
+        characteristicsField = new javax.swing.JTextField();
+        characteristicsLabel = new javax.swing.JLabel();
+        commentsLabel = new javax.swing.JLabel();
+        jButton1 = new javax.swing.JButton();
+        saveButton = new javax.swing.JButton();
+        cancelButton = new javax.swing.JButton();
+        
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+
+        incidentNumberLabel.setText("Incident No:");
+
+        incidentNumberField.setText("jTextField1");
+
+        involvementTypeLabel.setText("<html>\nInvolvement<br>Type:\n</html>");
+
+        involvementTypeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        towedByLabel.setText("Towed By:");
+
+        towedByField.setText("jTextField2");
+
+        makeYearLabel.setText("Make Year:");
+
+        makeLabel.setText("Make:");
+
+        modelLabel.setText("Model:");
+
+        makeYearField.setText("jTextField3");
+
+        makeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        modelField.setText("jTextField4");
+
+        styleLabel.setText("Style:");
+
+        color1Label.setText("Color 1:");
+
+        color2Label.setText("Color 2:");
+
+        styleField.setText("jTextField5");
+
+        color1Field.setText("jTextField6");
+
+        color2Field.setText("jTextField7");
+
+        javax.swing.GroupLayout vehicleCharacteristicsPaneLayout = new javax.swing.GroupLayout(vehicleCharacteristicsPane);
+        vehicleCharacteristicsPane.setLayout(vehicleCharacteristicsPaneLayout);
+        vehicleCharacteristicsPaneLayout.setHorizontalGroup(
+            vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(vehicleCharacteristicsPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(modelLabel)
+                    .addComponent(makeLabel)
+                    .addComponent(makeYearLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(makeYearField, javax.swing.GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE)
+                    .addComponent(makeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(modelField))
+                .addGap(18, 18, 18)
+                .addGroup(vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                        .addComponent(color1Label)
+                        .addComponent(color2Label))
+                    .addComponent(styleLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(styleField, javax.swing.GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE)
+                    .addComponent(color1Field)
+                    .addComponent(color2Field))
+                .addContainerGap())
+        );
+        vehicleCharacteristicsPaneLayout.setVerticalGroup(
+            vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(vehicleCharacteristicsPaneLayout.createSequentialGroup()
+                .addGap(22, 22, 22)
+                .addGroup(vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(makeYearLabel)
+                    .addComponent(makeYearField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(styleLabel)
+                    .addComponent(styleField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(makeLabel)
+                    .addComponent(makeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(color1Label)
+                    .addComponent(color1Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(vehicleCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(modelLabel)
+                    .addComponent(modelField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(color2Label)
+                    .addComponent(color2Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        licensePlateNoLabel.setText("License Plate No:");
+
+        licensePlateStateLabel.setText("License Plate State:");
+
+        licensePlateYearLabel.setText("License Plate Year:");
+
+        licensePlateTypeLabel.setText("License PLate Type:");
+
+        vinLabel.setText("VIN:");
+
+        licensePlateNoField.setText("jTextField8");
+
+        licensePlateStateCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        licensePlateYearField.setText("jTextField9");
+
+        licensePlateTypeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        vinField.setText("jTextField10");
+
+        javax.swing.GroupLayout registrationInformationPaneLayout = new javax.swing.GroupLayout(registrationInformationPane);
+        registrationInformationPane.setLayout(registrationInformationPaneLayout);
+        registrationInformationPaneLayout.setHorizontalGroup(
+            registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(registrationInformationPaneLayout.createSequentialGroup()
+                .addGap(35, 35, 35)
+                .addGroup(registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(vinLabel)
+                    .addComponent(licensePlateTypeLabel)
+                    .addComponent(licensePlateYearLabel)
+                    .addComponent(licensePlateStateLabel)
+                    .addComponent(licensePlateNoLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                        .addComponent(licensePlateStateCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(licensePlateNoField, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
+                        .addComponent(licensePlateYearField)
+                        .addComponent(licensePlateTypeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addComponent(vinField, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        registrationInformationPaneLayout.setVerticalGroup(
+            registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(registrationInformationPaneLayout.createSequentialGroup()
+                .addGap(20, 20, 20)
+                .addGroup(registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(licensePlateNoLabel)
+                    .addComponent(licensePlateNoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(licensePlateStateLabel)
+                    .addComponent(licensePlateStateCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(licensePlateYearLabel)
+                    .addComponent(licensePlateYearField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(licensePlateTypeLabel)
+                    .addComponent(licensePlateTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(registrationInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(vinLabel)
+                    .addComponent(vinField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        commentsField.setText("jTextField11");
+
+        characteristicsField.setText("jTextField12");
+
+        characteristicsLabel.setText("Characteristics:");
+
+        commentsLabel.setText("Comments:");
+
+        jButton1.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
+        jButton1.setText("<html>\nSave with Records<br>Check\n</html>");
+        jButton1.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        saveButton.setText("Save");
+
+        cancelButton.setText("Cancel");
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addGap(32, 32, 32)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(involvementTypeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentNumberLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(involvementTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(57, 57, 57)
+                        .addComponent(towedByLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(towedByField, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(incidentNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(0, 0, Short.MAX_VALUE))
+            .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addContainerGap()
+                        .addComponent(vehicleCharacteristicsPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(18, 18, 18)
+                        .addComponent(registrationInformationPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(saveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addGap(21, 21, 21)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(characteristicsField, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
+                            .addGroup(layout.createSequentialGroup()
+                                .addComponent(characteristicsLabel)
+                                .addGap(0, 0, Short.MAX_VALUE)))
+                        .addGap(18, 18, 18)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(commentsLabel)
+                            .addComponent(commentsField, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(incidentNumberLabel)
+                    .addComponent(incidentNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(involvementTypeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(11, 11, 11)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(involvementTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(towedByLabel)
+                            .addComponent(towedByField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(vehicleCharacteristicsPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(registrationInformationPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(commentsLabel)
+                    .addComponent(characteristicsLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(characteristicsField)
+                    .addComponent(commentsField, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(18, 18, 18)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                        .addComponent(saveButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    /* 
+     * Makes screen visible.
+     */
+    public void open(){
+        setVisible(true);
+    }
+    
+    /*
+     * Hides screen.
+     */
+    public void close(){
+        setVisible(false);
+    }
+    
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton cancelButton;
+    private javax.swing.JTextField characteristicsField;
+    private javax.swing.JLabel characteristicsLabel;
+    private javax.swing.JTextField color1Field;
+    private javax.swing.JLabel color1Label;
+    private javax.swing.JTextField color2Field;
+    private javax.swing.JLabel color2Label;
+    private javax.swing.JTextField commentsField;
+    private javax.swing.JLabel commentsLabel;
+    private javax.swing.JTextField incidentNumberField;
+    private javax.swing.JLabel incidentNumberLabel;
+    private javax.swing.JComboBox involvementTypeCombo;
+    private javax.swing.JLabel involvementTypeLabel;
+    private javax.swing.JButton jButton1;
+    private javax.swing.JTextField licensePlateNoField;
+    private javax.swing.JLabel licensePlateNoLabel;
+    private javax.swing.JComboBox licensePlateStateCombo;
+    private javax.swing.JLabel licensePlateStateLabel;
+    private javax.swing.JComboBox licensePlateTypeCombo;
+    private javax.swing.JLabel licensePlateTypeLabel;
+    private javax.swing.JTextField licensePlateYearField;
+    private javax.swing.JLabel licensePlateYearLabel;
+    private javax.swing.JComboBox makeCombo;
+    private javax.swing.JLabel makeLabel;
+    private javax.swing.JTextField makeYearField;
+    private javax.swing.JLabel makeYearLabel;
+    private javax.swing.JTextField modelField;
+    private javax.swing.JLabel modelLabel;
+    private javax.swing.JPanel registrationInformationPane;
+    private javax.swing.JButton saveButton;
+    private javax.swing.JTextField styleField;
+    private javax.swing.JLabel styleLabel;
+    private javax.swing.JTextField towedByField;
+    private javax.swing.JLabel towedByLabel;
+    private javax.swing.JPanel vehicleCharacteristicsPane;
+    private javax.swing.JTextField vinField;
+    private javax.swing.JLabel vinLabel;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/Login.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/Login.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/Login.java	(revision 82)
@@ -0,0 +1,209 @@
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.Color;
+import static java.awt.Component.LEFT_ALIGNMENT;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+
+/**
+ * This class contains the view and controller for the Login screen. The view
+ * was not built using a GUI builder plug-in (but may want to consider doing so
+ * in the future), and the controller uses listeners to control how the view and
+ * data act.
+ *
+ * @author Vincent
+ */
+public class Login extends JFrame
+{
+    private Box login;
+    private JTextField userNameField;
+    private JTextField passwordField;
+    public static String kNamePrompt = "Enter your name";
+
+    public Login()
+    {
+        initView();
+    }
+
+    private ActionListener newEnterActionListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                setVisible(false);
+                // Check if user provided a username JD
+                String userEntry = userNameField.getText();
+                if (userEntry.equals(kNamePrompt))
+                {
+                    ScreenManager.setUserName("Anonymous Trainee");
+                }
+                else
+                {
+                    ScreenManager.setUserName(userEntry);
+                }
+                ScreenManager.openCADMenu();
+                ScreenManager.openAssignedIncidents();
+                ScreenManager.openUnitStatus();
+                ScreenManager.openPendingIncidents();
+                ScreenManager.openPowerlineUI();
+                if (!passwordField.getText().equals("Dispatcher"))
+                {
+                    ScreenManager.setDispatcherAuthority(false);
+                }
+            }
+        };
+    }
+
+    private ActionListener newExitActionListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                System.exit(0);
+            }
+        };
+    }
+
+    private void initView()
+    {
+        login = new Box(BoxLayout.Y_AXIS);
+        login.setAlignmentX(LEFT_ALIGNMENT);
+        JPanel whiteBackground = new JPanel();
+        whiteBackground.setAlignmentX(LEFT_ALIGNMENT);
+        whiteBackground.setBackground(Color.WHITE);
+        whiteBackground.setMaximumSize(new Dimension(750, 150));
+        whiteBackground.setMinimumSize(new Dimension(750, 150));
+        whiteBackground.setPreferredSize(new Dimension(750, 150));
+        login.add(whiteBackground);
+
+        JPanel blueBackground = new JPanel();
+        blueBackground.setAlignmentX(LEFT_ALIGNMENT);
+        blueBackground.setBackground(new Color(50, 150, 200));
+        blueBackground.setMaximumSize(new Dimension(750, 350));
+        blueBackground.setMinimumSize(new Dimension(750, 350));
+        blueBackground.setPreferredSize(new Dimension(750, 350));
+
+        JLabel title = new JLabel();
+        // Check if we are running from a jar to put message from manifest into title
+        Package clientpkg = Login.class.getPackage();
+        String builddate = clientpkg.getImplementationVersion();
+        String version = "";
+        if (builddate != null)
+        {
+            version = "          (build " + builddate + ")";
+        }
+        else // We're running from a dev environment
+        {
+            version = "           00-00-00 00:00";
+        }
+
+        title.setText("Inform CAD 5.3 Patch 5 ");
+        title.setHorizontalAlignment(SwingConstants.CENTER);
+        title.setFont(new Font("Arial", Font.PLAIN, 22));
+        title.setForeground(Color.WHITE);
+        title.setMaximumSize(new Dimension(750, 100));
+        title.setMinimumSize(new Dimension(750, 100));
+        title.setPreferredSize(new Dimension(750, 100));
+        blueBackground.add(title);
+
+        JLabel builddateLabel = new JLabel(version);
+        builddateLabel.setForeground(Color.WHITE);
+        builddateLabel.setHorizontalAlignment(SwingConstants.CENTER);
+        blueBackground.add(builddateLabel);
+
+        Box leftBox = new Box(BoxLayout.Y_AXIS);
+        leftBox.setMaximumSize(new Dimension(350, 50));
+        leftBox.setMinimumSize(new Dimension(350, 50));
+        leftBox.setPreferredSize(new Dimension(350, 50));
+        leftBox.setAlignmentX(LEFT_ALIGNMENT);
+
+        JLabel userNameLabel = new JLabel("User name ");
+        userNameLabel.setForeground(Color.WHITE);
+        userNameField = new JTextField(kNamePrompt);
+        Box userNameBox = new Box(BoxLayout.X_AXIS);
+        userNameBox.setAlignmentX(LEFT_ALIGNMENT);
+        userNameBox.add(Box.createHorizontalStrut(10));
+        userNameBox.add(userNameLabel);
+        userNameBox.add(userNameField);
+        leftBox.add(userNameBox);
+
+        JLabel passwordLabel = new JLabel("Password  ");
+        passwordLabel.setForeground(Color.WHITE);
+        passwordField = new JTextField("Not required");
+        Box passwordBox = new Box(BoxLayout.X_AXIS);
+        passwordBox.setAlignmentX(LEFT_ALIGNMENT);
+        passwordBox.add(Box.createHorizontalStrut(10));
+        passwordBox.add(passwordLabel);
+        passwordBox.add(passwordField);
+        leftBox.add(Box.createVerticalStrut(10));
+        leftBox.add(passwordBox);
+
+        JButton enter = new JButton("Login");
+        enter.addActionListener(newEnterActionListener());
+        JButton newPassword = new JButton("New Password");
+        newPassword.setEnabled(false);
+        JButton exit = new JButton("Exit");
+        exit.addActionListener(newExitActionListener());
+        JButton selectAll = new JButton("Select All");
+        selectAll.setEnabled(false);
+        JButton unselectAll = new JButton("Unselect all");
+        unselectAll.setEnabled(false);
+        Box buttonBox = new Box(BoxLayout.X_AXIS);
+        buttonBox.setAlignmentX(LEFT_ALIGNMENT);
+        buttonBox.add(Box.createHorizontalStrut(75));
+        buttonBox.add(enter);
+        buttonBox.add(Box.createHorizontalStrut(20));
+        buttonBox.add(newPassword);
+        buttonBox.add(Box.createHorizontalStrut(20));
+        buttonBox.add(exit);
+        buttonBox.add(Box.createHorizontalStrut(125));
+        buttonBox.add(selectAll);
+        buttonBox.add(Box.createHorizontalStrut(10));
+        buttonBox.add(unselectAll);
+
+        Box rightBox = new Box(BoxLayout.Y_AXIS);
+        rightBox.setAlignmentX(LEFT_ALIGNMENT);
+        rightBox.setMaximumSize(new Dimension(250, 90));
+        rightBox.setMinimumSize(new Dimension(250, 90));
+        rightBox.setPreferredSize(new Dimension(250, 90));
+        JLabel position = new JLabel("Positions:");
+        position.setPreferredSize(new Dimension(250, 20));
+        position.setMaximumSize(new Dimension(250, 20));
+        position.setMinimumSize(new Dimension(250, 20));
+        position.setBackground(Color.BLACK);
+        position.setHorizontalAlignment(SwingConstants.LEFT);
+        position.setForeground(Color.WHITE);
+        rightBox.add(position);
+        JPanel list = new JPanel();
+        rightBox.add(list);
+
+        Box centerBox = new Box(BoxLayout.X_AXIS);
+        centerBox.setAlignmentX(LEFT_ALIGNMENT);
+        centerBox.add(leftBox);
+        centerBox.add(Box.createHorizontalStrut(75));
+        centerBox.add(rightBox);
+        blueBackground.add(centerBox);
+        blueBackground.add(Box.createVerticalStrut(125));
+        blueBackground.add(buttonBox);
+        login.add(blueBackground);
+
+        getContentPane().add(login);
+        setUndecorated(true);
+        pack();
+        setLocationRelativeTo(null);
+        setDefaultCloseOperation(EXIT_ON_CLOSE);
+        setVisible(true);
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/Cardfile.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/Cardfile.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/Cardfile.java	(revision 82)
@@ -0,0 +1,1987 @@
+
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.rmi.RemoteException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.LinkedList;
+import java.awt.List;
+
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.client.cadclientgui.data.CardfileDataObject;
+import tmcsim.client.cadclientgui.data.CardfileList;
+import tmcsim.client.cadclientgui.data.ChangeLog;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.EditCommand;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.CARDFILE;
+
+/**
+ * This class contains the view and controller for the Cardfile screen. The view is built using a GUI builder plug-in, and the controller 
+ * uses listeners to control how the view and data act. Upon closing this screen, it will ask if the user would like to save the changes
+ * made. This requires a local copy of the data for the user to operate on, and only if the user commits to the changes do the change logs
+ * make their way back to the database.
+ * 
+ * @author Stuart
+ */
+public class Cardfile extends javax.swing.JFrame {
+
+    private boolean saveFields;
+
+    // local copies of the cardfile data
+    private CardfileList coastalDivisionUnitsList;
+    private CardfileList policeSheriffCoronerList;
+    private CardfileList courtsList;
+    private CardfileList publicTransportationList;
+    private CardfileList ggOtherList;
+    private CardfileList myMiscList;
+    private CardfileList slMiscList;
+    private CardfileList vtMiscList;
+    private CardfileList chpOfficesList;
+    private CardfileList stateAgenciesFacilitiesList;
+    private CardfileList governmentOfficialsList;
+    private CardfileList federalAgenciesList;
+    private CardfileList ranchesLivestockList;
+    private CardfileList fireEmsList;
+    private CardfileList jailsList;
+    private CardfileList hospitalsMedCentersList;
+    private CardfileList towCompaniesList;
+    private CardfileList calTransList;
+    private CardfileList countyRoadsList;
+    private CardfileList utilitiesList;
+    private CardfileList animalControlList;
+    private CardfileList airportsList;
+    private CardfileList creditCardsList;
+    private CardfileList ggCrisisSheltersList;
+    private CardfileList rangesList;
+    private CardfileList hotlinesList;
+    private CardfileList hwyPatrolsOosList;
+    private CardfileList parksRecreationList;
+    private CardfileList sheltersList;
+    private CardfileList slCountyServicesList;
+    private CardfileList slResourcesList;
+    private CardfileList truckTireRepairList;
+    private CardfileList mccEmployeesList;
+    private CardfileList gateAccessCodesList;
+    private CardfileList vtCallSignsList;
+    private CardfileList slccEmployeesList;
+
+    private boolean changesMade = false;
+
+    // list of change logs to be sent over to the server data if user chooses to
+    // save changes upon close
+    private LinkedList<ChangeLog> cardfileObjectEdits = new LinkedList<ChangeLog>();
+    private LinkedList<ChangeLog> cardfileObjectDeletes = new LinkedList<ChangeLog>();
+    private LinkedList<ChangeLog> cardfileObjectAdds = new LinkedList<ChangeLog>();
+    private LinkedList<ChangeLog> tableDeletes = new LinkedList<ChangeLog>();
+    private LinkedList<ChangeLog> tableAdds = new LinkedList<ChangeLog>();
+
+    // variables to keep track of current status of cardfile
+    CardfileList selectedList;
+    CardfileDataObject currObject;
+    private int currId;
+    private String currName;
+    private String currAddress;
+    private String currCity;
+    private String currState;
+    private String currZip;
+    private String currPhone1;
+    private String currPhone2;
+    private String currFax;
+
+    // listener for lists
+    private MouseListener mouseListener;
+
+    /**
+     * Creates new form Cardfile
+     */
+    public Cardfile() {
+        declareComponents();
+        initControllers();
+        initView();
+    }
+    
+    /** local main for testing - just show the frame */    
+    public static void main(String[] args)
+    {
+        new Cardfile().setVisible(true);
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed"
+    // desc="Generated Code">//GEN-BEGIN:initComponents
+    private void declareComponents() {
+
+        cardfileTabs = new javax.swing.JTabbedPane();
+        coastalDivisionUnitsPane = new javax.swing.JPanel();
+        policeSheriffCoronerPane = new javax.swing.JPanel();
+        courtsPane = new javax.swing.JPanel();
+        publicTransportationPane = new javax.swing.JPanel();
+        ggOtherPane = new javax.swing.JPanel();
+        myMiscPane = new javax.swing.JPanel();
+        slMiscPane = new javax.swing.JPanel();
+        vtMiscPane = new javax.swing.JPanel();
+        chpOfficesPane = new javax.swing.JPanel();
+        stateAgenciesFacilitiesPane = new javax.swing.JPanel();
+        governmentOfficialsPane = new javax.swing.JPanel();
+        federalAgenciesPane = new javax.swing.JPanel();
+        ranchesLivestockPane = new javax.swing.JPanel();
+        fireEmsPane = new javax.swing.JPanel();
+        jailsPane = new javax.swing.JPanel();
+        hospitalsMedCentersPane = new javax.swing.JPanel();
+        towCompaniesPane = new javax.swing.JPanel();
+        calTransPane = new javax.swing.JPanel();
+        countyRoadsPane = new javax.swing.JPanel();
+        utilitiesPane = new javax.swing.JPanel();
+        animalControlPane = new javax.swing.JPanel();
+        airportsPane = new javax.swing.JPanel();
+        creditCardsPane = new javax.swing.JPanel();
+        ggCrisisSheltersPane = new javax.swing.JPanel();
+        rangesPane = new javax.swing.JPanel();
+        hotlinesPane = new javax.swing.JPanel();
+        hwyPatrolsOosPane = new javax.swing.JPanel();
+        parksRecreationPane = new javax.swing.JPanel();
+        sheltersPane = new javax.swing.JPanel();
+        slCountyServicesPane = new javax.swing.JPanel();
+        slResourcesPane = new javax.swing.JPanel();
+        truckTireRepairPane = new javax.swing.JPanel();
+        mccEmployeesPane = new javax.swing.JPanel();
+        gateAccessCodesPane = new javax.swing.JPanel();
+        vtCallSignsPane = new javax.swing.JPanel();
+        slccEmployeesPane = new javax.swing.JPanel();
+        nameLabel = new javax.swing.JLabel();
+        nameField = new javax.swing.JTextField();
+        addressField = new javax.swing.JTextField();
+        addressLabel = new javax.swing.JLabel();
+        cityLabel = new javax.swing.JLabel();
+        cityField = new javax.swing.JTextField();
+        stateField = new javax.swing.JTextField(3);
+        stateLabel = new javax.swing.JLabel();
+        zipLabel = new javax.swing.JLabel();
+        zipField = new javax.swing.JTextField();
+        phone1Field = new javax.swing.JTextField();
+        phone1Label = new javax.swing.JLabel();
+        phone2Field = new javax.swing.JTextField();
+        phone2Label = new javax.swing.JLabel();
+        faxField = new javax.swing.JTextField();
+        faxLabel = new javax.swing.JLabel();
+        commentsLabel = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        commentsTable = new javax.swing.JTable();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        commentsField = new javax.swing.JTextPane();
+        addCommentButton = new javax.swing.JButton();
+        cancelCommentButton = new javax.swing.JButton();
+        saveCommentButton = new javax.swing.JButton();
+        deleteCommentButton = new javax.swing.JButton();
+        exitButton = new javax.swing.JButton();
+        printButton = new javax.swing.JButton();
+        saveButton = new javax.swing.JButton();
+        cancelButton = new javax.swing.JButton();
+        deleteButton = new javax.swing.JButton();
+        addButton = new javax.swing.JButton();
+    }
+
+    private ChangeListener newChangeListener() {
+        return new ChangeListener() {
+            public void stateChanged(ChangeEvent e) {
+                if (cardfileTabs.getTitleAt(cardfileTabs.getSelectedIndex()) == CARDFILE.COASTAL_DIVISION_UNITS.tag) {
+                    selectedList = coastalDivisionUnitsList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.POLICE_SHERIFF_CORONER.tag) {
+                    selectedList = policeSheriffCoronerList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.COURTS.tag) {
+                    selectedList = courtsList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.PUBLIC_TRANSPORTATION.tag) {
+                    selectedList = publicTransportationList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.GG_OTHER.tag) {
+                    selectedList = ggOtherList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.MY_MISC.tag) {
+                    selectedList = myMiscList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.SL_MISC.tag) {
+                    selectedList = slMiscList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.VT_MISC.tag) {
+                    selectedList = vtMiscList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.CHP_OFFICES.tag) {
+                    selectedList = chpOfficesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.STATE_AGENCIES_FACILITIES.tag) {
+                    selectedList = stateAgenciesFacilitiesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.GOVERNMENT_OFFICIALS.tag) {
+                    selectedList = governmentOfficialsList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.FEDERAL_AGENCIES.tag) {
+                    selectedList = federalAgenciesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.RANCHES_LIVESTOCK.tag) {
+                    selectedList = ranchesLivestockList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.FIRE_EMS.tag) {
+                    selectedList = fireEmsList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.JAILS.tag) {
+                    selectedList = jailsList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.HOSPITALS_MED_CENTERS.tag) {
+                    selectedList = hospitalsMedCentersList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.TOW_COMPANIES.tag) {
+                    selectedList = towCompaniesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.CALTRANS.tag) {
+                    selectedList = calTransList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.COUNTY_ROADS.tag) {
+                    selectedList = countyRoadsList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.UTILITIES.tag) {
+                    selectedList = utilitiesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.ANIMAL_CONTROL.tag) {
+                    selectedList = animalControlList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.AIRPORTS.tag) {
+                    selectedList = airportsList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.CREDIT_CARDS.tag) {
+                    selectedList = creditCardsList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.GG_CRISIS_SHELTERS.tag) {
+                    selectedList = ggCrisisSheltersList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.RANGES.tag) {
+                    selectedList = rangesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.HOTLINES.tag) {
+                    selectedList = hotlinesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.HWY_PATROLS_OOS.tag) {
+                    selectedList = hwyPatrolsOosList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.PARKS_RECREATION.tag) {
+                    selectedList = parksRecreationList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.SHELTERS.tag) {
+                    selectedList = sheltersList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.SL_COUNTY_SERVICES.tag) {
+                    selectedList = slCountyServicesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.SL_RESOURCES.tag) {
+                    selectedList = slResourcesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.TRUCK_TIRE_REPAIR.tag) {
+                    selectedList = truckTireRepairList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.MCC_EMPLOYEES.tag) {
+                    selectedList = mccEmployeesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.GATE_ACCESS_CODES.tag) {
+                    selectedList = gateAccessCodesList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.VT_CALL_SIGNS.tag) {
+                    selectedList = vtCallSignsList;
+                } else if (cardfileTabs.getTitleAt(cardfileTabs
+                        .getSelectedIndex()) == CARDFILE.SLCC_EMPLOYEES.tag) {
+                    selectedList = slccEmployeesList;
+                }
+            }
+        };
+    }
+
+    private WindowAdapter newWindowListener(){
+        return new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                close();
+            }
+        };
+    }
+    
+    private void initMouseListener(){
+        mouseListener = new MouseListener() {
+            public void mouseClicked(MouseEvent arg0) {
+                saveInformation();
+                refreshInformation();
+            }
+
+            public void mouseEntered(MouseEvent arg0) {
+            }
+
+            public void mouseExited(MouseEvent arg0) {
+            }
+
+            public void mousePressed(MouseEvent arg0) {
+                saveInformation();
+                refreshInformation();
+            }
+
+            public void mouseReleased(MouseEvent arg0) {
+            }
+        };
+    }
+    
+    private ListSelectionListener newCommentsListSelectionListener(){
+        return new ListSelectionListener() {
+            public void valueChanged(ListSelectionEvent arg0) {
+                if (commentsTable.getSelectedRow() >= 0) {
+                    cancelCommentButton.setEnabled(true);
+                    deleteCommentButton.setEnabled(true);
+                }
+            }
+        };
+    }
+    
+    private DocumentListener newCommentsDocumentListener(){
+        return new DocumentListener(){
+            public void changedUpdate(DocumentEvent e) {
+            }
+    
+            public void insertUpdate(DocumentEvent e) {
+                saveCommentButton.setEnabled(true);
+            }
+    
+            public void removeUpdate(DocumentEvent e) {
+            }
+        };
+    }
+    
+    private ActionListener newCommentsAddActionListener(){
+        return new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                commentsTable.clearSelection();
+                addCommentButton.setEnabled(false);
+                deleteCommentButton.setEnabled(false);
+                cancelCommentButton.setEnabled(true);
+                commentsField.setEditable(true);
+                commentsField.requestFocus();
+            }
+        };
+    }
+    
+    private ActionListener newCommentsCancelActionListener(){
+        return new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                addCommentButton.setEnabled(true);
+                cancelCommentButton.setEnabled(false);
+                deleteCommentButton.setEnabled(false);
+                saveCommentButton.setEnabled(false);
+                commentsTable.clearSelection();
+                commentsField.setText("");
+                commentsField.setEditable(false);
+            }
+        };
+    }
+    
+    private ActionListener newCommentsSaveActionListener(){
+        return new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
+                DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
+                String[] tableFields = { dateFormat.format(new Date()),
+                        timeFormat.format(new Date()), "",
+                        commentsField.getText() };
+                currObject.addComment(tableFields);
+                ((DefaultTableModel) commentsTable.getModel())
+                        .addRow(tableFields);
+                changesMade = true;
+                tableAdds.add(new ChangeLog(EditCommand.TABLE_ADD, cardfileTabs
+                        .getTitleAt(cardfileTabs.getSelectedIndex()), currId,
+                        tableFields));
+                addCommentButton.setEnabled(true);
+                cancelCommentButton.setEnabled(false);
+                saveCommentButton.setEnabled(false);
+                commentsField.setText("");
+                commentsField.setEditable(false);
+            }
+        };
+    }
+    
+    private ActionListener newCommentsDeleteActionListener(){
+        return new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                changesMade = true;
+                tableDeletes.add(new ChangeLog(
+                        EditCommand.TABLE_DELETE,
+                        cardfileTabs.getTitleAt(cardfileTabs.getSelectedIndex()),
+                        (String) commentsTable.getValueAt(
+                                commentsTable.getSelectedRow(), 1), currId));
+                ((DefaultTableModel) commentsTable.getModel())
+                        .removeRow(commentsTable.getSelectedRow());
+                deleteCommentButton.setEnabled(false);
+            }
+        };
+    }
+    
+    private ActionListener newExitActionListener(){
+        return new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                close();
+            }
+        };
+    }
+    
+    private ActionListener newSaveActionListener(){
+        return new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                changesMade = true;
+                saveFields = false;
+                addButton.setEnabled(true);
+                cancelButton.setEnabled(false);
+                saveButton.setEnabled(false);
+                CardfileDataObject cfdo = null;
+                try {
+                    cfdo = new CardfileDataObject(cardfileTabs
+                            .getTitleAt(cardfileTabs.getSelectedIndex()),
+                            nameField.getText(), ScreenManager.theCoordinator
+                                    .obtainNewUniqueId());
+                } catch (RemoteException e) {
+                    e.printStackTrace();
+                }
+                cfdo.setAddress(addressField.getText());
+                cfdo.setCity(cityField.getText());
+                cfdo.setState(stateField.getText());
+                cfdo.setZip(zipField.getText());
+                cfdo.setPhone1(phone1Field.getText());
+                cfdo.setPhone2(phone2Field.getText());
+                cfdo.setFax(faxField.getText());
+                selectedList.select(selectedList.addDataObject(cfdo));
+                cardfileObjectAdds.add(new ChangeLog(
+                        EditCommand.OBJECT_ADD,
+                        cardfileTabs.getTitleAt(cardfileTabs.getSelectedIndex()),
+                        cfdo));
+                saveInformation();
+                refreshInformation();
+            }
+        };
+    }
+    
+    private ActionListener newCancelActionListener(){
+        return new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                selectedList.deselect(selectedList.getSelectedIndex());
+                saveFields = false;
+                addButton.setEnabled(true);
+                addCommentButton.setEnabled(false);
+                cancelButton.setEnabled(false);
+                deleteButton.setEnabled(false);
+                saveButton.setEnabled(false);
+                nameField.setText("");
+                nameField.requestFocus();
+                addressField.setText("");
+                cityField.setText("");
+                stateField.setText("");
+                zipField.setText("");
+                phone1Field.setText("");
+                phone2Field.setText("");
+                faxField.setText("");
+            }
+        };
+    }
+    
+    private ActionListener newDeleteActionListener(){
+        return new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                changesMade = true;
+                saveFields = false;
+                deleteButton.setEnabled(false);
+                cancelButton.setEnabled(false);
+                addCommentButton.setEnabled(false);
+                nameField.setText("");
+                nameField.requestFocus();
+                addressField.setText("");
+                cityField.setText("");
+                stateField.setText("");
+                zipField.setText("");
+                phone1Field.setText("");
+                phone2Field.setText("");
+                faxField.setText("");
+                int index = selectedList.getSelectedIndex();
+                cardfileObjectAdds.add(new ChangeLog(
+                        EditCommand.OBJECT_DELETE,
+                        cardfileTabs.getTitleAt(cardfileTabs.getSelectedIndex()),
+                        selectedList.getCFDO(index).getId()));
+                selectedList.removeDataObject(selectedList.getSelectedIndex());
+            }
+        };
+    }
+    
+    private ActionListener newAddActionListener(){
+        return new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                selectedList.deselect(selectedList.getSelectedIndex());
+                addCommentButton.setEnabled(false);
+                addButton.setEnabled(false);
+                deleteButton.setEnabled(false);
+                cancelButton.setEnabled(true);
+                saveButton.setEnabled(true);
+                nameField.setText("");
+                nameField.requestFocus();
+                addressField.setText("");
+                cityField.setText("");
+                stateField.setText("");
+                zipField.setText("");
+                phone1Field.setText("");
+                phone2Field.setText("");
+                faxField.setText("");
+            }
+        };
+    }
+    
+    private void initControllers() {
+        cardfileTabs.addChangeListener(newChangeListener());
+        addWindowListener(newWindowListener());
+        initMouseListener();
+        
+        commentsTable.getSelectionModel().addListSelectionListener(newCommentsListSelectionListener());
+        commentsField.getDocument().addDocumentListener(newCommentsDocumentListener());
+
+        addCommentButton.addActionListener(newCommentsAddActionListener());
+        cancelCommentButton.addActionListener(newCommentsCancelActionListener());
+        saveCommentButton.addActionListener(newCommentsSaveActionListener());
+        deleteCommentButton.addActionListener(newCommentsDeleteActionListener());
+        
+        exitButton.addActionListener(newExitActionListener());
+        saveButton.addActionListener(newSaveActionListener());
+        cancelButton.addActionListener(newCancelActionListener());
+        deleteButton.addActionListener(newDeleteActionListener());
+        addButton.addActionListener(newAddActionListener());
+    }
+
+    private void initView() {
+        setTitle("Cardfile");
+
+        nameLabel.setText("Name:");
+
+        addressLabel.setText("Address:");
+
+        cityLabel.setText("City:");
+
+        stateLabel.setText("State:");
+
+        zipLabel.setText("Zip:");
+
+        phone1Label.setText("Phone #1:");
+
+        phone2Label.setText("Phone #2:");
+
+        faxLabel.setText("Fax Number:");
+
+        commentsLabel.setText("Comments");
+        
+        javax.swing.GroupLayout coastalDivisionUnitsPaneLayout = new javax.swing.GroupLayout(
+                coastalDivisionUnitsPane);
+        coastalDivisionUnitsPaneLayout
+                .setHorizontalGroup(coastalDivisionUnitsPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 361, Short.MAX_VALUE));
+        coastalDivisionUnitsPaneLayout
+                .setVerticalGroup(coastalDivisionUnitsPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 317, Short.MAX_VALUE));
+
+
+        commentsTable.setModel(new DefaultTableModel() {
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+        });
+        ((DefaultTableModel) commentsTable.getModel())
+                .setColumnIdentifiers(new String[] { "Date", "Time",
+                        "Initials", "Comments" });
+        
+        jScrollPane1.setViewportView(commentsTable);
+        jScrollPane2.setViewportView(commentsField);
+        commentsField.setEditable(false);
+        
+        addCommentButton.setText("Add");
+        cancelCommentButton.setText("Cancel");
+        saveCommentButton.setText("Save");
+        deleteCommentButton.setText("Delete");
+        exitButton.setText("Exit");
+        printButton.setText("Print");
+        printButton.setEnabled(false);
+        saveButton.setText("Save");
+        cancelButton.setText("Cancel");
+        deleteButton.setText("Delete");
+        addButton.setText("Add");
+        
+        cardfileTabs.addTab(CARDFILE.COASTAL_DIVISION_UNITS.tag,
+                coastalDivisionUnitsPane);
+
+        javax.swing.GroupLayout policeSheriffCoronerPaneLayout = new javax.swing.GroupLayout(
+                policeSheriffCoronerPane);
+        policeSheriffCoronerPaneLayout
+                .setHorizontalGroup(policeSheriffCoronerPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 361, Short.MAX_VALUE));
+        policeSheriffCoronerPaneLayout
+                .setVerticalGroup(policeSheriffCoronerPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 317, Short.MAX_VALUE));
+
+        cardfileTabs.addTab(CARDFILE.POLICE_SHERIFF_CORONER.tag,
+                policeSheriffCoronerPane);
+
+        javax.swing.GroupLayout courtsPaneLayout = new javax.swing.GroupLayout(
+                courtsPane);
+        courtsPaneLayout.setHorizontalGroup(courtsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        courtsPaneLayout.setVerticalGroup(courtsPaneLayout.createParallelGroup(
+                javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 317,
+                Short.MAX_VALUE));
+
+        cardfileTabs.addTab(CARDFILE.COURTS.tag, courtsPane);
+
+        javax.swing.GroupLayout publicTransportationPaneLayout = new javax.swing.GroupLayout(
+                publicTransportationPane);
+        publicTransportationPaneLayout
+                .setHorizontalGroup(publicTransportationPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 361, Short.MAX_VALUE));
+        publicTransportationPaneLayout
+                .setVerticalGroup(publicTransportationPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 317, Short.MAX_VALUE));
+
+        cardfileTabs.addTab(CARDFILE.PUBLIC_TRANSPORTATION.tag,
+                publicTransportationPane);
+
+        javax.swing.GroupLayout ggOtherPaneLayout = new javax.swing.GroupLayout(
+                ggOtherPane);
+        ggOtherPaneLayout.setHorizontalGroup(ggOtherPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        ggOtherPaneLayout.setVerticalGroup(ggOtherPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+        cardfileTabs.addTab(CARDFILE.GG_OTHER.tag, ggOtherPane);
+
+        javax.swing.GroupLayout myMiscPaneLayout = new javax.swing.GroupLayout(
+                myMiscPane);
+        myMiscPaneLayout.setHorizontalGroup(myMiscPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        myMiscPaneLayout.setVerticalGroup(myMiscPaneLayout.createParallelGroup(
+                javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 317,
+                Short.MAX_VALUE));
+
+        cardfileTabs.addTab(CARDFILE.MY_MISC.tag, myMiscPane);
+
+        javax.swing.GroupLayout slMiscPaneLayout = new javax.swing.GroupLayout(
+                slMiscPane);
+        slMiscPaneLayout.setHorizontalGroup(slMiscPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        slMiscPaneLayout.setVerticalGroup(slMiscPaneLayout.createParallelGroup(
+                javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 317,
+                Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.SL_MISC.tag, slMiscPane);
+
+        javax.swing.GroupLayout vtMiscPaneLayout = new javax.swing.GroupLayout(
+                vtMiscPane);
+        vtMiscPaneLayout.setHorizontalGroup(vtMiscPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        vtMiscPaneLayout.setVerticalGroup(vtMiscPaneLayout.createParallelGroup(
+                javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 317,
+                Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.VT_MISC.tag, vtMiscPane);
+
+        javax.swing.GroupLayout chpOfficesPaneLayout = new javax.swing.GroupLayout(
+                chpOfficesPane);
+        chpOfficesPaneLayout.setHorizontalGroup(chpOfficesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        chpOfficesPaneLayout.setVerticalGroup(chpOfficesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.CHP_OFFICES.tag, chpOfficesPane);
+
+        javax.swing.GroupLayout stateAgenciesFacilitiesPaneLayout = new javax.swing.GroupLayout(
+                stateAgenciesFacilitiesPane);
+        stateAgenciesFacilitiesPaneLayout
+                .setHorizontalGroup(stateAgenciesFacilitiesPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 361, Short.MAX_VALUE));
+        stateAgenciesFacilitiesPaneLayout
+                .setVerticalGroup(stateAgenciesFacilitiesPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.STATE_AGENCIES_FACILITIES.tag,
+//                stateAgenciesFacilitiesPane);
+
+        javax.swing.GroupLayout governmentOfficialsPaneLayout = new javax.swing.GroupLayout(
+                governmentOfficialsPane);
+        governmentOfficialsPaneLayout
+                .setHorizontalGroup(governmentOfficialsPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 361, Short.MAX_VALUE));
+        governmentOfficialsPaneLayout
+                .setVerticalGroup(governmentOfficialsPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.GOVERNMENT_OFFICIALS.tag,
+//                governmentOfficialsPane);
+
+        javax.swing.GroupLayout federalAgenciesPaneLayout = new javax.swing.GroupLayout(
+                federalAgenciesPane);
+        federalAgenciesPaneLayout.setHorizontalGroup(federalAgenciesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        federalAgenciesPaneLayout.setVerticalGroup(federalAgenciesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.FEDERAL_AGENCIES.tag, federalAgenciesPane);
+
+        javax.swing.GroupLayout ranchesLivestockPaneLayout = new javax.swing.GroupLayout(
+                ranchesLivestockPane);
+        ranchesLivestockPaneLayout
+                .setHorizontalGroup(ranchesLivestockPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 361, Short.MAX_VALUE));
+        ranchesLivestockPaneLayout.setVerticalGroup(ranchesLivestockPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.RANCHES_LIVESTOCK.tag,
+//                ranchesLivestockPane);
+
+        javax.swing.GroupLayout fireEmsPaneLayout = new javax.swing.GroupLayout(
+                fireEmsPane);
+        fireEmsPaneLayout.setHorizontalGroup(fireEmsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        fireEmsPaneLayout.setVerticalGroup(fireEmsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+  //      cardfileTabs.addTab(CARDFILE.FIRE_EMS.tag, fireEmsPane);
+
+        javax.swing.GroupLayout jailsPaneLayout = new javax.swing.GroupLayout(
+                jailsPane);
+        jailsPaneLayout.setHorizontalGroup(jailsPaneLayout.createParallelGroup(
+                javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 361,
+                Short.MAX_VALUE));
+        jailsPaneLayout.setVerticalGroup(jailsPaneLayout.createParallelGroup(
+                javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 317,
+                Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.JAILS.tag, jailsPane);
+
+        javax.swing.GroupLayout hospitalsMedCentersPaneLayout = new javax.swing.GroupLayout(
+                hospitalsMedCentersPane);
+        hospitalsMedCentersPaneLayout
+                .setHorizontalGroup(hospitalsMedCentersPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 361, Short.MAX_VALUE));
+        hospitalsMedCentersPaneLayout
+                .setVerticalGroup(hospitalsMedCentersPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.HOSPITALS_MED_CENTERS.tag,
+//                hospitalsMedCentersPane);
+
+        javax.swing.GroupLayout towCompaniesPaneLayout = new javax.swing.GroupLayout(
+                towCompaniesPane);
+        towCompaniesPaneLayout.setHorizontalGroup(towCompaniesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        towCompaniesPaneLayout.setVerticalGroup(towCompaniesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.TOW_COMPANIES.tag, towCompaniesPane);
+
+        javax.swing.GroupLayout calTransPaneLayout = new javax.swing.GroupLayout(
+                calTransPane);
+        calTransPaneLayout.setHorizontalGroup(calTransPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        calTransPaneLayout.setVerticalGroup(calTransPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.CALTRANS.tag, calTransPane);
+
+        javax.swing.GroupLayout countyRoadsPaneLayout = new javax.swing.GroupLayout(
+                countyRoadsPane);
+        countyRoadsPaneLayout.setHorizontalGroup(countyRoadsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        countyRoadsPaneLayout.setVerticalGroup(countyRoadsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.COUNTY_ROADS.tag, countyRoadsPane);
+
+        javax.swing.GroupLayout utilitiesPaneLayout = new javax.swing.GroupLayout(
+                utilitiesPane);
+        utilitiesPaneLayout.setHorizontalGroup(utilitiesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        utilitiesPaneLayout.setVerticalGroup(utilitiesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.UTILITIES.tag, utilitiesPane);
+
+        javax.swing.GroupLayout animalControlPaneLayout = new javax.swing.GroupLayout(
+                animalControlPane);
+        animalControlPaneLayout.setHorizontalGroup(animalControlPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        animalControlPaneLayout.setVerticalGroup(animalControlPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.ANIMAL_CONTROL.tag, animalControlPane);
+
+        javax.swing.GroupLayout airportsPaneLayout = new javax.swing.GroupLayout(
+                airportsPane);
+        airportsPaneLayout.setHorizontalGroup(airportsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        airportsPaneLayout.setVerticalGroup(airportsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.AIRPORTS.tag, airportsPane);
+
+        javax.swing.GroupLayout creditCardsPaneLayout = new javax.swing.GroupLayout(
+                creditCardsPane);
+        creditCardsPaneLayout.setHorizontalGroup(creditCardsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        creditCardsPaneLayout.setVerticalGroup(creditCardsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//       cardfileTabs.addTab(CARDFILE.CREDIT_CARDS.tag, creditCardsPane);
+
+        javax.swing.GroupLayout ggCrisisSheltersPaneLayout = new javax.swing.GroupLayout(
+                ggCrisisSheltersPane);
+        ggCrisisSheltersPaneLayout
+                .setHorizontalGroup(ggCrisisSheltersPaneLayout
+                        .createParallelGroup(
+                                javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGap(0, 361, Short.MAX_VALUE));
+        ggCrisisSheltersPaneLayout.setVerticalGroup(ggCrisisSheltersPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.GG_CRISIS_SHELTERS.tag,
+//                ggCrisisSheltersPane);
+
+        javax.swing.GroupLayout rangesPaneLayout = new javax.swing.GroupLayout(
+                rangesPane);
+        rangesPaneLayout.setHorizontalGroup(rangesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        rangesPaneLayout.setVerticalGroup(rangesPaneLayout.createParallelGroup(
+                javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 317,
+                Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.RANGES.tag, rangesPane);
+
+        javax.swing.GroupLayout hotlinesPaneLayout = new javax.swing.GroupLayout(
+                hotlinesPane);
+        hotlinesPaneLayout.setHorizontalGroup(hotlinesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        hotlinesPaneLayout.setVerticalGroup(hotlinesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.HOTLINES.tag, hotlinesPane);
+
+        javax.swing.GroupLayout hwyPatrolsOosPaneLayout = new javax.swing.GroupLayout(
+                hwyPatrolsOosPane);
+        hwyPatrolsOosPaneLayout.setHorizontalGroup(hwyPatrolsOosPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        hwyPatrolsOosPaneLayout.setVerticalGroup(hwyPatrolsOosPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.HWY_PATROLS_OOS.tag, hwyPatrolsOosPane);
+
+        javax.swing.GroupLayout parksRecreationPaneLayout = new javax.swing.GroupLayout(
+                parksRecreationPane);
+        parksRecreationPaneLayout.setHorizontalGroup(parksRecreationPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        parksRecreationPaneLayout.setVerticalGroup(parksRecreationPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.PARKS_RECREATION.tag, parksRecreationPane);
+
+        javax.swing.GroupLayout sheltersPaneLayout = new javax.swing.GroupLayout(
+                sheltersPane);
+        sheltersPaneLayout.setHorizontalGroup(sheltersPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        sheltersPaneLayout.setVerticalGroup(sheltersPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.SHELTERS.tag, sheltersPane);
+
+        javax.swing.GroupLayout slCountyServicesLayout = new javax.swing.GroupLayout(
+                slCountyServicesPane);
+        slCountyServicesLayout.setHorizontalGroup(slCountyServicesLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        slCountyServicesLayout.setVerticalGroup(slCountyServicesLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.SL_COUNTY_SERVICES.tag,
+//                slCountyServicesPane);
+
+        javax.swing.GroupLayout slResourcesPaneLayout = new javax.swing.GroupLayout(
+                slResourcesPane);
+        slResourcesPaneLayout.setHorizontalGroup(slResourcesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        slResourcesPaneLayout.setVerticalGroup(slResourcesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.SL_RESOURCES.tag, slResourcesPane);
+
+        javax.swing.GroupLayout truckTireRepairPaneLayout = new javax.swing.GroupLayout(
+                truckTireRepairPane);
+        truckTireRepairPaneLayout.setHorizontalGroup(truckTireRepairPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        truckTireRepairPaneLayout.setVerticalGroup(truckTireRepairPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs
+//                .addTab(CARDFILE.TRUCK_TIRE_REPAIR.tag, truckTireRepairPane);
+
+        javax.swing.GroupLayout mccEmployeesPaneLayout = new javax.swing.GroupLayout(
+                mccEmployeesPane);
+        mccEmployeesPaneLayout.setHorizontalGroup(mccEmployeesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        mccEmployeesPaneLayout.setVerticalGroup(mccEmployeesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.MCC_EMPLOYEES.tag, mccEmployeesPane);
+
+        javax.swing.GroupLayout gateAccessCodesPaneLayout = new javax.swing.GroupLayout(
+                gateAccessCodesPane);
+        gateAccessCodesPaneLayout.setHorizontalGroup(gateAccessCodesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        gateAccessCodesPaneLayout.setVerticalGroup(gateAccessCodesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs
+//                .addTab(CARDFILE.GATE_ACCESS_CODES.tag, gateAccessCodesPane);
+
+        javax.swing.GroupLayout vtCallSignsPaneLayout = new javax.swing.GroupLayout(
+                vtCallSignsPane);
+        vtCallSignsPaneLayout.setHorizontalGroup(vtCallSignsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        vtCallSignsPaneLayout.setVerticalGroup(vtCallSignsPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.VT_CALL_SIGNS.tag, vtCallSignsPane);
+
+        javax.swing.GroupLayout slccEmployeesPaneLayout = new javax.swing.GroupLayout(
+                slccEmployeesPane);
+        slccEmployeesPaneLayout.setHorizontalGroup(slccEmployeesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 361, Short.MAX_VALUE));
+        slccEmployeesPaneLayout.setVerticalGroup(slccEmployeesPaneLayout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 317, Short.MAX_VALUE));
+
+//        cardfileTabs.addTab(CARDFILE.SLCC_EMPLOYEES.tag, slccEmployeesPane);
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
+                getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(layout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(
+                        layout.createSequentialGroup()
+                                .addContainerGap()
+                                .addGroup(
+                                        layout.createParallelGroup(
+                                                javax.swing.GroupLayout.Alignment.LEADING)
+                                                .addGroup(
+                                                        layout.createSequentialGroup()
+                                                                .addComponent(
+                                                                        cardfileTabs,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                        366,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addGroup(
+                                                                        layout.createParallelGroup(
+                                                                                javax.swing.GroupLayout.Alignment.LEADING)
+                                                                                .addGroup(
+                                                                                        layout.createSequentialGroup()
+                                                                                                .addGap(72,
+                                                                                                        72,
+                                                                                                        72)
+                                                                                                .addGroup(
+                                                                                                        layout.createParallelGroup(
+                                                                                                                javax.swing.GroupLayout.Alignment.TRAILING)
+                                                                                                                .addGroup(
+                                                                                                                        layout.createSequentialGroup()
+                                                                                                                                .addComponent(
+                                                                                                                                        nameLabel)
+                                                                                                                                .addPreferredGap(
+                                                                                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                                                                                .addComponent(
+                                                                                                                                        nameField,
+                                                                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                                                                        205,
+                                                                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
+                                                                                                                .addGroup(
+                                                                                                                        layout.createSequentialGroup()
+                                                                                                                                .addGroup(
+                                                                                                                                        layout.createParallelGroup(
+                                                                                                                                                javax.swing.GroupLayout.Alignment.TRAILING)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        cityLabel)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        addressLabel)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        stateLabel)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        phone1Label)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        phone2Label)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        faxLabel))
+                                                                                                                                .addPreferredGap(
+                                                                                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                                                                                .addGroup(
+                                                                                                                                        layout.createParallelGroup(
+                                                                                                                                                javax.swing.GroupLayout.Alignment.LEADING,
+                                                                                                                                                false)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        addressField)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        cityField)
+                                                                                                                                                .addGroup(
+                                                                                                                                                        layout.createSequentialGroup()
+                                                                                                                                                                .addComponent(
+                                                                                                                                                                        stateField,
+                                                                                                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                                                                                                                .addGap(41,
+                                                                                                                                                                        41,
+                                                                                                                                                                        41)
+                                                                                                                                                                .addComponent(
+                                                                                                                                                                        zipLabel)
+                                                                                                                                                                .addPreferredGap(
+                                                                                                                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                                                                                                                .addComponent(
+                                                                                                                                                                        zipField))
+                                                                                                                                                .addComponent(
+                                                                                                                                                        phone1Field)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        phone2Field)
+                                                                                                                                                .addComponent(
+                                                                                                                                                        faxField,
+                                                                                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                                                                                        206,
+                                                                                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))))
+                                                                                                .addPreferredGap(
+                                                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED,
+                                                                                                        42,
+                                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
+                                                                                .addComponent(
+                                                                                        jScrollPane1,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                        0,
+                                                                                        Short.MAX_VALUE)
+                                                                                .addGroup(
+                                                                                        layout.createSequentialGroup()
+                                                                                                .addComponent(
+                                                                                                        commentsLabel)
+                                                                                                .addGap(0,
+                                                                                                        0,
+                                                                                                        Short.MAX_VALUE))
+                                                                                .addGroup(
+                                                                                        layout.createSequentialGroup()
+                                                                                                .addComponent(
+                                                                                                        jScrollPane2,
+                                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                                        300,
+                                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                                                .addPreferredGap(
+                                                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                                                .addGroup(
+                                                                                                        layout.createParallelGroup(
+                                                                                                                javax.swing.GroupLayout.Alignment.LEADING)
+                                                                                                                .addComponent(
+                                                                                                                        addCommentButton,
+                                                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                                                        Short.MAX_VALUE)
+                                                                                                                .addComponent(
+                                                                                                                        cancelCommentButton,
+                                                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                                                        106,
+                                                                                                                        Short.MAX_VALUE)
+                                                                                                                .addComponent(
+                                                                                                                        saveCommentButton,
+                                                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                                                        Short.MAX_VALUE)
+                                                                                                                .addComponent(
+                                                                                                                        deleteCommentButton,
+                                                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                                                        Short.MAX_VALUE)))))
+                                                .addGroup(
+                                                        javax.swing.GroupLayout.Alignment.TRAILING,
+                                                        layout.createSequentialGroup()
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED,
+                                                                        308,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addComponent(
+                                                                        addButton,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                        70,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addComponent(
+                                                                        deleteButton,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                        70,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addComponent(
+                                                                        cancelButton,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                        70,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addComponent(
+                                                                        saveButton,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                        70,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addComponent(
+                                                                        printButton,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                        70,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addComponent(
+                                                                        exitButton,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                        70,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)))
+                                .addContainerGap()));
+        layout.setVerticalGroup(layout
+                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(
+                        javax.swing.GroupLayout.Alignment.TRAILING,
+                        layout.createSequentialGroup()
+                                .addGap(12, 12, 12)
+                                .addGroup(
+                                        layout.createParallelGroup(
+                                                javax.swing.GroupLayout.Alignment.TRAILING)
+                                                .addComponent(
+                                                        cardfileTabs,
+                                                        javax.swing.GroupLayout.Alignment.LEADING,
+                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                        0, Short.MAX_VALUE)
+                                                .addGroup(
+                                                        javax.swing.GroupLayout.Alignment.LEADING,
+                                                        layout.createSequentialGroup()
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addGroup(
+                                                                        layout.createParallelGroup(
+                                                                                javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                                .addComponent(
+                                                                                        nameLabel)
+                                                                                .addComponent(
+                                                                                        nameField,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addGroup(
+                                                                        layout.createParallelGroup(
+                                                                                javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                                .addComponent(
+                                                                                        addressLabel)
+                                                                                .addComponent(
+                                                                                        addressField,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addGroup(
+                                                                        layout.createParallelGroup(
+                                                                                javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                                .addComponent(
+                                                                                        cityLabel)
+                                                                                .addComponent(
+                                                                                        cityField,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addGroup(
+                                                                        layout.createParallelGroup(
+                                                                                javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                                .addComponent(
+                                                                                        stateLabel)
+                                                                                .addComponent(
+                                                                                        stateField,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                                .addComponent(
+                                                                                        zipLabel)
+                                                                                .addComponent(
+                                                                                        zipField,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addGroup(
+                                                                        layout.createParallelGroup(
+                                                                                javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                                .addComponent(
+                                                                                        phone1Label)
+                                                                                .addComponent(
+                                                                                        phone1Field,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addGroup(
+                                                                        layout.createParallelGroup(
+                                                                                javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                                .addComponent(
+                                                                                        phone2Label)
+                                                                                .addComponent(
+                                                                                        phone2Field,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addGroup(
+                                                                        layout.createParallelGroup(
+                                                                                javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                                .addComponent(
+                                                                                        faxLabel)
+                                                                                .addComponent(
+                                                                                        faxField,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                        javax.swing.GroupLayout.PREFERRED_SIZE))
+                                                                .addGap(5, 5, 5)
+                                                                .addComponent(
+                                                                        commentsLabel)
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addComponent(
+                                                                        jScrollPane1,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
+                                                                        156,
+                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addPreferredGap(
+                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                .addGroup(
+                                                                        layout.createParallelGroup(
+                                                                                javax.swing.GroupLayout.Alignment.LEADING)
+                                                                                .addGroup(
+                                                                                        layout.createSequentialGroup()
+                                                                                                .addComponent(
+                                                                                                        addCommentButton)
+                                                                                                .addPreferredGap(
+                                                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED,
+                                                                                                        javax.swing.GroupLayout.DEFAULT_SIZE,
+                                                                                                        Short.MAX_VALUE)
+                                                                                                .addComponent(
+                                                                                                        cancelCommentButton)
+                                                                                                .addPreferredGap(
+                                                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                                                .addComponent(
+                                                                                                        saveCommentButton)
+                                                                                                .addPreferredGap(
+                                                                                                        javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                                                                .addComponent(
+                                                                                                        deleteCommentButton))
+                                                                                .addComponent(
+                                                                                        jScrollPane2))))
+                                .addGap(18, 18, 18)
+                                .addGroup(
+                                        layout.createParallelGroup(
+                                                javax.swing.GroupLayout.Alignment.BASELINE)
+                                                .addComponent(deleteButton)
+                                                .addComponent(cancelButton)
+                                                .addComponent(saveButton)
+                                                .addComponent(printButton)
+                                                .addComponent(exitButton)
+                                                .addComponent(addButton))
+                                .addContainerGap()));
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    /*
+     * Loads server data onto the client copy.
+     */
+    public void loadData() {
+        try {
+            coastalDivisionUnitsList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.COASTAL_DIVISION_UNITS);
+            policeSheriffCoronerList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.POLICE_SHERIFF_CORONER);
+            courtsList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.COURTS);
+            publicTransportationList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.PUBLIC_TRANSPORTATION);
+            ggOtherList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.GG_OTHER);
+            myMiscList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.MY_MISC);
+            slMiscList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.SL_MISC);
+            vtMiscList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.VT_MISC);
+            chpOfficesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.CHP_OFFICES);
+            stateAgenciesFacilitiesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.STATE_AGENCIES_FACILITIES);
+            governmentOfficialsList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.GOVERNMENT_OFFICIALS);
+            federalAgenciesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.FEDERAL_AGENCIES);
+            ranchesLivestockList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.RANCHES_LIVESTOCK);
+            fireEmsList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.FIRE_EMS);
+            jailsList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.JAILS);
+            hospitalsMedCentersList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.HOSPITALS_MED_CENTERS);
+            towCompaniesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.TOW_COMPANIES);
+            calTransList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.CALTRANS);
+            countyRoadsList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.COUNTY_ROADS);
+            utilitiesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.UTILITIES);
+            animalControlList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.ANIMAL_CONTROL);
+            airportsList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.AIRPORTS);
+            creditCardsList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.CREDIT_CARDS);
+            ggCrisisSheltersList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.GG_CRISIS_SHELTERS);
+            rangesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.RANGES);
+            hotlinesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.HOTLINES);
+            hwyPatrolsOosList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.HWY_PATROLS_OOS);
+            parksRecreationList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.PARKS_RECREATION);
+            sheltersList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.SHELTERS);
+            slCountyServicesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.SL_COUNTY_SERVICES);
+            slResourcesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.SL_RESOURCES);
+            truckTireRepairList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.TRUCK_TIRE_REPAIR);
+            mccEmployeesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.MCC_EMPLOYEES);
+            gateAccessCodesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.GATE_ACCESS_CODES);
+            vtCallSignsList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.VT_CALL_SIGNS);
+            slccEmployeesList = ScreenManager.theCoordinator
+                    .getCardfileList(CARDFILE.SLCC_EMPLOYEES);
+        } catch (RemoteException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /*
+     * Puts the lists into the scrollpanes into the tabbedpane screens.
+     */
+    public void loadJLists() {
+        coastalDivisionUnitsPane.removeAll();
+        coastalDivisionUnitsPane.add(createPane(coastalDivisionUnitsList));
+        policeSheriffCoronerPane.removeAll();
+        policeSheriffCoronerPane.add(createPane(policeSheriffCoronerList));
+        courtsPane.removeAll();
+        courtsPane.add(createPane(courtsList));
+        publicTransportationPane.removeAll();
+        publicTransportationPane.add(createPane(publicTransportationList));
+        ggOtherPane.removeAll();
+        ggOtherPane.add(createPane(ggOtherList));
+        myMiscPane.removeAll();
+        myMiscPane.add(createPane(myMiscList));
+        slMiscPane.removeAll();
+        slMiscPane.add(createPane(slMiscList));
+        vtMiscPane.removeAll();
+        vtMiscPane.add(createPane(vtMiscList));
+        chpOfficesPane.removeAll();
+        chpOfficesPane.add(createPane(chpOfficesList));
+        stateAgenciesFacilitiesPane.removeAll();
+        stateAgenciesFacilitiesPane
+                .add(createPane(stateAgenciesFacilitiesList));
+        governmentOfficialsPane.removeAll();
+        governmentOfficialsPane.add(createPane(governmentOfficialsList));
+        federalAgenciesPane.removeAll();
+        federalAgenciesPane.add(createPane(federalAgenciesList));
+        ranchesLivestockPane.removeAll();
+        ranchesLivestockPane.add(createPane(ranchesLivestockList));
+        fireEmsPane.removeAll();
+        fireEmsPane.add(createPane(fireEmsList));
+        jailsPane.removeAll();
+        jailsPane.add(createPane(jailsList));
+        hospitalsMedCentersPane.removeAll();
+        hospitalsMedCentersPane.add(createPane(hospitalsMedCentersList));
+        towCompaniesPane.removeAll();
+        towCompaniesPane.add(createPane(towCompaniesList));
+        calTransPane.removeAll();
+        calTransPane.add(createPane(calTransList));
+        countyRoadsPane.removeAll();
+        countyRoadsPane.add(createPane(countyRoadsList));
+        utilitiesPane.removeAll();
+        utilitiesPane.add(createPane(utilitiesList));
+        animalControlPane.removeAll();
+        animalControlPane.add(createPane(animalControlList));
+        airportsPane.removeAll();
+        airportsPane.add(createPane(airportsList));
+        creditCardsPane.removeAll();
+        creditCardsPane.add(createPane(creditCardsList));
+        ggCrisisSheltersPane.removeAll();
+        ggCrisisSheltersPane.add(createPane(ggCrisisSheltersList));
+        rangesPane.removeAll();
+        rangesPane.add(createPane(rangesList));
+        hotlinesPane.removeAll();
+        hotlinesPane.add(createPane(hotlinesList));
+        hwyPatrolsOosPane.removeAll();
+        hwyPatrolsOosPane.add(createPane(hwyPatrolsOosList));
+        parksRecreationPane.removeAll();
+        parksRecreationPane.add(createPane(parksRecreationList));
+        sheltersPane.removeAll();
+        sheltersPane.add(createPane(sheltersList));
+        slCountyServicesPane.removeAll();
+        slCountyServicesPane.add(createPane(slCountyServicesList));
+        slResourcesPane.removeAll();
+        slResourcesPane.add(createPane(slResourcesList));
+        truckTireRepairPane.removeAll();
+        truckTireRepairPane.add(createPane(truckTireRepairList));
+        mccEmployeesPane.removeAll();
+        mccEmployeesPane.add(createPane(mccEmployeesList));
+        gateAccessCodesPane.removeAll();
+        gateAccessCodesPane.add(createPane(gateAccessCodesList));
+        vtCallSignsPane.removeAll();
+        vtCallSignsPane.add(createPane(vtCallSignsList));
+        slccEmployeesPane.removeAll();
+        slccEmployeesPane.add(createPane(slccEmployeesList));
+    }
+
+    /*
+     * Adds a list the scrollpane with mouse listeners.
+     */
+    private JScrollPane createPane(List list) {
+        list.addMouseListener(mouseListener);
+        JScrollPane pane = new JScrollPane(list);
+        pane.setPreferredSize(new Dimension(200, 250));
+        pane.setMaximumSize(new Dimension(200, 250));
+        pane.setMinimumSize(new Dimension(200, 250));
+        return pane;
+    }
+
+    /*
+     * Checks which panel is currently in view based on the title, then gets the
+     * corresponding list and selected index to obtain the last clicked object.
+     */
+    public CardfileDataObject getSelectedCardfileDataObject(String title) {
+        if (title == CARDFILE.COASTAL_DIVISION_UNITS.tag) {
+            selectedList = coastalDivisionUnitsList;
+            return coastalDivisionUnitsList.getCFDO(coastalDivisionUnitsList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.POLICE_SHERIFF_CORONER.tag) {
+            selectedList = policeSheriffCoronerList;
+            return policeSheriffCoronerList.getCFDO(policeSheriffCoronerList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.COURTS.tag) {
+            selectedList = courtsList;
+            return courtsList.getCFDO(courtsList.getSelectedIndex());
+        } else if (title == CARDFILE.PUBLIC_TRANSPORTATION.tag) {
+            selectedList = publicTransportationList;
+            return publicTransportationList.getCFDO(publicTransportationList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.GG_OTHER.tag) {
+            selectedList = ggOtherList;
+            return ggOtherList.getCFDO(ggOtherList.getSelectedIndex());
+        } else if (title == CARDFILE.MY_MISC.tag) {
+            selectedList = myMiscList;
+            return myMiscList.getCFDO(myMiscList.getSelectedIndex());
+        } else if (title == CARDFILE.SL_MISC.tag) {
+            selectedList = slMiscList;
+            return slMiscList.getCFDO(slMiscList.getSelectedIndex());
+        } else if (title == CARDFILE.VT_MISC.tag) {
+            selectedList = vtMiscList;
+            return vtMiscList.getCFDO(vtMiscList.getSelectedIndex());
+        } else if (title == CARDFILE.CHP_OFFICES.tag) {
+            selectedList = chpOfficesList;
+            return chpOfficesList.getCFDO(chpOfficesList.getSelectedIndex());
+        } else if (title == CARDFILE.STATE_AGENCIES_FACILITIES.tag) {
+            selectedList = stateAgenciesFacilitiesList;
+            return stateAgenciesFacilitiesList
+                    .getCFDO(stateAgenciesFacilitiesList.getSelectedIndex());
+        } else if (title == CARDFILE.GOVERNMENT_OFFICIALS.tag) {
+            selectedList = governmentOfficialsList;
+            return governmentOfficialsList.getCFDO(governmentOfficialsList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.FEDERAL_AGENCIES.tag) {
+            selectedList = federalAgenciesList;
+            return federalAgenciesList.getCFDO(federalAgenciesList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.RANCHES_LIVESTOCK.tag) {
+            selectedList = ranchesLivestockList;
+            return ranchesLivestockList.getCFDO(ranchesLivestockList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.FIRE_EMS.tag) {
+            selectedList = fireEmsList;
+            return fireEmsList.getCFDO(fireEmsList.getSelectedIndex());
+        } else if (title == CARDFILE.JAILS.tag) {
+            selectedList = jailsList;
+            return jailsList.getCFDO(jailsList.getSelectedIndex());
+        } else if (title == CARDFILE.HOSPITALS_MED_CENTERS.tag) {
+            selectedList = hospitalsMedCentersList;
+            return hospitalsMedCentersList.getCFDO(hospitalsMedCentersList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.TOW_COMPANIES.tag) {
+            selectedList = towCompaniesList;
+            return towCompaniesList
+                    .getCFDO(towCompaniesList.getSelectedIndex());
+        } else if (title == CARDFILE.CALTRANS.tag) {
+            selectedList = calTransList;
+            return calTransList.getCFDO(calTransList.getSelectedIndex());
+        } else if (title == CARDFILE.COUNTY_ROADS.tag) {
+            selectedList = countyRoadsList;
+            return countyRoadsList.getCFDO(countyRoadsList.getSelectedIndex());
+        } else if (title == CARDFILE.UTILITIES.tag) {
+            selectedList = utilitiesList;
+            return utilitiesList.getCFDO(utilitiesList.getSelectedIndex());
+        } else if (title == CARDFILE.ANIMAL_CONTROL.tag) {
+            selectedList = animalControlList;
+            return animalControlList.getCFDO(animalControlList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.AIRPORTS.tag) {
+            selectedList = airportsList;
+            return airportsList.getCFDO(airportsList.getSelectedIndex());
+        } else if (title == CARDFILE.CREDIT_CARDS.tag) {
+            selectedList = creditCardsList;
+            return creditCardsList.getCFDO(creditCardsList.getSelectedIndex());
+        } else if (title == CARDFILE.GG_CRISIS_SHELTERS.tag) {
+            selectedList = ggCrisisSheltersList;
+            return ggCrisisSheltersList.getCFDO(ggCrisisSheltersList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.RANGES.tag) {
+            selectedList = rangesList;
+            return rangesList.getCFDO(rangesList.getSelectedIndex());
+        } else if (title == CARDFILE.HOTLINES.tag) {
+            selectedList = hotlinesList;
+            return hotlinesList.getCFDO(hotlinesList.getSelectedIndex());
+        } else if (title == CARDFILE.HWY_PATROLS_OOS.tag) {
+            selectedList = hwyPatrolsOosList;
+            return hwyPatrolsOosList.getCFDO(hwyPatrolsOosList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.PARKS_RECREATION.tag) {
+            selectedList = parksRecreationList;
+            return parksRecreationList.getCFDO(parksRecreationList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.SHELTERS.tag) {
+            selectedList = sheltersList;
+            return sheltersList.getCFDO(sheltersList.getSelectedIndex());
+        } else if (title == CARDFILE.SL_COUNTY_SERVICES.tag) {
+            selectedList = slCountyServicesList;
+            return slCountyServicesList.getCFDO(slCountyServicesList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.SL_RESOURCES.tag) {
+            selectedList = slResourcesList;
+            return slResourcesList.getCFDO(slResourcesList.getSelectedIndex());
+        } else if (title == CARDFILE.TRUCK_TIRE_REPAIR.tag) {
+            selectedList = truckTireRepairList;
+            return truckTireRepairList.getCFDO(truckTireRepairList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.MCC_EMPLOYEES.tag) {
+            selectedList = mccEmployeesList;
+            return mccEmployeesList
+                    .getCFDO(mccEmployeesList.getSelectedIndex());
+        } else if (title == CARDFILE.GATE_ACCESS_CODES.tag) {
+            selectedList = gateAccessCodesList;
+            return gateAccessCodesList.getCFDO(gateAccessCodesList
+                    .getSelectedIndex());
+        } else if (title == CARDFILE.VT_CALL_SIGNS.tag) {
+            selectedList = vtCallSignsList;
+            return vtCallSignsList.getCFDO(vtCallSignsList.getSelectedIndex());
+        } else if (title == CARDFILE.SLCC_EMPLOYEES.tag) {
+            selectedList = slccEmployeesList;
+            return slccEmployeesList.getCFDO(slccEmployeesList
+                    .getSelectedIndex());
+        }
+        try {
+            throw new Exception();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /*
+     * Gets the last clicked object and loads its data.
+     */
+    public void refreshInformation() {
+        currObject = getSelectedCardfileDataObject(cardfileTabs
+                .getTitleAt(cardfileTabs.getSelectedIndex()));
+        if (currObject != null) {
+            nameField.setText((currName = currObject.getName()));
+            addressField.setText((currAddress = currObject.getAddress()));
+            cityField.setText((currCity = currObject.getCity()));
+            faxField.setText((currFax = currObject.getFax()));
+            phone1Field.setText((currPhone1 = currObject.getPhone1()));
+            phone2Field.setText((currPhone2 = currObject.getPhone2()));
+            stateField.setText((currState = currObject.getState()));
+            zipField.setText((currZip = currObject.getZip()));
+            DefaultTableModel model = (DefaultTableModel) commentsTable
+                    .getModel();
+            int size = model.getRowCount();
+            for (int i = 0; i < size; i++) {
+                model.removeRow(0);
+            }
+            LinkedList<String[]> tableFields = currObject
+                    .getCommentsTableFields();
+            for (int i = 0; i < tableFields.size(); i++) {
+                model.addRow(tableFields.get(i));
+            }
+            currId = currObject.getId();
+            addCommentButton.setEnabled(true);
+            cancelButton.setEnabled(true);
+            deleteButton.setEnabled(true);
+        } else {
+            addCommentButton.setEnabled(false);
+            cancelButton.setEnabled(true);
+            deleteButton.setEnabled(false);
+        }
+    }
+
+    /*
+     * Checks to make sure that the textFields are not still blank and that an
+     * object from the list has been selected already. Compares the last known
+     * value of each field to the current value to see if any changes have been
+     * made. If changes have been made, the change is applied to the local data
+     * but is not sent over to the server until the user exits the screen and
+     * commits the changes.
+     */
+    public void saveInformation() {
+        if (saveFields && currObject != null) {
+            if (!currName.equals(nameField.getText())) {
+                currObject.setName(nameField.getText());
+                selectedList.resort(selectedList.getSelectedIndex());
+                cardfileObjectEdits
+                        .add(new ChangeLog(EditCommand.NAME, cardfileTabs
+                                .getTitleAt(cardfileTabs.getSelectedIndex()),
+                                currId, nameField.getText()));
+                changesMade = true;
+            }
+            if (!currAddress.equals(addressField.getText())) {
+                currObject.setAddress(addressField.getText());
+                cardfileObjectEdits
+                        .add(new ChangeLog(EditCommand.ADDRESS, cardfileTabs
+                                .getTitleAt(cardfileTabs.getSelectedIndex()),
+                                currId, addressField.getText()));
+                changesMade = true;
+            }
+            if (!currCity.equals(cityField.getText())) {
+                currObject.setCity(cityField.getText());
+                cardfileObjectEdits
+                        .add(new ChangeLog(EditCommand.CITY, cardfileTabs
+                                .getTitleAt(cardfileTabs.getSelectedIndex()),
+                                currId, cityField.getText()));
+                changesMade = true;
+            }
+            if (!currFax.equals(faxField.getText())) {
+                currObject.setFax(faxField.getText());
+                cardfileObjectEdits
+                        .add(new ChangeLog(EditCommand.FAX, cardfileTabs
+                                .getTitleAt(cardfileTabs.getSelectedIndex()),
+                                currId, faxField.getText()));
+                changesMade = true;
+            }
+            if (!currPhone1.equals(phone1Field.getText())) {
+                currObject.setPhone1(phone1Field.getText());
+                cardfileObjectEdits
+                        .add(new ChangeLog(EditCommand.PHONE1, cardfileTabs
+                                .getTitleAt(cardfileTabs.getSelectedIndex()),
+                                currId, phone1Field.getText()));
+                changesMade = true;
+            }
+            if (!currPhone2.equals(phone2Field.getText())) {
+                currObject.setPhone2(phone2Field.getText());
+                cardfileObjectEdits
+                        .add(new ChangeLog(EditCommand.PHONE2, cardfileTabs
+                                .getTitleAt(cardfileTabs.getSelectedIndex()),
+                                currId, phone2Field.getText()));
+                changesMade = true;
+            }
+            if (!currState.equals(stateField.getText())) {
+                currObject.setState(stateField.getText());
+                cardfileObjectEdits
+                        .add(new ChangeLog(EditCommand.STATE, cardfileTabs
+                                .getTitleAt(cardfileTabs.getSelectedIndex()),
+                                currId, stateField.getText()));
+                changesMade = true;
+            }
+            if (!currZip.equals(zipField.getText())) {
+                currObject.setZip(zipField.getText());
+                cardfileObjectEdits
+                        .add(new ChangeLog(EditCommand.ZIP, cardfileTabs
+                                .getTitleAt(cardfileTabs.getSelectedIndex()),
+                                currId, zipField.getText()));
+                changesMade = true;
+            }
+        }
+        if (currObject != null) {
+            saveFields = true;
+        }
+    }
+
+    /*
+     * Makes screen visible. Loads the server cardfile database into the local
+     * database. Clears all editLogs and changes. Sets all text to empty values.
+     * Greys out all buttons.
+     */
+    public void open() {
+        if (isVisible()) {
+            requestFocus();
+        } else {
+            loadData();
+            loadJLists();
+            cardfileTabs.setSelectedIndex(0);
+            selectedList = coastalDivisionUnitsList;
+            saveFields = false;
+            changesMade = false;
+            cardfileObjectEdits.clear();
+            cardfileObjectDeletes.clear();
+            cardfileObjectAdds.clear();
+            tableDeletes.clear();
+            tableAdds.clear();
+            nameField.setText("");
+            addressField.setText("");
+            cityField.setText("");
+            stateField.setText("");
+            zipField.setText("");
+            phone1Field.setText("");
+            phone2Field.setText("");
+            faxField.setText("");
+            commentsTable.setModel(new javax.swing.table.DefaultTableModel(
+                    null,
+                    new String[] { "Date", "Time", "Initials", "Comments" }));
+            addButton.setEnabled(true);
+            deleteButton.setEnabled(false);
+            saveButton.setEnabled(false);
+            cancelButton.setEnabled(false);
+            addCommentButton.setEnabled(false);
+            deleteCommentButton.setEnabled(false);
+            saveCommentButton.setEnabled(false);
+            cancelCommentButton.setEnabled(false);
+            setVisible(true);
+        }
+    }
+
+    /*
+     * Hides screen. If changes have been made, prompt the user if (s)he wants
+     * to commit changes to the server data.
+     */
+    public void close() {
+        saveInformation();
+        if (changesMade) {
+            JOptionPane optionPane = new JOptionPane();
+            if (optionPane.showConfirmDialog(this,
+                    "Changes have been made. Do you want to save changes?",
+                    "Yes/No", JOptionPane.YES_NO_OPTION,
+                    JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
+                handleChangeLogEdits(tableAdds);
+                handleChangeLogEdits(tableDeletes);
+                handleChangeLogEdits(cardfileObjectAdds);
+                handleChangeLogEdits(cardfileObjectEdits);
+                handleChangeLogEdits(cardfileObjectDeletes);
+            }
+        }
+        setVisible(false);
+    }
+
+    /*
+     * Loops through the list and sends every ChangeLog to the server.
+     */
+    private void handleChangeLogEdits(LinkedList<ChangeLog> list) {
+        for (int i = 0; i < list.size(); i++) {
+            try {
+                ScreenManager.theCoordinator.editCardfile(list.get(i));
+            } catch (RemoteException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton addButton;
+    private javax.swing.JButton addCommentButton;
+    private javax.swing.JTextField addressField;
+    private javax.swing.JLabel addressLabel;
+    private javax.swing.JPanel airportsPane;
+    private javax.swing.JPanel animalControlPane;
+    private javax.swing.JPanel calTransPane;
+    private javax.swing.JButton cancelButton;
+    private javax.swing.JButton cancelCommentButton;
+    private javax.swing.JTabbedPane cardfileTabs;
+    private javax.swing.JPanel chpOfficesPane;
+    private javax.swing.JTextField cityField;
+    private javax.swing.JLabel cityLabel;
+    private javax.swing.JPanel coastalDivisionUnitsPane;
+    private javax.swing.JTextPane commentsField;
+    private javax.swing.JLabel commentsLabel;
+    private javax.swing.JTable commentsTable;
+    private javax.swing.JPanel countyRoadsPane;
+    private javax.swing.JPanel courtsPane;
+    private javax.swing.JPanel creditCardsPane;
+    private javax.swing.JButton deleteButton;
+    private javax.swing.JButton deleteCommentButton;
+    private javax.swing.JButton exitButton;
+    private javax.swing.JTextField faxField;
+    private javax.swing.JLabel faxLabel;
+    private javax.swing.JPanel federalAgenciesPane;
+    private javax.swing.JPanel fireEmsPane;
+    private javax.swing.JPanel gateAccessCodesPane;
+    private javax.swing.JPanel ggCrisisSheltersPane;
+    private javax.swing.JPanel ggOtherPane;
+    private javax.swing.JPanel governmentOfficialsPane;
+    private javax.swing.JPanel hospitalsMedCentersPane;
+    private javax.swing.JPanel hotlinesPane;
+    private javax.swing.JPanel hwyPatrolsOosPane;
+    private javax.swing.JPanel vtCallSignsPane;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JScrollPane jScrollPane2;
+    private javax.swing.JPanel jailsPane;
+    private javax.swing.JPanel mccEmployeesPane;
+    private javax.swing.JPanel myMiscPane;
+    private javax.swing.JTextField nameField;
+    private javax.swing.JLabel nameLabel;
+    private javax.swing.JPanel parksRecreationPane;
+    private javax.swing.JTextField phone1Field;
+    private javax.swing.JLabel phone1Label;
+    private javax.swing.JTextField phone2Field;
+    private javax.swing.JLabel phone2Label;
+    private javax.swing.JPanel policeSheriffCoronerPane;
+    private javax.swing.JButton printButton;
+    private javax.swing.JPanel publicTransportationPane;
+    private javax.swing.JPanel ranchesLivestockPane;
+    private javax.swing.JPanel rangesPane;
+    private javax.swing.JButton saveButton;
+    private javax.swing.JButton saveCommentButton;
+    private javax.swing.JPanel sheltersPane;
+    private javax.swing.JPanel slCountyServicesPane;
+    private javax.swing.JPanel slMiscPane;
+    private javax.swing.JPanel slResourcesPane;
+    private javax.swing.JPanel slccEmployeesPane;
+    private javax.swing.JPanel stateAgenciesFacilitiesPane;
+    private javax.swing.JTextField stateField;
+    private javax.swing.JLabel stateLabel;
+    private javax.swing.JPanel towCompaniesPane;
+    private javax.swing.JPanel truckTireRepairPane;
+    private javax.swing.JPanel utilitiesPane;
+    private javax.swing.JPanel vtMiscPane;
+    private javax.swing.JTextField zipField;
+    private javax.swing.JLabel zipLabel;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentInfo.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentInfo.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentInfo.java	(revision 82)
@@ -0,0 +1,651 @@
+package tmcsim.client.cadclientgui.screens;
+
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+
+import tmcsim.client.cadclientgui.data.CADData;
+import tmcsim.client.cadclientgui.enums.IncidentEnums;
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+public class IncidentInfo extends javax.swing.JFrame {
+    /**
+     * Creates new form IncidentInfo
+     */
+    public IncidentInfo() {
+        declareComponents();
+        initComponents();
+        initLayout();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
+    private void declareComponents() {
+
+        active = new ImageIcon("images/IncidentInfoImages/active.png");
+        closed = new ImageIcon("images/IncidentInfoImages/closed.png");
+        
+        printButton = new javax.swing.JButton();
+        jSplitPane2 = new javax.swing.JSplitPane();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jPanel1 = new javax.swing.JPanel();
+        incidentNumberLabel = new javax.swing.JLabel();
+        callTakenLabel = new javax.swing.JLabel();
+        lastUpdatedLabel = new javax.swing.JLabel();
+        callInitiatedLabel = new javax.swing.JLabel();
+        timeInQLabel = new javax.swing.JLabel();
+        totalElapsedTimeLabel = new javax.swing.JLabel();
+        addressLabel = new javax.swing.JLabel();
+        cityLabel = new javax.swing.JLabel();
+        aptLabel = new javax.swing.JLabel();
+        phoneLabel = new javax.swing.JLabel();
+        crossStreetLabel = new javax.swing.JLabel();
+        locationLabel = new javax.swing.JLabel();
+        mapInfoLabel = new javax.swing.JLabel();
+        respAreaLabel = new javax.swing.JLabel();
+        sectorLabel = new javax.swing.JLabel();
+        callerTypeLabel = new javax.swing.JLabel();
+        problemLabel = new javax.swing.JLabel();
+        problemCodeLabel = new javax.swing.JLabel();
+        priorityDescLabel = new javax.swing.JLabel();
+        buildingLabel = new javax.swing.JLabel();
+        extLabel = new javax.swing.JLabel();
+        divisionLabel = new javax.swing.JLabel();
+        sectorCodeLabel = new javax.swing.JLabel();
+        callerNameLabel = new javax.swing.JLabel();
+        primaryUnitLabel = new javax.swing.JLabel();
+        backupUnitsLabel = new javax.swing.JLabel();
+        incidentNumberField = new javax.swing.JTextField();
+        callInitiatedField = new javax.swing.JTextField();
+        callTakenField = new javax.swing.JTextField();
+        timeInQField = new javax.swing.JTextField();
+        lastUpdatedField = new javax.swing.JTextField();
+        totalElapsedTimeField = new javax.swing.JTextField();
+        addressField = new javax.swing.JTextField();
+        cityField = new javax.swing.JTextField();
+        aptField = new javax.swing.JTextField();
+        phoneField = new javax.swing.JTextField();
+        crossStreetField = new javax.swing.JTextField();
+        locationField = new javax.swing.JTextField();
+        mapInfoField = new javax.swing.JTextField();
+        respAreaField = new javax.swing.JTextField();
+        sectorField = new javax.swing.JTextField();
+        callerTypeField = new javax.swing.JTextField();
+        problemField = new javax.swing.JTextField();
+        problemCodeField = new javax.swing.JTextField();
+        priorityDescField = new javax.swing.JTextField();
+        primaryUnitField = new javax.swing.JTextField();
+        statusBarLabel = new javax.swing.JLabel();
+        buildingField = new javax.swing.JTextField();
+        extField = new javax.swing.JTextField();
+        divisionField = new javax.swing.JTextField();
+        sectorCodeField = new javax.swing.JTextField();
+        callerNameField = new javax.swing.JTextField();
+        backupUnitsField = new javax.swing.JTextField();
+        jScrollPane3 = new javax.swing.JScrollPane();
+        jPanel2 = new javax.swing.JPanel();
+        incidentCommentsLabel = new javax.swing.JLabel();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        incidentCommentsTable = new javax.swing.JTable();
+    }
+    
+    private void initComponents() {
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+
+        printButton.setText("Print");
+        printButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                printButtonActionPerformed(evt);
+            }
+        });
+
+        jSplitPane2.setDividerLocation(400);
+        jSplitPane2.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
+
+        incidentNumberLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
+        incidentNumberLabel.setText("Incident Number:");
+
+        callTakenLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
+        callTakenLabel.setText("Call Taken:");
+
+        lastUpdatedLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
+        lastUpdatedLabel.setText("Last Updated:");
+
+        callInitiatedLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
+        callInitiatedLabel.setText("Call Initiated:");
+
+        timeInQLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
+        timeInQLabel.setText("Time in Q:");
+
+        totalElapsedTimeLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
+        totalElapsedTimeLabel.setText("Total Elapsed Time:");
+
+        statusBarLabel.setIcon(active);
+        
+        addressLabel.setText("Address:");
+
+        cityLabel.setText("City:");
+
+        aptLabel.setText("Apt:");
+
+        phoneLabel.setText("Phone:");
+
+        crossStreetLabel.setText("Cross Street:");
+
+        locationLabel.setText("Location:");
+
+        mapInfoLabel.setText("Map Info:");
+
+        respAreaLabel.setText("Resp Area:");
+
+        sectorLabel.setText("Sector:");
+
+        callerTypeLabel.setText("Caller Type:");
+
+        problemLabel.setText("Problem:");
+
+        problemCodeLabel.setText("Problem Code:");
+
+        priorityDescLabel.setText("Priority Desc:");
+
+        buildingLabel.setText("Building:");
+
+        extLabel.setText("Ext:");
+
+        divisionLabel.setText("Division:");
+
+        sectorCodeLabel.setText("Sector Code:");
+
+        callerNameLabel.setText("Caller Name:");
+
+        primaryUnitLabel.setText("PrimaryUnit");
+
+        backupUnitsLabel.setText("BackupUnits");
+        
+        incidentNumberField.setEditable(false);
+
+        callInitiatedField.setEditable(false);
+
+        callTakenField.setEditable(false);
+
+        timeInQField.setEditable(false);
+
+        lastUpdatedField.setEditable(false);
+
+        totalElapsedTimeField.setEditable(false);
+
+        addressField.setEditable(false);
+
+        cityField.setEditable(false);
+
+        aptField.setEditable(false);
+
+        phoneField.setEditable(false);
+
+        crossStreetField.setEditable(false);
+
+        locationField.setEditable(false);
+
+        mapInfoField.setEditable(false);
+
+        respAreaField.setEditable(false);
+        respAreaField.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                respAreaFieldActionPerformed(evt);
+            }
+        });
+
+        sectorField.setEditable(false);
+
+        callerTypeField.setEditable(false);
+
+        problemField.setEditable(false);
+
+        problemCodeField.setEditable(false);
+
+        priorityDescField.setEditable(false);
+
+        primaryUnitField.setEditable(false);
+
+        buildingField.setEditable(false);
+
+        extField.setEditable(false);
+
+        divisionField.setEditable(false);
+
+        sectorCodeField.setEditable(false);
+
+        callerNameField.setEditable(false);
+
+        backupUnitsField.setEditable(false);
+        
+        jScrollPane1.setViewportView(jPanel1);
+
+        jSplitPane2.setLeftComponent(jScrollPane1);
+
+        incidentCommentsLabel.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
+        incidentCommentsLabel.setText("Incident Comments");
+
+        incidentCommentsTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null, null, null, null},
+                {null, null, null, null},
+                {null, null, null, null},
+                {null, null, null, null}
+            },
+            new String [] {
+                "Date/Time", "Disp", "Conf", "Comment"
+            }
+        ));
+        jScrollPane2.setViewportView(incidentCommentsTable);
+    }
+    
+    private void initLayout() {
+        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
+        jPanel1.setLayout(jPanel1Layout);
+        jPanel1Layout.setHorizontalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addComponent(cityLabel)
+                                    .addComponent(aptLabel)
+                                    .addComponent(phoneLabel)
+                                    .addComponent(respAreaLabel)
+                                    .addComponent(sectorLabel)
+                                    .addComponent(callerTypeLabel)
+                                    .addComponent(locationLabel))
+                                .addGap(39, 39, 39)
+                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                                            .addComponent(locationField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
+                                            .addComponent(cityField, javax.swing.GroupLayout.Alignment.LEADING))
+                                        .addGap(79, 79, 79)
+                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                            .addComponent(primaryUnitField, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                            .addComponent(problemLabel)
+                                            .addComponent(problemCodeLabel)))
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                                                .addComponent(mapInfoField, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                                    .addComponent(callerNameField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
+                                                    .addComponent(sectorCodeField, javax.swing.GroupLayout.Alignment.TRAILING)
+                                                    .addComponent(divisionField, javax.swing.GroupLayout.Alignment.TRAILING)))
+                                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                                    .addComponent(aptField)
+                                                    .addComponent(phoneField)
+                                                    .addComponent(crossStreetField)
+                                                    .addComponent(respAreaField, javax.swing.GroupLayout.DEFAULT_SIZE, 107, Short.MAX_VALUE)
+                                                    .addComponent(sectorField)
+                                                    .addComponent(callerTypeField))
+                                                .addGap(18, 18, 18)
+                                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                                    .addComponent(divisionLabel)
+                                                    .addComponent(sectorCodeLabel)
+                                                    .addComponent(callerNameLabel)
+                                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                                            .addComponent(buildingLabel)
+                                                            .addComponent(extLabel))
+                                                        .addGap(18, 18, 18)
+                                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                                            .addComponent(buildingField, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE)
+                                                            .addComponent(extField))))))
+                                        .addGap(79, 79, 79)
+                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                            .addComponent(primaryUnitLabel)
+                                            .addComponent(backupUnitsLabel)
+                                            .addComponent(backupUnitsField, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                                .addComponent(priorityDescLabel)
+                                                .addGap(18, 18, 18)
+                                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                                    .addComponent(problemField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                    .addComponent(problemCodeField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                    .addComponent(priorityDescField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))))
+                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                .addComponent(addressLabel)
+                                .addGap(54, 54, 54)
+                                .addComponent(addressField, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addComponent(crossStreetLabel)
+                            .addComponent(mapInfoLabel))
+                        .addGap(73, 73, 73))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(statusBarLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                .addGap(0, 0, Short.MAX_VALUE)
+                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addComponent(callInitiatedLabel)
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(callInitiatedField))
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addComponent(incidentNumberLabel)
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(incidentNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 149, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                                .addGap(50, 50, 50)
+                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addGap(6, 6, 6)
+                                        .addComponent(timeInQLabel)
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(timeInQField))
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addComponent(callTakenLabel)
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(callTakenField, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                                .addGap(50, 50, 50)
+                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addComponent(totalElapsedTimeLabel)
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(totalElapsedTimeField))
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addComponent(lastUpdatedLabel)
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(lastUpdatedField, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE)))))
+                        .addGap(5, 5, 5))))
+        );
+        jPanel1Layout.setVerticalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                .addComponent(incidentNumberLabel)
+                                .addComponent(incidentNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                .addComponent(lastUpdatedLabel)
+                                .addComponent(lastUpdatedField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                .addGap(10, 10, 10)
+                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                    .addComponent(callInitiatedLabel)
+                                    .addComponent(callInitiatedField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                    .addComponent(totalElapsedTimeLabel)
+                                    .addComponent(totalElapsedTimeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(callTakenLabel)
+                            .addComponent(callTakenField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(timeInQLabel)
+                            .addComponent(timeInQField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addGap(4, 4, 4)))
+                .addComponent(statusBarLabel)
+                .addGap(7, 7, 7)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(addressLabel)
+                            .addComponent(problemLabel)
+                            .addComponent(addressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(cityLabel)
+                            .addComponent(problemCodeLabel)
+                            .addComponent(cityField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(aptLabel)
+                            .addComponent(priorityDescLabel)
+                            .addComponent(buildingLabel)
+                            .addComponent(aptField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(buildingField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(phoneLabel)
+                            .addComponent(extLabel)
+                            .addComponent(phoneField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(extField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addComponent(problemField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(problemCodeField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(priorityDescField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(crossStreetLabel)
+                    .addComponent(primaryUnitLabel)
+                    .addComponent(crossStreetField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(locationLabel)
+                    .addComponent(locationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(primaryUnitField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(mapInfoLabel)
+                    .addComponent(backupUnitsLabel)
+                    .addComponent(mapInfoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(respAreaLabel)
+                    .addComponent(divisionLabel)
+                    .addComponent(respAreaField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(divisionField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(backupUnitsField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(sectorLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(sectorCodeLabel)
+                    .addComponent(sectorField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(sectorCodeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(callerTypeLabel)
+                    .addComponent(callerNameLabel)
+                    .addComponent(callerTypeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(callerNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(61, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
+        jPanel2.setLayout(jPanel2Layout);
+        jPanel2Layout.setHorizontalGroup(
+            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel2Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(jPanel2Layout.createSequentialGroup()
+                        .addComponent(incidentCommentsLabel)
+                        .addGap(0, 788, Short.MAX_VALUE))
+                    .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING)))
+        );
+        jPanel2Layout.setVerticalGroup(
+            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel2Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(incidentCommentsLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(502, Short.MAX_VALUE))
+        );
+
+        jScrollPane3.setViewportView(jPanel2);
+
+        jSplitPane2.setRightComponent(jScrollPane3);
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addGap(0, 0, Short.MAX_VALUE)
+                .addComponent(printButton, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
+            .addComponent(jSplitPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 927, Short.MAX_VALUE)
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addComponent(jSplitPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 600, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(printButton, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))
+        );
+
+        pack();
+    }// </editor-fold>                        
+
+    private void printButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
+        // TODO add your handling code here:
+    }                                           
+
+    private void respAreaFieldActionPerformed(java.awt.event.ActionEvent evt) {                                              
+        // TODO add your handling code here:
+    }                                             
+
+    public void refreshInformation(int incidentId){
+        /*incidentNumberField.setText(cadData.getIncident(incidentId).getMasterID());
+        callInitiatedField.setText(cadData.getIncident(incidentId).getInfo().getCallInit());
+        callTakenField.setText(cadData.getIncident(incidentId).getInfo().getCallTaken());
+        timeInQField.setText(cadData.getIncident(incidentId).getInfo().getTimeInQ());
+        lastUpdatedField.setText(cadData.getIncident(incidentId).getInfo().getLastUpdated());
+        //NEED TO CHANGE : get timeStarted, setTotalElaspedTime = currentTime - timeStarted
+        
+        totalElapsedTimeField.setText(cadData.getIncident(incidentId).getInfo().getTotalElapsedTime());
+        addressField.setText(cadData.getIncident(incidentId).getIncidentLocation().getAddress());
+        cityField.setText(cadData.getIncident(incidentId).getIncidentLocation().getCity());
+        aptField.setText(cadData.getIncident(incidentId).getIncidentLocation().getApt());
+        phoneField.setText(cadData.getIncident(incidentId).getIncidentCaller().getPhone());
+        crossStreetField.setText(cadData.getIncident(incidentId).getIncidentLocation().getCrossSt());
+        locationField.setText(cadData.getIncident(incidentId).getIncidentLocation().getLoc());
+        //mapInfoField.setText
+        respAreaField.setText(cadData.getIncident(incidentId).getResponse().getArea());
+        sectorField.setText(cadData.getIncident(incidentId).getIncidentLocation().getSector());
+        callerTypeField.setText(cadData.getIncident(incidentId).getIncidentCaller().getCallerType());
+        problemField.setText(cadData.getIncident(incidentId).getProblem().getProblem());
+        problemCodeField.setText(cadData.getIncident(incidentId).getProblem().getProblemCode());
+        priorityDescField.setText(cadData.getIncident(incidentId).getP());
+        primaryUnitField.setText(cadData.getIncident(incidentId).getAssignedUnitNums().getFirst());
+        if(cadData.getIncident(incidentId).isViewable() && cadData.getIncident(incidentId).getIncidentStatus() == IncidentEnums.Closed){
+            statusBarLabel.setIcon(closed);
+        }else{
+            statusBarLabel.setIcon(active);
+        }
+        buildingField.setText(cadData.getIncident(incidentId).getIncidentLocation().getBuilding());
+        extField.setText(cadData.getIncident(incidentId).getIncidentCaller().getExt());
+        divisionField.setText(cadData.getIncident(incidentId).getIncidentLocation().getDivision());
+        sectorCodeField.setText(cadData.getIncident(incidentId).getIncidentLocation().getSectorCode());
+        callerNameField.setText(cadData.getIncident(incidentId).getIncidentCaller().getCallerName());
+        if(cadData.getIncident(incidentId).getAssignedUnitNums().size() <= 1){
+            backupUnitsField.setText("");
+        }else{
+            String unitNums = "";
+            for(int i = 1; i < cadData.getIncident(incidentId).getAssignedUnitNums().size(); i++){
+                unitNums = unitNums.concat((String) cadData.getIncident(incidentId).getAssignedUnitNums().get(i));
+                if(i == cadData.getIncident(incidentId).getAssignedUnitNums().size() - 1){
+                    break;
+                }
+                unitNums = unitNums.concat(", ");
+            }
+            backupUnitsField.setText(unitNums);
+        }*/
+    }
+    
+    /*
+     * Displays the information of the latest incident clicked.
+     */
+    public void open(int incidentId){
+        refreshInformation(incidentId);
+        //setTitle("<1> RL ~" + cadData.getIncident(incidentId).getMasterID());
+    }
+    
+    /*
+     * Hides the screen.
+     */
+    public void close(){
+        setVisible(false);
+    }
+
+    
+    // Variables declaration - do not modify
+    private ImageIcon active;
+    private ImageIcon closed;
+    private javax.swing.JTextField addressField;
+    private javax.swing.JLabel addressLabel;
+    private javax.swing.JTextField aptField;
+    private javax.swing.JLabel aptLabel;
+    private javax.swing.JTextField backupUnitsField;
+    private javax.swing.JLabel backupUnitsLabel;
+    private javax.swing.JTextField buildingField;
+    private javax.swing.JLabel buildingLabel;
+    private javax.swing.JTextField callInitiatedField;
+    private javax.swing.JLabel callInitiatedLabel;
+    private javax.swing.JTextField callTakenField;
+    private javax.swing.JLabel callTakenLabel;
+    private javax.swing.JTextField callerNameField;
+    private javax.swing.JLabel callerNameLabel;
+    private javax.swing.JTextField callerTypeField;
+    private javax.swing.JLabel callerTypeLabel;
+    private javax.swing.JTextField cityField;
+    private javax.swing.JLabel cityLabel;
+    private javax.swing.JTextField crossStreetField;
+    private javax.swing.JLabel crossStreetLabel;
+    private javax.swing.JTextField divisionField;
+    private javax.swing.JLabel divisionLabel;
+    private javax.swing.JLabel extLabel;
+    private javax.swing.JLabel incidentCommentsLabel;
+    private javax.swing.JTable incidentCommentsTable;
+    private javax.swing.JTextField incidentNumberField;
+    private javax.swing.JLabel incidentNumberLabel;
+    private javax.swing.JPanel jPanel1;
+    private javax.swing.JPanel jPanel2;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JScrollPane jScrollPane2;
+    private javax.swing.JScrollPane jScrollPane3;
+    private javax.swing.JSplitPane jSplitPane2;
+    private javax.swing.JTextField extField;
+    private javax.swing.JTextField lastUpdatedField;
+    private javax.swing.JLabel lastUpdatedLabel;
+    private javax.swing.JTextField locationField;
+    private javax.swing.JLabel locationLabel;
+    private javax.swing.JTextField mapInfoField;
+    private javax.swing.JLabel mapInfoLabel;
+    private javax.swing.JTextField phoneField;
+    private javax.swing.JLabel phoneLabel;
+    private javax.swing.JTextField primaryUnitField;
+    private javax.swing.JLabel primaryUnitLabel;
+    private javax.swing.JButton printButton;
+    private javax.swing.JTextField priorityDescField;
+    private javax.swing.JLabel priorityDescLabel;
+    private javax.swing.JTextField problemCodeField;
+    private javax.swing.JLabel problemCodeLabel;
+    private javax.swing.JTextField problemField;
+    private javax.swing.JLabel problemLabel;
+    private javax.swing.JTextField respAreaField;
+    private javax.swing.JLabel respAreaLabel;
+    private javax.swing.JTextField sectorCodeField;
+    private javax.swing.JLabel sectorCodeLabel;
+    private javax.swing.JTextField sectorField;
+    private javax.swing.JLabel sectorLabel;
+    private javax.swing.JLabel statusBarLabel;
+    private javax.swing.JTextField timeInQField;
+    private javax.swing.JLabel timeInQLabel;
+    private javax.swing.JTextField totalElapsedTimeField;
+    private javax.swing.JLabel totalElapsedTimeLabel;
+    // End of variables declaration                   
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/ScreenManager.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/ScreenManager.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/ScreenManager.java	(revision 82)
@@ -0,0 +1,499 @@
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.KeyEventDispatcher;
+import java.awt.KeyboardFocusManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.util.HashMap;
+import javax.swing.Timer;
+import tmcsim.interfaces.CoordinatorInterface;
+
+/**
+ * This class contains a reference to every single view-able component as well
+ * as a reference to the coordinator(which serves as the database). All commands
+ * to access data or manipulate a screen outside of the individual screen should
+ * be done through this ScreenManager.
+ *
+ * @author Stuart
+ */
+public class ScreenManager
+{
+    private final static int ONE_SECOND = 1000;
+    private final static int FIVE_SECONDS = 5000;
+    private static ActivityLogViewer activityLogViewer;
+    private static AssignedIncidents assignedIncidents;
+    //private static BOLOEntry boloEntry;
+    private static CADMenu cadMenu;
+    private static Cardfile cardfile;
+    private static IncidentEditor incidentEditor;
+    private static IncidentInfo incidentInfo;
+    //private static IncidentSupplementPersonForm incidentSupplementPersonForm;
+    private static HashMap<Integer, IncidentViewer> incidentViewMap = new HashMap<Integer, IncidentViewer>(); //JD
+    private static Login login;
+    private static PendingIncidents pendingIncidents;
+    private static PowerlineUI powerlineUI1;
+    private static PowerlineUI powerlineUI2;
+    private static PowerlineUI powerlineUI3;
+    private static PowerlineUI powerlineUI4;
+    private static PowerlineUI powerlineUI5;
+    private static int currPowerlineFocus = 1;
+    //private static RotationServiceRequest rotationServiceRequest;
+    private static Search search;
+    private static UnitStatus unitStatus;
+    //private static VehicleInformationEntry vehicleInformationEntry;
+    //Reference to the Coordinator to use RMI methods
+    protected static CoordinatorInterface theCoordinator;
+
+    private String username; // The login name entered by the trainee
+
+    public ScreenManager(CoordinatorInterface theCoor)
+    {
+        theCoordinator = theCoor;
+        activityLogViewer = new ActivityLogViewer();
+
+        assignedIncidents = new AssignedIncidents();
+        assignedIncidents.addWindowListener(createWindowListener());
+
+        //boloEntry = new BOLOEntry();
+        //boloEntry.addWindowListener(createWindowListener());
+
+        cadMenu = new CADMenu();
+        cadMenu.addWindowListener(createWindowListener());
+
+        cardfile = new Cardfile();
+        cardfile.addWindowListener(createWindowListener());
+
+        incidentEditor = new IncidentEditor();
+        incidentEditor.addWindowListener(createWindowListener());
+
+        incidentInfo = new IncidentInfo();
+        incidentInfo.addWindowListener(createWindowListener());
+
+        //incidentSupplementPersonForm = new IncidentSupplementPersonForm();
+        //incidentSupplementPersonForm.addWindowListener(createWindowListener());
+
+        incidentViewMap = new HashMap<Integer, IncidentViewer>(); //JD
+
+        pendingIncidents = new PendingIncidents();
+        pendingIncidents.addWindowListener(createWindowListener());
+
+        powerlineUI1 = new PowerlineUI(false, 1);
+        powerlineUI1.addWindowListener(createWindowListener());
+
+        powerlineUI2 = new PowerlineUI(false, 2);
+        powerlineUI2.addWindowListener(createWindowListener());
+
+        powerlineUI3 = new PowerlineUI(false, 3);
+        powerlineUI3.addWindowListener(createWindowListener());
+
+        powerlineUI4 = new PowerlineUI(false, 4);
+        powerlineUI4.addWindowListener(createWindowListener());
+
+        powerlineUI5 = new PowerlineUI(false, 5);
+        powerlineUI5.addWindowListener(createWindowListener());
+
+        //rotationServiceRequest = new RotationServiceRequest();
+        //rotationServiceRequest.addWindowListener(createWindowListener());
+
+        search = new Search();
+        search.addWindowListener(createWindowListener());
+        unitStatus = new UnitStatus();
+        unitStatus.addWindowListener(createWindowListener());
+
+        //vehicleInformationEntry = new VehicleInformationEntry();
+        //vehicleInformationEntry.addWindowListener(createWindowListener());
+
+        KeyboardFocusManager.getCurrentKeyboardFocusManager()
+                .addKeyEventDispatcher(new KeyEventDispatcher()
+        {
+            public boolean dispatchKeyEvent(KeyEvent e)
+            {
+                if (e.getKeyCode() == KeyEvent.VK_F2 && e.getID() == KeyEvent.KEY_PRESSED
+                        && e.getModifiers() == InputEvent.SHIFT_MASK)
+                {
+                    openPendingIncidents();
+                    return true;
+                }
+                if (e.getKeyCode() == KeyEvent.VK_F3 && e.getID() == KeyEvent.KEY_PRESSED
+                        && e.getModifiers() == InputEvent.SHIFT_MASK)
+                {
+                    openAssignedIncidents();
+                    return true;
+                }
+                if (e.getKeyCode() == KeyEvent.VK_F4 && e.getID() == KeyEvent.KEY_PRESSED
+                        && e.getModifiers() == InputEvent.SHIFT_MASK)
+                {
+                    openUnitStatus();
+                    return true;
+                }
+                if (e.getKeyCode() == KeyEvent.VK_F4 && e.getID() == KeyEvent.KEY_PRESSED)
+                {
+                    cyclePowerlineUI();
+                    return true;
+                }
+                if (e.getKeyCode() == KeyEvent.VK_F5 && e.getID() == KeyEvent.KEY_PRESSED)
+                {
+                    openPowerlineUI();
+                    return true;
+                }
+                if (e.getKeyCode() == KeyEvent.VK_F9 && e.getID() == KeyEvent.KEY_PRESSED)
+                {
+                    openCardfile();
+                    return true;
+                }
+                if (e.getKeyCode() == KeyEvent.VK_F10 && e.getID() == KeyEvent.KEY_PRESSED)
+                {
+                    putRCARDinPL();
+                    return true;
+                }
+                return false;
+            }
+        });
+
+        launchUpdateTimers();
+    }
+
+    public WindowListener createWindowListener()
+    {
+        return new WindowListener()
+        {
+            public void windowActivated(WindowEvent e)
+            {
+                closeDropDownMenus();
+            }
+
+            public void windowClosed(WindowEvent e)
+            {
+                closeDropDownMenus();
+            }
+
+            public void windowClosing(WindowEvent e)
+            {
+                closeDropDownMenus();
+            }
+
+            public void windowDeactivated(WindowEvent e)
+            {
+            }
+
+            public void windowDeiconified(WindowEvent e)
+            {
+            }
+
+            public void windowIconified(WindowEvent e)
+            {
+                closeDropDownMenus();
+            }
+
+            public void windowOpened(WindowEvent e)
+            {
+            }
+        };
+    }
+
+    public static void openActivityLogViewer()
+    {
+        activityLogViewer.open();
+    }
+
+    public static void closeActivityLogViewer()
+    {
+        activityLogViewer.close();
+    }
+
+    public static void openAssignedIncidents()
+    {
+        assignedIncidents.open();
+    }
+
+    public static void closeAssignedIncidents()
+    {
+        assignedIncidents.close();
+    }
+
+    //public static void openBOLOEntry(){ boloEntry.open(); }
+    //public static void closeBOLOEntry(){ boloEntry.close(); }
+    public static void openCADMenu()
+    {
+        cadMenu.open();
+    }
+
+    public static void closeCADMenu()
+    {
+        cadMenu.close();
+    }
+
+    public static void openCardfile()
+    {
+        cardfile.open();
+    }
+
+    public static void closeCardfile()
+    {
+        cardfile.close();
+    }
+
+    public static void openIncidentEditor()
+    {
+        incidentEditor.open();
+    }
+
+    public static void closeIncidentEditor()
+    {
+        incidentEditor.close();
+    }
+
+    public static void refreshIncidentEditor()
+    {
+        incidentEditor.refreshInformation();
+    }
+
+    public static void openIncidentInfo(int incidentId)
+    {
+        incidentInfo.open(incidentId);
+    }
+
+    public static void closeIncidentInfo()
+    {
+        incidentInfo.close();
+    }
+
+    //public static void openIncidentSupplementPersonForm(){ incidentSupplementPersonForm.open(); }
+    //public static void closeIncidentSupplementPersonForm(){ incidentSupplementPersonForm.close(); }
+//JD    public static void openIncidentViewer(int incidentId){ incidentViewer.open(incidentId); }
+    public static void openIncidentViewer(int incidentId)
+    {
+        if (incidentViewMap.containsKey(new Integer(incidentId)))
+        {
+            // if incident viewer already open for this incident ...
+            // make it visible
+            incidentViewMap.get(new Integer(incidentId)).setVisible(true);
+        }
+        else  // there's no viewer open for this incident, so create it
+        {
+            // Just pass the incident ID to the constructor, not open()
+            IncidentViewer currIV = new IncidentViewer(incidentId);
+            currIV.open();
+            // Don't put the item in the map until AFTER we've opened it,
+            // to avoid the possibility that the refresh timer happens to fire
+            // before we've opened the viewer.
+            incidentViewMap.put(new Integer(incidentId), currIV);
+            // Doesn't seem necessary, as this viewer has no drop down menus
+            // currIV.addWindowListener(createWindowListener());
+        }
+    }
+
+    // JD Seems obsolete, never used.
+//    public static void closeIncidentViewer()
+//    {
+//        incidentViewer.close();
+//    }
+    public static void openPendingIncidents()
+    {
+        pendingIncidents.open();
+    }
+
+    public static void closePendingIncidents()
+    {
+        pendingIncidents.close();
+    }
+
+    public static void openPowerlineUI()
+    {
+        if (!powerlineUI1.isVisible())
+        {
+            powerlineUI1.open();
+        }
+        else if (!powerlineUI2.isVisible())
+        {
+            powerlineUI2.open();
+        }
+        else if (!powerlineUI3.isVisible())
+        {
+            powerlineUI3.open();
+        }
+        else if (!powerlineUI4.isVisible())
+        {
+            powerlineUI4.open();
+        }
+        else if (!powerlineUI5.isVisible())
+        {
+            powerlineUI5.open();
+        }
+    }
+
+    public static void cyclePowerlineUI()
+    {
+        if (currPowerlineFocus == 1)
+        {
+            currPowerlineFocus = 2;
+            powerlineUI1.setVisible(true);
+            powerlineUI1.requestFocus();
+            powerlineUI1.clearText();
+        }
+        else if (currPowerlineFocus == 2)
+        {
+            currPowerlineFocus = 3;
+            powerlineUI2.setVisible(true);
+            powerlineUI2.requestFocus();
+            powerlineUI2.clearText();
+        }
+        else if (currPowerlineFocus == 3)
+        {
+            currPowerlineFocus = 4;
+            powerlineUI3.setVisible(true);
+            powerlineUI3.requestFocus();
+            powerlineUI3.clearText();
+        }
+        else if (currPowerlineFocus == 4)
+        {
+            currPowerlineFocus = 5;
+            powerlineUI4.setVisible(true);
+            powerlineUI4.requestFocus();
+            powerlineUI4.clearText();
+        }
+        else if (currPowerlineFocus == 5)
+        {
+            currPowerlineFocus = 1;
+            powerlineUI5.setVisible(true);
+            powerlineUI5.requestFocus();
+            powerlineUI5.clearText();
+        }
+    }
+
+    public static void putRCARDinPL()
+    {
+        if (powerlineUI2.hasFocus())
+        {
+            powerlineUI2.putRCARD();
+        }
+        else if (powerlineUI3.hasFocus())
+        {
+            powerlineUI3.putRCARD();
+        }
+        else if (powerlineUI4.hasFocus())
+        {
+            powerlineUI4.putRCARD();
+        }
+        else if (powerlineUI5.hasFocus())
+        {
+            powerlineUI5.putRCARD();
+        }
+        else
+        {
+            powerlineUI1.setVisible(true);
+            powerlineUI1.putRCARD();
+        }
+    }
+
+    //public static void openRotationServiceRequest(){ rotationServiceRequest.open(); }
+    //public static void closeRotationServiceRequest(){ rotationServiceRequest.close(); }
+    public static void openSearch()
+    {
+        search.open();
+    }
+
+    public static void closeSearch()
+    {
+        search.close();
+    }
+
+    public static void openUnitStatus()
+    {
+        unitStatus.open();
+    }
+
+    public static void closeUnitStatus()
+    {
+        unitStatus.close();
+    }
+
+    //public static void openVehicleInformationEntry(){ vehicleInformationEntry.open(); }
+    //public static void closeVehicleInformationEntry(){ vehicleInformationEntry.close(); }
+    public static void createPowerlineSearch(String search)
+    {
+        new PowerlineSearch(search);
+    }
+
+    public static void closeDropDownMenus()
+    {
+        cadMenu.closeMoreMenu();
+        cadMenu.closeToolMenu();
+        assignedIncidents.closeDropDownMenu();
+        unitStatus.closeDropDownMenu();
+        unitStatus.closeDropDownWithAssignedIncMenu();
+        pendingIncidents.closeDropDownMenu();
+    }
+
+    public static void refreshScreens()
+    {
+        assignedIncidents.refreshTable();
+        unitStatus.refreshTable();
+        pendingIncidents.refreshTable();
+    }
+
+    public static void setUserName(String username)
+    {
+        cadMenu.setName(username);
+    }
+    public static String getUserName()
+    {
+        return cadMenu.getName();
+    }
+
+    /**
+     * This method calls CADMenu's and UnitStatus's update time method.
+     */
+    public static void launchUpdateTimers()
+    {
+        Timer timer = new Timer(ONE_SECOND, new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                refreshScreens();
+                cadMenu.handleUpdateTime();
+                // Don't need this? Because refreshScreens already does it JD
+                //unitStatus.handleUpdateTime();
+            }
+        });
+        timer.start();
+
+        //JD  refresh the info in all the incident viewers
+        Timer timer2 = new Timer(FIVE_SECONDS, new ActionListener()
+        {
+            public void actionPerformed(ActionEvent e)
+            {
+                // for each incident viewer that we've created
+                for (Integer key : incidentViewMap.keySet())
+                {
+                    // Fetch the viewer
+                    IncidentViewer viewer = incidentViewMap.get(key);
+                    // is the viewer visible?
+                    if (viewer.isVisible())
+                    {
+                        // refresh the comments
+                        viewer.refreshCommentsNotesTable();
+                    }
+                }
+            }
+        });
+        timer2.start();
+    }
+
+    /**
+     * Removes drag and drop/button clicking in unitStatus panel if bool is
+     * false. This method should only be called from Login.java
+     */
+    public static void setDispatcherAuthority(boolean bool)
+    {
+        if (!bool)
+        {
+            unitStatus.removeDispatcherAuthority();
+            cadMenu.removeDispatcherStatus();
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/CADMenu.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/CADMenu.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/CADMenu.java	(revision 82)
@@ -0,0 +1,701 @@
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.imageio.ImageIO;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+
+/**
+ * The main CADMenu with buttons to open up other screens. This class uses
+ * mostly images to build from, and java gui does not allow those images to be
+ * editable here, so all the images' pixels are predefined in the images
+ * themselves. The images can be found in the images folder. An image called
+ * "CADMenuLayout" can also be found in the same folder showing how this class's
+ * looks were made.
+ *
+ * @author Vincent
+ *
+ */
+public class CADMenu extends JFrame
+{
+    private final int ONE_SECOND = 1000;
+    private DateFormat dateFormat;
+    private Box mainPanel;
+    private Box bottomRightIcons;
+    private Box bottomRightButtonsGrayed;
+    private Box bottomRightButtonsColored;
+    private JLabel dateAndTime;
+    private JLabel name;
+    private JLabel userListName1;
+    private JButton button1;
+    private JButton button2;
+    private JButton button3;
+    private JButton button4;
+    private JButton button5;
+    private JButton button6;
+    private JButton buttonTool;
+    private JButton buttonMore;
+    // the drop down menu when the "more button" is clicked.
+    private JFrame moreMenu;
+    // the drop down menu when the "tool button" is clicked.
+    private JFrame toolMenu;
+    private JButton buttonCheckmark;
+    private JButton buttonMinus;
+    private JLabel position;
+
+    /**
+     * Constructor call. Creates the CADMenu.
+     */
+    public CADMenu()
+    {
+        initialize();
+        createTopPanel();
+        createBottomPanel();
+        createDropDownMenus();
+
+        initControllers();
+
+        getContentPane().add(mainPanel);
+        setTitle("Inform CAD ");
+        // Load an image for the task bar icon --JD
+        // First try to get the image from a local file
+        ImageIcon coolIcon = new ImageIcon("images/CADMenuImages/US_101_icon.png");
+        if (coolIcon.getIconWidth() >= 0)
+        {
+            setIconImage(coolIcon.getImage());
+        }
+        else // if no local file found, try a URL
+        {
+            URL url;
+            Image img = null;
+            try
+            {
+                String iconURL = "http://www.chicagonow.com/running-with-a-book-cart/files/2012/02/crosswalk1.jpg";
+                url = new URL(iconURL);
+                img = ImageIO.read(url);
+                setIconImage(img);
+            } catch (MalformedURLException ex)
+            {
+                Logger.getLogger(CADMenu.class.getName()).log(Level.SEVERE, null, ex);
+            } catch (IOException ex)
+            {
+                Logger.getLogger(CADMenu.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+        setPreferredSize(new Dimension(1195, 178));
+        setResizable(true);
+        setFocusable(true);
+        pack();
+        //  Unsure why this was "do nothing" because it prevents the Menu frame
+        //  from closing so the user can't terminate the application.
+        //        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
+        setDefaultCloseOperation(EXIT_ON_CLOSE);
+        setVisible(false);
+    }
+
+    /**
+     * Initializes variables and connects the CADMenu to the CADMenuListener.
+     */
+    public void initialize()
+    {
+        mainPanel = new Box(BoxLayout.Y_AXIS);
+        mainPanel.setAlignmentX(LEFT_ALIGNMENT);
+        dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+    }
+
+    public void addListeners()
+    {
+        addComponentListener(new ComponentListener()
+        {
+            public void componentHidden(ComponentEvent e)
+            {
+            }
+
+            public void componentMoved(ComponentEvent e)
+            {
+                closeToolMenu();
+                closeMoreMenu();
+                setLocation(getLocation());
+            }
+
+            public void componentResized(ComponentEvent e)
+            {
+            }
+
+            public void componentShown(ComponentEvent e)
+            {
+            }
+        });
+        addMouseListener(new MouseListener()
+        {
+            public void mouseClicked(MouseEvent arg0)
+            {
+                closeToolMenu();
+                closeMoreMenu();
+            }
+
+            public void mouseEntered(MouseEvent arg0)
+            {
+            }
+
+            public void mouseExited(MouseEvent arg0)
+            {
+            }
+
+            public void mousePressed(MouseEvent arg0)
+            {
+            }
+
+            public void mouseReleased(MouseEvent arg0)
+            {
+            }
+        });
+    }
+
+    public void initToolMenuListeners()
+    {
+        toolMenu.addMouseMotionListener(new MouseMotionListener()
+        {
+            public void mouseDragged(MouseEvent e)
+            {
+            }
+
+            public void mouseMoved(MouseEvent e)
+            {
+            }
+        });
+
+        toolMenu.addMouseListener(new MouseListener()
+        {
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+
+            public void mouseClicked(MouseEvent e)
+            {
+            }
+        });
+    }
+
+    public void initMoreMenuListeners()
+    {
+        moreMenu.addMouseMotionListener(new MouseMotionListener()
+        {
+            public void mouseDragged(MouseEvent e)
+            {
+            }
+
+            public void mouseMoved(MouseEvent e)
+            {
+                ImageIcon image = new ImageIcon(
+                        "images/MoreMenuImages/moreMenu.png");
+                JLabel menu;
+                if (e.getLocationOnScreen().getY() >= moreMenu.getY()
+                        && e.getLocationOnScreen().getY() <= moreMenu.getY()
+                        + moreMenu.getHeight() / 8)
+                {
+                    image = new ImageIcon(
+                            "images/MoreMenuImages/moreMenuHighlighted1.png");
+                }
+                else if (e.getLocationOnScreen().getY() >= moreMenu.getY()
+                        + moreMenu.getHeight() * 2 / 8
+                        && e.getLocationOnScreen().getY() <= moreMenu.getY()
+                        + moreMenu.getHeight() * 3 / 8)
+                {
+                    image = new ImageIcon(
+                            "images/MoreMenuImages/moreMenuHighlighted3.png");
+                }
+                menu = new JLabel(image);
+                moreMenu.getContentPane().removeAll();
+                moreMenu.getContentPane().add(menu);
+                moreMenu.validate();
+            }
+        });
+
+        moreMenu.addMouseListener(new MouseListener()
+        {
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+
+            public void mouseClicked(MouseEvent e)
+            {
+                if (e.getLocationOnScreen().getY() >= moreMenu.getY()
+                        && e.getLocationOnScreen().getY() <= moreMenu.getY()
+                        + moreMenu.getHeight() / 8)
+                {
+                    ScreenManager.openIncidentEditor();
+                    closeMoreMenu();
+                }
+                else if (e.getLocationOnScreen().getY() >= moreMenu.getY()
+                        + moreMenu.getHeight() * 2 / 8
+                        && e.getLocationOnScreen().getY() <= moreMenu.getY()
+                        + moreMenu.getHeight() * 3 / 8)
+                {
+                    ScreenManager.openCardfile();
+                    closeMoreMenu();
+                }
+            }
+        });
+    }
+
+    public void initControllers()
+    {
+        addListeners();
+
+        buttonTool.addActionListener(newToolActionListener());
+        buttonMore.addActionListener(newMoreActionListener());
+
+        initToolMenuListeners();
+        initMoreMenuListeners();
+    }
+
+    public ActionListener newToolActionListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                if (moreMenu.isVisible())
+                {
+                    closeMoreMenu();
+                }
+                if (toolMenu.isVisible())
+                {
+                    closeToolMenu();
+                }
+                else
+                {
+                    toolMenu.setLocation(new Point(getX() + getWidth()
+                            - toolMenu.getWidth(), getY() + 85));
+                    toolMenu.setVisible(true);
+                }
+            }
+        };
+    }
+
+    public ActionListener newMoreActionListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                if (toolMenu.isVisible())
+                {
+                    closeToolMenu();
+                }
+                if (moreMenu.isVisible())
+                {
+                    closeMoreMenu();
+                }
+                else
+                {
+                    moreMenu.setLocation(new Point(getX() + getWidth()
+                            - moreMenu.getWidth(), getY() + 85));
+                    moreMenu.setVisible(true);
+                }
+            }
+        };
+    }
+
+    /*
+     * Creates the topPanel for the CADMenu.
+     */
+    public void createTopPanel()
+    {
+
+        Box topPanel = new Box(BoxLayout.X_AXIS);
+        topPanel.setAlignmentX(LEFT_ALIGNMENT);
+
+        ImageIcon image = new ImageIcon("images/CADMenuImages/tritech.png");
+        JLabel tritech = new JLabel(image);
+        topPanel.add(tritech);
+
+        image = new ImageIcon("images/CADMenuImages/empty.png");
+        JLabel empty = new JLabel(image);
+        topPanel.add(empty);
+
+        // center holds the User's Name, user's position, and date/time
+        Box center = new Box(BoxLayout.Y_AXIS);
+        image = new ImageIcon("images/CADMenuImages/top.png");
+
+        name = new JLabel(image);
+        name.setText("User");
+        name.setFont(new Font("SanSerif", Font.BOLD, 16));
+        name.setForeground(Color.WHITE);
+        name.setHorizontalTextPosition(JLabel.CENTER);
+        center.add(name);
+
+        Box centerBottom = new Box(BoxLayout.X_AXIS);
+        centerBottom.setAlignmentX(Box.LEFT_ALIGNMENT);
+
+        image = new ImageIcon("images/CADMenuImages/bottom.png");
+        position = new JLabel(image);
+        position.setText("Public Safety Dispatch Sup");
+        position.setFont(new Font("Arial", Font.PLAIN, 12));
+        position.setForeground(new Color(190, 210, 255));
+        position.setHorizontalTextPosition(JLabel.CENTER);
+        centerBottom.add(position);
+
+        image = new ImageIcon("images/CADMenuImages/bottom.png");
+        Date date = new Date();
+        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+        String dateTime = dateFormat.format(date);
+        dateAndTime = new JLabel(image);
+        dateAndTime.setText(dateTime);
+        dateAndTime.setForeground(Color.WHITE);
+        dateAndTime.setHorizontalTextPosition(JLabel.CENTER);
+        centerBottom.add(dateAndTime);
+        center.add(centerBottom);
+
+        topPanel.add(center);
+
+        image = new ImageIcon("images/CADMenuImages/empty2.png");
+        JLabel empty2 = new JLabel(image);
+        topPanel.add(empty2);
+
+        image = new ImageIcon("images/CADMenuImages/button1.png");
+        button1 = makeButton(image);
+        topPanel.add(button1);
+
+        image = new ImageIcon("images/CADMenuImages/button2.png");
+        button2 = makeButton(image);
+        topPanel.add(button2);
+
+        image = new ImageIcon("images/CADMenuImages/button3.png");
+        button3 = makeButton(image);
+        topPanel.add(button3);
+
+        image = new ImageIcon("images/CADMenuImages/button4.png");
+        button4 = makeButton(image);
+        topPanel.add(button4);
+
+        image = new ImageIcon("images/CADMenuImages/button5.png");
+        button5 = makeButton(image);
+        topPanel.add(button5);
+
+        image = new ImageIcon("images/CADMenuImages/button6.png");
+        button6 = makeButton(image);
+        topPanel.add(button6);
+
+        image = new ImageIcon("images/CADMenuImages/button7.png");
+        buttonTool = makeButton(image);
+        topPanel.add(buttonTool);
+
+        image = new ImageIcon("images/CADMenuImages/button8.png");
+        buttonMore = makeButton(image);
+        topPanel.add(buttonMore);
+
+        mainPanel.add(topPanel);
+    }
+
+    /**
+     * Creates the bottomPanel of the CADMenu.
+     */
+    public void createBottomPanel()
+    {
+        Color grayBackground = new Color(100, 100, 100);
+
+        Box userList = new Box(BoxLayout.Y_AXIS);
+        userList.setAlignmentX(LEFT_ALIGNMENT);
+
+        Dimension size = new Dimension(400, 85);
+        userList.setPreferredSize(size);
+        userList.setMaximumSize(size);
+        userList.setMinimumSize(size);
+        userList.setBackground(grayBackground);
+        userList.setOpaque(true);
+
+        Box user1 = new Box(BoxLayout.X_AXIS);
+        user1.setAlignmentX(LEFT_ALIGNMENT);
+
+        ImageIcon image = new ImageIcon("images/CADMenuImages/mailClose.png");
+        JLabel userListIcon1 = new JLabel(image);
+        userListName1 = new JLabel("User");
+        userListName1.setForeground(Color.WHITE);
+        userListName1.setBackground(grayBackground);
+        userListName1.setOpaque(true);
+        JLabel userListNumbers = new JLabel(
+                "<html><font color=white>(</font><font color=red>0</font><font color=white>,0,0)</font></html>");
+        userListNumbers.setBackground(grayBackground);
+        userListNumbers.setOpaque(true);
+
+        user1.add(userListIcon1);
+        user1.add(userListName1);
+        user1.add(userListNumbers);
+        userList.add(user1);
+
+        Box user2 = new Box(BoxLayout.X_AXIS);
+        user2.setAlignmentX(LEFT_ALIGNMENT);
+
+        image = new ImageIcon("images/CADMenuImages/mailClose.png");
+        JLabel userListIcon2 = new JLabel(image);
+        JLabel userListName2 = new JLabel("  SL007  ");
+        userListName2.setForeground(Color.WHITE);
+        userListName2.setBackground(grayBackground);
+        userListName2.setOpaque(true);
+        userListNumbers = new JLabel(
+                "<html><font color=white>(</font><font color=red>0</font><font color=white>,0,0)</font></html>");
+        userListNumbers.setBackground(grayBackground);
+        userListNumbers.setOpaque(true);
+
+        user2.add(userListIcon2);
+        user2.add(userListName2);
+        user2.add(userListNumbers);
+        userList.add(user2);
+
+        JLabel currentAgency = new JLabel("  Current Agency is CHP");
+        currentAgency.setForeground(Color.WHITE);
+        currentAgency.setBackground(grayBackground);
+        currentAgency.setOpaque(true);
+        currentAgency.setHorizontalTextPosition(JLabel.LEFT);
+        userList.add(currentAgency);
+
+        Box bottomPanel = new Box(BoxLayout.X_AXIS);
+        bottomPanel.setAlignmentX(LEFT_ALIGNMENT);
+        bottomPanel.add(userList);
+        bottomPanel.add(Box.createHorizontalStrut(5));
+
+        Box bottomRight = new Box(BoxLayout.Y_AXIS);
+        size = new Dimension(775, 85);
+        bottomRight.setPreferredSize(size);
+        bottomRight.setMaximumSize(size);
+        bottomRight.setMinimumSize(size);
+        image = new ImageIcon("images/CADMenuImages/grayFillerTop.png");
+        bottomRight.add(new JLabel(image));
+
+        bottomRightIcons = new Box(BoxLayout.X_AXIS);
+        bottomRightIcons.setAlignmentX(LEFT_ALIGNMENT);
+        image = new ImageIcon("images/CADMenuImages/grayFillerBottom.png");
+        bottomRightIcons.add(new JLabel(image));
+
+        createBottomRightButtons();
+        bottomRightIcons.add(bottomRightButtonsGrayed);
+        bottomRight.add(bottomRightIcons);
+        bottomPanel.add(bottomRight);
+
+        mainPanel.add(bottomPanel);
+    }
+
+    /**
+     * Creates the two bottom right buttons.
+     */
+    public void createBottomRightButtons()
+    {
+        bottomRightButtonsGrayed = new Box(BoxLayout.X_AXIS);
+        ImageIcon image = new ImageIcon(
+                "images/CADMenuImages/checkmarkGrey.png");
+        buttonCheckmark = makeButton(image);
+        bottomRightButtonsGrayed.add(buttonCheckmark);
+        image = new ImageIcon("images/CADMenuImages/minusGrey.png");
+
+        buttonMinus = makeButton(image);
+        bottomRightButtonsGrayed.add(buttonMinus);
+
+        bottomRightButtonsColored = new Box(BoxLayout.X_AXIS);
+        image = new ImageIcon("images/CADMenuImages/checkmarkGreen.png");
+        buttonCheckmark = makeButton(image);
+        bottomRightButtonsColored.add(buttonCheckmark);
+        image = new ImageIcon("images/CADMenuImages/minusRed.png");
+
+        buttonMinus = makeButton(image);
+        bottomRightButtonsColored.add(buttonMinus);
+    }
+
+    /**
+     * This method creates the drop down menus for both the tool and more
+     * buttons
+     */
+    public void createDropDownMenus()
+    {
+
+        ImageIcon image = new ImageIcon("images/ToolMenuImages/toolMenu.png");
+        JLabel menu = new JLabel(image);
+        toolMenu = new JFrame();
+        toolMenu.getContentPane().add(menu);
+        toolMenu.setUndecorated(true);
+        toolMenu.pack();
+        toolMenu.setVisible(false);
+
+        image = new ImageIcon("images/MoreMenuImages/moreMenu.png");
+        menu = new JLabel(image);
+        moreMenu = new JFrame();
+        moreMenu.getContentPane().add(menu);
+        moreMenu.setUndecorated(true);
+        moreMenu.pack();
+        moreMenu.setVisible(false);
+    }
+
+    /**
+     * Takes in the name of the user and displays it.
+     */
+    public void setName(String username)
+    {
+        name.setText(username);
+        userListName1.setText(username);
+    }
+    /**
+     * Accessor to the user's name (for use in IncidentViewer comments
+     */
+    public String getName()
+    {
+        return name.getText();
+    }
+    
+    /**
+     * Factory method. Makes a JButton with an image and listener.
+     *
+     * @param image the image this button will display.
+     * @param listener the action listener for this button.
+     * @return the JButton.
+     */
+    public JButton makeButton(ImageIcon image)
+    {
+        JButton button = new JButton(image);
+        Dimension size = new Dimension(image.getImage().getWidth(null), image
+                .getImage().getHeight(null));
+        button.setPreferredSize(size);
+        button.setMinimumSize(size);
+        button.setMaximumSize(size);
+        button.setBorderPainted(false);
+        button.setFocusable(false);
+
+        return button;
+    }
+
+    /**
+     * Hides the tool drop down menu. Also resets the image to the default(no
+     * highlighted rows).
+     */
+    public void closeToolMenu()
+    {
+        ImageIcon image;
+        JLabel menu;
+        image = new ImageIcon("images/ToolMenuImages/toolMenu.png");
+        menu = new JLabel(image);
+        toolMenu.getContentPane().removeAll();
+        toolMenu.getContentPane().add(menu);
+        toolMenu.validate();
+        toolMenu.setVisible(false);
+    }
+
+    /**
+     * Hides the more drop down menu. Also resets the image to the default(no
+     * highlighted rows).
+     */
+    public void closeMoreMenu()
+    {
+        ImageIcon image;
+        JLabel menu;
+        image = new ImageIcon("images/MoreMenuImages/moreMenu.png");
+        menu = new JLabel(image);
+        moreMenu.getContentPane().removeAll();
+        moreMenu.getContentPane().add(menu);
+        moreMenu.validate();
+        moreMenu.setVisible(false);
+    }
+
+    /**
+     * This method is called every second in ScreenManger to update the display
+     * time every second.
+     */
+    public void handleUpdateTime()
+    {
+        Date date = new Date();
+        String dateTime = dateFormat.format(date);
+        dateAndTime.setText(dateTime);
+    }
+
+    /**
+     * Makes screen visible.
+     */
+    public void open()
+    {
+        setVisible(true);
+    }
+
+    /**
+     * Hides screen.
+     */
+    public void close()
+    {
+        setVisible(false);
+    }
+
+    /**
+     * Currently not used.
+     */
+    public void setIncomingIncident()
+    {
+        bottomRightIcons.remove(bottomRightButtonsGrayed);
+        bottomRightIcons.add(bottomRightButtonsColored);
+        revalidate();
+        repaint();
+    }
+
+    /**
+     * Currently not used.
+     */
+    public void endIncomingIncident()
+    {
+        bottomRightIcons.remove(bottomRightButtonsColored);
+        bottomRightIcons.add(bottomRightButtonsGrayed);
+        revalidate();
+        repaint();
+    }
+
+    /**
+     * Sets position title to trainee.
+     */
+    public void removeDispatcherStatus()
+    {
+        position.setText("Trainee");
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/BOLOEntry.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/BOLOEntry.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/BOLOEntry.java	(revision 82)
@@ -0,0 +1,762 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package tmcsim.client.cadclientgui.screens;
+
+import javax.swing.JComponent;
+
+/**
+ * CURRENTLY NOT IN USE.
+ * @author Stuart
+ */
+public class BOLOEntry extends javax.swing.JFrame {
+
+    /**
+     * Creates new form BOLOEntry
+     */
+    public BOLOEntry() {
+        declareComponents();
+        initComponents();
+        initLayout();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed"
+    // desc="Generated Code">//GEN-BEGIN:initComponents
+    private void declareComponents() {
+
+        incidentCaseInformationPane = new javax.swing.JPanel();
+        caseNumberLabel = new javax.swing.JLabel();
+        boloTypeLabel = new javax.swing.JLabel();
+        requestDateTimeLabel = new javax.swing.JLabel();
+        requestedByLabel = new javax.swing.JLabel();
+        unitLabel = new javax.swing.JLabel();
+        caseNumberField = new javax.swing.JTextField();
+        requestedByField = new javax.swing.JTextField();
+        otherInfoLabel = new javax.swing.JLabel();
+        otherInfoField = new javax.swing.JTextField();
+        unitField = new javax.swing.JTextField();
+        expiresLabel = new javax.swing.JLabel();
+        expiresField = new javax.swing.JTextField();
+        expiredCheckBox = new javax.swing.JCheckBox();
+        incidentNumberLabel = new javax.swing.JLabel();
+        incidentNumberField = new javax.swing.JTextField();
+        entryDateTimeLabel = new javax.swing.JLabel();
+        entryDateField = new javax.swing.JTextField();
+        entryTimeField = new javax.swing.JTextField();
+        enteredByLabel = new javax.swing.JLabel();
+        enteredByField = new javax.swing.JTextField();
+        boloTypeCombo = new javax.swing.JComboBox();
+        requestDateField = new javax.swing.JTextField();
+        requestTimeField = new javax.swing.JTextField();
+        subjectInformationPane = new javax.swing.JPanel();
+        lastNameLabel = new javax.swing.JLabel();
+        firstNameLabel = new javax.swing.JLabel();
+        aliasLabel = new javax.swing.JLabel();
+        dlNumberLabel = new javax.swing.JLabel();
+        characteristicsLabel = new javax.swing.JLabel();
+        lastNameField = new javax.swing.JTextField();
+        firstNameField = new javax.swing.JTextField();
+        aliasField = new javax.swing.JTextField();
+        dlNumberField = new javax.swing.JTextField();
+        stateLabel = new javax.swing.JLabel();
+        stateCombo = new javax.swing.JComboBox();
+        characteristicsField = new javax.swing.JTextField();
+        raceLabel = new javax.swing.JLabel();
+        genderLabel = new javax.swing.JLabel();
+        dobLabel = new javax.swing.JLabel();
+        ageLabel = new javax.swing.JLabel();
+        raceCombo = new javax.swing.JComboBox();
+        genderCombo = new javax.swing.JComboBox();
+        dobField = new javax.swing.JTextField();
+        ageField = new javax.swing.JTextField();
+        heightLabel = new javax.swing.JLabel();
+        weightLabel = new javax.swing.JLabel();
+        hairLabel = new javax.swing.JLabel();
+        eyesLabel = new javax.swing.JLabel();
+        hairCombo = new javax.swing.JComboBox();
+        eyesCombo = new javax.swing.JComboBox();
+        weightField = new javax.swing.JTextField();
+        heightField = new javax.swing.JTextField();
+        vehicleInformationPane = new javax.swing.JPanel();
+        yearLabel = new javax.swing.JLabel();
+        makeLabel = new javax.swing.JLabel();
+        modelLabel = new javax.swing.JLabel();
+        yearField = new javax.swing.JTextField();
+        makeField = new javax.swing.JTextField();
+        modelField = new javax.swing.JTextField();
+        colorLabel = new javax.swing.JLabel();
+        vinLabel = new javax.swing.JLabel();
+        styleLabel = new javax.swing.JLabel();
+        styleField = new javax.swing.JTextField();
+        colorField = new javax.swing.JTextField();
+        vinField = new javax.swing.JTextField();
+        licensePane = new javax.swing.JPanel();
+        plateLabel = new javax.swing.JLabel();
+        plateStateLabel = new javax.swing.JLabel();
+        platesExpiresLabel = new javax.swing.JLabel();
+        plateField = new javax.swing.JTextField();
+        plateStateField = new javax.swing.JTextField();
+        platesExpiresField = new javax.swing.JTextField();
+        commentsPane = new javax.swing.JPanel();
+        commentsScrollPane = new javax.swing.JScrollPane();
+        commentsTable = new javax.swing.JTable();
+        commentsField = new javax.swing.JTextField();
+        addCommentButton = new javax.swing.JButton();
+        cancelCommentButton = new javax.swing.JButton();
+        saveCommentButton = new javax.swing.JButton();
+        addButton = new javax.swing.JButton();
+        cancelButoon = new javax.swing.JButton();
+        saveButton = new javax.swing.JButton();
+        exitButton = new javax.swing.JButton();
+    }
+    
+    private void initComponents() {
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+
+        caseNumberLabel.setText("Case Number:");
+
+        boloTypeLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        boloTypeLabel.setText("BOLO Type:");
+
+        requestDateTimeLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        requestDateTimeLabel.setText("Request Date/Time:");
+
+        requestedByLabel.setText("Requested By:");
+
+        unitLabel.setText("Unit:");
+
+        caseNumberField.setText("jTextField1");
+
+        requestedByField.setText("jTextField4");
+
+        otherInfoLabel.setText("Other Info:");
+
+        otherInfoField.setText("jTextField6");
+
+        unitField.setText("jTextField7");
+
+        expiresLabel.setText("Expires:");
+
+        expiresField.setText("jTextField8");
+
+        expiredCheckBox.setText("Expired");
+
+        incidentNumberLabel.setText("Incident Number:");
+
+        incidentNumberField.setText("jTextField9");
+
+        entryDateTimeLabel.setText("Entry Date/Time:");
+
+        entryDateField.setText("jTextField10");
+
+        entryTimeField.setText("jTextField11");
+
+        enteredByLabel.setText("Entered By:");
+
+        enteredByField.setText("jTextField12");
+
+        boloTypeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        requestDateField.setText("jTextField14");
+
+        requestTimeField.setText("jTextField15");
+        
+        lastNameLabel.setText("Last Name:");
+
+        firstNameLabel.setText("First Name:");
+
+        aliasLabel.setText("Alias:");
+
+        dlNumberLabel.setText("DL#:");
+
+        characteristicsLabel.setText("Characteristics:");
+
+        lastNameField.setText("jTextField13");
+
+        firstNameField.setText("jTextField16");
+
+        aliasField.setText("jTextField17");
+
+        dlNumberField.setText("jTextField18");
+
+        stateLabel.setText("State:");
+
+        stateCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        characteristicsField.setText("jTextField19");
+
+        raceLabel.setText("Race:");
+
+        genderLabel.setText("Gender:");
+
+        dobLabel.setText("DOB:");
+
+        ageLabel.setText("Age:");
+
+        raceCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        genderCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        dobField.setText("jTextField20");
+
+        ageField.setText("jTextField21");
+
+        heightLabel.setText("Height:");
+
+        weightLabel.setText("Weight:");
+
+        hairLabel.setText("Hair:");
+
+        eyesLabel.setText("Eyes:");
+
+        hairCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        eyesCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        weightField.setText("jTextField22");
+
+        heightField.setText("jTextField23");
+
+        yearLabel.setText("Year:");
+
+        makeLabel.setText("Make:");
+
+        modelLabel.setText("Model:");
+
+        yearField.setText("jTextField2");
+
+        makeField.setText("jTextField3");
+
+        modelField.setText("jTextField5");
+
+        colorLabel.setText("Color:");
+
+        vinLabel.setText("VIN:");
+
+        styleLabel.setText("Style:");
+
+        styleField.setText("jTextField24");
+
+        colorField.setText("jTextField25");
+
+        vinField.setText("jTextField26");
+
+        plateLabel.setText("Plate:");
+
+        plateStateLabel.setText("State:");
+
+        platesExpiresLabel.setText("Expires:");
+
+        plateField.setText("jTextField27");
+
+        plateStateField.setText("jTextField28");
+
+        platesExpiresField.setText("jTextField29");
+
+        commentsTable.setModel(new javax.swing.table.DefaultTableModel(
+                new Object [][] {
+                    {null, null, null, null},
+                    {null, null, null, null},
+                    {null, null, null, null},
+                    {null, null, null, null}
+                },
+                new String [] {
+                    "Date", "Time", "User", "Comment"
+                }
+            ));
+        
+        commentsScrollPane.setViewportView(commentsTable);
+
+        commentsField.setText("jTextField30");
+
+        addCommentButton.setText("Add");
+
+        cancelCommentButton.setText("Cancel");
+
+        saveCommentButton.setText("Save");
+        addButton.setText("Add");
+
+        cancelButoon.setText("Cancel");
+
+        saveButton.setText("Save");
+
+        exitButton.setText("Exit");
+    }
+    
+    private void initLayout(){
+        javax.swing.GroupLayout incidentCaseInformationPaneLayout = new javax.swing.GroupLayout(incidentCaseInformationPane);
+        incidentCaseInformationPane.setLayout(incidentCaseInformationPaneLayout);
+        incidentCaseInformationPaneLayout.setHorizontalGroup(
+            incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(incidentCaseInformationPaneLayout.createSequentialGroup()
+                .addGap(35, 35, 35)
+                .addGroup(incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(unitLabel)
+                    .addComponent(requestedByLabel)
+                    .addComponent(requestDateTimeLabel)
+                    .addComponent(boloTypeLabel)
+                    .addComponent(caseNumberLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(requestedByField)
+                    .addComponent(caseNumberField)
+                    .addComponent(unitField, javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(boloTypeCombo, javax.swing.GroupLayout.Alignment.TRAILING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(incidentCaseInformationPaneLayout.createSequentialGroup()
+                        .addComponent(requestDateField, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(18, 18, 18)
+                        .addComponent(requestTimeField, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addGroup(incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(otherInfoLabel)
+                    .addComponent(expiresLabel)
+                    .addComponent(incidentNumberLabel)
+                    .addComponent(entryDateTimeLabel)
+                    .addComponent(enteredByLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addGroup(incidentCaseInformationPaneLayout.createSequentialGroup()
+                        .addComponent(expiresField, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(18, 18, 18)
+                        .addComponent(expiredCheckBox))
+                    .addComponent(otherInfoField)
+                    .addComponent(incidentNumberField)
+                    .addGroup(incidentCaseInformationPaneLayout.createSequentialGroup()
+                        .addComponent(entryDateField, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(18, 18, 18)
+                        .addComponent(entryTimeField))
+                    .addComponent(enteredByField, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(67, 67, 67))
+        );
+        incidentCaseInformationPaneLayout.setVerticalGroup(
+            incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(incidentCaseInformationPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(caseNumberLabel)
+                    .addComponent(caseNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(otherInfoLabel)
+                    .addComponent(otherInfoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(boloTypeLabel)
+                    .addComponent(expiresLabel)
+                    .addComponent(expiresField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(expiredCheckBox)
+                    .addComponent(boloTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(requestDateTimeLabel)
+                    .addComponent(incidentNumberLabel)
+                    .addComponent(incidentNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(requestDateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(requestTimeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(requestedByLabel)
+                    .addComponent(requestedByField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(entryDateTimeLabel)
+                    .addComponent(entryDateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(entryTimeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentCaseInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(unitLabel)
+                    .addComponent(unitField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(enteredByLabel)
+                    .addComponent(enteredByField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(14, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout subjectInformationPaneLayout = new javax.swing.GroupLayout(subjectInformationPane);
+        subjectInformationPane.setLayout(subjectInformationPaneLayout);
+        subjectInformationPaneLayout.setHorizontalGroup(
+            subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(subjectInformationPaneLayout.createSequentialGroup()
+                .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(subjectInformationPaneLayout.createSequentialGroup()
+                        .addContainerGap()
+                        .addComponent(characteristicsLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(characteristicsField))
+                    .addGroup(subjectInformationPaneLayout.createSequentialGroup()
+                        .addGap(19, 19, 19)
+                        .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(dobLabel)
+                            .addGroup(subjectInformationPaneLayout.createSequentialGroup()
+                                .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                                    .addComponent(dlNumberLabel)
+                                    .addComponent(aliasLabel)
+                                    .addComponent(firstNameLabel)
+                                    .addComponent(lastNameLabel))
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                                    .addComponent(firstNameField, javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addComponent(lastNameField, javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addComponent(aliasField)
+                                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, subjectInformationPaneLayout.createSequentialGroup()
+                                        .addComponent(dlNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(stateLabel)
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(stateCombo, 0, 67, Short.MAX_VALUE)))
+                                .addGap(18, 18, 18)
+                                .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addGroup(subjectInformationPaneLayout.createSequentialGroup()
+                                        .addGap(11, 11, 11)
+                                        .addComponent(raceLabel))
+                                    .addComponent(genderLabel)
+                                    .addComponent(ageLabel, javax.swing.GroupLayout.Alignment.TRAILING))))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(raceCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(genderCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(dobField, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(ageField, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(heightLabel)
+                            .addComponent(weightLabel)
+                            .addComponent(hairLabel)
+                            .addComponent(eyesLabel))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(hairCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(eyesCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(weightField)
+                            .addComponent(heightField))))
+                .addContainerGap())
+        );
+        subjectInformationPaneLayout.setVerticalGroup(
+            subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(subjectInformationPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lastNameLabel)
+                    .addComponent(raceLabel)
+                    .addComponent(raceCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(heightLabel)
+                    .addComponent(heightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(lastNameField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(firstNameLabel)
+                    .addComponent(firstNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(genderLabel)
+                    .addComponent(genderCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(weightLabel)
+                    .addComponent(weightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(aliasLabel)
+                    .addComponent(aliasField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(dobLabel)
+                    .addComponent(dobField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(hairLabel)
+                    .addComponent(hairCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(dlNumberLabel)
+                    .addComponent(dlNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(stateLabel)
+                    .addComponent(stateCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(ageLabel)
+                    .addComponent(ageField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(eyesLabel)
+                    .addComponent(eyesCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(subjectInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(characteristicsLabel)
+                    .addComponent(characteristicsField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout vehicleInformationPaneLayout = new javax.swing.GroupLayout(vehicleInformationPane);
+        vehicleInformationPane.setLayout(vehicleInformationPaneLayout);
+        vehicleInformationPaneLayout.setHorizontalGroup(
+            vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(vehicleInformationPaneLayout.createSequentialGroup()
+                .addGap(39, 39, 39)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(modelLabel)
+                    .addComponent(makeLabel)
+                    .addComponent(yearLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(yearField, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(makeField, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE)
+                    .addComponent(modelField))
+                .addGap(18, 18, 18)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(colorLabel)
+                    .addComponent(vinLabel)
+                    .addComponent(styleLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(styleField, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE)
+                    .addComponent(colorField)
+                    .addComponent(vinField))
+                .addContainerGap())
+        );
+        vehicleInformationPaneLayout.setVerticalGroup(
+            vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(vehicleInformationPaneLayout.createSequentialGroup()
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(vehicleInformationPaneLayout.createSequentialGroup()
+                        .addGap(6, 6, 6)
+                        .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(yearLabel)
+                            .addComponent(yearField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, vehicleInformationPaneLayout.createSequentialGroup()
+                        .addContainerGap()
+                        .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(styleLabel)
+                            .addComponent(styleField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(makeLabel)
+                    .addComponent(makeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(colorLabel)
+                    .addComponent(colorField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(modelLabel)
+                    .addComponent(modelField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(vinLabel)
+                    .addComponent(vinField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout licensePaneLayout = new javax.swing.GroupLayout(licensePane);
+        licensePane.setLayout(licensePaneLayout);
+        licensePaneLayout.setHorizontalGroup(
+            licensePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(licensePaneLayout.createSequentialGroup()
+                .addGap(21, 21, 21)
+                .addGroup(licensePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(plateLabel)
+                    .addComponent(plateStateLabel)
+                    .addComponent(platesExpiresLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(licensePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(plateField, javax.swing.GroupLayout.DEFAULT_SIZE, 123, Short.MAX_VALUE)
+                    .addGroup(licensePaneLayout.createSequentialGroup()
+                        .addGroup(licensePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(plateStateField, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(platesExpiresField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addGap(0, 0, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        licensePaneLayout.setVerticalGroup(
+            licensePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(licensePaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(licensePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(plateLabel)
+                    .addComponent(plateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(licensePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(plateStateLabel)
+                    .addComponent(plateStateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(licensePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(platesExpiresLabel)
+                    .addComponent(platesExpiresField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout commentsPaneLayout = new javax.swing.GroupLayout(commentsPane);
+        commentsPane.setLayout(commentsPaneLayout);
+        commentsPaneLayout.setHorizontalGroup(
+            commentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(commentsPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(commentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(commentsPaneLayout.createSequentialGroup()
+                        .addComponent(commentsField, javax.swing.GroupLayout.PREFERRED_SIZE, 670, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(commentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(addCommentButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(cancelCommentButton, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
+                            .addComponent(saveCommentButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                    .addComponent(commentsScrollPane))
+                .addContainerGap())
+        );
+        commentsPaneLayout.setVerticalGroup(
+            commentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(commentsPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(commentsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(commentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addGroup(commentsPaneLayout.createSequentialGroup()
+                        .addComponent(addCommentButton)
+                        .addGap(0, 0, 0)
+                        .addComponent(cancelCommentButton)
+                        .addGap(0, 0, 0)
+                        .addComponent(saveCommentButton))
+                    .addComponent(commentsField))
+                .addGap(0, 6, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(incidentCaseInformationPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(subjectInformationPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(vehicleInformationPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(licensePane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(49, 49, 49))
+                    .addComponent(commentsPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addGap(0, 0, Short.MAX_VALUE)
+                        .addComponent(addButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(cancelButoon, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(saveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(incidentCaseInformationPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(subjectInformationPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(1, 1, 1)
+                        .addComponent(vehicleInformationPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(0, 0, Short.MAX_VALUE)
+                        .addComponent(licensePane, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(commentsPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(exitButton)
+                    .addComponent(saveButton)
+                    .addComponent(cancelButoon)
+                    .addComponent(addButton))
+                .addContainerGap())
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    /* 
+     * Makes screen visible.
+     */
+    public void open(){
+        setVisible(true);
+    }
+    
+    /*
+     * Hides screen.
+     */
+    public void close(){
+        setVisible(false);
+    }
+    
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton addButton;
+    private javax.swing.JButton addCommentButton;
+    private javax.swing.JTextField ageField;
+    private javax.swing.JLabel ageLabel;
+    private javax.swing.JTextField aliasField;
+    private javax.swing.JLabel aliasLabel;
+    private javax.swing.JComboBox boloTypeCombo;
+    private javax.swing.JLabel boloTypeLabel;
+    private javax.swing.JButton cancelButoon;
+    private javax.swing.JButton cancelCommentButton;
+    private javax.swing.JTextField caseNumberField;
+    private javax.swing.JLabel caseNumberLabel;
+    private javax.swing.JTextField characteristicsField;
+    private javax.swing.JLabel characteristicsLabel;
+    private javax.swing.JTextField colorField;
+    private javax.swing.JLabel colorLabel;
+    private javax.swing.JTextField commentsField;
+    private javax.swing.JPanel commentsPane;
+    private javax.swing.JScrollPane commentsScrollPane;
+    private javax.swing.JTable commentsTable;
+    private javax.swing.JTextField dlNumberField;
+    private javax.swing.JLabel dlNumberLabel;
+    private javax.swing.JTextField dobField;
+    private javax.swing.JLabel dobLabel;
+    private javax.swing.JTextField enteredByField;
+    private javax.swing.JLabel enteredByLabel;
+    private javax.swing.JTextField entryDateField;
+    private javax.swing.JLabel entryDateTimeLabel;
+    private javax.swing.JTextField entryTimeField;
+    private javax.swing.JButton exitButton;
+    private javax.swing.JCheckBox expiredCheckBox;
+    private javax.swing.JTextField expiresField;
+    private javax.swing.JLabel expiresLabel;
+    private javax.swing.JComboBox eyesCombo;
+    private javax.swing.JLabel eyesLabel;
+    private javax.swing.JTextField firstNameField;
+    private javax.swing.JLabel firstNameLabel;
+    private javax.swing.JComboBox genderCombo;
+    private javax.swing.JLabel genderLabel;
+    private javax.swing.JComboBox hairCombo;
+    private javax.swing.JLabel hairLabel;
+    private javax.swing.JTextField heightField;
+    private javax.swing.JLabel heightLabel;
+    private javax.swing.JPanel incidentCaseInformationPane;
+    private javax.swing.JTextField incidentNumberField;
+    private javax.swing.JLabel incidentNumberLabel;
+    private javax.swing.JTextField lastNameField;
+    private javax.swing.JLabel lastNameLabel;
+    private javax.swing.JPanel licensePane;
+    private javax.swing.JTextField makeField;
+    private javax.swing.JLabel makeLabel;
+    private javax.swing.JTextField modelField;
+    private javax.swing.JLabel modelLabel;
+    private javax.swing.JTextField otherInfoField;
+    private javax.swing.JLabel otherInfoLabel;
+    private javax.swing.JTextField plateField;
+    private javax.swing.JLabel plateLabel;
+    private javax.swing.JTextField plateStateField;
+    private javax.swing.JLabel plateStateLabel;
+    private javax.swing.JTextField platesExpiresField;
+    private javax.swing.JLabel platesExpiresLabel;
+    private javax.swing.JComboBox raceCombo;
+    private javax.swing.JLabel raceLabel;
+    private javax.swing.JTextField requestDateField;
+    private javax.swing.JLabel requestDateTimeLabel;
+    private javax.swing.JTextField requestTimeField;
+    private javax.swing.JTextField requestedByField;
+    private javax.swing.JLabel requestedByLabel;
+    private javax.swing.JButton saveButton;
+    private javax.swing.JButton saveCommentButton;
+    private javax.swing.JComboBox stateCombo;
+    private javax.swing.JLabel stateLabel;
+    private javax.swing.JTextField styleField;
+    private javax.swing.JLabel styleLabel;
+    private javax.swing.JPanel subjectInformationPane;
+    private javax.swing.JTextField unitField;
+    private javax.swing.JLabel unitLabel;
+    private javax.swing.JPanel vehicleInformationPane;
+    private javax.swing.JTextField vinField;
+    private javax.swing.JLabel vinLabel;
+    private javax.swing.JTextField weightField;
+    private javax.swing.JLabel weightLabel;
+    private javax.swing.JTextField yearField;
+    private javax.swing.JLabel yearLabel;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/LicensePlateInformation.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/LicensePlateInformation.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/LicensePlateInformation.java	(revision 82)
@@ -0,0 +1,191 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import tmcsim.client.cadclientgui.data.CADData;
+
+/**
+ * CURRENTLY NOT IN USE.
+ * @author Stuart
+ */
+public class LicensePlateInformation extends javax.swing.JDialog {
+
+    private CADData cadData;
+    
+    int incidentId;
+    
+    /**
+     * Creates new form licensePlateInformation
+     */
+    public LicensePlateInformation(java.awt.Frame parent, boolean modal, int incidentId,CADData cadData) {
+        super(parent, modal);
+        this.cadData = cadData;
+        this.incidentId = incidentId;
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        plateNumberLabel = new javax.swing.JLabel();
+        plateNumberField = new javax.swing.JTextField(5);
+        stateLabel = new javax.swing.JLabel();
+        stateField = new javax.swing.JTextField(5);
+        yearField = new javax.swing.JTextField();
+        yearLabel = new javax.swing.JLabel();
+        typeLabel = new javax.swing.JLabel();
+        typeCombo = new javax.swing.JComboBox();
+        okButton = new javax.swing.JButton();
+        nextButton = new javax.swing.JButton();
+        cancelButton = new javax.swing.JButton();
+        
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+
+        plateNumberLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        plateNumberLabel.setText("Plate Number:");
+
+        stateLabel.setText("State:");
+
+        yearLabel.setText("Year:");
+
+        typeLabel.setText("Type:");
+
+        typeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        okButton.setText("OK");
+        okButton.addActionListener(new ActionListener(){
+            public void actionPerformed(ActionEvent arg0) {
+                cadData.getIncident(incidentId).getIncidentVehicle().addVehicleInformation(plateNumberField.getText(),
+                                stateField.getText(),
+                                (String)(typeCombo.getSelectedItem()),
+                                yearField.getText()
+                        );
+                //ScreenManager.refreshIncidentViewerLicenseTable(incidentId);
+                dispose();
+            }
+        });
+
+
+        nextButton.setText("Next");
+        nextButton.addActionListener(new ActionListener(){
+            public void actionPerformed(ActionEvent arg0) {
+                cadData.getIncident(incidentId).getIncidentVehicle().addVehicleInformation(plateNumberField.getText(),
+                                stateField.getText(),
+                                (String)(typeCombo.getSelectedItem()),
+                                yearField.getText()
+                        );
+                //ScreenManager.refreshIncidentViewerLicenseTable(incidentId);
+                refreshInformation(incidentId);
+            }
+        });
+
+        cancelButton.setText("Cancel");
+        cancelButton.addActionListener(new ActionListener(){
+            public void actionPerformed(ActionEvent arg0) {
+                dispose();
+            }
+        });
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(stateLabel)
+                            .addComponent(plateNumberLabel))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addGroup(layout.createSequentialGroup()
+                                .addComponent(stateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                .addComponent(typeLabel))
+                            .addGroup(layout.createSequentialGroup()
+                                .addComponent(plateNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(18, 18, 18)
+                                .addComponent(yearLabel)))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(typeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addGroup(layout.createSequentialGroup()
+                                .addComponent(yearField, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(0, 0, Short.MAX_VALUE))))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addGap(0, 0, Short.MAX_VALUE)
+                        .addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(nextButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(plateNumberLabel)
+                    .addComponent(plateNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(yearLabel)
+                    .addComponent(yearField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(stateLabel)
+                    .addComponent(stateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(typeLabel)
+                    .addComponent(typeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(cancelButton)
+                    .addComponent(nextButton)
+                    .addComponent(okButton))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        pack();
+        setVisible(true);
+    }// </editor-fold>//GEN-END:initComponents
+
+    public void refreshInformation(int incidentId){
+        this.incidentId = incidentId;
+        plateNumberField.setText("");
+        stateField.setText("");
+        yearField.setText("");
+    }
+    
+    public void open(int incidentId){
+        refreshInformation(incidentId);
+        setVisible(true);
+    }
+    
+    public void close(){
+        setVisible(false);
+    }
+    
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton cancelButton;
+    private javax.swing.JButton nextButton;
+    private javax.swing.JButton okButton;
+    private javax.swing.JTextField plateNumberField;
+    private javax.swing.JLabel plateNumberLabel;
+    private javax.swing.JTextField stateField;
+    private javax.swing.JLabel stateLabel;
+    private javax.swing.JComboBox typeCombo;
+    private javax.swing.JLabel typeLabel;
+    private javax.swing.JTextField yearField;
+    private javax.swing.JLabel yearLabel;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentViewer.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentViewer.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentViewer.java	(revision 82)
@@ -0,0 +1,2416 @@
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.rmi.RemoteException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Stack;
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.table.DefaultTableModel;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_ADD_INFO;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_CALLBACK;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_CALLER;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_GEN_INFO;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_INFO;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_LOC;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_TABLE;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_TIMES;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_VAL;
+import tmcsim.client.cadclientgui.enums.ComboBoxConstants;
+import tmcsim.simulationmanager.model.LogEntryCellRenderer;
+
+/**
+ * This class contains the view and controller for the IncidentViewer screen.
+ * The view is built using a GUI builder plug-in, and the controller uses
+ * listeners to control how the view and data act.
+ *
+ * @author Stuart
+ */
+public class IncidentViewer extends javax.swing.JFrame
+{
+    Stack<Integer> stack;
+    SimpleDateFormat dateFormatDate;
+    SimpleDateFormat dateFormatTime;
+    int incidentId;
+
+    /**
+     * Creates new form IncidentViewer
+     */
+    public IncidentViewer(int incidentId)
+    {
+        this.incidentId = incidentId;
+        declareComponents();
+        initLayout();
+        initControllers();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">
+    private void declareComponents()
+    {
+
+        stack = new Stack<Integer>();
+        dateFormatDate = new SimpleDateFormat("MM/dd/yyyy");
+        dateFormatTime = new SimpleDateFormat("HH:mm:ss");
+
+        mapLocLabel = new javax.swing.JLabel();
+        addressField = new javax.swing.JTextField();
+        aptLabel = new javax.swing.JLabel();
+        aptField = new javax.swing.JTextField(4);
+        crossStLabel = new javax.swing.JLabel();
+        crossStField = new javax.swing.JTextField();
+        locationLabel = new javax.swing.JLabel();
+        locationField = new javax.swing.JTextField();
+        cityLabel = new javax.swing.JLabel();
+        cityComboBox = new javax.swing.JComboBox();
+        countyLabel = new javax.swing.JLabel();
+        countyComboBox = new javax.swing.JComboBox();
+        agencyLabel = new javax.swing.JLabel();
+        agencyComboBox = new javax.swing.JComboBox();
+        typeCodeLabel = new javax.swing.JLabel();
+        typeCodeComboBox = new javax.swing.JComboBox();
+        priLabel = new javax.swing.JLabel();
+        priComboBox = new javax.swing.JComboBox();
+        priComboBox.setPreferredSize(new Dimension(50, 25));
+        rightOfPriButton = new javax.swing.JButton();
+        rpLabel = new javax.swing.JLabel();
+        rpField = new javax.swing.JTextField();
+        phoneLabel = new javax.swing.JLabel();
+        phoneField = new javax.swing.JTextField();
+        extLabel = new javax.swing.JLabel();
+        extField = new javax.swing.JTextField(3);
+        aliLabel = new javax.swing.JLabel();
+        aliField = new javax.swing.JTextField();
+        rpTypeLabel = new javax.swing.JLabel();
+        rpTypeComboBox = new javax.swing.JComboBox();
+        sectorComboBox = new javax.swing.JComboBox();
+        sectorLabel = new javax.swing.JLabel();
+        beatLabel = new javax.swing.JLabel();
+        beatComboBox = new javax.swing.JComboBox();
+        mediaComboBox = new javax.swing.JComboBox();
+        mediaLabel = new javax.swing.JLabel();
+        confidentialCommentCheckBox = new javax.swing.JCheckBox();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        jLabel8 = new javax.swing.JLabel();
+        hubXterButton = new javax.swing.JButton();
+        aniAliButton = new javax.swing.JButton();
+        updateMapLocButton = new javax.swing.JButton();
+        exitSendButton = new javax.swing.JButton();
+        sentToQButton = new javax.swing.JButton();
+        fileButton = new javax.swing.JButton();
+        showAllButton = new javax.swing.JButton();
+        unitRecButton = new javax.swing.JButton();
+        addFspChpButton = new javax.swing.JButton();
+        informationButton = new javax.swing.JButton();
+        carButton = new javax.swing.JButton();
+        personButton = new javax.swing.JButton();
+        towRotationButton = new javax.swing.JButton();
+        licensePlateInfoLabel = new javax.swing.JLabel();
+        jScrollPane13 = new javax.swing.JScrollPane();
+        licensePlateTable = new javax.swing.JTable();
+        addButton = new javax.swing.JButton();
+        cautionButton = new javax.swing.JButton();
+        historyButton = new javax.swing.JButton();
+        premiseButton = new javax.swing.JButton();
+        mapButton = new javax.swing.JButton();
+        fireField = new javax.swing.JTextField();
+        emsLabel = new javax.swing.JLabel();
+        emsField = new javax.swing.JTextField();
+        fireLabel = new javax.swing.JLabel();
+        lawLabel = new javax.swing.JLabel();
+        lawField = new javax.swing.JTextField();
+        bottomTabbedPane = new javax.swing.JTabbedPane();
+        callbacksPane = new javax.swing.JPanel();
+        jPanel13 = new javax.swing.JPanel();
+        callBackCommentField = new javax.swing.JTextField();
+        callBackAddButton = new javax.swing.JButton();
+        callBackCancelButton = new javax.swing.JButton();
+        callBackSaveButton = new javax.swing.JButton();
+        jScrollPane14 = new javax.swing.JScrollPane();
+        callBackCommentTable = new javax.swing.JTable();
+        assignmentsPane = new javax.swing.JPanel();
+        jPanel4 = new javax.swing.JPanel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jScrollPane4 = new javax.swing.JScrollPane();
+        assignmentsTable = new javax.swing.JTable();
+        jPanel2 = new javax.swing.JPanel();
+        jScrollPane7 = new javax.swing.JScrollPane();
+        jScrollPane5 = new javax.swing.JScrollPane();
+        resourceTable = new javax.swing.JTable();
+        recommandButton = new javax.swing.JButton();
+        activitiesPane = new javax.swing.JPanel();
+        jScrollPane15 = new javax.swing.JScrollPane();
+        jScrollPane6 = new javax.swing.JScrollPane();
+        activitiesTable = new javax.swing.JTable();
+        callBacksPane = new javax.swing.JPanel();
+        jPanel1 = new javax.swing.JPanel();
+        incidentNumLabel = new javax.swing.JLabel();
+        addInfoIncidentNumField = new javax.swing.JTextField();
+        incidentTypeLabel = new javax.swing.JLabel();
+        addInfoIncidentTypeField = new javax.swing.JTextField();
+        callTakenLabel = new javax.swing.JLabel();
+        addInfoCallTakenField = new javax.swing.JTextField();
+        machineNameLabel = new javax.swing.JLabel();
+        addInfoMachineNameField = new javax.swing.JTextField();
+        callTakerPhoneLabel = new javax.swing.JLabel();
+        addInfoCallTakerPhoneExtField = new javax.swing.JTextField();
+        callStatusLabel = new javax.swing.JLabel();
+        addInfoCallStatusField = new javax.swing.JTextField();
+        alarmLevelLabel = new javax.swing.JLabel();
+        addInfoAlarmLevelField = new javax.swing.JTextField();
+        ccJurisdictionLabel = new javax.swing.JLabel();
+        areaOfDivisionLabel = new javax.swing.JLabel();
+        addInfoCCJurisdictionComboBox = new javax.swing.JComboBox();
+        addInfoAreaOfDivisionComboBox = new javax.swing.JComboBox();
+        areaBatallionLabel = new javax.swing.JLabel();
+        addInfoAreaBatallionComboBox = new javax.swing.JComboBox();
+        beatResponseAreaLabel = new javax.swing.JLabel();
+        addInfoBeatResponseAreaComboBox = new javax.swing.JComboBox();
+        responsePlanLabel = new javax.swing.JLabel();
+        addInfoReponsePlanComboBox = new javax.swing.JComboBox();
+        rotationProviderAreaLabel = new javax.swing.JLabel();
+        addInfoRotationProviderAreaField = new javax.swing.JTextField();
+        addInfoCommentsField = new javax.swing.JTextField();
+        commentsNotesPane = new javax.swing.JPanel();
+        jScrollPane3 = new javax.swing.JScrollPane();
+        commentsNotesTable = new javax.swing.JTable();
+        commentsNotesAddButton = new javax.swing.JButton();
+        commentsNotesCancelButton = new javax.swing.JButton();
+        commentsNotesNotifyButton = new javax.swing.JButton();
+        commentsNotesSaveButton = new javax.swing.JButton();
+        commentsNotesField = new javax.swing.JTextArea(); // JD changed from TextField
+        commentsNotesConfidentialCommentCheckBox = new javax.swing.JCheckBox();
+        editLogPane = new javax.swing.JPanel();
+        jScrollPane8 = new javax.swing.JScrollPane();
+        editLogTable = new javax.swing.JTable();
+        timesPane = new javax.swing.JPanel();
+        jScrollPane9 = new javax.swing.JScrollPane();
+        timesTable = new javax.swing.JTable();
+        ringLabel = new javax.swing.JLabel();
+        timesRingField = new javax.swing.JTextField();
+        inQueueLabel = new javax.swing.JLabel();
+        timesInQueueField = new javax.swing.JTextField();
+        allAvailableLabel = new javax.swing.JLabel();
+        timesAllAvailableField = new javax.swing.JTextField();
+        callClosedLabel = new javax.swing.JLabel();
+        timesCallClosedField = new javax.swing.JTextField();
+        timesPageTimesButton = new javax.swing.JButton();
+        transportInfoPane = new javax.swing.JPanel();
+        jPanel6 = new javax.swing.JPanel();
+        jTextField27 = new javax.swing.JTextField();
+        transportInfoAddPresetTransportRecButton = new javax.swing.JButton();
+        transportInfoRemoveTransportRecButton = new javax.swing.JButton();
+        transportInfoLinkUnitToTransportRecButton = new javax.swing.JButton();
+        nameLabel = new javax.swing.JLabel();
+        transportCityLabel = new javax.swing.JLabel();
+        transportLocationLabel = new javax.swing.JLabel();
+        transportInfoAddressButton = new javax.swing.JButton();
+        transportInfoNameField = new javax.swing.JTextField();
+        transportInfoCityComboBox = new javax.swing.JComboBox();
+        transportInfoLocationField = new javax.swing.JTextField();
+        transportInfoAddressField = new javax.swing.JTextField();
+        transportStateLabel = new javax.swing.JLabel();
+        roomAptEtcLabel = new javax.swing.JLabel();
+        phoneLabel2 = new javax.swing.JLabel();
+        transportInfoStateField = new javax.swing.JTextField();
+        transportInfoRoomAptEtcField = new javax.swing.JTextField();
+        transportInfoPhoneField = new javax.swing.JTextField();
+        buildingNumLabel = new javax.swing.JLabel();
+        transportInfoBuildingField = new javax.swing.JTextField();
+        transportInfoState2Field = new javax.swing.JTextField();
+        transportInfoCancelButton = new javax.swing.JButton();
+        transportInfoSaveButton = new javax.swing.JButton();
+        jTabbedPane2 = new javax.swing.JTabbedPane();
+        jPanel7 = new javax.swing.JPanel();
+        transportProtocolLabel = new javax.swing.JLabel();
+        transportInfoProtocolComboBox = new javax.swing.JComboBox();
+        transportPriorityLabel = new javax.swing.JLabel();
+        transportInfoPriorityComboBox = new javax.swing.JComboBox();
+        assistedByLabel = new javax.swing.JLabel();
+        transportInfoAssistedByComboBox = new javax.swing.JComboBox();
+        jPanel8 = new javax.swing.JPanel();
+        jPanel9 = new javax.swing.JPanel();
+        jPanel10 = new javax.swing.JPanel();
+        userDataPane = new javax.swing.JPanel();
+        jPanel11 = new javax.swing.JPanel();
+        timeStampsLabel = new javax.swing.JLabel();
+        jScrollPane10 = new javax.swing.JScrollPane();
+        timeStampsTable = new javax.swing.JTable();
+        userDataTimeStampField = new javax.swing.JTextField();
+        dateLabel = new javax.swing.JLabel();
+        userDataDateField = new javax.swing.JTextField();
+        timeLabel = new javax.swing.JLabel();
+        userDataTimeField = new javax.swing.JTextField();
+        userDataStampButton = new javax.swing.JButton();
+        jScrollPane11 = new javax.swing.JScrollPane();
+        dataFieldsTable = new javax.swing.JTable();
+        dataFieldsLabel = new javax.swing.JLabel();
+        userDataCancelButton = new javax.swing.JButton();
+        userDataSaveButton = new javax.swing.JButton();
+        userDataDataField = new javax.swing.JTextField();
+        attachmentsPane = new javax.swing.JPanel();
+        jScrollPane12 = new javax.swing.JScrollPane();
+        attachmentsTable = new javax.swing.JTable();
+        fileNameLabel = new javax.swing.JLabel();
+        attachmentsFileNameField = new javax.swing.JTextField();
+        attachmentsBrowseButton = new javax.swing.JButton();
+        descriptionLabel = new javax.swing.JLabel();
+        attachmentsDescriptionField = new javax.swing.JTextField();
+        attachmentsAddButton = new javax.swing.JButton();
+        attachmentsDeleteButton = new javax.swing.JButton();
+        attachmentsCancelButton = new javax.swing.JButton();
+        attachmentsSaveButton = new javax.swing.JButton();
+    }
+
+    public void initWindowListener()
+    {
+        addWindowListener(new WindowAdapter()
+        {
+            public void windowClosing(WindowEvent e)
+            {
+                close();
+            }
+        });
+    }
+
+    public ActionListener newExitSendActionListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                close();
+            }
+        };
+    }
+
+    public DocumentListener newCommentsDocumentListener()
+    {
+        return new DocumentListener()
+        {
+            public void changedUpdate(DocumentEvent e)
+            {
+            }
+
+            public void insertUpdate(DocumentEvent e)
+            {
+                commentsNotesSaveButton.setEnabled(true);
+            }
+
+            public void removeUpdate(DocumentEvent e)
+            {
+            }
+        };
+    }
+
+    public ActionListener newCommentsAddListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                commentsNotesField.setEditable(true);
+                commentsNotesField.setBackground(java.awt.Color.white);
+
+                commentsNotesField.requestFocus();
+                commentsNotesAddButton.setEnabled(false);
+                commentsNotesCancelButton.setEnabled(true);
+            }
+        };
+    }
+
+    public ActionListener newCommentsCancelListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                commentsNotesField.setText("");
+                commentsNotesField.setEditable(false);
+                commentsNotesField.setBackground(java.awt.Color.LIGHT_GRAY);//JD
+                commentsNotesAddButton.setEnabled(true);
+                commentsNotesCancelButton.setEnabled(false);
+                commentsNotesSaveButton.setEnabled(false);
+            }
+        };
+    }
+
+    public ActionListener newCommentsSaveListener()
+    {
+        return new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
+                DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
+                String[] fields =
+                {
+                    dateFormat.format(new Date()),
+                    timeFormat.format(new Date()),
+                    ScreenManager.getUserName(), // Put username in "Initials" column
+                    "", // "Block" is left blank for now 
+                    commentsNotesField.getText().toUpperCase() // JD
+                };
+                try
+                {
+                    ScreenManager.theCoordinator.addCadDataIncidentTable(
+                            INC_TABLE.COMMENTS_NOTES, incidentId, fields);
+                    ((DefaultTableModel) commentsNotesTable.getModel()).insertRow(0, fields);//JD
+                    //((DefaultTableModel) commentsNotesTable.getModel()).addRow(fields);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+
+                commentsNotesField.setText("");
+                commentsNotesField.setEditable(false);
+                commentsNotesField.setBackground(java.awt.Color.LIGHT_GRAY);
+                commentsNotesAddButton.setEnabled(true);
+                commentsNotesCancelButton.setEnabled(false);
+                commentsNotesSaveButton.setEnabled(false);
+            }
+        };
+    }
+
+    // JD Add a mouselistener to the comments table to display a single cell
+    //  contents in a popup
+//    public MouseListener newCommentsTableCellListener()
+//    {
+//        return new MouseListener()
+//        {
+//            public void mousePressed(MouseEvent event)
+//            {
+//            }
+//
+//            public void mouseReleased(MouseEvent event)
+//            {
+//            }
+//
+//            public void mouseEntered(MouseEvent event)
+//            {
+//            }
+//
+//            public void mouseExited(MouseEvent event)
+//            {
+//            }
+//
+//            public void mouseClicked(MouseEvent event)
+//            {
+//                Point point = event.getPoint();
+//                int row, column;
+//                row = commentsNotesTable.rowAtPoint(point);
+//                column = commentsNotesTable.columnAtPoint(point);
+//                // See if the click was in column 4 (the comment column)
+//                if (column == 4)
+//                {
+//                    JOptionPane.showMessageDialog(null, getWrappedText((String) commentsNotesTable.getValueAt(row, column)),
+//                            "Comment/Note Text", JOptionPane.INFORMATION_MESSAGE);
+//                }
+//
+//            }
+//        };
+//    }
+    private void initControllers()
+    {
+        initWindowListener();
+
+        exitSendButton.addActionListener(newExitSendActionListener());
+
+        commentsNotesField.getDocument().addDocumentListener(newCommentsDocumentListener());
+        commentsNotesAddButton.addActionListener(newCommentsAddListener());
+        commentsNotesCancelButton.addActionListener(newCommentsCancelListener());
+        commentsNotesSaveButton.addActionListener(newCommentsSaveListener());
+        //commentsNotesTable.addMouseListener(newCommentsTableCellListener()); //JD
+    }
+
+    /**
+     * A custom renderer that sets a tool tip with the wrapped comment. JD
+     */
+// Obsolete JD
+//    class LineWrapRenderer extends DefaultTableCellRenderer
+//    {
+//        public final static int kSegmentsize = 60;
+//
+//        protected void setValue(Object value)
+//        {
+//            String comment = (String) value;
+//            setText(comment);
+//            // Wrap long comments in a tooltip
+//            setToolTipText(getWrappedText(comment));
+//        }
+//    }
+//
+//    private String getWrappedText(String stringToWrap)
+//    {
+//        int limit = stringToWrap.length() / LineWrapRenderer.kSegmentsize;
+//        StringBuilder toolTip = new StringBuilder("<html>");
+//        for (int jumper = 0; jumper <= limit; jumper++)
+//        {
+//            toolTip.append(stringToWrap.substring(jumper * LineWrapRenderer.kSegmentsize, Math.min((jumper + 1) * LineWrapRenderer.kSegmentsize, stringToWrap.length())));
+//            toolTip.append("<br>");  // Use html break to cause a line break
+//        }
+//        toolTip.append("</html>");
+//        return toolTip.toString();
+//    }
+    private void initLayout()
+    {
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+
+        cityComboBox.setModel(new javax.swing.DefaultComboBoxModel(ComboBoxConstants.LIST_OF_CA_CITIES));
+
+        mapLocLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        mapLocLabel.setText("Map Loc:");
+
+        aptLabel.setText("Apt:");
+
+        crossStLabel.setText("Cross St:");
+
+        addressField.setBackground(Color.CYAN);
+        locationField.setBackground(Color.CYAN);
+
+        locationLabel.setText("Location:");
+
+        cityLabel.setText("City:");
+
+        countyLabel.setText("County:");
+
+        countyComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            "Item 1", "Item 2", "Item 3", "Item 4"
+        }));
+
+        agencyLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        agencyLabel.setText("Agency:");
+
+        agencyComboBox.setModel(new javax.swing.DefaultComboBoxModel(ComboBoxConstants.AGENCY));
+        agencyComboBox.setBackground(Color.CYAN);
+        agencyComboBox.setEnabled(false);
+
+        typeCodeLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        typeCodeLabel.setText("Type Code:");
+
+        typeCodeComboBox.setModel(new javax.swing.DefaultComboBoxModel(ComboBoxConstants.TYPE));
+        typeCodeComboBox.setBackground(Color.CYAN);
+
+        priLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        priLabel.setText("Pri:");
+
+        priComboBox.setModel(new javax.swing.DefaultComboBoxModel(ComboBoxConstants.PRI));
+        priComboBox.setBackground(Color.CYAN);
+
+        rightOfPriButton.setText("rightOfPriButton");
+        rightOfPriButton.setEnabled(false);
+
+        rpLabel.setText("RP:");
+
+        rpField.setBackground(Color.CYAN);
+
+        phoneLabel.setText("Phone:");
+
+        phoneField.setBackground(Color.CYAN);
+
+        extLabel.setText("Ext:");
+
+        aliLabel.setText("ALI:");
+
+        rpTypeLabel.setText("RP Type:");
+
+        rpTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            "Item 1", "Item 2", "Item 3", "Item 4"
+        }));
+
+        sectorComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            "Item 1", "Item 2", "Item 3", "Item 4"
+        }));
+        sectorComboBox.setBackground(Color.CYAN);
+
+        sectorLabel.setText("Sector:");
+
+        beatLabel.setText("Beat:");
+
+        beatComboBox.setModel(new javax.swing.DefaultComboBoxModel(ComboBoxConstants.BEATS));
+        beatComboBox.setBackground(Color.YELLOW);
+        mediaComboBox.setModel(new javax.swing.DefaultComboBoxModel(ComboBoxConstants.MEDIA));
+        mediaComboBox.setBackground(Color.YELLOW);
+        mediaComboBox.setEnabled(false);
+
+        mediaLabel.setText("MEDIA:");
+
+        confidentialCommentCheckBox.setText("Confidential Comment");
+        confidentialCommentCheckBox.setEnabled(false);
+
+        jLabel8.setText("Comments:");
+
+        hubXterButton.setText("Hub Xter");
+        hubXterButton.setMargin(new java.awt.Insets(3, 3, 3, 3));
+        hubXterButton.setEnabled(false);
+
+        aniAliButton.setText("ANI/ALI");
+        aniAliButton.setMargin(new java.awt.Insets(3, 3, 3, 3));
+        aniAliButton.setEnabled(false);
+
+        updateMapLocButton.setText("<html>\nUpdate\n<p>Map Loc</p>\n</html>");
+        updateMapLocButton.setActionCommand("<html>  Update <p>Map Loc</p> </html>");
+        updateMapLocButton.setMargin(new java.awt.Insets(3, 3, 3, 3));
+        updateMapLocButton.setEnabled(false);
+
+        exitSendButton.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
+        exitSendButton.setText("Exit / Send");
+
+        sentToQButton.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
+        sentToQButton.setText("Send to Q");
+        sentToQButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        sentToQButton.setEnabled(false);
+
+        fileButton.setText("File");
+        fileButton.setEnabled(false);
+
+        showAllButton.setLabel("Show All");
+        showAllButton.setMargin(new java.awt.Insets(3, 3, 3, 3));
+        showAllButton.setEnabled(false);
+
+        unitRecButton.setText("Unit Rec");
+        unitRecButton.setMargin(new java.awt.Insets(3, 3, 3, 3));
+        unitRecButton.setEnabled(false);
+
+        addFspChpButton.setText("<html><p>Add FSP/</p><p>CHP</p></html>");
+        addFspChpButton.setActionCommand("");
+        addFspChpButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        addFspChpButton.setEnabled(false);
+
+        ImageIcon image = new ImageIcon("images/IncidentViewerImages/buttonInformation.png");
+        informationButton.setIcon(image);
+        informationButton.setEnabled(false);
+
+        image = new ImageIcon("images/IncidentViewerImages/buttonCar.png");
+        carButton.setIcon(image);
+        carButton.setEnabled(false);
+
+        image = new ImageIcon("images/IncidentViewerImages/buttonPerson.png");
+        personButton.setIcon(image);
+        personButton.setEnabled(false);
+
+
+        towRotationButton.setText("Tow Rotation");
+        towRotationButton.setEnabled(false);
+
+        licensePlateInfoLabel.setText("License Plate Information");
+
+        jScrollPane13.setViewportView(licensePlateTable);
+
+        addButton.setText("Add");
+        addButton.setEnabled(false);
+
+        image = new ImageIcon("images/IncidentViewerImages/buttonCau.png");
+        cautionButton.setIcon(image);
+        cautionButton.setEnabled(false);
+
+        image = new ImageIcon("images/IncidentViewerImages/buttonHis.png");
+        historyButton.setIcon(image);
+        historyButton.setEnabled(false);
+
+        image = new ImageIcon("images/IncidentViewerImages/buttonPre.png");
+        premiseButton.setIcon(image);
+        premiseButton.setEnabled(false);
+
+        image = new ImageIcon("images/IncidentViewerImages/buttonMap.png");
+        mapButton.setIcon(image);
+        mapButton.setEnabled(false);
+
+        emsLabel.setText("EMS");
+
+        fireLabel.setText("FIRE");
+
+        lawLabel.setText("LAW");
+
+        callbacksPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        callBackCommentField.setEditable(false);
+
+        callBackAddButton.setText("Add");
+        callBackAddButton.setEnabled(false);
+
+        callBackCancelButton.setText("Cancel");
+        callBackCancelButton.setEnabled(false);
+
+        callBackSaveButton.setText("Save");
+        callBackSaveButton.setEnabled(false);
+
+        callBackCommentTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+        recommandButton.setText("Recommand");
+        recommandButton.setEnabled(false);
+
+        incidentNumLabel.setText("Incident Number:");
+
+        addInfoIncidentNumField.setEditable(false);
+
+        incidentTypeLabel.setText("Incident Type:");
+
+        addInfoIncidentTypeField.setEditable(false);
+
+        callTakenLabel.setText("Call Taken:");
+
+        addInfoCallTakenField.setEditable(false);
+
+        machineNameLabel.setText("Machine Name:");
+
+        addInfoMachineNameField.setEditable(false);
+
+        callTakerPhoneLabel.setText("Call Taker Phone Ext:");
+
+        addInfoCallTakerPhoneExtField.setEditable(false);
+
+        callStatusLabel.setText("Call Status:");
+
+        addInfoCallStatusField.setEditable(false);
+
+        alarmLevelLabel.setText("Alarm Level:");
+
+        addInfoAlarmLevelField.setEditable(false);
+
+        ccJurisdictionLabel.setText("CC/Jurisdiction:");
+
+        areaOfDivisionLabel.setText("Area Ofc/Division:");
+
+        addInfoCommentsField.setEditable(false);
+
+        addInfoCCJurisdictionComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            "Item 1", "Item 2", "Item 3", "Item 4"
+        }));
+
+        addInfoAreaOfDivisionComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            "Item 1", "Item 2", "Item 3", "Item 4"
+        }));
+
+        areaBatallionLabel.setText("Area/Batallion:");
+
+        addInfoAreaBatallionComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            "Item 1", "Item 2", "Item 3", "Item 4"
+        }));
+
+        beatResponseAreaLabel.setText("Beat/Response Area:");
+
+        addInfoBeatResponseAreaComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            "Item 1", "Item 2", "Item 3", "Item 4"
+        }));
+
+        responsePlanLabel.setText("Response Plan:");
+
+        addInfoReponsePlanComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            "Item 1", "Item 2", "Item 3", "Item 4"
+        }));
+
+        rotationProviderAreaLabel.setText("Rotation Provider Area:");
+
+        addInfoRotationProviderAreaField.setEditable(false);
+
+
+        commentsNotesPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        commentsNotesTable.setModel(new javax.swing.table.DefaultTableModel(
+                null, new String[]
+        {
+            "Date", "Time", "Initial", "Block", "Comments"
+        }));
+        jScrollPane3.setViewportView(commentsNotesTable);
+        commentsNotesTable.getColumnModel().getColumn(0).setResizable(false);
+        commentsNotesTable.getColumnModel().getColumn(0).setPreferredWidth(3);
+        commentsNotesTable.getColumnModel().getColumn(1).setResizable(false);
+        commentsNotesTable.getColumnModel().getColumn(1).setPreferredWidth(10);
+        commentsNotesTable.getColumnModel().getColumn(2).setResizable(false);
+        commentsNotesTable.getColumnModel().getColumn(2).setPreferredWidth(8);
+        commentsNotesTable.getColumnModel().getColumn(3).setResizable(false);
+        commentsNotesTable.getColumnModel().getColumn(3).setPreferredWidth(6);
+        commentsNotesTable.getColumnModel().getColumn(4).setResizable(false);
+
+        commentsNotesField.setEditable(false);
+        commentsNotesField.setBackground(java.awt.Color.LIGHT_GRAY);
+        commentsNotesField.setLineWrap(true); // JD make text wrap inside the field
+        commentsNotesField.setBorder(BorderFactory.createLineBorder(Color.GRAY)); // JD added a border
+
+        commentsNotesAddButton.setText("Add");
+        commentsNotesCancelButton.setText("Cancel");
+        commentsNotesCancelButton.setEnabled(false);
+        commentsNotesNotifyButton.setText("Notify");
+        commentsNotesNotifyButton.setEnabled(false);
+
+        commentsNotesSaveButton.setText("Save");
+        commentsNotesSaveButton.setEnabled(false);
+        commentsNotesConfidentialCommentCheckBox.setText("Confidential Comment");
+        commentsNotesConfidentialCommentCheckBox.setEnabled(false);
+
+        jScrollPane14.setViewportView(callBackCommentTable);
+        javax.swing.GroupLayout jPanel13Layout = new javax.swing.GroupLayout(jPanel13);
+        jPanel13.setLayout(jPanel13Layout);
+        jPanel13Layout.setHorizontalGroup(
+                jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel13Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addGroup(jPanel13Layout.createSequentialGroup()
+                .addComponent(callBackCommentField, javax.swing.GroupLayout.PREFERRED_SIZE, 519, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(callBackAddButton)
+                .addComponent(callBackCancelButton)
+                .addComponent(callBackSaveButton)))
+                .addComponent(jScrollPane14, javax.swing.GroupLayout.PREFERRED_SIZE, 604, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(144, Short.MAX_VALUE)));
+        jPanel13Layout.setVerticalGroup(
+                jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel13Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel13Layout.createSequentialGroup()
+                .addComponent(callBackAddButton)
+                .addGap(0, 0, 0)
+                .addComponent(callBackCancelButton)
+                .addGap(0, 0, 0)
+                .addComponent(callBackSaveButton))
+                .addComponent(callBackCommentField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(jScrollPane14, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
+
+        javax.swing.GroupLayout callbacksPaneLayout = new javax.swing.GroupLayout(callbacksPane);
+        callbacksPane.setLayout(callbacksPaneLayout);
+        callbacksPaneLayout.setHorizontalGroup(
+                callbacksPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(callbacksPaneLayout.createSequentialGroup()
+                .addGap(41, 41, 41)
+                .addComponent(jPanel13, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap()));
+        callbacksPaneLayout.setVerticalGroup(
+                callbacksPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(callbacksPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(58, Short.MAX_VALUE)));
+
+        assignmentsPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        assignmentsTable.setModel(new javax.swing.table.DefaultTableModel(
+                null, new String[]
+        {
+            "Unit", "Alarm Level", "Type", "Status", "responding From", "Elapsed", "Response Number"
+        }));
+        jScrollPane4.setViewportView(assignmentsTable);
+
+        jScrollPane1.setViewportView(jScrollPane4);
+
+        resourceTable.setModel(new javax.swing.table.DefaultTableModel(
+                null, new String[]
+        {
+            "Resource / Capability", "", "Title 3", "Title 4"
+        }));
+        jScrollPane5.setViewportView(resourceTable);
+
+        jScrollPane7.setViewportView(jScrollPane5);
+
+        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
+        jPanel2.setLayout(jPanel2Layout);
+        jPanel2Layout.setHorizontalGroup(
+                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel2Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane7, javax.swing.GroupLayout.DEFAULT_SIZE, 609, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(recommandButton)
+                .addContainerGap()));
+        jPanel2Layout.setVerticalGroup(
+                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel2Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(recommandButton)
+                .addGap(47, 47, 47)));
+
+        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
+        jPanel4.setLayout(jPanel4Layout);
+        jPanel4Layout.setHorizontalGroup(
+                jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel4Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane1))
+                .addGroup(jPanel4Layout.createSequentialGroup()
+                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap()));
+        jPanel4Layout.setVerticalGroup(
+                jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel4Layout.createSequentialGroup()
+                .addGap(6, 6, 6)
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
+
+        javax.swing.GroupLayout assignmentsPaneLayout = new javax.swing.GroupLayout(assignmentsPane);
+        assignmentsPane.setLayout(assignmentsPaneLayout);
+        assignmentsPaneLayout.setHorizontalGroup(
+                assignmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(assignmentsPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(63, Short.MAX_VALUE)));
+        assignmentsPaneLayout.setVerticalGroup(
+                assignmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, assignmentsPaneLayout.createSequentialGroup()
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(22, 22, 22)));
+
+        activitiesPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        activitiesTable.setModel(new javax.swing.table.DefaultTableModel(
+                null, new String[]
+        {
+            "Date/Time", "Vehicle/Unit", "Activity", "Location", "Comment", "Dispatch"
+        }));
+        jScrollPane6.setViewportView(activitiesTable);
+
+        jScrollPane15.setViewportView(jScrollPane6);
+
+        javax.swing.GroupLayout activitiesPaneLayout = new javax.swing.GroupLayout(activitiesPane);
+        activitiesPane.setLayout(activitiesPaneLayout);
+        activitiesPaneLayout.setHorizontalGroup(
+                activitiesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(activitiesPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane15, javax.swing.GroupLayout.DEFAULT_SIZE, 789, Short.MAX_VALUE)
+                .addContainerGap()));
+        activitiesPaneLayout.setVerticalGroup(
+                activitiesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(activitiesPaneLayout.createSequentialGroup()
+                .addGap(27, 27, 27)
+                .addComponent(jScrollPane15, javax.swing.GroupLayout.DEFAULT_SIZE, 264, Short.MAX_VALUE)
+                .addContainerGap()));
+
+        callBacksPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
+        jPanel1.setLayout(jPanel1Layout);
+        jPanel1Layout.setHorizontalGroup(
+                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGap(0, 0, Short.MAX_VALUE)
+                .addComponent(rotationProviderAreaLabel))
+                .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGap(0, 0, Short.MAX_VALUE)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(callTakenLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(machineNameLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(incidentTypeLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(incidentNumLabel, javax.swing.GroupLayout.Alignment.TRAILING))
+                .addGap(4, 4, 4)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(addInfoIncidentNumField, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE)
+                .addComponent(addInfoIncidentTypeField, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(addInfoCallTakenField, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(addInfoMachineNameField, javax.swing.GroupLayout.Alignment.TRAILING)))
+                .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(callStatusLabel)
+                .addComponent(callTakerPhoneLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(addInfoCallTakerPhoneExtField, javax.swing.GroupLayout.DEFAULT_SIZE, 110, Short.MAX_VALUE)
+                .addComponent(addInfoCallStatusField))
+                .addComponent(addInfoCommentsField, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(0, 31, Short.MAX_VALUE)))
+                .addGap(100, 100, 100)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(alarmLevelLabel)
+                .addComponent(ccJurisdictionLabel)
+                .addComponent(areaOfDivisionLabel)
+                .addComponent(areaBatallionLabel)
+                .addComponent(beatResponseAreaLabel)
+                .addComponent(responsePlanLabel))))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(addInfoAlarmLevelField, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(addInfoCCJurisdictionComboBox, 0, 206, Short.MAX_VALUE)
+                .addComponent(addInfoAreaOfDivisionComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(addInfoAreaBatallionComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(addInfoBeatResponseAreaComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(addInfoReponsePlanComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addComponent(addInfoRotationProviderAreaField, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap()));
+        jPanel1Layout.setVerticalGroup(
+                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(incidentNumLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(addInfoIncidentNumField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(incidentTypeLabel)
+                .addComponent(addInfoIncidentTypeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(callTakenLabel)
+                .addComponent(addInfoCallTakenField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(machineNameLabel)
+                .addComponent(addInfoMachineNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(callTakerPhoneLabel)
+                .addComponent(addInfoCallTakerPhoneExtField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(callStatusLabel)
+                .addComponent(addInfoCallStatusField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGap(21, 21, 21)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(alarmLevelLabel)
+                .addComponent(addInfoAlarmLevelField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(ccJurisdictionLabel)
+                .addComponent(addInfoCCJurisdictionComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(areaOfDivisionLabel)
+                .addComponent(addInfoAreaOfDivisionComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(areaBatallionLabel)
+                .addComponent(addInfoAreaBatallionComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(beatResponseAreaLabel)
+                .addComponent(addInfoBeatResponseAreaComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(responsePlanLabel)
+                .addComponent(addInfoReponsePlanComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel1Layout.createSequentialGroup()
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(rotationProviderAreaLabel)
+                .addComponent(addInfoRotationProviderAreaField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGap(23, 23, 23)
+                .addComponent(addInfoCommentsField, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGap(5, 5, 5)));
+
+        javax.swing.GroupLayout callBacksPaneLayout = new javax.swing.GroupLayout(callBacksPane);
+        callBacksPane.setLayout(callBacksPaneLayout);
+        callBacksPaneLayout.setHorizontalGroup(
+                callBacksPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(callBacksPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(85, Short.MAX_VALUE)));
+        callBacksPaneLayout.setVerticalGroup(
+                callBacksPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(callBacksPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(40, 40, 40)));
+
+        javax.swing.GroupLayout commentsNotesPaneLayout = new javax.swing.GroupLayout(commentsNotesPane);
+        commentsNotesPane.setLayout(commentsNotesPaneLayout);
+        commentsNotesPaneLayout.setHorizontalGroup(
+                commentsNotesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(commentsNotesPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(commentsNotesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 789, Short.MAX_VALUE)
+                .addGroup(commentsNotesPaneLayout.createSequentialGroup()
+                .addComponent(commentsNotesField, javax.swing.GroupLayout.PREFERRED_SIZE, 610, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(commentsNotesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(commentsNotesPaneLayout.createSequentialGroup()
+                .addGroup(commentsNotesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(commentsNotesNotifyButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(commentsNotesAddButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGroup(commentsNotesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(commentsNotesSaveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(commentsNotesCancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addComponent(commentsNotesConfidentialCommentCheckBox))
+                .addGap(0, 0, Short.MAX_VALUE)))
+                .addContainerGap()));
+        commentsNotesPaneLayout.setVerticalGroup(
+                commentsNotesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(commentsNotesPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 165, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(commentsNotesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(commentsNotesPaneLayout.createSequentialGroup()
+                .addGroup(commentsNotesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(commentsNotesAddButton, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(commentsNotesCancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(0, 0, 0)
+                .addGroup(commentsNotesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(commentsNotesNotifyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(commentsNotesSaveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 7, Short.MAX_VALUE)
+                .addComponent(commentsNotesConfidentialCommentCheckBox))
+                .addGroup(commentsNotesPaneLayout.createSequentialGroup()
+                .addGap(2, 2, 2)
+                .addComponent(commentsNotesField)))
+                .addGap(40, 40, 40)));
+
+        editLogPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        editLogTable.setModel(new javax.swing.table.DefaultTableModel(
+                null, new String[]
+        {
+            "Date", "Edits/Updates", "Reason", "Changes By", "Terminal"
+        }));
+
+        jScrollPane8.setViewportView(editLogTable);
+
+        javax.swing.GroupLayout editLogPaneLayout = new javax.swing.GroupLayout(editLogPane);
+        editLogPane.setLayout(editLogPaneLayout);
+        editLogPaneLayout.setHorizontalGroup(
+                editLogPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(editLogPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane8, javax.swing.GroupLayout.DEFAULT_SIZE, 789, Short.MAX_VALUE)
+                .addContainerGap()));
+        editLogPaneLayout.setVerticalGroup(
+                editLogPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(editLogPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)));
+
+        timesPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        timesTable.setModel(new javax.swing.table.DefaultTableModel(
+                null, new String[]
+        {
+            "Unit", "Alarm Level", "Assigned", "Enroute", "Staged", "Arrival",
+            "Access", "Depart", "At Dest.", "Status 5", "Available", "Resp Num"
+        }));
+        jScrollPane9.setViewportView(timesTable);
+
+        ringLabel.setText("Ring:");
+
+        timesRingField.setEditable(false);
+
+        inQueueLabel.setText("In-Queue:");
+
+        timesInQueueField.setEditable(false);
+
+        allAvailableLabel.setText("All Available:");
+
+        timesAllAvailableField.setEditable(false);
+
+        callClosedLabel.setText("Call Closed:");
+
+        timesCallClosedField.setEditable(false);
+
+        timesPageTimesButton.setText("Page Times");
+        timesPageTimesButton.setEnabled(false);
+
+        javax.swing.GroupLayout timesPaneLayout = new javax.swing.GroupLayout(timesPane);
+        timesPane.setLayout(timesPaneLayout);
+        timesPaneLayout.setHorizontalGroup(
+                timesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(timesPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(timesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(timesPaneLayout.createSequentialGroup()
+                .addGap(10, 10, 10)
+                .addComponent(ringLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(timesRingField, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addComponent(inQueueLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(timesInQueueField, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addComponent(allAvailableLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(timesAllAvailableField, javax.swing.GroupLayout.DEFAULT_SIZE, 69, Short.MAX_VALUE)
+                .addGap(18, 18, 18)
+                .addComponent(callClosedLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(timesCallClosedField, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addComponent(timesPageTimesButton))
+                .addComponent(jScrollPane9))
+                .addContainerGap()));
+        timesPaneLayout.setVerticalGroup(
+                timesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(timesPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane9, javax.swing.GroupLayout.PREFERRED_SIZE, 174, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(timesPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(ringLabel)
+                .addComponent(timesRingField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(inQueueLabel)
+                .addComponent(timesInQueueField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(allAvailableLabel)
+                .addComponent(timesAllAvailableField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(callClosedLabel)
+                .addComponent(timesCallClosedField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(timesPageTimesButton))
+                .addContainerGap(88, Short.MAX_VALUE)));
+
+        transportInfoPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        transportInfoAddPresetTransportRecButton.setText("Add Preset Transport Rec");
+        transportInfoAddPresetTransportRecButton.setMargin(new java.awt.Insets(3, 3, 3, 3));
+        transportInfoAddPresetTransportRecButton.setEnabled(false);
+
+        transportInfoRemoveTransportRecButton.setText("Remove Transport Rec");
+        transportInfoRemoveTransportRecButton.setMargin(new java.awt.Insets(3, 3, 3, 3));
+        transportInfoRemoveTransportRecButton.setEnabled(false);
+
+        transportInfoLinkUnitToTransportRecButton.setText("Link Unit to Transport Rec");
+        transportInfoLinkUnitToTransportRecButton.setEnabled(false);
+
+        nameLabel.setText("Name:");
+
+        transportCityLabel.setText("Transport to City:");
+
+        transportLocationLabel.setText("Transport to Location:");
+
+        transportInfoAddressButton.setText("Address");
+        transportInfoAddressButton.setEnabled(false);
+
+        transportInfoCityComboBox.setModel(new javax.swing.DefaultComboBoxModel(ComboBoxConstants.LIST_OF_CA_CITIES));
+        transportInfoCityComboBox.setEnabled(false);
+
+        transportStateLabel.setText("Transport to State:");
+
+        roomAptEtcLabel.setText("Room, Apt, etc.:");
+
+        phoneLabel2.setText("Phone:");
+
+        buildingNumLabel.setText("Building #:");
+
+        transportInfoCancelButton.setText("Cancel");
+        transportInfoCancelButton.setEnabled(false);
+
+        transportInfoSaveButton.setText("Save");
+        transportInfoSaveButton.setEnabled(false);
+
+        transportProtocolLabel.setText("Transport Protocol...");
+
+        transportInfoProtocolComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            ""
+        }));
+        transportInfoProtocolComboBox.setEnabled(false);
+
+        transportPriorityLabel.setText("Transport Priority...");
+
+        transportInfoPriorityComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            ""
+        }));
+        transportInfoPriorityComboBox.setEnabled(false);
+
+        assistedByLabel.setText("Assisted By...");
+
+        transportInfoAssistedByComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]
+        {
+            ""
+        }));
+        transportInfoAssistedByComboBox.setEnabled(false);
+
+        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
+        jPanel7.setLayout(jPanel7Layout);
+        jPanel7Layout.setHorizontalGroup(
+                jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel7Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(transportInfoProtocolComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(transportInfoPriorityComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addGroup(jPanel7Layout.createSequentialGroup()
+                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(transportProtocolLabel)
+                .addComponent(transportPriorityLabel)
+                .addComponent(assistedByLabel))
+                .addGap(0, 94, Short.MAX_VALUE))
+                .addComponent(transportInfoAssistedByComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap()));
+        jPanel7Layout.setVerticalGroup(
+                jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel7Layout.createSequentialGroup()
+                .addGap(30, 30, 30)
+                .addComponent(transportProtocolLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(transportInfoProtocolComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(transportPriorityLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(transportInfoPriorityComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(assistedByLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(transportInfoAssistedByComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(33, Short.MAX_VALUE)));
+
+        jTabbedPane2.addTab("Mode", jPanel7);
+
+        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
+        jPanel8.setLayout(jPanel8Layout);
+        jPanel8Layout.setHorizontalGroup(
+                jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 215, Short.MAX_VALUE));
+        jPanel8Layout.setVerticalGroup(
+                jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 195, Short.MAX_VALUE));
+
+        jTabbedPane2.addTab("Times", jPanel8);
+
+        javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9);
+        jPanel9.setLayout(jPanel9Layout);
+        jPanel9Layout.setHorizontalGroup(
+                jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 215, Short.MAX_VALUE));
+        jPanel9Layout.setVerticalGroup(
+                jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 195, Short.MAX_VALUE));
+
+        jTabbedPane2.addTab("Odometer", jPanel9);
+
+        javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
+        jPanel10.setLayout(jPanel10Layout);
+        jPanel10Layout.setHorizontalGroup(
+                jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 215, Short.MAX_VALUE));
+        jPanel10Layout.setVerticalGroup(
+                jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGap(0, 195, Short.MAX_VALUE));
+
+        jTabbedPane2.addTab("Caution", jPanel10);
+
+        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
+        jPanel6.setLayout(jPanel6Layout);
+        jPanel6Layout.setHorizontalGroup(
+                jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(jTextField27)
+                .addComponent(transportInfoAddPresetTransportRecButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(transportInfoRemoveTransportRecButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(transportInfoLinkUnitToTransportRecButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addGap(5, 5, 5)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                .addComponent(nameLabel)
+                .addComponent(transportCityLabel)
+                .addComponent(transportLocationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(transportInfoAddressButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addComponent(transportStateLabel)
+                .addComponent(roomAptEtcLabel)
+                .addComponent(phoneLabel2))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(transportInfoNameField, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(transportInfoCityComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(transportInfoLocationField)
+                .addComponent(transportInfoAddressField)
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addComponent(transportInfoRoomAptEtcField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(buildingNumLabel))
+                .addComponent(transportInfoStateField, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(transportInfoBuildingField, javax.swing.GroupLayout.DEFAULT_SIZE, 66, Short.MAX_VALUE)
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addComponent(transportInfoState2Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 0, Short.MAX_VALUE))))
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addComponent(transportInfoPhoneField, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(14, 14, 14)
+                .addComponent(transportInfoCancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
+                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup()
+                .addGap(242, 242, 242)
+                .addComponent(transportInfoSaveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(jTabbedPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(84, Short.MAX_VALUE)));
+        jPanel6Layout.setVerticalGroup(
+                jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addGap(17, 17, 17)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(jTextField27, javax.swing.GroupLayout.PREFERRED_SIZE, 161, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(nameLabel)
+                .addComponent(transportInfoNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(transportCityLabel)
+                .addComponent(transportInfoCityComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(transportLocationLabel)
+                .addComponent(transportInfoLocationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(transportInfoAddressButton)
+                .addComponent(transportInfoAddressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(23, 23, 23)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(transportStateLabel)
+                .addComponent(transportInfoStateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(transportInfoState2Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(roomAptEtcLabel)
+                .addComponent(transportInfoRoomAptEtcField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(buildingNumLabel)
+                .addComponent(transportInfoBuildingField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(phoneLabel2)
+                .addComponent(transportInfoPhoneField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(transportInfoCancelButton))
+                .addComponent(transportInfoAddPresetTransportRecButton))
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addComponent(transportInfoRemoveTransportRecButton)
+                .addGap(0, 0, Short.MAX_VALUE)
+                .addComponent(transportInfoLinkUnitToTransportRecButton))
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addComponent(transportInfoSaveButton)
+                .addGap(0, 0, Short.MAX_VALUE)))
+                .addContainerGap())
+                .addGroup(jPanel6Layout.createSequentialGroup()
+                .addGap(18, 18, 18)
+                .addComponent(jTabbedPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 223, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 0, Short.MAX_VALUE)));
+
+        javax.swing.GroupLayout transportInfoPaneLayout = new javax.swing.GroupLayout(transportInfoPane);
+        transportInfoPane.setLayout(transportInfoPaneLayout);
+        transportInfoPaneLayout.setHorizontalGroup(
+                transportInfoPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(transportInfoPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap()));
+        transportInfoPaneLayout.setVerticalGroup(
+                transportInfoPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(transportInfoPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, 273, Short.MAX_VALUE)
+                .addGap(25, 25, 25)));
+
+        userDataPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        timeStampsLabel.setText("Time Stamps");
+
+        timeStampsTable.setModel(new javax.swing.table.DefaultTableModel(
+                null, new String[]
+        {
+            "Time Stamp Description", "Date", "Time"
+        }));
+        jScrollPane10.setViewportView(timeStampsTable);
+
+        userDataTimeStampField.setEditable(false);
+        userDataTimeStampField.setText("(User-defined Timp Stamp)");
+        userDataTimeStampField.setEnabled(false);
+
+        dateLabel.setText("Date:");
+
+        userDataDateField.setEditable(false);
+
+        timeLabel.setText("Time:");
+
+        userDataTimeField.setEditable(false);
+
+        userDataStampButton.setText("Stamp");
+        userDataStampButton.setEnabled(false);
+
+        dataFieldsTable.setModel(new javax.swing.table.DefaultTableModel(
+                null, new String[]
+        {
+            "Data Field Discription", "Data"
+        }));
+
+        jScrollPane11.setViewportView(dataFieldsTable);
+
+        dataFieldsLabel.setText("Data Fields");
+
+        userDataDataField.setEditable(false);
+
+        userDataCancelButton.setText("Cancel");
+        userDataCancelButton.setEnabled(false);
+
+        userDataSaveButton.setText("Save");
+        userDataSaveButton.setEnabled(false);
+
+        javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11);
+        jPanel11.setLayout(jPanel11Layout);
+        jPanel11Layout.setHorizontalGroup(
+                jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel11Layout.createSequentialGroup()
+                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(jScrollPane10, javax.swing.GroupLayout.PREFERRED_SIZE, 370, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addGroup(jPanel11Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(timeStampsLabel)
+                .addGap(310, 310, 310))
+                .addGroup(jPanel11Layout.createSequentialGroup()
+                .addGap(27, 27, 27)
+                .addComponent(dateLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(userDataTimeStampField, javax.swing.GroupLayout.PREFERRED_SIZE, 230, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGroup(jPanel11Layout.createSequentialGroup()
+                .addComponent(userDataDateField, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(timeLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(userDataTimeField, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(userDataStampButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(jScrollPane11, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+                .addGroup(jPanel11Layout.createSequentialGroup()
+                .addComponent(dataFieldsLabel)
+                .addGap(0, 0, Short.MAX_VALUE))
+                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel11Layout.createSequentialGroup()
+                .addGap(0, 90, Short.MAX_VALUE)
+                .addComponent(userDataDataField, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(userDataCancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, 70, Short.MAX_VALUE)
+                .addComponent(userDataSaveButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
+                .addContainerGap()));
+        jPanel11Layout.setVerticalGroup(
+                jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(jPanel11Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(timeStampsLabel)
+                .addComponent(dataFieldsLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(jScrollPane11, javax.swing.GroupLayout.DEFAULT_SIZE, 170, Short.MAX_VALUE)
+                .addComponent(jScrollPane10, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(userDataTimeStampField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(userDataCancelButton))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(dateLabel)
+                .addComponent(userDataDateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(timeLabel)
+                .addComponent(userDataTimeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(userDataStampButton)
+                .addComponent(userDataSaveButton)
+                .addComponent(userDataDataField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap()));
+
+        javax.swing.GroupLayout userDataPaneLayout = new javax.swing.GroupLayout(userDataPane);
+        userDataPane.setLayout(userDataPaneLayout);
+        userDataPaneLayout.setHorizontalGroup(
+                userDataPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(userDataPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap()));
+        userDataPaneLayout.setVerticalGroup(
+                userDataPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(userDataPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addGap(28, 28, 28)));
+
+        attachmentsPane.setPreferredSize(new java.awt.Dimension(809, 300));
+
+        attachmentsTable.setModel(new javax.swing.table.DefaultTableModel(
+                null, new String[]
+        {
+            "Data", "Attachment Type", "Size", "Description"
+        }));
+        jScrollPane12.setViewportView(attachmentsTable);
+
+        fileNameLabel.setText("File Name:");
+
+        attachmentsFileNameField.setEditable(false);
+
+        attachmentsDescriptionField.setEditable(false);
+
+        attachmentsBrowseButton.setText("jButton38");
+        attachmentsBrowseButton.setEnabled(false);
+
+        descriptionLabel.setText("Description:");
+
+        attachmentsAddButton.setText("Add");
+        attachmentsAddButton.setEnabled(false);
+
+        attachmentsDeleteButton.setText("Delete");
+        attachmentsDeleteButton.setEnabled(false);
+
+        attachmentsCancelButton.setText("Cancel");
+        attachmentsCancelButton.setEnabled(false);
+
+        attachmentsSaveButton.setText("Save");
+        attachmentsSaveButton.setEnabled(false);
+
+        javax.swing.GroupLayout attachmentsPaneLayout = new javax.swing.GroupLayout(attachmentsPane);
+        attachmentsPane.setLayout(attachmentsPaneLayout);
+        attachmentsPaneLayout.setHorizontalGroup(
+                attachmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(attachmentsPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane12, javax.swing.GroupLayout.PREFERRED_SIZE, 452, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(attachmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(attachmentsPaneLayout.createSequentialGroup()
+                .addGroup(attachmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(fileNameLabel)
+                .addComponent(descriptionLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(attachmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(attachmentsPaneLayout.createSequentialGroup()
+                .addComponent(attachmentsFileNameField, javax.swing.GroupLayout.PREFERRED_SIZE, 207, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(attachmentsBrowseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 27, Short.MAX_VALUE))
+                .addComponent(attachmentsDescriptionField)))
+                .addGroup(attachmentsPaneLayout.createSequentialGroup()
+                .addComponent(attachmentsAddButton, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 0, 0)
+                .addComponent(attachmentsDeleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 0, 0)
+                .addComponent(attachmentsCancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 0, 0)
+                .addComponent(attachmentsSaveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 0, Short.MAX_VALUE)))
+                .addContainerGap()));
+        attachmentsPaneLayout.setVerticalGroup(
+                attachmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(attachmentsPaneLayout.createSequentialGroup()
+                .addGroup(attachmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(attachmentsPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane12, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGroup(attachmentsPaneLayout.createSequentialGroup()
+                .addGap(37, 37, 37)
+                .addGroup(attachmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(fileNameLabel)
+                .addComponent(attachmentsFileNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(attachmentsBrowseButton))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(attachmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(descriptionLabel)
+                .addComponent(attachmentsDescriptionField, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(36, 36, 36)
+                .addGroup(attachmentsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(attachmentsAddButton)
+                .addComponent(attachmentsDeleteButton)
+                .addComponent(attachmentsCancelButton)
+                .addComponent(attachmentsSaveButton))))
+                .addGap(48, 48, 48)));
+
+        bottomTabbedPane.addTab("Additional Information", callBacksPane);
+        bottomTabbedPane.addTab("Assignments", assignmentsPane);
+        bottomTabbedPane.addTab("Activities", activitiesPane);
+        bottomTabbedPane.addTab("Call Backs", callbacksPane);
+        bottomTabbedPane.addTab("Comments/Notes", commentsNotesPane);
+        bottomTabbedPane.addTab("Edit Log", editLogPane);
+        bottomTabbedPane.addTab("Times", timesPane);
+        bottomTabbedPane.addTab("Transport Info", transportInfoPane);
+        bottomTabbedPane.addTab("User Data", userDataPane);
+        bottomTabbedPane.addTab("Attachments", attachmentsPane);
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addGap(10, 10, 10)
+                .addComponent(lawLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(lawField, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(26, 26, 26)
+                .addComponent(fireLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(fireField, javax.swing.GroupLayout.PREFERRED_SIZE, 224, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addComponent(emsLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(emsField, javax.swing.GroupLayout.PREFERRED_SIZE, 222, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(47, 47, 47))
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(jLabel8)
+                .addComponent(mediaLabel)
+                .addComponent(agencyLabel)
+                .addComponent(locationLabel)
+                .addComponent(mapLocLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(agencyComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(typeCodeLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(typeCodeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(priLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(priComboBox, 0, 1, Short.MAX_VALUE))
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(addressField, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(aptLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(aptField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addComponent(locationField, javax.swing.GroupLayout.PREFERRED_SIZE, 286, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(mediaComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(confidentialCommentCheckBox)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(rightOfPriButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 373, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGroup(layout.createSequentialGroup()
+                .addGap(35, 35, 35)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addComponent(addFspChpButton)
+                .addComponent(hubXterButton))
+                .addGap(32, 32, 32)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(aniAliButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(unitRecButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(updateMapLocButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(showAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(51, 51, 51)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(sentToQButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 0, 0)
+                .addComponent(fileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addComponent(exitSendButton, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addGap(20, 20, 20)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(crossStLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(cityLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(rpLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(phoneLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(aliLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(rpTypeLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                .addComponent(sectorLabel, javax.swing.GroupLayout.Alignment.TRAILING))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(crossStField)
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(cityComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(countyLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(countyComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addComponent(rpField)
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(sectorComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addComponent(beatLabel))
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(phoneField, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(extLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(extField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addComponent(rpTypeComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(aliField, javax.swing.GroupLayout.PREFERRED_SIZE, 252, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGap(0, 0, Short.MAX_VALUE))))
+                .addGroup(layout.createSequentialGroup()
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(informationButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(carButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(personButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(towRotationButton))
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(mapButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(premiseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(historyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(cautionButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(addButton)
+                .addGap(45, 45, 45))
+                .addGroup(layout.createSequentialGroup()
+                .addGap(6, 6, 6)
+                .addComponent(jScrollPane13, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGroup(layout.createSequentialGroup()
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(licensePlateInfoLabel)
+                .addGroup(layout.createSequentialGroup()
+                .addGap(30, 30, 30)
+                .addComponent(beatComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))))))
+                .addComponent(bottomTabbedPane, javax.swing.GroupLayout.Alignment.TRAILING))
+                .addContainerGap()))));
+        layout.setVerticalGroup(
+                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(mapLocLabel)
+                .addComponent(addressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(aptLabel)
+                .addComponent(aptField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(crossStLabel)
+                .addComponent(crossStField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(locationLabel)
+                .addComponent(locationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(cityLabel)
+                .addComponent(cityComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(countyLabel)
+                .addComponent(countyComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(agencyLabel)
+                .addComponent(agencyComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(typeCodeLabel)
+                .addComponent(typeCodeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(priLabel)
+                .addComponent(priComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(mediaLabel)
+                .addComponent(mediaComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(confidentialCommentCheckBox)))
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(rpLabel)
+                .addComponent(rpField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(phoneLabel)
+                .addComponent(phoneField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(extLabel)
+                .addComponent(extField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addComponent(rightOfPriButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(aliField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(aliLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(rpTypeLabel)
+                .addComponent(rpTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(sectorComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(beatLabel)
+                .addComponent(beatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(sectorLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(carButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(informationButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(personButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(towRotationButton))
+                .addGap(15, 15, 15)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(mapButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(premiseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(historyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(cautionButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGroup(layout.createSequentialGroup()
+                .addComponent(licensePlateInfoLabel)
+                .addGap(4, 4, 4)
+                .addComponent(jScrollPane13, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(addButton))))
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(jLabel8)
+                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(0, 0, 0)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addComponent(aniAliButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(updateMapLocButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(hubXterButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addComponent(exitSendButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(unitRecButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(showAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(sentToQButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(fileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addComponent(addFspChpButton, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addGap(5, 5, 5)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(lawLabel)
+                .addComponent(lawField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(fireLabel)
+                .addComponent(fireField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(emsLabel)
+                .addComponent(emsField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(bottomTabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 330, Short.MAX_VALUE)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
+
+        pack();
+    }// </editor-fold>
+
+    public JButton makeButton(ImageIcon image, ActionListener listener)
+    {
+        JButton button = new JButton(image);
+        Dimension size = new Dimension(image.getImage().getWidth(null), image.getImage().getHeight(null));
+        button.setPreferredSize(size);
+        button.setMinimumSize(size);
+        button.setMaximumSize(size);
+        button.setBorderPainted(false);
+        button.addActionListener(listener);
+        return button;
+    }
+
+    /*
+     * Updates the data stored in the incidents class upon exit.
+     */
+    public void saveInformation()
+    {
+        try
+        {
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.ADDRESS,
+                    incidentId, addressField.getText());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.LOC,
+                    incidentId, locationField.getText());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.APT,
+                    incidentId, aptField.getText());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.CROSS_ST,
+                    incidentId, crossStField.getText());
+            ScreenManager.theCoordinator.setCadDataIncVal(INC_VAL.RP,
+                    incidentId, rpField.getText());
+            ScreenManager.theCoordinator.setCadDataIncCaller(INC_CALLER.PHONE,
+                    incidentId, phoneField.getText());
+            ScreenManager.theCoordinator.setCadDataIncCaller(INC_CALLER.EXT,
+                    incidentId, extField.getText());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.LAW,
+                    incidentId, lawField.getText());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.FIRE,
+                    incidentId, fireField.getText());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.EMS,
+                    incidentId, emsField.getText());
+            // cadData.getIncident(incidentId).getCallBacks().setComment(callBackCommentField.getText());
+
+            ScreenManager.theCoordinator.setCadDataIncGenInfo(INC_GEN_INFO.AGY,
+                    incidentId, (String) agencyComboBox.getSelectedItem());
+            ScreenManager.theCoordinator.setCadDataIncAddInfo(
+                    INC_ADD_INFO.TYPE, incidentId,
+                    (String) typeCodeComboBox.getSelectedItem());
+            ScreenManager.theCoordinator.setCadDataIncVal(INC_VAL.P,
+                    incidentId, (String) priComboBox.getSelectedItem());
+            ScreenManager.theCoordinator.setCadDataIncVal(INC_VAL.MEDIA,
+                    incidentId, (String) mediaComboBox.getSelectedItem());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.CITY,
+                    incidentId, (String) cityComboBox.getSelectedItem());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.COUNTY,
+                    incidentId, (String) countyComboBox.getSelectedItem());
+            ScreenManager.theCoordinator.setCadDataIncVal(INC_VAL.RP_TYPE,
+                    incidentId, (String) rpTypeComboBox.getSelectedItem());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.SECTOR,
+                    incidentId, (String) sectorComboBox.getSelectedItem());
+            ScreenManager.theCoordinator.setCadDataIncLoc(INC_LOC.BEAT,
+                    incidentId, (String) beatComboBox.getSelectedItem());
+        } catch (RemoteException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /*
+     * Updates all the strings.
+     *
+     * @see tmcsimulator.cadclient.data.cadData.vectorForIncidentViewer(String
+     * incidentId) for matching up strings.
+     */
+    public void refreshInformation()
+    {
+        try
+        {
+            addressField.setText(ScreenManager.theCoordinator.getCadDataIncLoc(
+                    INC_LOC.ADDRESS, incidentId));
+            locationField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncLoc(INC_LOC.LOC, incidentId));
+            aptField.setText(ScreenManager.theCoordinator.getCadDataIncLoc(
+                    INC_LOC.APT, incidentId));
+            crossStField.setText(ScreenManager.theCoordinator.getCadDataIncLoc(
+                    INC_LOC.CROSS_ST, incidentId));
+            rpField.setText((String) ScreenManager.theCoordinator
+                    .getCadDataIncVal(INC_VAL.RP, incidentId));
+            phoneField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncCaller(INC_CALLER.PHONE, incidentId));
+            extField.setText(ScreenManager.theCoordinator.getCadDataIncCaller(
+                    INC_CALLER.EXT, incidentId));
+            aliField.setText((String) ScreenManager.theCoordinator
+                    .getCadDataIncVal(INC_VAL.ALI, incidentId));
+            lawField.setText(ScreenManager.theCoordinator.getCadDataIncLoc(
+                    INC_LOC.LAW, incidentId));
+            fireField.setText(ScreenManager.theCoordinator.getCadDataIncLoc(
+                    INC_LOC.FIRE, incidentId));
+            emsField.setText(ScreenManager.theCoordinator.getCadDataIncLoc(
+                    INC_LOC.EMS, incidentId));
+            addInfoIncidentNumField
+                    .setText((String) ScreenManager.theCoordinator
+                    .getCadDataIncVal(INC_VAL.MASTER_INC, incidentId));
+            addInfoIncidentTypeField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncAddInfo(INC_ADD_INFO.TYPE, incidentId));
+            addInfoCallTakenField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncInfo(INC_INFO.CALL_TAKEN, incidentId));
+            addInfoMachineNameField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncAddInfo(INC_ADD_INFO.MACHINE, incidentId));
+            addInfoCallTakerPhoneExtField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncAddInfo(INC_ADD_INFO.CALL_TAKER_EXT,
+                    incidentId));
+            addInfoCallStatusField
+                    .setText(ScreenManager.theCoordinator.getCadDataIncAddInfo(
+                    INC_ADD_INFO.CALL_STATUS, incidentId));
+            addInfoAlarmLevelField
+                    .setText(ScreenManager.theCoordinator.getCadDataIncAddInfo(
+                    INC_ADD_INFO.ALARM_LEVEL, incidentId));
+            addInfoRotationProviderAreaField
+                    .setText(ScreenManager.theCoordinator.getCadDataIncAddInfo(
+                    INC_ADD_INFO.ROTATION_PROVIDER_AREA, incidentId));
+            addInfoCommentsField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncAddInfo(INC_ADD_INFO.COMMENT, incidentId));
+            callBackCommentField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncCallBack(INC_CALLBACK.COMMENT, incidentId));
+            timesRingField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncTimes(INC_TIMES.RING, incidentId));
+            timesInQueueField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncTimes(INC_TIMES.IN_QUEUE, incidentId));
+            timesAllAvailableField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncTimes(INC_TIMES.ALL_AVAILABLE, incidentId));
+            timesCallClosedField.setText(ScreenManager.theCoordinator
+                    .getCadDataIncTimes(INC_TIMES.CALL_CLOSED, incidentId));
+
+            agencyComboBox.setSelectedItem(ScreenManager.theCoordinator
+                    .getCadDataIncGenInfo(INC_GEN_INFO.AGY, incidentId));
+            typeCodeComboBox.setSelectedItem(ScreenManager.theCoordinator
+                    .getCadDataIncAddInfo(INC_ADD_INFO.TYPE, incidentId));
+            priComboBox.setSelectedItem((String) ScreenManager.theCoordinator
+                    .getCadDataIncVal(INC_VAL.P, incidentId));
+            mediaComboBox.setSelectedItem((String) ScreenManager.theCoordinator
+                    .getCadDataIncVal(INC_VAL.MEDIA, incidentId));
+            cityComboBox.setSelectedItem(ScreenManager.theCoordinator
+                    .getCadDataIncLoc(INC_LOC.CITY, incidentId));
+            countyComboBox.setSelectedItem(ScreenManager.theCoordinator
+                    .getCadDataIncLoc(INC_LOC.COUNTY, incidentId));
+            rpTypeComboBox
+                    .setSelectedItem((String) ScreenManager.theCoordinator
+                    .getCadDataIncVal(INC_VAL.RP_TYPE, incidentId));
+            sectorComboBox.setSelectedItem(ScreenManager.theCoordinator
+                    .getCadDataIncLoc(INC_LOC.SECTOR, incidentId));
+            beatComboBox.setSelectedItem(ScreenManager.theCoordinator
+                    .getCadDataIncLoc(INC_LOC.BEAT, incidentId));
+
+            // callBackCommentTable.setModel(cadData.getIncident(incidentId).getCallBackCommentTable());
+        } catch (RemoteException e)
+        {
+            e.printStackTrace();
+        }
+        // refreshLicenseTable(incidentId);
+
+    }
+
+    /*
+     * Displays the information of the latest incident clicked.
+     */
+    public void open()
+    {
+        try
+        {
+            if (!ScreenManager.theCoordinator
+                    .checkForValidIncidentID(incidentId))
+            {
+                return;
+            }
+
+            // stack.push(incidentId);  JD removed stack, it was broken
+            refreshInformation();
+            setTitle("Incident Viewer- Incident ID ["
+                    + ScreenManager.theCoordinator.getCadDataIncVal(
+                    INC_VAL.LOG_NUM, incidentId)
+                    + "]   Master Incident ID["
+                    + ScreenManager.theCoordinator.getCadDataIncVal(
+                    INC_VAL.MASTER_INC, incidentId) + "]");
+            setVisible(true);
+            bottomTabbedPane.setSelectedIndex(4);
+            commentsNotesTable.setModel(ScreenManager.theCoordinator
+                    .getCadDataIncidentTable(INC_TABLE.COMMENTS_NOTES,
+                    incidentId));
+            commentsNotesTable.getColumnModel().getColumn(0).setPreferredWidth(50);
+            commentsNotesTable.getColumnModel().getColumn(1).setPreferredWidth(50);
+            commentsNotesTable.getColumnModel().getColumn(2).setPreferredWidth(15);
+            commentsNotesTable.getColumnModel().getColumn(3).setPreferredWidth(15);
+            commentsNotesTable.getColumnModel().getColumn(4).setPreferredWidth(400);
+            commentsNotesTable.getColumnModel().getColumn(4).setCellRenderer(new LogEntryCellRenderer());
+
+            commentsNotesField.setText("");
+            commentsNotesField.setEditable(false);
+            commentsNotesField.setBackground(java.awt.Color.LIGHT_GRAY); // JD
+            commentsNotesAddButton.setEnabled(true);
+            commentsNotesCancelButton.setEnabled(false);
+            commentsNotesSaveButton.setEnabled(false);
+
+        } catch (RemoteException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    // JD  Invoked by timer every 5 seconds.
+    public void refreshCommentsNotesTable()
+    {
+        try
+        {
+            commentsNotesTable.setModel(ScreenManager.theCoordinator
+                    .getCadDataIncidentTable(INC_TABLE.COMMENTS_NOTES,
+                    incidentId));
+            //Set up tool tips for the comments column
+            commentsNotesTable.getColumnModel().getColumn(4).setCellRenderer(new LogEntryCellRenderer());
+
+            // resets the column widths to preferred width
+            // this will essentially mean any user changes are reset
+            commentsNotesTable.getColumnModel().getColumn(0).setPreferredWidth(50);
+            commentsNotesTable.getColumnModel().getColumn(1).setPreferredWidth(50);
+            commentsNotesTable.getColumnModel().getColumn(2).setPreferredWidth(15);
+            commentsNotesTable.getColumnModel().getColumn(3).setPreferredWidth(15);
+            commentsNotesTable.getColumnModel().getColumn(4).setPreferredWidth(400);
+        } catch (RemoteException e)
+        {
+            e.printStackTrace();
+        }
+    }
+    /*
+     * Closes the information of the latest incident clicked. Closes screen if
+     * there were no previous incidents in the stack.
+     */
+
+    public void close()
+    {   // JD got rid of the stack, since it was broken anyway.
+        saveInformation();
+        setVisible(false);
+
+        /*        saveInformation(stack.peek());
+         stack.pop();
+         setVisible(false);
+         refreshInformation(stack.peek());
+         // Is there a defect that this line wasn't coded?  Because when the
+         // incident is closed, all info is refreshed EXCEPT the comments table
+         // commentsNotesTable.setModel(ScreenManager.theCoordinator
+         //     .getCadDataIncidentTable(INC_TABLE.COMMENTS_NOTES,
+         //     incidentId));
+         try
+         {
+         setTitle("Incident Viewer- Incident ID ["
+         + ScreenManager.theCoordinator.getCadDataIncVal(
+         INC_VAL.LOG_NUM, incidentId)
+         + "]   Master Incident ID["
+         + ScreenManager.theCoordinator.getCadDataIncVal(
+         INC_VAL.MASTER_INC, incidentId) + "]");
+         } catch (RemoteException e)
+         {
+         e.printStackTrace();
+         }
+         */
+
+        ScreenManager.refreshScreens();
+        ScreenManager.refreshIncidentEditor();
+    }
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JPanel activitiesPane;
+    private javax.swing.JTable activitiesTable;
+    private javax.swing.JButton addButton;
+    private javax.swing.JButton addFspChpButton;
+    private javax.swing.JTextField addInfoAlarmLevelField;
+    private javax.swing.JComboBox addInfoAreaBatallionComboBox;
+    private javax.swing.JComboBox addInfoAreaOfDivisionComboBox;
+    private javax.swing.JComboBox addInfoBeatResponseAreaComboBox;
+    private javax.swing.JComboBox addInfoCCJurisdictionComboBox;
+    private javax.swing.JTextField addInfoCallStatusField;
+    private javax.swing.JTextField addInfoCallTakenField;
+    private javax.swing.JTextField addInfoCallTakerPhoneExtField;
+    private javax.swing.JTextField addInfoCommentsField;
+    private javax.swing.JTextField addInfoIncidentNumField;
+    private javax.swing.JTextField addInfoIncidentTypeField;
+    private javax.swing.JTextField addInfoMachineNameField;
+    private javax.swing.JComboBox addInfoReponsePlanComboBox;
+    private javax.swing.JTextField addInfoRotationProviderAreaField;
+    private javax.swing.JComboBox agencyComboBox;
+    private javax.swing.JLabel agencyLabel;
+    private javax.swing.JLabel alarmLevelLabel;
+    private javax.swing.JTextField aliField;
+    private javax.swing.JLabel aliLabel;
+    private javax.swing.JLabel allAvailableLabel;
+    private javax.swing.JButton aniAliButton;
+    private javax.swing.JTextField aptField;
+    private javax.swing.JLabel aptLabel;
+    private javax.swing.JLabel areaBatallionLabel;
+    private javax.swing.JLabel areaOfDivisionLabel;
+    private javax.swing.JPanel assignmentsPane;
+    private javax.swing.JTable assignmentsTable;
+    private javax.swing.JLabel assistedByLabel;
+    private javax.swing.JButton attachmentsAddButton;
+    private javax.swing.JButton attachmentsBrowseButton;
+    private javax.swing.JButton attachmentsCancelButton;
+    private javax.swing.JButton attachmentsDeleteButton;
+    private javax.swing.JTextField attachmentsDescriptionField;
+    private javax.swing.JTextField attachmentsFileNameField;
+    private javax.swing.JPanel attachmentsPane;
+    private javax.swing.JButton attachmentsSaveButton;
+    private javax.swing.JTable attachmentsTable;
+    private javax.swing.JComboBox beatComboBox;
+    private javax.swing.JLabel beatLabel;
+    private javax.swing.JLabel beatResponseAreaLabel;
+    private javax.swing.JLabel buildingNumLabel;
+    private javax.swing.JTextField callBackCommentField;
+    private javax.swing.JTable callBackCommentTable;
+    private javax.swing.JPanel callBacksPane;
+    private javax.swing.JLabel callClosedLabel;
+    private javax.swing.JLabel callStatusLabel;
+    private javax.swing.JLabel callTakenLabel;
+    private javax.swing.JLabel callTakerPhoneLabel;
+    private javax.swing.JPanel callbacksPane;
+    private javax.swing.JButton carButton;
+    private javax.swing.JLabel ccJurisdictionLabel;
+    private javax.swing.JComboBox cityComboBox;
+    private javax.swing.JLabel cityLabel;
+    private javax.swing.JButton commentsNotesAddButton;
+    private javax.swing.JButton commentsNotesCancelButton;
+    private javax.swing.JCheckBox commentsNotesConfidentialCommentCheckBox;
+    private javax.swing.JTextArea commentsNotesField; // JD
+    private javax.swing.JButton commentsNotesNotifyButton;
+    private javax.swing.JPanel commentsNotesPane;
+    private javax.swing.JButton commentsNotesSaveButton;
+    private javax.swing.JTable commentsNotesTable;
+    private javax.swing.JComboBox countyComboBox;
+    private javax.swing.JLabel countyLabel;
+    private javax.swing.JTextField crossStField;
+    private javax.swing.JLabel crossStLabel;
+    private javax.swing.JLabel dataFieldsLabel;
+    private javax.swing.JTable dataFieldsTable;
+    private javax.swing.JLabel dateLabel;
+    private javax.swing.JLabel descriptionLabel;
+    private javax.swing.JPanel editLogPane;
+    private javax.swing.JTable editLogTable;
+    private javax.swing.JTextField emsField;
+    private javax.swing.JLabel emsLabel;
+    private javax.swing.JButton exitSendButton;
+    private javax.swing.JTextField extField;
+    private javax.swing.JLabel extLabel;
+    private javax.swing.JButton fileButton;
+    private javax.swing.JLabel fileNameLabel;
+    private javax.swing.JTextField fireField;
+    private javax.swing.JLabel fireLabel;
+    private javax.swing.JButton hubXterButton;
+    private javax.swing.JLabel inQueueLabel;
+    private javax.swing.JLabel incidentNumLabel;
+    private javax.swing.JLabel incidentTypeLabel;
+    private javax.swing.JButton informationButton;
+    private javax.swing.JButton rightOfPriButton;
+    private javax.swing.JButton updateMapLocButton;
+    private javax.swing.JButton mapButton;
+    private javax.swing.JButton premiseButton;
+    private javax.swing.JButton historyButton;
+    private javax.swing.JButton cautionButton;
+    private javax.swing.JButton callBackAddButton;
+    private javax.swing.JButton callBackCancelButton;
+    private javax.swing.JButton callBackSaveButton;
+    private javax.swing.JCheckBox confidentialCommentCheckBox;
+    private javax.swing.JLabel jLabel8;
+    private javax.swing.JPanel jPanel1;
+    private javax.swing.JPanel jPanel10;
+    private javax.swing.JPanel jPanel11;
+    private javax.swing.JPanel jPanel12;
+    private javax.swing.JPanel jPanel13;
+    private javax.swing.JPanel jPanel2;
+    private javax.swing.JPanel jPanel4;
+    private javax.swing.JPanel jPanel6;
+    private javax.swing.JPanel jPanel7;
+    private javax.swing.JPanel jPanel8;
+    private javax.swing.JPanel jPanel9;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JScrollPane jScrollPane10;
+    private javax.swing.JScrollPane jScrollPane11;
+    private javax.swing.JScrollPane jScrollPane12;
+    private javax.swing.JScrollPane jScrollPane13;
+    private javax.swing.JScrollPane jScrollPane14;
+    private javax.swing.JScrollPane jScrollPane15;
+    private javax.swing.JScrollPane jScrollPane2;
+    private javax.swing.JScrollPane jScrollPane3;
+    private javax.swing.JScrollPane jScrollPane4;
+    private javax.swing.JScrollPane jScrollPane5;
+    private javax.swing.JScrollPane jScrollPane6;
+    private javax.swing.JScrollPane jScrollPane7;
+    private javax.swing.JScrollPane jScrollPane8;
+    private javax.swing.JScrollPane jScrollPane9;
+    private javax.swing.JTabbedPane bottomTabbedPane;
+    private javax.swing.JTabbedPane jTabbedPane2;
+    private javax.swing.JTextField jTextField27;
+    private javax.swing.JTextField lawField;
+    private javax.swing.JLabel lawLabel;
+    private javax.swing.JLabel licensePlateInfoLabel;
+    private javax.swing.JTable licensePlateTable;
+    private javax.swing.JTextField locationField;
+    private javax.swing.JLabel locationLabel;
+    private javax.swing.JLabel machineNameLabel;
+    private javax.swing.JTextField addressField;
+    private javax.swing.JLabel mapLocLabel;
+    private javax.swing.JComboBox mediaComboBox;
+    private javax.swing.JLabel mediaLabel;
+    private javax.swing.JLabel nameLabel;
+    private javax.swing.JButton personButton;
+    private javax.swing.JTextField phoneField;
+    private javax.swing.JLabel phoneLabel;
+    private javax.swing.JLabel phoneLabel2;
+    private javax.swing.JComboBox priComboBox;
+    private javax.swing.JLabel priLabel;
+    private javax.swing.JButton recommandButton;
+    private javax.swing.JTable resourceTable;
+    private javax.swing.JLabel responsePlanLabel;
+    private javax.swing.JLabel ringLabel;
+    private javax.swing.JLabel roomAptEtcLabel;
+    private javax.swing.JLabel rotationProviderAreaLabel;
+    private javax.swing.JTextField rpField;
+    private javax.swing.JLabel rpLabel;
+    private javax.swing.JComboBox rpTypeComboBox;
+    private javax.swing.JLabel rpTypeLabel;
+    private javax.swing.JComboBox sectorComboBox;
+    private javax.swing.JLabel sectorLabel;
+    private javax.swing.JButton sentToQButton;
+    private javax.swing.JButton showAllButton;
+    private javax.swing.JLabel timeLabel;
+    private javax.swing.JLabel timeStampsLabel;
+    private javax.swing.JTable timeStampsTable;
+    private javax.swing.JTextField timesAllAvailableField;
+    private javax.swing.JTextField timesCallClosedField;
+    private javax.swing.JTextField timesInQueueField;
+    private javax.swing.JButton timesPageTimesButton;
+    private javax.swing.JPanel timesPane;
+    private javax.swing.JTextField timesRingField;
+    private javax.swing.JTable timesTable;
+    private javax.swing.JButton towRotationButton;
+    private javax.swing.JLabel transportCityLabel;
+    private javax.swing.JButton transportInfoAddPresetTransportRecButton;
+    private javax.swing.JButton transportInfoAddressButton;
+    private javax.swing.JTextField transportInfoAddressField;
+    private javax.swing.JComboBox transportInfoAssistedByComboBox;
+    private javax.swing.JTextField transportInfoBuildingField;
+    private javax.swing.JButton transportInfoCancelButton;
+    private javax.swing.JComboBox transportInfoCityComboBox;
+    private javax.swing.JButton transportInfoLinkUnitToTransportRecButton;
+    private javax.swing.JTextField transportInfoLocationField;
+    private javax.swing.JTextField transportInfoNameField;
+    private javax.swing.JPanel transportInfoPane;
+    private javax.swing.JTextField transportInfoPhoneField;
+    private javax.swing.JComboBox transportInfoPriorityComboBox;
+    private javax.swing.JComboBox transportInfoProtocolComboBox;
+    private javax.swing.JButton transportInfoRemoveTransportRecButton;
+    private javax.swing.JTextField transportInfoRoomAptEtcField;
+    private javax.swing.JButton transportInfoSaveButton;
+    private javax.swing.JTextField transportInfoState2Field;
+    private javax.swing.JTextField transportInfoStateField;
+    private javax.swing.JLabel transportLocationLabel;
+    private javax.swing.JLabel transportPriorityLabel;
+    private javax.swing.JLabel transportProtocolLabel;
+    private javax.swing.JLabel transportStateLabel;
+    private javax.swing.JComboBox typeCodeComboBox;
+    private javax.swing.JLabel typeCodeLabel;
+    private javax.swing.JButton unitRecButton;
+    private javax.swing.JButton userDataCancelButton;
+    private javax.swing.JTextField userDataDataField;
+    private javax.swing.JTextField userDataDateField;
+    private javax.swing.JPanel userDataPane;
+    private javax.swing.JButton userDataSaveButton;
+    private javax.swing.JButton userDataStampButton;
+    private javax.swing.JTextField userDataTimeField;
+    private javax.swing.JTextField userDataTimeStampField;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/ActivityLogViewer.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/ActivityLogViewer.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/ActivityLogViewer.java	(revision 82)
@@ -0,0 +1,460 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package tmcsim.client.cadclientgui.screens;
+
+import javax.swing.JComponent;
+
+/**
+ * CURRENTLY NOT IN USE.
+ * @author Stuart
+ */
+public class ActivityLogViewer extends javax.swing.JFrame {
+
+    /**
+     * Creates new form ActivityLogViewer
+     */
+    public ActivityLogViewer() {
+        declareComponents();
+        initComponents();
+        initLayout();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
+    private void declareComponents() {
+
+        dateTimePeriodLabel = new javax.swing.JLabel();
+        dateTimePeriodCombo = new javax.swing.JComboBox();
+        toLabel = new javax.swing.JLabel();
+        toCombo = new javax.swing.JComboBox();
+        showUnitsByAbbreviatedNameCheckBox = new javax.swing.JCheckBox();
+        selectAllButton = new javax.swing.JButton();
+        unselectAllButton = new javax.swing.JButton();
+        jPanel1 = new javax.swing.JPanel();
+        agencyLabel = new javax.swing.JLabel();
+        agencyCombo = new javax.swing.JComboBox();
+        jurisdictionsLabel = new javax.swing.JLabel();
+        jurisdictionsScroll = new javax.swing.JScrollPane();
+        jurisdictionsTable = new javax.swing.JTable();
+        jurisdictionsSelectAllButton = new javax.swing.JButton();
+        jurisdictionUnselectAllButton = new javax.swing.JButton();
+        showAVLData = new javax.swing.JCheckBox();
+        divisionsScroll = new javax.swing.JScrollPane();
+        divisionsTable = new javax.swing.JTable();
+        divisionsLabel = new javax.swing.JLabel();
+        divisionsSelectAllButton = new javax.swing.JButton();
+        divisionsUnselectAllButton = new javax.swing.JButton();
+        batallionsLabel = new javax.swing.JLabel();
+        batallionsScroll = new javax.swing.JScrollPane();
+        batallionsTable = new javax.swing.JTable();
+        batallionsSelectAllButton = new javax.swing.JButton();
+        batallionsUnselectAllButton = new javax.swing.JButton();
+        showRadioLogDataCheckBox = new javax.swing.JCheckBox();
+        stationsScroll = new javax.swing.JScrollPane();
+        stationsTable = new javax.swing.JTable();
+        stationsLabel = new javax.swing.JLabel();
+        stationsSelectAllButton = new javax.swing.JButton();
+        stationsUnselectAllButton = new javax.swing.JButton();
+        unitsScroll = new javax.swing.JScrollPane();
+        unitsTable = new javax.swing.JTable();
+        unitsLabel = new javax.swing.JLabel();
+        unitsSelectAllButton = new javax.swing.JButton();
+        unitsUnselectButton = new javax.swing.JButton();
+        logScroll = new javax.swing.JScrollPane();
+        logTable = new javax.swing.JTable();
+        refreshButton = new javax.swing.JButton();
+        printButton = new javax.swing.JButton();
+        exitButton = new javax.swing.JButton();
+
+    }
+    
+    private void initComponents(){
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+        setPreferredSize(new java.awt.Dimension(842, 600));
+
+        dateTimePeriodLabel.setText("Date-Time Period:");
+
+        dateTimePeriodCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        toLabel.setText("to:");
+
+        toCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        showUnitsByAbbreviatedNameCheckBox.setText("Show Units by Abbreviated Name");
+
+        selectAllButton.setText("Select All");
+        selectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        unselectAllButton.setText("Unselect All");
+        unselectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        agencyLabel.setText("Agency:");
+
+        agencyCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        jurisdictionsLabel.setText("Jurisdictions:");
+
+        jurisdictionsTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null},
+                {null},
+                {null},
+                {null}
+            },
+            new String [] {
+                "Title 1"
+            }
+        ));
+        jurisdictionsScroll.setViewportView(jurisdictionsTable);
+
+        jurisdictionsSelectAllButton.setText("Select All");
+
+        jurisdictionUnselectAllButton.setText("Unselect All");
+        jurisdictionUnselectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        showAVLData.setText("Show AVL Data");
+
+        divisionsTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null},
+                {null},
+                {null},
+                {null}
+            },
+            new String [] {
+                "Title 1"
+            }
+        ));
+        divisionsTable.setTableHeader(null);
+        divisionsScroll.setViewportView(divisionsTable);
+
+        divisionsLabel.setText("Divisions:");
+
+        divisionsSelectAllButton.setText("Select All");
+        divisionsSelectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        divisionsUnselectAllButton.setText("Unselect All");
+        divisionsUnselectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        batallionsLabel.setText("Batallions:");
+
+        batallionsTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null},
+                {null},
+                {null},
+                {null}
+            },
+            new String [] {
+                "Title 1"
+            }
+        ));
+        batallionsTable.setTableHeader(null);
+        batallionsScroll.setViewportView(batallionsTable);
+
+        batallionsSelectAllButton.setText("Select All");
+        batallionsSelectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        batallionsUnselectAllButton.setText("Unselect All");
+        batallionsUnselectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        showRadioLogDataCheckBox.setText("Show Radio Log Data");
+
+        stationsTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null},
+                {null},
+                {null},
+                {null}
+            },
+            new String [] {
+                "Title 1"
+            }
+        ));
+        stationsTable.setTableHeader(null);
+        stationsScroll.setViewportView(stationsTable);
+
+        stationsLabel.setText("Stations:");
+
+        stationsSelectAllButton.setText("Select All");
+        stationsSelectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        stationsUnselectAllButton.setText("Unselect All");
+        stationsUnselectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        unitsTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null},
+                {null},
+                {null},
+                {null}
+            },
+            new String [] {
+                "Title 1"
+            }
+        ));
+        unitsTable.setTableHeader(null);
+        unitsScroll.setViewportView(unitsTable);
+
+        unitsLabel.setText("Units:");
+
+        unitsSelectAllButton.setText("Select All");
+        unitsSelectAllButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        unitsUnselectButton.setText("Unselect All");
+        unitsUnselectButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+
+        logTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null, null, null, null, null, null},
+                {null, null, null, null, null, null},
+                {null, null, null, null, null, null},
+                {null, null, null, null, null, null}
+            },
+            new String [] {
+                "Date/Time", "Incident", "Unit (Vehicle)", "Activity", "Location", "Comment"
+            }
+        ));
+        logScroll.setViewportView(logTable);
+
+        refreshButton.setText("Refresh");
+
+        printButton.setText("Print");
+
+        exitButton.setText("Exit");    
+    }
+    
+    private void initLayout(){    
+        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
+        jPanel1.setLayout(jPanel1Layout);
+        jPanel1Layout.setHorizontalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                        .addComponent(agencyLabel)
+                        .addComponent(jurisdictionsLabel)
+                        .addComponent(agencyCombo, 0, 190, Short.MAX_VALUE)
+                        .addComponent(jurisdictionsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
+                    .addComponent(showAVLData)
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addGap(15, 15, 15)
+                        .addComponent(jurisdictionsSelectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(jurisdictionUnselectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(divisionsLabel)
+                    .addComponent(divisionsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(batallionsLabel)
+                            .addComponent(batallionsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(showRadioLogDataCheckBox)
+                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                .addGap(15, 15, 15)
+                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addComponent(divisionsSelectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                        .addGap(0, 0, 0)
+                                        .addComponent(divisionsUnselectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
+                                    .addGroup(jPanel1Layout.createSequentialGroup()
+                                        .addComponent(batallionsSelectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                        .addGap(0, 0, 0)
+                                        .addComponent(batallionsUnselectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)))))
+                        .addGap(10, 10, 10)
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(stationsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                .addGap(15, 15, 15)
+                                .addComponent(stationsSelectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(0, 0, 0)
+                                .addComponent(stationsUnselectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addComponent(stationsLabel))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(jPanel1Layout.createSequentialGroup()
+                                .addGap(15, 15, 15)
+                                .addComponent(unitsSelectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(0, 0, 0)
+                                .addComponent(unitsUnselectButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addComponent(unitsLabel)
+                            .addComponent(unitsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addGap(0, 6, Short.MAX_VALUE))
+        );
+        jPanel1Layout.setVerticalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(agencyLabel)
+                    .addComponent(divisionsLabel)
+                    .addComponent(stationsLabel)
+                    .addComponent(unitsLabel))
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                        .addGroup(jPanel1Layout.createSequentialGroup()
+                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                .addComponent(batallionsSelectAllButton)
+                                .addComponent(batallionsUnselectAllButton)
+                                .addComponent(stationsSelectAllButton)
+                                .addComponent(stationsUnselectAllButton)
+                                .addComponent(unitsSelectAllButton)
+                                .addComponent(unitsUnselectButton))
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(showRadioLogDataCheckBox))
+                        .addGroup(jPanel1Layout.createSequentialGroup()
+                            .addComponent(agencyCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGap(17, 17, 17)
+                            .addComponent(jurisdictionsLabel)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(jurisdictionsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGap(0, 0, 0)
+                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                .addComponent(jurisdictionsSelectAllButton)
+                                .addComponent(jurisdictionUnselectAllButton))
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(showAVLData)))
+                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                        .addComponent(unitsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+                        .addComponent(stationsScroll, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+                        .addGroup(jPanel1Layout.createSequentialGroup()
+                            .addComponent(divisionsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGap(0, 0, 0)
+                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                .addComponent(divisionsSelectAllButton)
+                                .addComponent(divisionsUnselectAllButton))
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(batallionsLabel)
+                            .addGap(0, 0, 0)
+                            .addComponent(batallionsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addGap(6, 6, 6))
+        );
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(10, 10, 10)
+                        .addComponent(dateTimePeriodLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(dateTimePeriodCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(toLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(toCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(25, 25, 25)
+                        .addComponent(showUnitsByAbbreviatedNameCheckBox)
+                        .addGap(30, 30, 30)
+                        .addComponent(selectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(unselectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(logScroll, javax.swing.GroupLayout.DEFAULT_SIZE, 822, Short.MAX_VALUE)
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addGap(596, 596, 596)
+                        .addComponent(refreshButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(printButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, 0)
+                        .addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(dateTimePeriodLabel)
+                    .addComponent(dateTimePeriodCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(toLabel)
+                    .addComponent(toCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(showUnitsByAbbreviatedNameCheckBox)
+                    .addComponent(selectAllButton)
+                    .addComponent(unselectAllButton))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(logScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(exitButton)
+                    .addComponent(printButton)
+                    .addComponent(refreshButton)))
+        );
+
+        pack();
+    }// </editor-fold>                        
+    
+    /* 
+     * Makes screen visible.
+     */
+    public void open(){
+        setVisible(true);
+    }
+    
+    /*
+     * Hides screen.
+     */
+    public void close(){
+        setVisible(false);
+    }
+    
+    // Variables declaration - do not modify                     
+    private javax.swing.JComboBox agencyCombo;
+    private javax.swing.JLabel agencyLabel;
+    private javax.swing.JLabel batallionsLabel;
+    private javax.swing.JScrollPane batallionsScroll;
+    private javax.swing.JButton batallionsSelectAllButton;
+    private javax.swing.JTable batallionsTable;
+    private javax.swing.JButton batallionsUnselectAllButton;
+    private javax.swing.JComboBox dateTimePeriodCombo;
+    private javax.swing.JLabel dateTimePeriodLabel;
+    private javax.swing.JLabel divisionsLabel;
+    private javax.swing.JScrollPane divisionsScroll;
+    private javax.swing.JButton divisionsSelectAllButton;
+    private javax.swing.JTable divisionsTable;
+    private javax.swing.JButton divisionsUnselectAllButton;
+    private javax.swing.JButton exitButton;
+    private javax.swing.JPanel jPanel1;
+    private javax.swing.JButton jurisdictionUnselectAllButton;
+    private javax.swing.JLabel jurisdictionsLabel;
+    private javax.swing.JScrollPane jurisdictionsScroll;
+    private javax.swing.JButton jurisdictionsSelectAllButton;
+    private javax.swing.JTable jurisdictionsTable;
+    private javax.swing.JScrollPane logScroll;
+    private javax.swing.JTable logTable;
+    private javax.swing.JButton printButton;
+    private javax.swing.JButton refreshButton;
+    private javax.swing.JButton selectAllButton;
+    private javax.swing.JCheckBox showAVLData;
+    private javax.swing.JCheckBox showRadioLogDataCheckBox;
+    private javax.swing.JCheckBox showUnitsByAbbreviatedNameCheckBox;
+    private javax.swing.JLabel stationsLabel;
+    private javax.swing.JScrollPane stationsScroll;
+    private javax.swing.JButton stationsSelectAllButton;
+    private javax.swing.JTable stationsTable;
+    private javax.swing.JButton stationsUnselectAllButton;
+    private javax.swing.JComboBox toCombo;
+    private javax.swing.JLabel toLabel;
+    private javax.swing.JLabel unitsLabel;
+    private javax.swing.JScrollPane unitsScroll;
+    private javax.swing.JButton unitsSelectAllButton;
+    private javax.swing.JTable unitsTable;
+    private javax.swing.JButton unitsUnselectButton;
+    private javax.swing.JButton unselectAllButton;
+    // End of variables declaration                   
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/UnitStatus.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/UnitStatus.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/UnitStatus.java	(revision 82)
@@ -0,0 +1,1163 @@
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.rmi.RemoteException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.RowSorter.SortKey;
+import javax.swing.SwingUtilities;
+import javax.swing.TransferHandler;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.UNIT_TAGS;
+import tmcsim.client.cadclientgui.enums.TableHeaders;
+import tmcsim.client.cadclientgui.enums.UnitStatusEnums;
+
+/**
+ * This class contains the view and controller for the UnitStatus screen. The
+ * view was not built using a GUI builder plug-in (but may want to consider
+ * doing so in the future), and the controller uses listeners to control how the
+ * view and data act.
+ *
+ * @author Vincent
+ */
+public class UnitStatus extends JFrame
+{
+    private final static int ONE_SECOND = 1000;
+    private static Logger clientLogger = Logger.getLogger("tmcsim.client");
+    private final String SCREEN_TITLE = "(Shift + F4)  Unit Status";
+    private final Dimension SCREEN_DIMENSIONS = new Dimension(1400, 250);
+    private final Dimension DROP_DOWN_MENU_LABEL_DIMENSIONS = new Dimension(
+            170, 20);
+    private final Dimension DROP_DOWN_MENU_DIMENSIONS = new Dimension(170, 300);
+    private final Dimension BUTTON_DIMENSIONS = new Dimension(100, 25);
+    private final int COLUMN_WIDTH = 120;
+    private final String[] LABELS =
+    {
+        "10-8", "OFC", "OOS",
+        "Open Unit Details", "Open Unit Activity Log", "Map",
+        "Change Vehicle", "Unit Poll", "Quick Note...",
+        "Activate User Timer...", "Filters", "Page...", "Roster System",
+        "10-10"
+    };
+    private final String[] WITH_ASSIGNED_INC_LABELS =
+    {
+        "STAGE", "10-97",
+        "10-8", "ASSIGNED ALT...", "ENRT ALT...", "10-97 ALT...",
+        "Open Incident", "Recall Incident", "Open Unit Details",
+        "Open Unit Activity Log", "Map", "Recall Linked Incidents",
+        "Cancel", "Reassign", "Duplicate", "Unit Poll", "Quick Note...",
+        "Activate User Timer...", "Filters", "Page...", "Fax..."
+    };
+    private final String LABEL_SPACING = "     ";
+    // this box holds both the table and the buttons below
+    private Box unitStatusFrame;
+    private JTable unitStatusTable;
+    private JFrame unitStatusMenu;
+    private JFrame unitStatusWithAssignedIncMenu;
+    // labels for the drop down menu
+    private JLabel[] dropDownLabels = new JLabel[LABELS.length];
+    private JLabel[] dropDownWithAssignedIncLabels = new JLabel[WITH_ASSIGNED_INC_LABELS.length];
+    private JButton buttonEnrt;
+    private JButton buttonStage;
+    private JButton button1097;
+    private JButton buttonCode4;
+    private JButton buttonDash1;
+    private JButton buttonDash2;
+    private JButton buttonDash3;
+    private JButton button108;
+    private JButton buttonOFC;
+    private JButton buttonOOS;
+
+    public UnitStatus()
+    {
+        initComponents();
+    }
+
+    private void initComponents()
+    {
+        initializeTable();
+        initControllers();
+        initializeDropDownMenus();
+
+        JScrollPane scrollpane = new JScrollPane(unitStatusTable);
+        scrollpane.getViewport().setBackground(Color.WHITE);
+
+        Box bottomButtons = new Box(BoxLayout.X_AXIS);
+        initializeBottomButtons(bottomButtons);
+
+        unitStatusFrame = new Box(BoxLayout.Y_AXIS);
+        unitStatusFrame.add(bottomButtons);
+
+        unitStatusFrame.add(scrollpane);// holds the table
+        unitStatusFrame.add(bottomButtons);
+
+        setTitle(SCREEN_TITLE);
+        setPreferredSize(SCREEN_DIMENSIONS);
+        getContentPane().add(unitStatusFrame);
+        setResizable(true);
+        pack();
+        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+        setLocation(0, (int) (dim.getHeight() * 2 / 4));
+        setDefaultCloseOperation(HIDE_ON_CLOSE);
+        setVisible(false);
+    }
+
+    /**
+     * Initializes the table and prepares the cell renderer for color
+     * management. It initializes the default settings and handles the drag and
+     * drop feature.
+     */
+    private void initializeTable()
+    {
+        unitStatusTable = new JTable()
+        {
+            /**
+             * Custom renderer to set different background/foreground colors
+             *
+             * @see
+             * javax.swing.JTable#prepareRenderer(javax.swing.table.TableCellRenderer,
+             * int, int)
+             */
+            public Component prepareRenderer(TableCellRenderer renderer,
+                    int row, int column)
+            {
+                Component comp;
+                // In a rare odd circumstance of timing, this exception is thrown:
+                // http://pastebin.com/f5wtSMHN
+                try
+                {
+                    comp = super.prepareRenderer(renderer, row, column);
+                } catch (Exception ex)
+                {
+                    clientLogger.logp(Level.INFO, "UnitStatus",
+                            "prepareRenderer", "row=" + row + " col=" + column, ex);
+                    // Our workaround is to just return a dummy value.
+                    // It will be erased in the next one second refresh
+                    return new JLabel("?");
+                }
+
+                int unitNumColumn = 2;
+                try
+                {
+                    switch (ScreenManager.theCoordinator
+                            .getCadDataUnitStatus((String) unitStatusTable
+                            .getValueAt(row, unitNumColumn)))
+                    {
+                        case Assignable:
+                            comp.setForeground(Color.GREEN);
+                            comp.setBackground(Color.BLACK);
+                            break;
+                        case Arrived:
+                            comp.setForeground(Color.YELLOW);
+                            comp.setBackground(Color.BLACK);
+                            break;
+                        case NotAssignable:
+                            comp.setForeground(Color.BLACK);
+                            comp.setBackground(Color.GRAY);
+                            break;
+                        case Enroute:
+                            comp.setForeground(Color.CYAN);
+                            comp.setBackground(Color.BLACK);
+                            break;
+                    }
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+
+                if (getSelectedRow() == row)
+                {
+                    comp.setForeground(Color.WHITE);
+                    comp.setBackground(Color.BLUE);
+                }
+
+                return comp;
+            }
+        };
+
+        unitStatusTable.setOpaque(true);
+        unitStatusTable.setIntercellSpacing(new Dimension(1, 0));
+        unitStatusTable.setGridColor(Color.WHITE);
+        unitStatusTable.getTableHeader().setReorderingAllowed(false);
+        unitStatusTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        unitStatusTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        unitStatusTable.setAutoCreateRowSorter(true);
+        unitStatusTable.setDragEnabled(true);
+
+        unitStatusTable.setModel(new DefaultTableModel());
+        ((DefaultTableModel) unitStatusTable.getModel())
+                .setColumnIdentifiers(TableHeaders.UNIT_STATUS_HEADERS);
+
+        unitStatusTable.setTransferHandler(new TransferHandler()
+        {
+            public boolean canImport(TransferHandler.TransferSupport info)
+            {
+                if (!info.isDataFlavorSupported(DataFlavor.stringFlavor))
+                {
+                    return false;
+                }
+                return true;
+            }
+
+            public int getSourceActions(JComponent c)
+            {
+                return TransferHandler.COPY_OR_MOVE;
+            }
+
+            protected Transferable createTransferable(JComponent c)
+            {
+                return new StringSelection((String) unitStatusTable.getValueAt(
+                        unitStatusTable.getSelectedRow(), 2));
+            }
+        });
+
+        for (int i = 0; i < unitStatusTable.getColumnCount(); i++)
+        {
+            unitStatusTable.getColumnModel().getColumn(i)
+                    .setPreferredWidth(COLUMN_WIDTH);
+        }
+    }
+
+    /*
+     * Adds the key and mouse listeners for the table and component listener for
+     * screen.
+     */
+//TODO: JD    If one unit has been selected, but you right-click on a different one.
+//Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Invalid index
+//	at javax.swing.DefaultRowSorter.convertRowIndexToModel(DefaultRowSorter.java:514)
+//	at javax.swing.JTable.convertRowIndexToModel(JTable.java:2642)
+//	at javax.swing.JTable.getValueAt(JTable.java:2717)
+//	at tmcsim.client.cadclientgui.screens.UnitStatus$3.mouseClicked(UnitStatus.java:234)
+    private void initControllers()
+    {
+        unitStatusTable.addMouseListener(new MouseListener()
+        {
+            public void mouseClicked(MouseEvent e)
+            {
+                int unitColumn = 2;
+                // Fixed to force right click to cause the row to be selected. JD
+                // get the coordinates of the mouse click
+                Point p = e.getPoint();
+                // get the row index that contains that coordinate
+                int rowNumber = unitStatusTable.rowAtPoint(p);
+                // Get the ListSelectionModel of the JTable
+                ListSelectionModel model = unitStatusTable.getSelectionModel();
+                // set the selected interval of rows. Using the "rowNumber"
+                // variable for the beginning and end selects only that one row.
+                model.setSelectionInterval(rowNumber, rowNumber);
+
+                String unitNum = (String) unitStatusTable.getValueAt(
+                        rowNumber, unitColumn);
+                // Validity check for non-empty unit number
+                if (unitNum.equals(""))
+                {
+                    return;
+                }
+                if (SwingUtilities.isRightMouseButton(e))
+                {
+                    try
+                    {
+                        if (ScreenManager.theCoordinator
+                                .getCadDataUnitStatus(unitNum) == UnitStatusEnums.Enroute
+                                || ScreenManager.theCoordinator
+                                .getCadDataUnitStatus(unitNum) == UnitStatusEnums.Arrived)
+                        {
+                            openDropDownWithAssignedIncMenu(e);
+                        }
+                        else
+                        {
+                            openDropDownMenu(e);
+                        }
+                    } catch (RemoteException e1)
+                    {
+                        e1.printStackTrace();
+                    }
+                }
+                else
+                {
+                    closeDropDownMenu();
+                    closeDropDownWithAssignedIncMenu();
+                }
+            }
+
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+        });
+
+        addComponentListener(new ComponentListener()
+        {
+            public void componentHidden(ComponentEvent e)
+            {
+            }
+
+            public void componentMoved(ComponentEvent e)
+            {
+                closeDropDownMenu();
+            }
+
+            public void componentResized(ComponentEvent e)
+            {
+            }
+
+            public void componentShown(ComponentEvent e)
+            {
+            }
+        });
+    }
+
+    /*
+     * Creates the drop down menu that appears when a right click is performed
+     * on the table.
+     */
+    private void initializeDropDownMenus()
+    {
+        Box menu = new Box(BoxLayout.Y_AXIS);
+        initializeDropDownLabels();
+        addLabelsToBox(menu);
+
+        setMenuHighlightedBackground(Color.BLUE);
+
+        unitStatusMenu = new JFrame();
+        unitStatusMenu.getContentPane().add(menu);
+        unitStatusMenu.setPreferredSize(DROP_DOWN_MENU_DIMENSIONS);
+        unitStatusMenu.setUndecorated(true);
+        unitStatusMenu.pack();
+        unitStatusMenu.setVisible(false);
+
+        menu = new Box(BoxLayout.Y_AXIS);
+        initializeDropDownWithAssignedIncLabels();
+        addWithAssignedIncLabelsToBox(menu);
+
+        setWithAssignedIncMenuHighlightedBackground(Color.BLUE);
+
+        unitStatusWithAssignedIncMenu = new JFrame();
+        unitStatusWithAssignedIncMenu.getContentPane().add(menu);
+        unitStatusWithAssignedIncMenu
+                .setPreferredSize(DROP_DOWN_MENU_DIMENSIONS);
+        unitStatusWithAssignedIncMenu.setUndecorated(true);
+        unitStatusWithAssignedIncMenu.pack();
+        unitStatusWithAssignedIncMenu.setVisible(false);
+    }
+
+    /*
+     * Sets the text and size and adds a listener to each label. Currently,
+     * labels are not implemented so no listeners are added.
+     */
+    private void initializeDropDownLabels()
+    {
+        for (int i = 0; i < dropDownLabels.length; i++)
+        {
+            dropDownLabels[i] = new JLabel(LABEL_SPACING + LABELS[i]);
+            dropDownLabels[i].setMaximumSize(DROP_DOWN_MENU_LABEL_DIMENSIONS);
+            dropDownLabels[i].setForeground(Color.GRAY);
+        }
+    }
+
+    /*
+     * Sets the text and size and adds a listener to each activated label.
+     */
+    private void initializeDropDownWithAssignedIncLabels()
+    {
+        for (int i = 0; i < dropDownWithAssignedIncLabels.length; i++)
+        {
+            dropDownWithAssignedIncLabels[i] = new JLabel(LABEL_SPACING
+                    + WITH_ASSIGNED_INC_LABELS[i]);
+            dropDownWithAssignedIncLabels[i]
+                    .setMaximumSize(DROP_DOWN_MENU_LABEL_DIMENSIONS);
+            dropDownWithAssignedIncLabels[i].setForeground(Color.GRAY);
+        }
+        dropDownWithAssignedIncLabels[6].setForeground(Color.BLACK);
+        addMouseListenersToWithAssignedIncLabel(dropDownWithAssignedIncLabels[6]);
+
+    }
+
+    /*
+     * Add the labels to the box in order with separators and spacings in
+     * between.
+     */
+    private void addLabelsToBox(Box menu)
+    {
+        menu.add(dropDownLabels[0]);
+        menu.add(dropDownLabels[1]);
+        menu.add(dropDownLabels[2]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[3]);
+        menu.add(dropDownLabels[4]);
+        menu.add(dropDownLabels[5]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[6]);
+        menu.add(dropDownLabels[7]);
+        menu.add(dropDownLabels[8]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[9]);
+        menu.add(dropDownLabels[10]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[11]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[12]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[13]);
+
+        menu.add(Box.createVerticalStrut(5));
+    }
+
+    /*
+     * Add the labels to the box in order with separators and spacings in
+     * between.
+     */
+    private void addWithAssignedIncLabelsToBox(Box menu)
+    {
+        menu.add(dropDownWithAssignedIncLabels[0]);
+        menu.add(dropDownWithAssignedIncLabels[1]);
+        menu.add(dropDownWithAssignedIncLabels[2]);
+        menu.add(dropDownWithAssignedIncLabels[3]);
+        menu.add(dropDownWithAssignedIncLabels[4]);
+        menu.add(dropDownWithAssignedIncLabels[5]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownWithAssignedIncLabels[6]);
+        menu.add(dropDownWithAssignedIncLabels[7]);
+        menu.add(dropDownWithAssignedIncLabels[8]);
+        menu.add(dropDownWithAssignedIncLabels[9]);
+        menu.add(dropDownWithAssignedIncLabels[10]);
+        menu.add(dropDownWithAssignedIncLabels[11]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownWithAssignedIncLabels[12]);
+        menu.add(dropDownWithAssignedIncLabels[13]);
+        menu.add(dropDownWithAssignedIncLabels[14]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownWithAssignedIncLabels[15]);
+        menu.add(dropDownWithAssignedIncLabels[16]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownWithAssignedIncLabels[17]);
+        menu.add(dropDownWithAssignedIncLabels[18]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownWithAssignedIncLabels[19]);
+        menu.add(dropDownWithAssignedIncLabels[20]);
+
+        menu.add(Box.createVerticalStrut(5));
+    }
+
+    /*
+     * Creates each button and handles the action performed by the button.
+     */
+    public void initializeBottomButtons(Box bottomButtons)
+    {
+        bottomButtons.add(buttonEnrt = makeButton("ENRT", new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                try
+                {
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable.getValueAt(
+                            unitStatusTable.getSelectedRow(), 2),
+                            UNIT_TAGS.STATUS, "ENRT");
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable.getValueAt(
+                            unitStatusTable.getSelectedRow(), 2),
+                            UNIT_TAGS.UNIT_STATUS, UnitStatusEnums.Enroute);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+                refreshTable();
+            }
+        }));
+        bottomButtons.add(buttonStage = makeButton("STAGE",
+                new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                try
+                {
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable
+                            .getValueAt(unitStatusTable
+                            .getSelectedRow(), 2),
+                            UNIT_TAGS.STATUS, "STAGE");
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+                refreshTable();
+            }
+        }));
+        bottomButtons.add(button1097 = makeButton("10-97",
+                new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                try
+                {
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable
+                            .getValueAt(unitStatusTable
+                            .getSelectedRow(), 2),
+                            UNIT_TAGS.STATUS, "10-97");
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable
+                            .getValueAt(unitStatusTable
+                            .getSelectedRow(), 2),
+                            UNIT_TAGS.UNIT_STATUS,
+                            UnitStatusEnums.Arrived);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+                refreshTable();
+            }
+        }));
+        bottomButtons.add(buttonCode4 = makeButton("CODE 4",
+                new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                try
+                {
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable
+                            .getValueAt(unitStatusTable
+                            .getSelectedRow(), 2),
+                            UNIT_TAGS.STATUS, "CODE 4");
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+                refreshTable();
+            }
+        }));
+        bottomButtons.add(buttonDash1 = makeButton("-", null));
+        bottomButtons.add(buttonDash2 = makeButton("-", null));
+        bottomButtons.add(buttonDash3 = makeButton("-", null));
+        bottomButtons.add(button108 = makeButton("10-8", new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                try
+                {
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable.getValueAt(
+                            unitStatusTable.getSelectedRow(), 2),
+                            UNIT_TAGS.STATUS, "10-8");
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable.getValueAt(
+                            unitStatusTable.getSelectedRow(), 2),
+                            UNIT_TAGS.UNIT_STATUS, UnitStatusEnums.Assignable);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+                refreshTable();
+            }
+        }));
+        bottomButtons.add(buttonOFC = makeButton("OFC", new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                try
+                {
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable.getValueAt(
+                            unitStatusTable.getSelectedRow(), 2),
+                            UNIT_TAGS.STATUS, "OFC");
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable.getValueAt(
+                            unitStatusTable.getSelectedRow(), 2),
+                            UNIT_TAGS.UNIT_STATUS, UnitStatusEnums.Arrived);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+                refreshTable();
+            }
+        }));
+        bottomButtons.add(buttonOOS = makeButton("OOS", new ActionListener()
+        {
+            public void actionPerformed(ActionEvent arg0)
+            {
+                try
+                {
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable.getValueAt(
+                            unitStatusTable.getSelectedRow(), 2),
+                            UNIT_TAGS.STATUS, "OOS");
+                    ScreenManager.theCoordinator.setCadDataUnitValue(
+                            (String) unitStatusTable.getValueAt(
+                            unitStatusTable.getSelectedRow(), 2),
+                            UNIT_TAGS.UNIT_STATUS,
+                            UnitStatusEnums.NotAssignable);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+                refreshTable();
+            }
+        }));
+    }
+
+    /*
+     * Makes a JButton with an text and listener.
+     *
+     * @param text the text to be displayed
+     *
+     * @param listener the action listener for this button.
+     *
+     * @return the JButton.
+     */
+    public JButton makeButton(String text, ActionListener listener)
+    {
+        JButton button = new JButton(text);
+        button.setBackground(Color.GRAY);
+        button.setOpaque(false);
+        Dimension size = BUTTON_DIMENSIONS;
+        button.setPreferredSize(size);
+        button.setMinimumSize(size);
+        button.setMaximumSize(size);
+        button.addActionListener(listener);
+        button.setFocusable(false);
+
+        return button;
+    }
+
+    /*
+     * Sets the highlighted color(when the mouse is over it) of the JLabels.
+     * Note: the color is not shown until .setOpaque(true) is called.
+     *
+     * @param color the highlighted color
+     */
+    public void setMenuHighlightedBackground(Color color)
+    {
+        for (int i = 0; i < dropDownLabels.length; i++)
+        {
+            dropDownLabels[i].setBackground(color);
+        }
+    }
+
+    /*
+     * Sets the highlighted color(when the mouse is over it) of the JLabels.
+     * Note: the color is not shown until .setOpaque(true) is called.
+     *
+     * @param color the highlighted color
+     */
+    public void setWithAssignedIncMenuHighlightedBackground(Color color)
+    {
+        for (int i = 0; i < dropDownWithAssignedIncLabels.length; i++)
+        {
+            dropDownWithAssignedIncLabels[i].setBackground(color);
+        }
+    }
+
+    /*
+     * Sets all JLabels to not display a highlighted background
+     */
+    public void unSelectAllLabels()
+    {
+        for (int i = 0; i < dropDownLabels.length; i++)
+        {
+            dropDownLabels[i].setOpaque(false);
+        }
+    }
+
+    /*
+     * Sets all JLabels to not display a highlighted background
+     */
+    public void unSelectAllWithAssignedIncLabels()
+    {
+        for (int i = 0; i < dropDownWithAssignedIncLabels.length; i++)
+        {
+            dropDownWithAssignedIncLabels[i].setOpaque(false);
+        }
+    }
+
+    /*
+     * Sets the label to have a highlighted background.
+     *
+     * @param label the label that is selected/highlighted
+     */
+    public void selectLabel(Object label)
+    {
+        ((JLabel) label).setOpaque(true);
+    }
+
+    /*
+     * Performs the label action depending on which label was clicked.
+     */
+    public void performLabelAction(Object label)
+    {
+        if (label.equals(dropDownLabels[0]))
+        { // 10-8
+        }
+        else if (label.equals(dropDownLabels[1]))
+        { // OFC
+        }
+        else if (label.equals(dropDownLabels[2]))
+        { // OOS
+        }
+        else if (label.equals(dropDownLabels[3]))
+        { // Open Unit Details
+        }
+        else if (label.equals(dropDownLabels[4]))
+        { // Open Unit Activity Log
+        }
+        else if (label.equals(dropDownLabels[5]))
+        { // Map
+        }
+        else if (label.equals(dropDownLabels[6]))
+        { // Change Vehicle
+        }
+        else if (label.equals(dropDownLabels[7]))
+        { // Unit Poll
+        }
+        else if (label.equals(dropDownLabels[8]))
+        { // Quick Notes
+        }
+        else if (label.equals(dropDownLabels[9]))
+        { // Activate User Timer
+        }
+        else if (label.equals(dropDownLabels[10]))
+        { // Filters
+        }
+        else if (label.equals(dropDownLabels[11]))
+        { // Page
+        }
+        else if (label.equals(dropDownLabels[12]))
+        { // Roster System
+        }
+        else if (label.equals(dropDownLabels[13]))
+        { // 10-10
+        }
+    }
+
+    /*
+     * Performs the label action depending on which label was clicked.
+     */
+    public void performWithAssignedIncLabelAction(Object label)
+    {
+        if (label.equals(dropDownWithAssignedIncLabels[0]))
+        { // STAGE
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[1]))
+        { // 10-97
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[2]))
+        { // 10-8
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[3]))
+        { // ASSIGN
+            // ALT...
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[4]))
+        { // ENRT
+            // ALT...
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[5]))
+        { // 10-97
+            // ALT...
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[6]))
+        { // Open
+            // Incident
+            int idColumn = 0;
+            ScreenManager.openIncidentViewer(Integer
+                    .parseInt((String) unitStatusTable.getValueAt(
+                    unitStatusTable.getSelectedRow(), idColumn)));
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[7]))
+        { // Recall
+            // Incident
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[8]))
+        { // Open
+            // Unit
+            // Details
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[9]))
+        { // Open
+            // Unit
+            // Activity
+            // Log
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[10]))
+        { // Map
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[11]))
+        { // Recall
+            // Linked
+            // Incidents
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[12]))
+        { // Cancel
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[13]))
+        { // Reassign
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[14]))
+        { // Duplicate
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[15]))
+        { // Unit
+            // Poll
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[16]))
+        { // Quick
+            // Note...
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[17]))
+        { // Activate
+            // User
+            // Timer...
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[18]))
+        { // Filters
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[19]))
+        { // Page...
+        }
+        else if (label.equals(dropDownWithAssignedIncLabels[20]))
+        { // Fax...
+        }
+    }
+
+    /*
+     * Factory method. Adds a mouse listeners to the label. The
+     * MouseMotionListener detects the mouse's location to highlight the label.
+     * The MouseListener detects for clicks and performs the action of the label
+     * designates.
+     */
+    public void addMouseListenersToLabel(JLabel label)
+    {
+        label.addMouseMotionListener(new MouseMotionListener()
+        {
+            public void mouseDragged(MouseEvent e)
+            {
+            }
+
+            public void mouseMoved(MouseEvent e)
+            {
+                unSelectAllLabels();
+                selectLabel(e.getSource());
+                unitStatusMenu.revalidate();
+                unitStatusMenu.repaint();
+            }
+        });
+        label.addMouseListener(new MouseListener()
+        {
+            public void mouseClicked(MouseEvent e)
+            {
+                performLabelAction(e.getSource());
+                unSelectAllLabels();
+                unitStatusMenu.revalidate();
+                unitStatusMenu.repaint();
+                unitStatusMenu.setVisible(false);
+            }
+
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+        });
+    }
+
+    /*
+     * Factory method. Adds a mouse listeners to the label. The
+     * MouseMotionListener detects the mouse's location to highlight the label.
+     * The MouseListener detects for clicks and performs the action of the label
+     * designates.
+     */
+    public void addMouseListenersToWithAssignedIncLabel(JLabel label)
+    {
+        label.addMouseMotionListener(new MouseMotionListener()
+        {
+            public void mouseDragged(MouseEvent e)
+            {
+            }
+
+            public void mouseMoved(MouseEvent e)
+            {
+                unSelectAllLabels();
+                selectLabel(e.getSource());
+                unitStatusWithAssignedIncMenu.revalidate();
+                unitStatusWithAssignedIncMenu.repaint();
+            }
+        });
+        label.addMouseListener(new MouseListener()
+        {
+            public void mouseClicked(MouseEvent e)
+            {
+                performWithAssignedIncLabelAction(e.getSource());
+                unSelectAllLabels();
+                unitStatusWithAssignedIncMenu.revalidate();
+                unitStatusWithAssignedIncMenu.repaint();
+                unitStatusWithAssignedIncMenu.setVisible(false);
+            }
+
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+        });
+    }
+
+    /*
+     * Displays the menu where the right click occurred.
+     */
+    public void openDropDownMenu(MouseEvent e)
+    {
+        unitStatusMenu.setLocation(e.getX() + this.getX(),
+                e.getY() + this.getY());
+        unitStatusMenu.setVisible(true);
+    }
+
+    /*
+     * Displays the menu where the right click occurred.
+     */
+    public void openDropDownWithAssignedIncMenu(MouseEvent e)
+    {
+        unitStatusWithAssignedIncMenu.setLocation(e.getX() + this.getX(),
+                e.getY() + this.getY());
+        unitStatusWithAssignedIncMenu.setVisible(true);
+    }
+
+    /*
+     * Hides the menu.
+     */
+    public void closeDropDownMenu()
+    {
+        unSelectAllLabels();
+        unitStatusMenu.revalidate();
+        unitStatusMenu.repaint();
+        unitStatusMenu.setVisible(false);
+    }
+
+    /*
+     * Hides the menu.
+     */
+    public void closeDropDownWithAssignedIncMenu()
+    {
+        unSelectAllLabels();
+        unitStatusWithAssignedIncMenu.revalidate();
+        unitStatusWithAssignedIncMenu.repaint();
+        unitStatusWithAssignedIncMenu.setVisible(false);
+    }
+
+    /*
+     * Refreshes the data in the table by updating all data and repainting the
+     * screen. It saves user preferences(like column sizes, selected row, sorted preferences)
+     * and applies them to the updated model it receives from the server.
+     */
+    public void refreshTable()
+    {
+        if (unitStatusTable.getTableHeader().getResizingColumn() == null)
+        {//only update info if resize not in progress
+            try
+            {
+                int index = unitStatusTable.getSelectedRow();
+                List<? extends SortKey> keys = unitStatusTable.getRowSorter().getSortKeys();
+                int[] columnWidths = new int[20];
+                for (int i = 0; i < unitStatusTable.getColumnCount(); i++)
+                {
+                    columnWidths[i] = unitStatusTable.getColumnModel().getColumn(i).getWidth();
+                }
+
+                unitStatusTable.setModel(ScreenManager.theCoordinator.getCadDataTable(CADDataEnums.TABLE.UNIT_STATUS));
+
+                for (int i = 0; i < unitStatusTable.getColumnCount(); i++)
+                {
+                    unitStatusTable.getColumnModel().getColumn(i).setPreferredWidth(columnWidths[i]);
+                }
+                unitStatusTable.getRowSorter().setSortKeys(keys);
+                unitStatusTable.getSelectionModel().setSelectionInterval(index, index);
+            } catch (RemoteException e)
+            {
+                e.printStackTrace();
+            }
+            revalidate();
+            repaint();
+        }
+    }
+
+    /*
+     * Makes screen visible.
+     */
+    public void open()
+    {
+        setVisible(true);
+    }
+
+    /*
+     * Hides screen.
+     */
+    public void close()
+    {
+        setVisible(false);
+    }
+
+    /**
+     * This method is called every second in ScreenManger to update the display
+     * time every second. Seems redundant: refreshTable already takes care of
+     * it. JD
+     */
+//    public void handleUpdateTime()
+//    {
+//        int timerColumn = 13;
+//        int unitColumn = 2;
+//        for (int i = 0; i < unitStatusTable.getModel().getRowCount(); i++)
+//        {
+//            try
+//            {
+//                unitStatusTable.getModel().setValueAt(
+//                        ScreenManager.theCoordinator.getCadDataUnitValue(
+//                        (String) unitStatusTable.getModel().getValueAt(
+//                        i, unitColumn), UNIT_TAGS.TIMER), i,
+//                        timerColumn);
+//            } catch (RemoteException e)
+//            {
+//                e.printStackTrace();
+//            }
+//        }
+//    }
+//
+//    /**
+//     * Replaces handleUpdateTime
+//     */
+//    public void updateTimeColumn()
+//    {
+//        int unitColumn = 2;
+//        try
+//        {
+//            DefaultTableModel dm = ScreenManager.theCoordinator.getCadDataTable(CADDataEnums.TABLE.UNIT_STATUS);
+//            int size = dm.getRowCount();
+//            for (int i = 0; i < size; i++)
+//            {
+//                String cell = (String) dm.getValueAt(i, unitColumn);
+//                String currTime = ScreenManager.theCoordinator.getCadDataUnitValue(cell, UNIT_TAGS.TIMER);
+//            }
+//        } catch (RemoteException e)
+//        {
+//            e.printStackTrace();
+//        }
+//    }
+    /**
+     * Removes drag and drop feature/button clicking.
+     */
+    public void removeDispatcherAuthority()
+    {
+        unitStatusTable.setTransferHandler(new TransferHandler(""));
+        buttonEnrt.setEnabled(false);
+        buttonStage.setEnabled(false);
+        button1097.setEnabled(false);
+        buttonCode4.setEnabled(false);
+        buttonDash1.setEnabled(false);
+        buttonDash2.setEnabled(false);
+        buttonDash3.setEnabled(false);
+        button108.setEnabled(false);
+        buttonOFC.setEnabled(false);
+        buttonOOS.setEnabled(false);
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentSupplementPersonForm.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentSupplementPersonForm.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/IncidentSupplementPersonForm.java	(revision 82)
@@ -0,0 +1,829 @@
+package tmcsim.client.cadclientgui.screens;
+
+import javax.swing.JComponent;
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ * CURRENTLY NOT IN USE
+ * @author Stuart
+ */
+public class IncidentSupplementPersonForm extends javax.swing.JFrame {
+
+    /**
+     * Creates new form incidentSupplementPersonForm
+     */
+    public IncidentSupplementPersonForm() {
+        declareComponents();
+        initComponents();
+        initLayout();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void declareComponents() {
+
+        incidentNumberLabel = new javax.swing.JLabel();
+        incidentNumberField = new javax.swing.JTextField();
+        involvementTypeLabel = new javax.swing.JLabel();
+        involvementTypeCombo = new javax.swing.JComboBox();
+        lastNameLabel = new javax.swing.JLabel();
+        lastNameField = new javax.swing.JTextField();
+        firstNameLabel = new javax.swing.JLabel();
+        firstNameField = new javax.swing.JTextField();
+        middleNameLabel = new javax.swing.JLabel();
+        middleNameField = new javax.swing.JTextField();
+        dobLabel = new javax.swing.JLabel();
+        dobCombo = new javax.swing.JComboBox();
+        physicalCharacteristicsPane = new javax.swing.JPanel();
+        ageLabel = new javax.swing.JLabel();
+        minimumAge = new javax.swing.JLabel();
+        maximumAgeLabel = new javax.swing.JLabel();
+        ageField = new javax.swing.JTextField();
+        minimumAgeField = new javax.swing.JTextField();
+        maximumAgeField = new javax.swing.JTextField();
+        maximumWeightLabel = new javax.swing.JLabel();
+        minimumWeightLabel = new javax.swing.JLabel();
+        weightLabel = new javax.swing.JLabel();
+        weightField = new javax.swing.JTextField();
+        minimumWeightField = new javax.swing.JTextField();
+        maximumWeightField = new javax.swing.JTextField();
+        heightLabel = new javax.swing.JLabel();
+        minimumHeightLabel = new javax.swing.JLabel();
+        maximumHeightLabel = new javax.swing.JLabel();
+        heightField = new javax.swing.JTextField();
+        minimumHeightField = new javax.swing.JTextField();
+        maximumHeightField = new javax.swing.JTextField();
+        genderLabel = new javax.swing.JLabel();
+        buildLabel = new javax.swing.JLabel();
+        raceLabel = new javax.swing.JLabel();
+        raceCombo = new javax.swing.JComboBox();
+        genderCombo = new javax.swing.JComboBox();
+        buildField = new javax.swing.JTextField();
+        facialLabel = new javax.swing.JLabel();
+        eyesLabel = new javax.swing.JLabel();
+        hairLabel = new javax.swing.JLabel();
+        hairCombo = new javax.swing.JComboBox();
+        eyesCombo = new javax.swing.JComboBox();
+        facialField = new javax.swing.JTextField();
+        descriptionPane = new javax.swing.JPanel();
+        shirtLabel = new javax.swing.JLabel();
+        jLabel26 = new javax.swing.JLabel();
+        pantsLabel = new javax.swing.JLabel();
+        shoesLabel = new javax.swing.JLabel();
+        shirtField = new javax.swing.JTextField();
+        pantsField = new javax.swing.JTextField();
+        shoesField = new javax.swing.JTextField();
+        glassesLabel = new javax.swing.JLabel();
+        glassesField = new javax.swing.JTextField();
+        hatLabel = new javax.swing.JLabel();
+        hatField = new javax.swing.JTextField();
+        jacketLabel = new javax.swing.JLabel();
+        jacketField = new javax.swing.JTextField();
+        flightDirectionLabel = new javax.swing.JLabel();
+        flightDirectionField = new javax.swing.JTextField();
+        flightModeLabel = new javax.swing.JLabel();
+        flightModeField = new javax.swing.JTextField();
+        weaponLabel = new javax.swing.JLabel();
+        weaponField = new javax.swing.JTextField();
+        addressAndPhonePane = new javax.swing.JPanel();
+        streetLabel = new javax.swing.JLabel();
+        apartmentLabel = new javax.swing.JLabel();
+        cityLabel = new javax.swing.JLabel();
+        stateLabel = new javax.swing.JLabel();
+        zipLabel = new javax.swing.JLabel();
+        phoneLabel = new javax.swing.JLabel();
+        streetField = new javax.swing.JTextField();
+        apartmentField = new javax.swing.JTextField();
+        cityField = new javax.swing.JTextField();
+        stateCombo = new javax.swing.JComboBox();
+        zipField = new javax.swing.JTextField();
+        phoneField = new javax.swing.JTextField();
+        characteristicsLabel = new javax.swing.JLabel();
+        characteristicsScrollPane = new javax.swing.JScrollPane();
+        characteristicsField = new javax.swing.JTextField();
+        commentsLabel = new javax.swing.JLabel();
+        commentsScrollPane = new javax.swing.JScrollPane();
+        commentsField = new javax.swing.JTextField();
+        cancelButton = new javax.swing.JButton();
+        saveButton = new javax.swing.JButton();
+        saveWithRecordsButton = new javax.swing.JButton();
+        personalDataPane = new javax.swing.JPanel();
+        olnLabel = new javax.swing.JLabel();
+        olsLabel = new javax.swing.JLabel();
+        ssnLabel = new javax.swing.JLabel();
+        olnField = new javax.swing.JTextField();
+        olsCombo = new javax.swing.JComboBox();
+        ssnField = new javax.swing.JTextField();
+    }
+    
+    private void initComponents() {
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+
+        incidentNumberLabel.setText("Incident No:");
+
+        incidentNumberField.setText("jTextField1");
+
+        involvementTypeLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
+        involvementTypeLabel.setText("<html>\nInvolvement<br>Type:\n</html>");
+
+        involvementTypeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        lastNameLabel.setText("Last Name:");
+
+        lastNameField.setText("jTextField2");
+
+        firstNameLabel.setText("First Name:");
+
+        firstNameField.setText("jTextField3");
+
+        middleNameLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
+        middleNameLabel.setText("<html>\nMiddle<br>Name:\n</html>");
+
+        middleNameField.setText("jTextField4");
+
+        dobLabel.setText("DOB:");
+
+        dobCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        ageLabel.setText("Age:");
+
+        minimumAge.setText("Age Min:");
+
+        maximumAgeLabel.setText("Age Max:");
+
+        ageField.setText("jTextField5");
+
+        minimumAgeField.setText("jTextField6");
+
+        maximumAgeField.setText("jTextField7");
+
+        maximumWeightLabel.setText("Weight Max:");
+
+        minimumWeightLabel.setText("Weight Min:");
+
+        weightLabel.setText("Weight:");
+
+        weightField.setText("jTextField8");
+
+        minimumWeightField.setText("jTextField9");
+
+        maximumWeightField.setText("jTextField10");
+
+        heightLabel.setText("Height:");
+
+        minimumHeightLabel.setText("Height Min:");
+
+        maximumHeightLabel.setText("Height Max:");
+
+        heightField.setText("jTextField11");
+
+        minimumHeightField.setText("jTextField12");
+
+        maximumHeightField.setText("jTextField13");
+
+        genderLabel.setText("Gender:");
+
+        buildLabel.setText("Build:");
+
+        raceLabel.setText("Race:");
+
+        raceCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        genderCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        buildField.setText("jTextField14");
+
+        facialLabel.setText("Facial:");
+
+        eyesLabel.setText("Eyes:");
+
+        hairLabel.setText("Hair:");
+
+        hairCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        eyesCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        facialField.setText("jTextField15");
+
+        shirtLabel.setText("Shirt:");
+
+        pantsLabel.setText("Pants:");
+
+        shoesLabel.setText("Shoes:");
+
+        shirtField.setText("jTextField18");
+        shirtField.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                shirtFieldActionPerformed(evt);
+            }
+        });
+
+        pantsField.setText("jTextField19");
+
+        shoesField.setText("jTextField20");
+
+        glassesLabel.setText("Glasses:");
+
+        glassesField.setText("jTextField21");
+
+        hatLabel.setText("Hat:");
+
+        hatField.setText("jTextField22");
+
+        jacketLabel.setText("Jacket:");
+
+        jacketField.setText("jTextField23");
+
+        flightDirectionLabel.setText("Flight Direction:");
+
+        flightDirectionField.setText("jTextField24");
+
+        flightModeLabel.setText("Flight Mode:");
+
+        flightModeField.setText("jTextField25");
+
+        weaponLabel.setText("Weapon:");
+
+        weaponField.setText("jTextField26");
+
+        streetLabel.setText("Street:");
+
+        apartmentLabel.setText("Apt:");
+
+        cityLabel.setText("City:");
+
+        stateLabel.setText("State:");
+
+        zipLabel.setText("Zip:");
+
+        phoneLabel.setText("Phone:");
+
+        streetField.setText("jTextField27");
+
+        apartmentField.setText("jTextField28");
+
+        cityField.setText("jTextField29");
+
+        stateCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        zipField.setText("jTextField30");
+
+        phoneField.setText("jTextField31");
+        
+
+        characteristicsLabel.setText("Characteristics:");
+
+        characteristicsField.setText("jTextField32");
+        characteristicsScrollPane.setViewportView(characteristicsField);
+
+        commentsLabel.setText("Comments:");
+
+        commentsField.setText("jTextField33");
+        commentsScrollPane.setViewportView(commentsField);
+
+        cancelButton.setText("Cancel");
+
+        saveButton.setText("Save");
+
+        saveWithRecordsButton.setText("Save with Records Check");
+        saveWithRecordsButton.setMargin(new java.awt.Insets(2, 5, 2, 5));
+
+        olnLabel.setText("OLN:");
+
+        olsLabel.setText("OLS:");
+
+        ssnLabel.setText("SSN:");
+
+        olnField.setText("jTextField16");
+
+        olsCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        ssnField.setText("jTextField17");
+    }
+    
+    private void initLayout(){    
+        javax.swing.GroupLayout physicalCharacteristicsPaneLayout = new javax.swing.GroupLayout(physicalCharacteristicsPane);
+        physicalCharacteristicsPane.setLayout(physicalCharacteristicsPaneLayout);
+        physicalCharacteristicsPaneLayout.setHorizontalGroup(
+            physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(physicalCharacteristicsPaneLayout.createSequentialGroup()
+                .addGap(15, 15, 15)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(maximumAgeLabel)
+                    .addComponent(minimumAge)
+                    .addComponent(ageLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(ageField, javax.swing.GroupLayout.DEFAULT_SIZE, 40, Short.MAX_VALUE)
+                    .addComponent(minimumAgeField, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE)
+                    .addComponent(maximumAgeField, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE))
+                .addGap(18, 18, 18)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(maximumWeightLabel)
+                    .addComponent(minimumWeightLabel)
+                    .addComponent(weightLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(weightField, javax.swing.GroupLayout.DEFAULT_SIZE, 40, Short.MAX_VALUE)
+                    .addComponent(minimumWeightField, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE)
+                    .addComponent(maximumWeightField, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE))
+                .addGap(18, 18, 18)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(heightLabel)
+                    .addComponent(minimumHeightLabel)
+                    .addComponent(maximumHeightLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addGroup(physicalCharacteristicsPaneLayout.createSequentialGroup()
+                        .addComponent(heightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(raceLabel))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, physicalCharacteristicsPaneLayout.createSequentialGroup()
+                        .addComponent(maximumHeightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(buildLabel))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, physicalCharacteristicsPaneLayout.createSequentialGroup()
+                        .addComponent(minimumHeightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(18, 18, 18)
+                        .addComponent(genderLabel)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(buildField)
+                    .addComponent(genderCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(raceCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addGap(30, 30, 30)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(facialLabel)
+                    .addComponent(eyesLabel)
+                    .addComponent(hairLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(facialField)
+                    .addComponent(eyesCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(hairCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        physicalCharacteristicsPaneLayout.setVerticalGroup(
+            physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(physicalCharacteristicsPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(ageLabel)
+                    .addComponent(ageField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(weightLabel)
+                    .addComponent(weightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(heightLabel)
+                    .addComponent(heightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(raceLabel)
+                    .addComponent(raceCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(hairLabel)
+                    .addComponent(hairCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(minimumAge)
+                    .addComponent(minimumAgeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(minimumWeightLabel)
+                    .addComponent(minimumWeightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(minimumHeightLabel)
+                    .addComponent(minimumHeightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(genderLabel)
+                    .addComponent(genderCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(eyesLabel)
+                    .addComponent(eyesCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(physicalCharacteristicsPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(maximumAgeLabel)
+                    .addComponent(maximumAgeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(maximumWeightLabel)
+                    .addComponent(maximumWeightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(maximumHeightLabel)
+                    .addComponent(maximumHeightField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(buildLabel)
+                    .addComponent(buildField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(facialLabel)
+                    .addComponent(facialField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout descriptionPaneLayout = new javax.swing.GroupLayout(descriptionPane);
+        descriptionPane.setLayout(descriptionPaneLayout);
+        descriptionPaneLayout.setHorizontalGroup(
+            descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(descriptionPaneLayout.createSequentialGroup()
+                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(descriptionPaneLayout.createSequentialGroup()
+                        .addContainerGap()
+                        .addComponent(jLabel26))
+                    .addGroup(descriptionPaneLayout.createSequentialGroup()
+                        .addGap(30, 30, 30)
+                        .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                .addComponent(pantsLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                                .addComponent(shoesLabel, javax.swing.GroupLayout.Alignment.TRAILING))
+                            .addGroup(descriptionPaneLayout.createSequentialGroup()
+                                .addGap(7, 7, 7)
+                                .addComponent(shirtLabel)))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(descriptionPaneLayout.createSequentialGroup()
+                                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                                    .addComponent(pantsField, javax.swing.GroupLayout.DEFAULT_SIZE, 80, Short.MAX_VALUE)
+                                    .addComponent(shoesField)
+                                    .addComponent(shirtField))
+                                .addGap(30, 30, 30)
+                                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                                    .addComponent(glassesLabel)
+                                    .addComponent(hatLabel)
+                                    .addComponent(jacketLabel))
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                    .addComponent(glassesField, javax.swing.GroupLayout.DEFAULT_SIZE, 80, Short.MAX_VALUE)
+                                    .addComponent(hatField)
+                                    .addComponent(jacketField)))
+                            .addGroup(descriptionPaneLayout.createSequentialGroup()
+                                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                                    .addComponent(flightModeLabel)
+                                    .addComponent(flightDirectionLabel)
+                                    .addComponent(weaponLabel))
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                    .addComponent(flightDirectionField, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
+                                    .addComponent(flightModeField)
+                                    .addComponent(weaponField))))))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        descriptionPaneLayout.setVerticalGroup(
+            descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(descriptionPaneLayout.createSequentialGroup()
+                .addGap(9, 9, 9)
+                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(shirtLabel)
+                    .addComponent(shirtField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(hatLabel)
+                    .addComponent(hatField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(pantsLabel)
+                    .addComponent(pantsField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(glassesLabel)
+                    .addComponent(glassesField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(shoesLabel)
+                    .addComponent(shoesField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jacketLabel)
+                    .addComponent(jacketField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(jLabel26)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(flightDirectionLabel)
+                    .addComponent(flightDirectionField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(flightModeLabel)
+                    .addComponent(flightModeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(descriptionPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(weaponLabel)
+                    .addComponent(weaponField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout addressAndPhonePaneLayout = new javax.swing.GroupLayout(addressAndPhonePane);
+        addressAndPhonePane.setLayout(addressAndPhonePaneLayout);
+        addressAndPhonePaneLayout.setHorizontalGroup(
+            addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(addressAndPhonePaneLayout.createSequentialGroup()
+                .addGap(23, 23, 23)
+                .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(phoneLabel)
+                    .addComponent(zipLabel)
+                    .addComponent(stateLabel)
+                    .addComponent(cityLabel)
+                    .addComponent(streetLabel)
+                    .addComponent(apartmentLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(streetField)
+                    .addGroup(addressAndPhonePaneLayout.createSequentialGroup()
+                        .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(apartmentField, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(stateCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(cityField, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                                .addComponent(phoneField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE)
+                                .addComponent(zipField, javax.swing.GroupLayout.Alignment.LEADING)))
+                        .addGap(0, 0, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        addressAndPhonePaneLayout.setVerticalGroup(
+            addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(addressAndPhonePaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(streetLabel)
+                    .addComponent(streetField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(apartmentLabel)
+                    .addComponent(apartmentField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(cityLabel)
+                    .addComponent(cityField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(stateLabel)
+                    .addComponent(stateCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(11, 11, 11)
+                .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(zipLabel)
+                    .addComponent(zipField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(addressAndPhonePaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(phoneLabel)
+                    .addComponent(phoneField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(15, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout personalDataPaneLayout = new javax.swing.GroupLayout(personalDataPane);
+        personalDataPane.setLayout(personalDataPaneLayout);
+        personalDataPaneLayout.setHorizontalGroup(
+            personalDataPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(personalDataPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(personalDataPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(personalDataPaneLayout.createSequentialGroup()
+                        .addComponent(olnLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(olnField, javax.swing.GroupLayout.DEFAULT_SIZE, 97, Short.MAX_VALUE))
+                    .addGroup(personalDataPaneLayout.createSequentialGroup()
+                        .addComponent(ssnLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(ssnField))
+                    .addGroup(personalDataPaneLayout.createSequentialGroup()
+                        .addComponent(olsLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(olsCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        personalDataPaneLayout.setVerticalGroup(
+            personalDataPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(personalDataPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(personalDataPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(olnLabel)
+                    .addComponent(olnField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(personalDataPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(olsLabel)
+                    .addComponent(olsCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(personalDataPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(ssnLabel)
+                    .addComponent(ssnField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(physicalCharacteristicsPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(personalDataPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(descriptionPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(18, 18, 18)
+                        .addComponent(addressAndPhonePane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(layout.createSequentialGroup()
+                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addGroup(layout.createSequentialGroup()
+                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                                            .addComponent(lastNameLabel)
+                                            .addComponent(incidentNumberLabel))
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
+                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                                        .addComponent(involvementTypeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                        .addGap(7, 7, 7)))
+                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                    .addComponent(incidentNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                    .addComponent(involvementTypeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                    .addComponent(lastNameField, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE))
+                                .addGap(25, 25, 25)
+                                .addComponent(firstNameLabel)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(firstNameField, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(25, 25, 25)
+                                .addComponent(middleNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(middleNameField, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(45, 45, 45)
+                                .addComponent(dobLabel)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(dobCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addGroup(layout.createSequentialGroup()
+                                .addComponent(characteristicsLabel)
+                                .addGap(342, 342, 342)
+                                .addComponent(commentsLabel)))
+                        .addGap(0, 0, Short.MAX_VALUE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(characteristicsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 399, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(18, 18, 18)
+                        .addComponent(commentsScrollPane))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addGap(0, 0, Short.MAX_VALUE)
+                        .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(saveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(saveWithRecordsButton)
+                        .addGap(8, 8, 8)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(incidentNumberLabel)
+                            .addComponent(incidentNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(involvementTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGroup(layout.createSequentialGroup()
+                                .addGap(1, 1, 1)
+                                .addComponent(involvementTypeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(lastNameLabel)
+                            .addComponent(lastNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(firstNameLabel)
+                            .addComponent(firstNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(57, 57, 57)
+                        .addComponent(middleNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(60, 60, 60)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(middleNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(dobLabel)
+                            .addComponent(dobCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(physicalCharacteristicsPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(personalDataPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(descriptionPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(addressAndPhonePane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(characteristicsLabel)
+                    .addComponent(commentsLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(commentsScrollPane)
+                    .addComponent(characteristicsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(saveWithRecordsButton)
+                    .addComponent(saveButton)
+                    .addComponent(cancelButton))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void shirtFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_shirtFieldActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_shirtFieldActionPerformed
+    
+    /* 
+     * Makes screen visible.
+     */
+    public void open(){
+        setVisible(true);
+    }
+    
+    /*
+     * Hides screen.
+     */
+    public void close(){
+        setVisible(false);
+    }
+    
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JPanel addressAndPhonePane;
+    private javax.swing.JTextField ageField;
+    private javax.swing.JLabel ageLabel;
+    private javax.swing.JTextField apartmentField;
+    private javax.swing.JLabel apartmentLabel;
+    private javax.swing.JTextField buildField;
+    private javax.swing.JLabel buildLabel;
+    private javax.swing.JButton cancelButton;
+    private javax.swing.JTextField characteristicsField;
+    private javax.swing.JLabel characteristicsLabel;
+    private javax.swing.JScrollPane characteristicsScrollPane;
+    private javax.swing.JTextField cityField;
+    private javax.swing.JLabel cityLabel;
+    private javax.swing.JTextField commentsField;
+    private javax.swing.JLabel commentsLabel;
+    private javax.swing.JScrollPane commentsScrollPane;
+    private javax.swing.JPanel descriptionPane;
+    private javax.swing.JComboBox dobCombo;
+    private javax.swing.JLabel dobLabel;
+    private javax.swing.JComboBox eyesCombo;
+    private javax.swing.JLabel eyesLabel;
+    private javax.swing.JTextField facialField;
+    private javax.swing.JLabel facialLabel;
+    private javax.swing.JTextField firstNameField;
+    private javax.swing.JLabel firstNameLabel;
+    private javax.swing.JTextField flightDirectionField;
+    private javax.swing.JLabel flightDirectionLabel;
+    private javax.swing.JTextField flightModeField;
+    private javax.swing.JLabel flightModeLabel;
+    private javax.swing.JComboBox genderCombo;
+    private javax.swing.JLabel genderLabel;
+    private javax.swing.JTextField glassesField;
+    private javax.swing.JLabel glassesLabel;
+    private javax.swing.JComboBox hairCombo;
+    private javax.swing.JLabel hairLabel;
+    private javax.swing.JTextField hatField;
+    private javax.swing.JLabel hatLabel;
+    private javax.swing.JTextField heightField;
+    private javax.swing.JLabel heightLabel;
+    private javax.swing.JTextField incidentNumberField;
+    private javax.swing.JLabel incidentNumberLabel;
+    private javax.swing.JComboBox involvementTypeCombo;
+    private javax.swing.JLabel involvementTypeLabel;
+    private javax.swing.JLabel jLabel26;
+    private javax.swing.JTextField jacketField;
+    private javax.swing.JLabel jacketLabel;
+    private javax.swing.JTextField lastNameField;
+    private javax.swing.JLabel lastNameLabel;
+    private javax.swing.JTextField maximumAgeField;
+    private javax.swing.JLabel maximumAgeLabel;
+    private javax.swing.JTextField maximumHeightField;
+    private javax.swing.JLabel maximumHeightLabel;
+    private javax.swing.JTextField maximumWeightField;
+    private javax.swing.JLabel maximumWeightLabel;
+    private javax.swing.JTextField middleNameField;
+    private javax.swing.JLabel middleNameLabel;
+    private javax.swing.JLabel minimumAge;
+    private javax.swing.JTextField minimumAgeField;
+    private javax.swing.JTextField minimumHeightField;
+    private javax.swing.JLabel minimumHeightLabel;
+    private javax.swing.JTextField minimumWeightField;
+    private javax.swing.JLabel minimumWeightLabel;
+    private javax.swing.JTextField olnField;
+    private javax.swing.JLabel olnLabel;
+    private javax.swing.JComboBox olsCombo;
+    private javax.swing.JLabel olsLabel;
+    private javax.swing.JTextField pantsField;
+    private javax.swing.JLabel pantsLabel;
+    private javax.swing.JPanel personalDataPane;
+    private javax.swing.JTextField phoneField;
+    private javax.swing.JLabel phoneLabel;
+    private javax.swing.JPanel physicalCharacteristicsPane;
+    private javax.swing.JComboBox raceCombo;
+    private javax.swing.JLabel raceLabel;
+    private javax.swing.JButton saveButton;
+    private javax.swing.JButton saveWithRecordsButton;
+    private javax.swing.JTextField shirtField;
+    private javax.swing.JLabel shirtLabel;
+    private javax.swing.JTextField shoesField;
+    private javax.swing.JLabel shoesLabel;
+    private javax.swing.JTextField ssnField;
+    private javax.swing.JLabel ssnLabel;
+    private javax.swing.JComboBox stateCombo;
+    private javax.swing.JLabel stateLabel;
+    private javax.swing.JTextField streetField;
+    private javax.swing.JLabel streetLabel;
+    private javax.swing.JTextField weaponField;
+    private javax.swing.JLabel weaponLabel;
+    private javax.swing.JTextField weightField;
+    private javax.swing.JLabel weightLabel;
+    private javax.swing.JTextField zipField;
+    private javax.swing.JLabel zipLabel;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/PendingIncidents.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/PendingIncidents.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/PendingIncidents.java	(revision 82)
@@ -0,0 +1,549 @@
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.rmi.RemoteException;
+import java.util.List;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.RowSorter.SortKey;
+import javax.swing.SwingUtilities;
+import javax.swing.TransferHandler;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+import tmcsim.client.cadclientgui.enums.CADDataEnums.INC_VAL;
+import tmcsim.client.cadclientgui.enums.CADScriptTags.UNIT_TAGS;
+import tmcsim.client.cadclientgui.enums.IncidentEnums;
+import tmcsim.client.cadclientgui.enums.TableHeaders;
+import tmcsim.client.cadclientgui.enums.UnitStatusEnums;
+
+/**
+ * This class contains the view and controller for the PendingIncidents screen.
+ * The view was not built using a GUI builder plug-in (but may want to consider
+ * doing so in the future), and the controller uses listeners to control how the
+ * view and data act.
+ *
+ * @author Vincent
+ */
+public class PendingIncidents extends JFrame
+{
+    private final String SCREEN_TITLE = "(Shift + F2) Pending Incidents";
+    private final Dimension SCREEN_DIMENSIONS = new Dimension(1400, 250);
+    private final Dimension DROP_DOWN_MENU_LABEL_DIMENSIONS = new Dimension(170, 20);
+    private final Dimension DROP_DOWN_MENU_DIMENSIONS = new Dimension(170, 180);
+    private final int COLUMN_WIDTH = 120;
+    private final String[] LABELS =
+    {
+        "Recommend...", "Add Resources...", "Open", "Recall Incident",
+        "Cancel", "Link/Append", "Map", "Recall Linked Incidents", "Read Notes", "Mail...", "Fax..."
+    };
+    private final String LABEL_SPACING = "     ";
+    private JTable pendingIncidentsTable;
+    private JFrame pendingIncidentsMenu;
+    //labels for the drop down menu
+    private JLabel[] dropDownLabels = new JLabel[LABELS.length];
+    private long lastLeftClick;//used for double clicking feature
+
+    public PendingIncidents()
+    {
+        initComponents();
+    }
+
+    private void initComponents()
+    {
+        initializeTable();
+        initControllers();
+        initializeDropDownMenu();
+
+        JScrollPane scrollpane = new JScrollPane(pendingIncidentsTable);
+        scrollpane.getViewport().setBackground(Color.WHITE);
+
+        setTitle(SCREEN_TITLE);
+        setPreferredSize(SCREEN_DIMENSIONS);
+        getContentPane().add(scrollpane);
+        setResizable(true);
+        pack();
+        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
+        setLocation(0, (int) (dim.getHeight() * 3 / 4));
+        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
+        setVisible(false);
+    }
+
+    /*
+     * Initializes the table and prepares the cell renderer for color management. It initializes the default settings
+     * and handles the drag and drop feature.
+     */
+    private void initializeTable()
+    {
+        pendingIncidentsTable = new JTable()
+        {
+            /*
+             * Custom renderer to set different background/foreground colors
+             * @see javax.swing.JTable#prepareRenderer(javax.swing.table.TableCellRenderer, int, int)
+             */
+            public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
+            {
+                Component comp = super.prepareRenderer(renderer, row, column);
+
+                comp.setForeground(Color.BLACK);
+                comp.setBackground(Color.CYAN);
+
+                if (getSelectedRow() == row)
+                {
+                    comp.setForeground(Color.WHITE);
+                    comp.setBackground(Color.BLUE);
+                }
+
+                return comp;
+            }
+
+            public Class getColumnClass(int c)
+            {
+                return getValueAt(0, c).getClass();
+            }
+        };
+
+        pendingIncidentsTable.setOpaque(true);
+        pendingIncidentsTable.setIntercellSpacing(new Dimension(1, 0));
+        pendingIncidentsTable.setGridColor(Color.WHITE);
+        pendingIncidentsTable.getTableHeader().setReorderingAllowed(false);
+        pendingIncidentsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        pendingIncidentsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        pendingIncidentsTable.setAutoCreateRowSorter(true);
+
+        pendingIncidentsTable.setModel(new DefaultTableModel());
+        ((DefaultTableModel) pendingIncidentsTable.getModel()).setColumnIdentifiers(TableHeaders.PENDING_INCIDENTS_HEADERS);
+
+        pendingIncidentsTable.setTransferHandler(new TransferHandler()
+        {
+            public boolean canImport(TransferHandler.TransferSupport info)
+            {
+                // Check for String flavor
+                if (!info.isDataFlavorSupported(DataFlavor.stringFlavor))
+                {
+                    return false;
+                }
+                return true;
+            }
+
+            public boolean importData(TransferHandler.TransferSupport info)
+            {
+                if (!info.isDrop())
+                {
+                    return false;
+                }
+
+                DefaultTableModel tableModel = (DefaultTableModel) pendingIncidentsTable.getModel();
+                JTable.DropLocation dl = (JTable.DropLocation) info.getDropLocation();
+                int index = dl.getRow();
+
+                // Get the string that is being dropped.
+                Transferable t = info.getTransferable();
+                String data;
+                try
+                {
+                    data = (String) t.getTransferData(DataFlavor.stringFlavor);
+                } catch (Exception e)
+                {
+                    return false;
+                }
+
+                // Perform the actual import
+                // TODO
+                int incidentId = (Integer) pendingIncidentsTable.getValueAt(dl.getRow(), 0);
+                try
+                {
+                    String masterInc = (String) ScreenManager.theCoordinator.
+                            getCadDataIncVal(INC_VAL.MASTER_INC, incidentId);
+                    ScreenManager.theCoordinator.setCadDataUnitValue(data,
+                            UNIT_TAGS.MASTER_INC_NUM, masterInc);
+
+                    ScreenManager.theCoordinator.setCadDataUnitAssignedId(data, incidentId);
+                    ScreenManager.theCoordinator.setCadDataUnitValue(data,
+                            UNIT_TAGS.UNIT_STATUS, UnitStatusEnums.Arrived);
+                    ScreenManager.theCoordinator.addCadDataIncidentAssignedUnitNum(incidentId, data);
+                    ScreenManager.theCoordinator.setCadDataIncidentStatus(incidentId, IncidentEnums.Assigned);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+                return true;
+            }
+        });
+        for (int i = 0; i < pendingIncidentsTable.getColumnCount(); i++)
+        {
+            pendingIncidentsTable.getColumnModel().getColumn(i).setPreferredWidth(120);
+        }
+    }
+
+    /*
+     * Adds the key and mouse listeners for the table and component listener for screen.
+     */
+    private void initControllers()
+    {
+        pendingIncidentsTable.addMouseListener(new MouseListener()
+        {
+            public void mouseClicked(MouseEvent e)
+            {
+                if (SwingUtilities.isLeftMouseButton(e))
+                {
+                    if (System.currentTimeMillis() - lastLeftClick < 1000)
+                    {
+                        int idColumn = 0;
+                        ScreenManager.openIncidentViewer((Integer) pendingIncidentsTable.getValueAt(pendingIncidentsTable.getSelectedRow(), idColumn));
+                    }
+                    else
+                    {
+                        lastLeftClick = System.currentTimeMillis();
+                    }
+                }
+                if (SwingUtilities.isRightMouseButton(e))
+                {
+                    // Fixed to force right click to cause the row to be selected. JD
+                    // get the coordinates of the mouse click
+                    Point p = e.getPoint();
+                    // get the row index that contains that coordinate
+                    int rowNumber = pendingIncidentsTable.rowAtPoint(p);
+                    // Get the ListSelectionModel of the JTable
+                    ListSelectionModel model = pendingIncidentsTable.getSelectionModel();
+                    // set the selected interval of rows. Using the "rowNumber"
+                    // variable for the beginning and end selects only that one row.
+                    model.setSelectionInterval(rowNumber, rowNumber);
+                    // go open the drop down menu
+                    openDropDownMenu(e);
+                }
+                else
+                {
+                    closeDropDownMenu();
+                }
+            }
+
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+        });
+
+        addComponentListener(new ComponentListener()
+        {
+            public void componentHidden(ComponentEvent e)
+            {
+            }
+
+            public void componentMoved(ComponentEvent e)
+            {
+                closeDropDownMenu();
+            }
+
+            public void componentResized(ComponentEvent e)
+            {
+            }
+
+            public void componentShown(ComponentEvent e)
+            {
+            }
+        });
+    }
+
+    /*
+     * Creates the drop down menu that appears when a right click is performed on the table.
+     */
+    private void initializeDropDownMenu()
+    {
+        Box menu = new Box(BoxLayout.Y_AXIS);
+        initializeDropDownLabels();
+        addLabelsToBox(menu);
+
+        //Sets the highlighted background color, note that it does not become "Highlighted" until opaque(true) is called
+        setMenuHighlightedBackground(Color.BLUE);
+
+        pendingIncidentsMenu = new JFrame();
+        pendingIncidentsMenu.getContentPane().add(menu);
+        pendingIncidentsMenu.setPreferredSize(DROP_DOWN_MENU_DIMENSIONS);
+        pendingIncidentsMenu.setUndecorated(true);
+        pendingIncidentsMenu.pack();
+        pendingIncidentsMenu.setVisible(false);
+    }
+
+    /*
+     * Sets the text and size and adds a listener to each label.
+     */
+    private void initializeDropDownLabels()
+    {
+        for (int i = 0; i < dropDownLabels.length; i++)
+        {
+            dropDownLabels[i] = new JLabel(LABEL_SPACING + LABELS[i]);
+            dropDownLabels[i].setMaximumSize(DROP_DOWN_MENU_LABEL_DIMENSIONS);
+            dropDownLabels[i].setForeground(Color.GRAY);
+        }
+        dropDownLabels[2].setForeground(Color.BLACK);
+        addMouseListenersToLabel(dropDownLabels[2]);
+        dropDownLabels[8].setForeground(Color.BLACK);
+        addMouseListenersToLabel(dropDownLabels[8]);
+    }
+
+    /*
+     * Add the labels to the box in order with separators and spacings in between.
+     */
+    private void addLabelsToBox(Box menu)
+    {
+        menu.add(dropDownLabels[0]);
+        menu.add(dropDownLabels[1]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[2]);
+        menu.add(dropDownLabels[3]);
+        menu.add(dropDownLabels[4]);
+        menu.add(dropDownLabels[5]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[6]);
+        menu.add(dropDownLabels[7]);
+        menu.add(dropDownLabels[8]);
+
+        menu.add(Box.createVerticalStrut(5));
+        menu.add(new JSeparator());
+        menu.add(Box.createVerticalStrut(5));
+
+        menu.add(dropDownLabels[9]);
+        menu.add(dropDownLabels[10]);
+
+        menu.add(Box.createVerticalStrut(5));
+    }
+
+    /*
+     * Sets the highlighted color(when the mouse is over it) of the JLabels.
+     * Note: the color is not shown until .setOpaque(true) is called.
+     * @param color the highlighted color
+     */
+    public void setMenuHighlightedBackground(Color color)
+    {
+        for (int i = 0; i < dropDownLabels.length; i++)
+        {
+            dropDownLabels[i].setBackground(color);
+        }
+    }
+
+    /*
+     * Sets all JLabels to not display a highlighted background
+     */
+    public void unSelectAllLabels()
+    {
+        for (int i = 0; i < dropDownLabels.length; i++)
+        {
+            dropDownLabels[i].setOpaque(false);
+        }
+    }
+
+    /*
+     * Sets the label to have a highlighted background.
+     * @param label the label that is selected/highlighted
+     */
+    public void selectLabel(Object label)
+    {
+        ((JLabel) label).setOpaque(true);
+    }
+
+    /*
+     * Performs the label action depending on which label was clicked.
+     */
+    public void performLabelAction(Object label)
+    {
+        if (label.equals(dropDownLabels[0]))
+        {//Recommend
+        }
+        else if (label.equals(dropDownLabels[1]))
+        {//Add Resources
+        }
+        else if (label.equals(dropDownLabels[2]))
+        {//Open
+            int idColumn = 0;
+            ScreenManager.openIncidentViewer((Integer) pendingIncidentsTable.getValueAt(
+                    pendingIncidentsTable.getSelectedRow(), idColumn));
+        }
+        else if (label.equals(dropDownLabels[3]))
+        {//Recall Incident
+        }
+        else if (label.equals(dropDownLabels[4]))
+        {//Cancel
+        }
+        else if (label.equals(dropDownLabels[5]))
+        {//Link Append
+        }
+        else if (label.equals(dropDownLabels[6]))
+        {//Map
+        }
+        else if (label.equals(dropDownLabels[7]))
+        {//Recall Linked Incidents
+        }
+        else if (label.equals(dropDownLabels[8]))
+        {//Read Notes
+            int idColumn = 0;
+            ScreenManager.openIncidentViewer((Integer) pendingIncidentsTable.getValueAt(
+                    pendingIncidentsTable.getSelectedRow(), idColumn));
+        }
+        else if (label.equals(dropDownLabels[9]))
+        {//Mail
+        }
+        else if (label.equals(dropDownLabels[10]))
+        {//Fax
+        }
+    }
+
+    /*
+     * Factory method. Adds a mouse listeners to the label. The MouseMotionListener detects
+     * the mouse's location to highlight the label. The MouseListener detects
+     * for clicks and performs the action of the label designates.
+     */
+    public void addMouseListenersToLabel(JLabel label)
+    {
+        label.addMouseMotionListener(new MouseMotionListener()
+        {
+            public void mouseDragged(MouseEvent e)
+            {
+            }
+
+            public void mouseMoved(MouseEvent e)
+            {
+                unSelectAllLabels();
+                selectLabel(e.getSource());
+                pendingIncidentsMenu.revalidate();
+                pendingIncidentsMenu.repaint();
+            }
+        });
+        label.addMouseListener(new MouseListener()
+        {
+            public void mouseClicked(MouseEvent e)
+            {
+                performLabelAction(e.getSource());
+                unSelectAllLabels();
+                pendingIncidentsMenu.revalidate();
+                pendingIncidentsMenu.repaint();
+                pendingIncidentsMenu.setVisible(false);
+            }
+
+            public void mouseEntered(MouseEvent e)
+            {
+            }
+
+            public void mouseExited(MouseEvent e)
+            {
+            }
+
+            public void mousePressed(MouseEvent e)
+            {
+            }
+
+            public void mouseReleased(MouseEvent e)
+            {
+            }
+        });
+    }
+
+    /*
+     * Displays the menu where the right click occurred.
+     */
+    public void openDropDownMenu(MouseEvent e)
+    {
+        pendingIncidentsMenu.setLocation(e.getX() + this.getX(), e.getY() + this.getY());
+        pendingIncidentsMenu.setVisible(true);
+    }
+
+    /*
+     * Hides the menu.
+     */
+    public void closeDropDownMenu()
+    {
+        unSelectAllLabels();
+        pendingIncidentsMenu.revalidate();
+        pendingIncidentsMenu.repaint();
+        pendingIncidentsMenu.setVisible(false);
+    }
+
+    /*
+     * Refreshes the data in the table by updating all data and repainting the
+     * screen. It saves user preferences(like column sizes, selected row, sorted preferences)
+     * and applies them to the updated model it receives from the server.
+     */
+    public void refreshTable()
+    {
+
+        if (pendingIncidentsTable.getTableHeader().getResizingColumn() == null)
+        {//only update info if resize not in progress
+            try
+            {
+                int index = pendingIncidentsTable.getSelectedRow();
+                int[] columnWidths = new int[20];
+                List<? extends SortKey> keys = pendingIncidentsTable.getRowSorter().getSortKeys();
+                for (int i = 0; i < pendingIncidentsTable.getColumnCount(); i++)
+                {
+                    columnWidths[i] = pendingIncidentsTable.getColumnModel().getColumn(i).getWidth();
+                }
+
+                pendingIncidentsTable.setModel(ScreenManager.theCoordinator.getCadDataTable(CADDataEnums.TABLE.PENDING_INCIDENTS));
+
+                for (int i = 0; i < pendingIncidentsTable.getColumnCount(); i++)
+                {
+                    pendingIncidentsTable.getColumnModel().getColumn(i).setPreferredWidth(columnWidths[i]);
+                }
+                pendingIncidentsTable.getRowSorter().setSortKeys(keys);
+                pendingIncidentsTable.getSelectionModel().setSelectionInterval(index, index);
+            } catch (RemoteException e)
+            {
+                e.printStackTrace();
+            }
+            revalidate();
+            repaint();
+        }
+    }
+
+    /*
+     * Makes screen visible.
+     */
+    public void open()
+    {
+        setVisible(true);
+    }
+
+    /*
+     * Hides screen.
+     */
+    public void close()
+    {
+        setVisible(false);
+    }
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/SearchEntry.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/SearchEntry.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/SearchEntry.java	(revision 82)
@@ -0,0 +1,258 @@
+package tmcsim.client.cadclientgui.screens;
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ *
+ * @author Stuart
+ */
+public class SearchEntry extends javax.swing.JFrame {
+
+    /**
+     * Creates new form SearchEntry
+     */
+    public SearchEntry() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        entryPanel = new javax.swing.JPanel();
+        categoryLabel = new javax.swing.JLabel();
+        addressLabel = new javax.swing.JLabel();
+        phone1Label = new javax.swing.JLabel();
+        commentLabel = new javax.swing.JLabel();
+        categoryField = new javax.swing.JTextField();
+        addressField = new javax.swing.JTextField();
+        phone1Field = new javax.swing.JTextField();
+        commentField = new javax.swing.JTextField();
+        cityLabel = new javax.swing.JLabel();
+        phone2Label = new javax.swing.JLabel();
+        phone2Field = new javax.swing.JTextField();
+        cityField = new javax.swing.JTextField();
+        nameField = new javax.swing.JTextField();
+        nameLabel = new javax.swing.JLabel();
+        stateLabel = new javax.swing.JLabel();
+        faxNumberLabel = new javax.swing.JLabel();
+        faxNumberField = new javax.swing.JTextField();
+        stateField = new javax.swing.JTextField();
+        zipLabel = new javax.swing.JLabel();
+        zipField = new javax.swing.JTextField();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+
+        categoryLabel.setText("Category:");
+
+        addressLabel.setText("Address:");
+
+        phone1Label.setText("Phone 1:");
+
+        commentLabel.setText("Comment:");
+
+        categoryField.setText("jTextField1");
+
+        addressField.setText("jTextField1");
+
+        phone1Field.setText("jTextField1");
+
+        commentField.setText("jTextField1");
+
+        cityLabel.setText("City:");
+
+        phone2Label.setText("Phone 2:");
+
+        phone2Field.setText("jTextField1");
+
+        cityField.setText("jTextField1");
+
+        nameField.setText("jTextField1");
+        nameField.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                nameFieldActionPerformed(evt);
+            }
+        });
+
+        nameLabel.setText("Name:");
+
+        stateLabel.setText("State:");
+
+        faxNumberLabel.setText("FaxNumber:");
+
+        faxNumberField.setText("jTextField1");
+
+        stateField.setText("jTextField1");
+
+        zipLabel.setText("Zip:");
+
+        zipField.setText("jTextField1");
+
+        javax.swing.GroupLayout entryPanelLayout = new javax.swing.GroupLayout(entryPanel);
+        entryPanel.setLayout(entryPanelLayout);
+        entryPanelLayout.setHorizontalGroup(
+            entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(entryPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addComponent(categoryLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(categoryField, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addComponent(addressLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(addressField))
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addComponent(phone1Label)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(phone1Field))
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addComponent(commentLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(commentField)))
+                .addGap(30, 30, 30)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(phone2Label)
+                    .addComponent(cityLabel)
+                    .addComponent(nameLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(cityField, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
+                            .addComponent(phone2Field))
+                        .addGap(30, 30, 30)
+                        .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(faxNumberLabel)
+                            .addComponent(stateLabel))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(faxNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGroup(entryPanelLayout.createSequentialGroup()
+                                .addComponent(stateField, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(63, 63, 63)
+                                .addComponent(zipLabel)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(zipField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                    .addComponent(nameField, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        entryPanelLayout.setVerticalGroup(
+            entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(entryPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(categoryLabel)
+                    .addComponent(categoryField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(nameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(nameLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(addressLabel)
+                    .addComponent(addressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(cityLabel)
+                    .addComponent(cityField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(stateLabel)
+                    .addComponent(stateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(zipLabel)
+                    .addComponent(zipField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(phone1Label)
+                    .addComponent(phone1Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(phone2Label)
+                    .addComponent(phone2Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(faxNumberLabel)
+                    .addComponent(faxNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(commentLabel)
+                    .addComponent(commentField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap())
+        );
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(entryPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(entryPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void nameFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nameFieldActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_nameFieldActionPerformed
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String args[]) {
+        /* Set the Nimbus look and feel */
+        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
+        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
+         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
+         */
+        try {
+            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
+                if ("Nimbus".equals(info.getName())) {
+                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
+                    break;
+                }
+            }
+        } catch (ClassNotFoundException ex) {
+            java.util.logging.Logger.getLogger(SearchEntry.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        } catch (InstantiationException ex) {
+            java.util.logging.Logger.getLogger(SearchEntry.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        } catch (IllegalAccessException ex) {
+            java.util.logging.Logger.getLogger(SearchEntry.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
+            java.util.logging.Logger.getLogger(SearchEntry.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        //</editor-fold>
+
+        /* Create and display the form */
+        java.awt.EventQueue.invokeLater(new Runnable() {
+            public void run() {
+                new SearchEntry().setVisible(true);
+            }
+        });
+    }
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JTextField addressField;
+    private javax.swing.JLabel addressLabel;
+    private javax.swing.JTextField categoryField;
+    private javax.swing.JLabel categoryLabel;
+    private javax.swing.JTextField cityField;
+    private javax.swing.JLabel cityLabel;
+    private javax.swing.JTextField commentField;
+    private javax.swing.JLabel commentLabel;
+    private javax.swing.JPanel entryPanel;
+    private javax.swing.JTextField faxNumberField;
+    private javax.swing.JLabel faxNumberLabel;
+    private javax.swing.JTextField nameField;
+    private javax.swing.JLabel nameLabel;
+    private javax.swing.JTextField phone1Field;
+    private javax.swing.JLabel phone1Label;
+    private javax.swing.JTextField phone2Field;
+    private javax.swing.JLabel phone2Label;
+    private javax.swing.JTextField stateField;
+    private javax.swing.JLabel stateLabel;
+    private javax.swing.JTextField zipField;
+    private javax.swing.JLabel zipLabel;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/RotationServiceRequest.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/RotationServiceRequest.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/RotationServiceRequest.java	(revision 82)
@@ -0,0 +1,780 @@
+package tmcsim.client.cadclientgui.screens;
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ * CURRENTLY NOT IN USE.
+ * @author Stuart
+ */
+public class RotationServiceRequest extends javax.swing.JFrame {
+
+    /**
+     * Creates new form RotationServiceRequest
+     */
+    public RotationServiceRequest() {
+        initComponents();
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
+    private void initComponents() {
+
+        jTabbedPane1 = new javax.swing.JTabbedPane();
+        pendingRequestsScroll = new javax.swing.JScrollPane();
+        pendingRequestsTable = new javax.swing.JTable();
+        activeRequestsScroll = new javax.swing.JScrollPane();
+        activeRequestsTable = new javax.swing.JTable();
+        requestInformationPane = new javax.swing.JPanel();
+        rotationProviderAreaCombo = new javax.swing.JComboBox();
+        rotationProviderAreaLabel = new javax.swing.JLabel();
+        rotationCategoryCombo = new javax.swing.JComboBox();
+        rotationCategoryLabel = new javax.swing.JLabel();
+        locationLabel = new javax.swing.JLabel();
+        incidentNumberField = new javax.swing.JTextField();
+        incidentNumberLabel = new javax.swing.JLabel();
+        requestNumberField = new javax.swing.JTextField();
+        requestNumberLabel = new javax.swing.JLabel();
+        enteredDateTimeCombo = new javax.swing.JComboBox();
+        enteredDateTimeLabel = new javax.swing.JLabel();
+        requestDateTimeCombo = new javax.swing.JComboBox();
+        requestDateTimeLabel = new javax.swing.JLabel();
+        onSceneDateTimeCombo = new javax.swing.JComboBox();
+        onSceneDateTimeLabel = new javax.swing.JLabel();
+        completedDateTimeCombo = new javax.swing.JComboBox();
+        completedDateTimeLabel = new javax.swing.JLabel();
+        locationCombo = new javax.swing.JComboBox();
+        caseNumberField = new javax.swing.JTextField();
+        caseNumberLabel = new javax.swing.JLabel();
+        cancelDateTimeCombo = new javax.swing.JComboBox();
+        cancelDateTimeLabel = new javax.swing.JLabel();
+        unitLabel = new javax.swing.JLabel();
+        unitField = new javax.swing.JTextField();
+        requestedByField = new javax.swing.JTextField();
+        requestedByLabel = new javax.swing.JLabel();
+        enteredByField = new javax.swing.JTextField();
+        enteredByLabel = new javax.swing.JLabel();
+        vehicleInformationPane = new javax.swing.JPanel();
+        yearField = new javax.swing.JTextField();
+        yearLabel = new javax.swing.JLabel();
+        makeLabel = new javax.swing.JLabel();
+        makeField = new javax.swing.JTextField();
+        modelField = new javax.swing.JTextField();
+        modelLabel = new javax.swing.JLabel();
+        styleField = new javax.swing.JTextField();
+        styleLabel = new javax.swing.JLabel();
+        colorField = new javax.swing.JTextField();
+        colorLabel = new javax.swing.JLabel();
+        licensePlateNumberLabel = new javax.swing.JLabel();
+        licensePlateNumberField = new javax.swing.JTextField();
+        licensePlateStateLabel = new javax.swing.JLabel();
+        licensePlateStateField = new javax.swing.JTextField();
+        licensePlateYearLabel = new javax.swing.JLabel();
+        licensePlateYearField = new javax.swing.JTextField();
+        releaseDateLabel = new javax.swing.JLabel();
+        releaseDateCombo = new javax.swing.JComboBox();
+        vinField = new javax.swing.JTextField();
+        vinLabel = new javax.swing.JLabel();
+        holdForEvidenceCheckBox = new javax.swing.JCheckBox();
+        rotationProviderInformation = new javax.swing.JPanel();
+        companyNameLabel = new javax.swing.JLabel();
+        companyNameField = new javax.swing.JTextField();
+        contactNameLabel = new javax.swing.JLabel();
+        contactNameField = new javax.swing.JTextField();
+        phone1Label = new javax.swing.JLabel();
+        phone1Field = new javax.swing.JTextField();
+        phone2Label = new javax.swing.JLabel();
+        phone2Field = new javax.swing.JTextField();
+        pagerLabel = new javax.swing.JLabel();
+        pagingProviderLabel = new javax.swing.JLabel();
+        pagerField = new javax.swing.JTextField();
+        pagingProviderCombo = new javax.swing.JComboBox();
+        overrideButton = new javax.swing.JButton();
+        skipButton = new javax.swing.JButton();
+        assignProviderButton = new javax.swing.JButton();
+        cancelRequestButton = new javax.swing.JButton();
+        providerOnSceneButton = new javax.swing.JButton();
+        providerCompleteButton = new javax.swing.JButton();
+        jPanel1 = new javax.swing.JPanel();
+        commentsTableScroll = new javax.swing.JScrollPane();
+        commentsTable = new javax.swing.JTable();
+        commentsFieldScroll = new javax.swing.JScrollPane();
+        commentsField = new javax.swing.JTextField();
+        addCommentButton = new javax.swing.JButton();
+        saveCommentButton = new javax.swing.JButton();
+        cancelCommentButton = new javax.swing.JButton();
+        searchButton = new javax.swing.JButton();
+        saveButton = new javax.swing.JButton();
+        cancelButton = new javax.swing.JButton();
+        exitButton = new javax.swing.JButton();
+        
+        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
+
+        pendingRequestsTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null, null, null, null, null, null, null},
+                {null, null, null, null, null, null, null},
+                {null, null, null, null, null, null, null},
+                {null, null, null, null, null, null, null}
+            },
+            new String [] {
+                "Entered", "Incident Number", "Unit", "Rotation Category", "Service Area", "Location", "Entered By"
+            }
+        ));
+        pendingRequestsScroll.setViewportView(pendingRequestsTable);
+
+        jTabbedPane1.addTab("Pending Requests", pendingRequestsScroll);
+
+        activeRequestsTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null, null, null, null, null, null},
+                {null, null, null, null, null, null},
+                {null, null, null, null, null, null},
+                {null, null, null, null, null, null}
+            },
+            new String [] {
+                "Requested", "Incident Number", "Unit", "Location", "Provider Name", "Entered By"
+            }
+        ));
+        activeRequestsScroll.setViewportView(activeRequestsTable);
+
+        jTabbedPane1.addTab("Active Requests", activeRequestsScroll);
+
+        rotationProviderAreaCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        rotationProviderAreaLabel.setText("Rotation Provider Area:");
+
+        rotationCategoryCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        rotationCategoryLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        rotationCategoryLabel.setText("Rotation Category:");
+
+        locationLabel.setText("Location:");
+
+        incidentNumberField.setText("jTextField2");
+
+        incidentNumberLabel.setText("Incident Number:");
+
+        requestNumberField.setText("jTextField3");
+
+        requestNumberLabel.setText("Request Number:");
+
+        enteredDateTimeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        enteredDateTimeLabel.setText("Entered Date/Time:");
+
+        requestDateTimeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        requestDateTimeLabel.setText("Request Date/Time:");
+
+        onSceneDateTimeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        onSceneDateTimeLabel.setText("OnScene Date/Time:");
+
+        completedDateTimeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        completedDateTimeLabel.setText("Completed Date/Time");
+
+        locationCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        caseNumberField.setText("jTextField1");
+
+        caseNumberLabel.setText("Case Number:");
+
+        cancelDateTimeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        cancelDateTimeLabel.setText("Cancel Date/Time");
+
+        unitLabel.setText("Unit:");
+
+        unitField.setText("jTextField4");
+
+        requestedByField.setText("jTextField5");
+
+        requestedByLabel.setText("Requested By:");
+
+        enteredByField.setText("jTextField6");
+        enteredByField.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                enteredByFieldActionPerformed(evt);
+            }
+        });
+
+        enteredByLabel.setText("Entered By:");
+
+        javax.swing.GroupLayout requestInformationPaneLayout = new javax.swing.GroupLayout(requestInformationPane);
+        requestInformationPane.setLayout(requestInformationPaneLayout);
+        requestInformationPaneLayout.setHorizontalGroup(
+            requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(requestInformationPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(rotationProviderAreaLabel)
+                    .addComponent(rotationCategoryLabel)
+                    .addComponent(locationLabel)
+                    .addComponent(incidentNumberLabel)
+                    .addComponent(requestNumberLabel)
+                    .addComponent(enteredDateTimeLabel)
+                    .addComponent(requestDateTimeLabel)
+                    .addComponent(onSceneDateTimeLabel)
+                    .addComponent(completedDateTimeLabel)
+                    .addComponent(caseNumberLabel)
+                    .addComponent(cancelDateTimeLabel)
+                    .addComponent(unitLabel)
+                    .addComponent(requestedByLabel)
+                    .addComponent(enteredByLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(enteredByField)
+                    .addComponent(cancelDateTimeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(caseNumberField)
+                    .addComponent(completedDateTimeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(onSceneDateTimeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(requestDateTimeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(enteredDateTimeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(requestNumberField)
+                    .addComponent(incidentNumberField)
+                    .addComponent(rotationCategoryCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(locationCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(unitField)
+                    .addGroup(requestInformationPaneLayout.createSequentialGroup()
+                        .addComponent(rotationProviderAreaCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, Short.MAX_VALUE))
+                    .addComponent(requestedByField))
+                .addContainerGap())
+        );
+        requestInformationPaneLayout.setVerticalGroup(
+            requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(requestInformationPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(rotationProviderAreaCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(rotationProviderAreaLabel))
+                .addGap(6, 6, 6)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(rotationCategoryCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(rotationCategoryLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(locationCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(locationLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(incidentNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentNumberLabel))
+                .addGap(0, 0, 0)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(requestNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(requestNumberLabel))
+                .addGap(0, 0, 0)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(caseNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(caseNumberLabel))
+                .addGap(0, 0, 0)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(enteredDateTimeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(enteredDateTimeLabel))
+                .addGap(0, 0, 0)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(requestDateTimeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(requestDateTimeLabel))
+                .addGap(0, 0, 0)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(onSceneDateTimeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(onSceneDateTimeLabel))
+                .addGap(0, 0, 0)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(completedDateTimeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(completedDateTimeLabel))
+                .addGap(0, 0, 0)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(cancelDateTimeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(cancelDateTimeLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(unitLabel)
+                    .addComponent(unitField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(0, 0, 0)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(requestedByField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(requestedByLabel))
+                .addGap(0, 0, 0)
+                .addGroup(requestInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(enteredByField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(enteredByLabel))
+                .addContainerGap(14, Short.MAX_VALUE))
+        );
+
+        yearField.setText("jTextField7");
+
+        yearLabel.setText("Year:");
+
+        makeLabel.setText("Make:");
+
+        makeField.setText("jTextField8");
+
+        modelField.setText("jTextField9");
+
+        modelLabel.setText("Model:");
+
+        styleField.setText("jTextField10");
+
+        styleLabel.setText("Style:");
+
+        colorField.setText("jTextField11");
+
+        colorLabel.setText("Color:");
+
+        licensePlateNumberLabel.setText("Lisence Plate Number:");
+
+        licensePlateNumberField.setText("jTextField12");
+
+        licensePlateStateLabel.setText("License Plate State:");
+
+        licensePlateStateField.setText("jTextField13");
+
+        licensePlateYearLabel.setText("License Plate Year:");
+
+        licensePlateYearField.setText("jTextField14");
+
+        releaseDateLabel.setText("Release Date:");
+
+        releaseDateCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        vinField.setText("jTextField15");
+
+        vinLabel.setText("VIN:");
+
+        holdForEvidenceCheckBox.setText("Hold for Evidence");
+
+        javax.swing.GroupLayout vehicleInformationPaneLayout = new javax.swing.GroupLayout(vehicleInformationPane);
+        vehicleInformationPane.setLayout(vehicleInformationPaneLayout);
+        vehicleInformationPaneLayout.setHorizontalGroup(
+            vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(vehicleInformationPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(makeLabel)
+                    .addComponent(yearLabel)
+                    .addComponent(modelLabel)
+                    .addComponent(styleLabel)
+                    .addComponent(colorLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addGroup(vehicleInformationPaneLayout.createSequentialGroup()
+                        .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(modelField)
+                            .addComponent(makeField)
+                            .addComponent(styleField, javax.swing.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE)
+                            .addComponent(yearField, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addGap(40, 40, 40)
+                        .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(licensePlateNumberLabel)
+                            .addComponent(licensePlateStateLabel)
+                            .addComponent(licensePlateYearLabel)
+                            .addComponent(releaseDateLabel)))
+                    .addGroup(vehicleInformationPaneLayout.createSequentialGroup()
+                        .addComponent(colorField, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(vinLabel)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(vinField)
+                    .addGroup(vehicleInformationPaneLayout.createSequentialGroup()
+                        .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(holdForEvidenceCheckBox)
+                            .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                .addComponent(licensePlateNumberField, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
+                                .addComponent(licensePlateStateField)
+                                .addComponent(licensePlateYearField, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addComponent(releaseDateCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                        .addGap(0, 0, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        vehicleInformationPaneLayout.setVerticalGroup(
+            vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(vehicleInformationPaneLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(yearField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(yearLabel)
+                    .addComponent(licensePlateNumberLabel)
+                    .addComponent(licensePlateNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(makeLabel)
+                    .addComponent(makeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(licensePlateStateLabel)
+                    .addComponent(licensePlateStateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(modelField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(modelLabel)
+                    .addComponent(licensePlateYearLabel)
+                    .addComponent(licensePlateYearField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(styleField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(styleLabel)
+                    .addComponent(releaseDateLabel)
+                    .addComponent(releaseDateCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(vehicleInformationPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(colorField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(colorLabel)
+                    .addComponent(vinField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(vinLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(holdForEvidenceCheckBox)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        companyNameLabel.setText("Company Name:");
+
+        companyNameField.setText("jTextField16");
+
+        contactNameLabel.setText("Contact Name:");
+
+        contactNameField.setText("jTextField17");
+
+        phone1Label.setText("Phone 1:");
+
+        phone1Field.setText("jTextField18");
+
+        phone2Label.setText("Phone 2:");
+
+        phone2Field.setText("jTextField19");
+
+        pagerLabel.setText("Pager:");
+
+        pagingProviderLabel.setText("Paging Provider:");
+
+        pagerField.setText("jTextField20");
+
+        pagingProviderCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        overrideButton.setText("Override");
+        overrideButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        skipButton.setText("Skip");
+
+        assignProviderButton.setText("<html>Assign<br>Provider </html>");
+        assignProviderButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
+        assignProviderButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        cancelRequestButton.setText("<html>Cancel<br>Request</html>");
+
+        providerOnSceneButton.setText("<html>Provider On<br>Scene</html>");
+        providerOnSceneButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        providerCompleteButton.setText("<html>Provider<br>Complete</html>");
+        providerCompleteButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        javax.swing.GroupLayout rotationProviderInformationLayout = new javax.swing.GroupLayout(rotationProviderInformation);
+        rotationProviderInformation.setLayout(rotationProviderInformationLayout);
+        rotationProviderInformationLayout.setHorizontalGroup(
+            rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(rotationProviderInformationLayout.createSequentialGroup()
+                .addGap(19, 19, 19)
+                .addGroup(rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(phone2Label)
+                    .addComponent(phone1Label)
+                    .addComponent(contactNameLabel)
+                    .addComponent(companyNameLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(companyNameField, javax.swing.GroupLayout.DEFAULT_SIZE, 190, Short.MAX_VALUE)
+                    .addComponent(contactNameField)
+                    .addComponent(phone1Field)
+                    .addComponent(phone2Field))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(pagingProviderLabel)
+                    .addComponent(pagerLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(pagerField)
+                    .addComponent(pagingProviderCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap())
+            .addGroup(rotationProviderInformationLayout.createSequentialGroup()
+                .addGap(30, 30, 30)
+                .addComponent(overrideButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(skipButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(assignProviderButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(cancelRequestButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(providerOnSceneButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(providerCompleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(46, Short.MAX_VALUE))
+        );
+        rotationProviderInformationLayout.setVerticalGroup(
+            rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(rotationProviderInformationLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(companyNameLabel)
+                    .addComponent(companyNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(pagerLabel)
+                    .addComponent(pagerField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(contactNameLabel)
+                    .addComponent(contactNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(pagingProviderLabel)
+                    .addComponent(pagingProviderCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(phone1Label)
+                    .addComponent(phone1Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(phone2Label)
+                    .addComponent(phone2Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(rotationProviderInformationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(skipButton, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)
+                    .addComponent(assignProviderButton, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+                    .addComponent(overrideButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(cancelRequestButton, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+                    .addComponent(providerOnSceneButton, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+                    .addComponent(providerCompleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
+                .addContainerGap())
+        );
+
+        commentsTable.setModel(new javax.swing.table.DefaultTableModel(
+            new Object [][] {
+                {null, null, null, null},
+                {null, null, null, null},
+                {null, null, null, null},
+                {null, null, null, null}
+            },
+            new String [] {
+                "Date", "Time", "Dispatcher", "Comment"
+            }
+        ));
+        commentsTableScroll.setViewportView(commentsTable);
+
+        commentsField.setText("jTextField21");
+        commentsFieldScroll.setViewportView(commentsField);
+
+        addCommentButton.setText("Add Comment");
+        addCommentButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+
+        saveCommentButton.setText("Save");
+
+        cancelCommentButton.setText("Cancel");
+
+        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
+        jPanel1.setLayout(jPanel1Layout);
+        jPanel1Layout.setHorizontalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(commentsTableScroll)
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addComponent(commentsFieldScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 392, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(addCommentButton, javax.swing.GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE)
+                            .addComponent(saveCommentButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(cancelCommentButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
+                .addContainerGap())
+        );
+        jPanel1Layout.setVerticalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(commentsTableScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(commentsFieldScroll)
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addComponent(addCommentButton)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(saveCommentButton)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(cancelCommentButton)
+                        .addGap(0, 0, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+
+        searchButton.setText("Search");
+
+        saveButton.setText("Save");
+
+        cancelButton.setText("Cancel");
+
+        exitButton.setText("Exit");
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(jTabbedPane1)
+            .addGroup(layout.createSequentialGroup()
+                .addComponent(requestInformationPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(vehicleInformationPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addComponent(rotationProviderInformation, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addContainerGap())))
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(searchButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(saveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap())
+            .addGroup(layout.createSequentialGroup()
+                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 0, Short.MAX_VALUE))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(vehicleInformationPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(rotationProviderInformation, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(requestInformationPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(exitButton)
+                    .addComponent(cancelButton)
+                    .addComponent(saveButton)
+                    .addComponent(searchButton))
+                .addGap(5, 5, 5))
+        );
+
+        pack();
+    }// </editor-fold>                        
+
+    private void enteredByFieldActionPerformed(java.awt.event.ActionEvent evt) {                                               
+        // TODO add your handling code here:
+    }                                              
+    
+    /* 
+     * Makes screen visible.
+     */
+    public void open(){
+        setVisible(true);
+    }
+    
+    /*
+     * Hides screen.
+     */
+    public void close(){
+        setVisible(false);
+    }
+    
+    // Variables declaration - do not modify                     
+    private javax.swing.JScrollPane activeRequestsScroll;
+    private javax.swing.JTable activeRequestsTable;
+    private javax.swing.JButton addCommentButton;
+    private javax.swing.JButton assignProviderButton;
+    private javax.swing.JButton cancelButton;
+    private javax.swing.JButton cancelCommentButton;
+    private javax.swing.JComboBox cancelDateTimeCombo;
+    private javax.swing.JLabel cancelDateTimeLabel;
+    private javax.swing.JButton cancelRequestButton;
+    private javax.swing.JTextField caseNumberField;
+    private javax.swing.JLabel caseNumberLabel;
+    private javax.swing.JTextField colorField;
+    private javax.swing.JLabel colorLabel;
+    private javax.swing.JTextField commentsField;
+    private javax.swing.JScrollPane commentsFieldScroll;
+    private javax.swing.JTable commentsTable;
+    private javax.swing.JScrollPane commentsTableScroll;
+    private javax.swing.JTextField companyNameField;
+    private javax.swing.JLabel companyNameLabel;
+    private javax.swing.JComboBox completedDateTimeCombo;
+    private javax.swing.JLabel completedDateTimeLabel;
+    private javax.swing.JTextField contactNameField;
+    private javax.swing.JLabel contactNameLabel;
+    private javax.swing.JTextField enteredByField;
+    private javax.swing.JLabel enteredByLabel;
+    private javax.swing.JComboBox enteredDateTimeCombo;
+    private javax.swing.JLabel enteredDateTimeLabel;
+    private javax.swing.JButton exitButton;
+    private javax.swing.JCheckBox holdForEvidenceCheckBox;
+    private javax.swing.JTextField incidentNumberField;
+    private javax.swing.JLabel incidentNumberLabel;
+    private javax.swing.JPanel jPanel1;
+    private javax.swing.JTabbedPane jTabbedPane1;
+    private javax.swing.JTextField licensePlateNumberField;
+    private javax.swing.JLabel licensePlateNumberLabel;
+    private javax.swing.JTextField licensePlateStateField;
+    private javax.swing.JLabel licensePlateStateLabel;
+    private javax.swing.JTextField licensePlateYearField;
+    private javax.swing.JLabel licensePlateYearLabel;
+    private javax.swing.JComboBox locationCombo;
+    private javax.swing.JLabel locationLabel;
+    private javax.swing.JTextField makeField;
+    private javax.swing.JLabel makeLabel;
+    private javax.swing.JTextField modelField;
+    private javax.swing.JLabel modelLabel;
+    private javax.swing.JComboBox onSceneDateTimeCombo;
+    private javax.swing.JLabel onSceneDateTimeLabel;
+    private javax.swing.JButton overrideButton;
+    private javax.swing.JTextField pagerField;
+    private javax.swing.JLabel pagerLabel;
+    private javax.swing.JComboBox pagingProviderCombo;
+    private javax.swing.JLabel pagingProviderLabel;
+    private javax.swing.JScrollPane pendingRequestsScroll;
+    private javax.swing.JTable pendingRequestsTable;
+    private javax.swing.JTextField phone1Field;
+    private javax.swing.JLabel phone1Label;
+    private javax.swing.JTextField phone2Field;
+    private javax.swing.JLabel phone2Label;
+    private javax.swing.JButton providerCompleteButton;
+    private javax.swing.JButton providerOnSceneButton;
+    private javax.swing.JComboBox releaseDateCombo;
+    private javax.swing.JLabel releaseDateLabel;
+    private javax.swing.JComboBox requestDateTimeCombo;
+    private javax.swing.JLabel requestDateTimeLabel;
+    private javax.swing.JPanel requestInformationPane;
+    private javax.swing.JTextField requestNumberField;
+    private javax.swing.JLabel requestNumberLabel;
+    private javax.swing.JTextField requestedByField;
+    private javax.swing.JLabel requestedByLabel;
+    private javax.swing.JComboBox rotationCategoryCombo;
+    private javax.swing.JLabel rotationCategoryLabel;
+    private javax.swing.JComboBox rotationProviderAreaCombo;
+    private javax.swing.JLabel rotationProviderAreaLabel;
+    private javax.swing.JPanel rotationProviderInformation;
+    private javax.swing.JButton saveButton;
+    private javax.swing.JButton saveCommentButton;
+    private javax.swing.JButton searchButton;
+    private javax.swing.JButton skipButton;
+    private javax.swing.JTextField styleField;
+    private javax.swing.JLabel styleLabel;
+    private javax.swing.JTextField unitField;
+    private javax.swing.JLabel unitLabel;
+    private javax.swing.JPanel vehicleInformationPane;
+    private javax.swing.JTextField vinField;
+    private javax.swing.JLabel vinLabel;
+    private javax.swing.JTextField yearField;
+    private javax.swing.JLabel yearLabel;
+    // End of variables declaration                   
+}
Index: /branches/trunk/src/tmcsim/client/cadclientgui/screens/PowerlineSearch.java
===================================================================
--- /branches/trunk/src/tmcsim/client/cadclientgui/screens/PowerlineSearch.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/cadclientgui/screens/PowerlineSearch.java	(revision 82)
@@ -0,0 +1,300 @@
+package tmcsim.client.cadclientgui.screens;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.rmi.RemoteException;
+import java.util.LinkedList;
+
+import javax.swing.BoxLayout;
+import javax.swing.GroupLayout;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.JTextField;
+
+import tmcsim.client.cadclientgui.data.CardfileDataObject;
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ * CURRENTLY NOT IN USE.
+ * @author Stuart
+ */
+public class PowerlineSearch extends javax.swing.JFrame {
+    
+    /**
+     * Creates new form PowerlineSearch
+     */
+    public PowerlineSearch(String search) {
+        initComponents();
+        populateEntries(search);
+        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+        setVisible(true);
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jScrollPane1 = new javax.swing.JScrollPane();
+        mainPanel = new javax.swing.Box(BoxLayout.Y_AXIS);
+        cardfileSearchLabel = new javax.swing.JLabel();
+        entryPanel = new javax.swing.JPanel();
+        categoryLabel = new javax.swing.JLabel();
+        addressLabel = new javax.swing.JLabel();
+        phone1Label = new javax.swing.JLabel();
+        commentLabel = new javax.swing.JLabel();
+        categoryField = new javax.swing.JTextField();
+        addressField = new javax.swing.JTextField();
+        phone1Field = new javax.swing.JTextField();
+        commentField = new javax.swing.JTextField();
+        cityLabel = new javax.swing.JLabel();
+        phone2Label = new javax.swing.JLabel();
+        phone2Field = new javax.swing.JTextField();
+        cityField = new javax.swing.JTextField();
+        nameField = new javax.swing.JTextField();
+        nameLabel = new javax.swing.JLabel();
+        stateLabel = new javax.swing.JLabel();
+        faxNumberLabel = new javax.swing.JLabel();
+        faxNumberField = new javax.swing.JTextField();
+        stateField = new javax.swing.JTextField();
+        zipLabel = new javax.swing.JLabel();
+        zipField = new javax.swing.JTextField();
+        printButton = new javax.swing.JButton();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+
+        cardfileSearchLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
+        cardfileSearchLabel.setText("Cardfile Search");
+        cardfileSearchLabel.setHorizontalAlignment(JLabel.CENTER);
+        createLabels();
+
+        mainPanel.add(cardfileSearchLabel);
+
+        jScrollPane1.setViewportView(mainPanel);
+
+        printButton.setText("Print");
+        printButton.setEnabled(false);
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 792, Short.MAX_VALUE)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addGap(0, 0, Short.MAX_VALUE)
+                .addComponent(printButton, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 364, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(5, 5, 5)
+                .addComponent(printButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(0, 5, Short.MAX_VALUE))
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    public void addEntry(CardfileDataObject cfdo){
+        createLabels();
+        categoryField = new JTextField(cfdo.getCategory());
+        addressField = new JTextField(cfdo.getAddress());
+        phone1Field = new JTextField(cfdo.getPhone1());
+        if(cfdo.getCommentsTableFields().size() > 0){
+            String[] firstComment = cfdo.getCommentsTableFields().get(0);
+            commentField = new JTextField(firstComment[3]);
+        }
+        else{
+            commentField = new JTextField("");
+        }
+        phone2Field = new JTextField(cfdo.getPhone2());
+        cityField = new JTextField(cfdo.getCity());
+        nameField = new JTextField(cfdo.getName());
+        faxNumberField = new JTextField(cfdo.getFax());
+        stateField = new JTextField(cfdo.getState());
+        zipField = new JTextField(cfdo.getZip());
+        
+        entryPanel = new JPanel();
+        javax.swing.GroupLayout entryPanelLayout = new javax.swing.GroupLayout(entryPanel);
+        entryPanel.setLayout(entryPanelLayout);
+        entryPanelLayout.setHorizontalGroup(
+            entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(entryPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addComponent(categoryLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(categoryField, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addComponent(addressLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(addressField))
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addComponent(phone1Label)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(phone1Field))
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addComponent(commentLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(commentField)))
+                .addGap(30, 30, 30)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(phone2Label)
+                    .addComponent(cityLabel)
+                    .addComponent(nameLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(entryPanelLayout.createSequentialGroup()
+                        .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(cityField, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
+                            .addComponent(phone2Field))
+                        .addGap(30, 30, 30)
+                        .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(faxNumberLabel)
+                            .addComponent(stateLabel))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(faxNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGroup(entryPanelLayout.createSequentialGroup()
+                                .addComponent(stateField, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(63, 63, 63)
+                                .addComponent(zipLabel)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(zipField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                    .addComponent(nameField, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(56, Short.MAX_VALUE))
+        );
+        entryPanelLayout.setVerticalGroup(
+            entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(entryPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(categoryLabel)
+                    .addComponent(categoryField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(nameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(nameLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(addressLabel)
+                    .addComponent(addressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(cityLabel)
+                    .addComponent(cityField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(stateLabel)
+                    .addComponent(stateField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(zipLabel)
+                    .addComponent(zipField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(phone1Label)
+                    .addComponent(phone1Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(phone2Label)
+                    .addComponent(phone2Field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(faxNumberLabel)
+                    .addComponent(faxNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addGroup(entryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(commentLabel)
+                    .addComponent(commentField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap())
+        );
+        
+        javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
+        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
+        jPanel1.setLayout(jPanel1Layout);
+        jPanel1Layout.setHorizontalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(entryPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+        jPanel1Layout.setVerticalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(entryPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(1, Short.MAX_VALUE))
+        );
+        
+        mainPanel.add(new JSeparator());
+        mainPanel.add(jPanel1);
+        
+    }
+    
+    public void createLabels(){
+        categoryLabel = new JLabel("Category:");
+
+        addressLabel = new JLabel("Address:");
+
+        phone1Label = new JLabel("Phone 1:");
+
+        commentLabel = new JLabel("Comment:");
+
+        cityLabel = new JLabel("City:");
+
+        phone2Label = new JLabel("Phone 2:");
+
+        nameLabel = new JLabel("Name:");
+
+        stateLabel = new JLabel("State:");
+
+        faxNumberLabel = new JLabel("FaxNumber:");
+
+        zipLabel = new JLabel("Zip:");
+    }
+    
+    /**
+     * Populates the screen with search entries.
+     */
+    public void populateEntries(String search) {
+        mainPanel.removeAll();
+        mainPanel.add(cardfileSearchLabel);
+        try {
+            LinkedList<CardfileDataObject> list = ScreenManager.theCoordinator.getSearchList(search);
+            for(int i = 0; i < list.size(); i++){
+                addEntry(list.get(i));
+            }
+        } catch (RemoteException e) {
+            e.printStackTrace();
+        }
+    }
+    
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JTextField addressField;
+    private javax.swing.JLabel addressLabel;
+    private javax.swing.JLabel cardfileSearchLabel;
+    private javax.swing.JTextField categoryField;
+    private javax.swing.JLabel categoryLabel;
+    private javax.swing.JTextField cityField;
+    private javax.swing.JLabel cityLabel;
+    private javax.swing.JTextField commentField;
+    private javax.swing.JLabel commentLabel;
+    private javax.swing.JPanel entryPanel;
+    private javax.swing.JTextField faxNumberField;
+    private javax.swing.JLabel faxNumberLabel;
+    private javax.swing.Box mainPanel;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextField nameField;
+    private javax.swing.JLabel nameLabel;
+    private javax.swing.JTextField phone1Field;
+    private javax.swing.JLabel phone1Label;
+    private javax.swing.JTextField phone2Field;
+    private javax.swing.JLabel phone2Label;
+    private javax.swing.JButton printButton;
+    private javax.swing.JTextField stateField;
+    private javax.swing.JLabel stateLabel;
+    private javax.swing.JTextField zipField;
+    private javax.swing.JLabel zipLabel;
+    // End of variables declaration//GEN-END:variables
+}
Index: /branches/trunk/src/tmcsim/client/package.html
===================================================================
--- /branches/trunk/src/tmcsim/client/package.html	(revision 82)
+++ /branches/trunk/src/tmcsim/client/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains the classes for the CAD Client.
+  </body>
+</html>
Index: /branches/trunk/src/tmcsim/client/CADClientSocket.java
===================================================================
--- /branches/trunk/src/tmcsim/client/CADClientSocket.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/CADClientSocket.java	(revision 82)
@@ -0,0 +1,88 @@
+package tmcsim.client;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+
+import tmcsim.common.SimulationException;
+
+
+/**
+ * CADClientSocket contains the Socket used to communication between the CAD 
+ * Client and the CAD Simulator. This class uses the host and port parameter 
+ * values to connect to the CAD Simulator's ServerSocket. I/O streams are 
+ * created from this connection to transfer all data between applications.
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:41 $ $Revision: 1.3 $
+ */
+class CADClientSocket { 
+    
+    /** Socket used to communicate to the CAD Simulator. */
+    private Socket clientSocket;
+          
+    /**
+     * Constructor accepting the hostname and port for the CAD Simulator's socket.
+     *
+     * @param newhost Target host name for CAD Simulator.
+     * @param newport Target port for CAD Simulator.
+     * @throws SimulationException if there is an exception in connecting to the CAD Simulator.
+     */    
+    CADClientSocket(String newhost, int newport) throws SimulationException {
+       
+        try {
+            clientSocket = new Socket();
+            clientSocket.connect(new InetSocketAddress(newhost, newport), 5000); 
+        } 
+        catch (IOException ioe) {
+            throw new SimulationException(SimulationException.CAD_SIM_CONNECT, ioe);
+        }
+        
+    }   
+   
+    /**
+     * Returns a reference to the input stream associated with this socket.
+     *
+     * @return InputStream Input Stream for socket.
+     * @throws SimulationException if there is an exception in opening the input stream.
+     */     
+    public InputStream getInputStream() throws SimulationException {
+        try {
+            return clientSocket.getInputStream();
+        } 
+        catch (IOException ioe) {
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, ioe);
+        }
+    }
+    
+    /**
+     * Returns a reference to the output stream associated with this socket.
+     *
+     * @return OutputStream Output Stream for socket.
+     * @throws SimulationException if there is an exception in opening the output stream.
+     */     
+    public OutputStream getOutputStream() throws SimulationException {
+        try {
+            return clientSocket.getOutputStream();
+        } 
+        catch (IOException ioe) {
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, ioe);
+        }
+    }           
+      
+    /**
+     * Closes the Socket.
+     * 
+     * @throws SimulationException if there is an exception in closing the socket.
+     */
+    public void closeSocket() throws SimulationException {
+        try {
+            clientSocket.close(); 
+        } 
+        catch (IOException ioe) {
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, ioe);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/client/CADClientView.java
===================================================================
--- /branches/trunk/src/tmcsim/client/CADClientView.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/CADClientView.java	(revision 82)
@@ -0,0 +1,777 @@
+package tmcsim.client;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextPane;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import tmcsim.cadmodels.BlankScreenModel;
+import tmcsim.cadmodels.CADScreenModel;
+import tmcsim.cadmodels.IncidentBoardModel;
+import tmcsim.cadmodels.IncidentInquiryModel;
+import tmcsim.cadmodels.IncidentSummaryModel;
+import tmcsim.cadmodels.RoutedMessageModel;
+import tmcsim.client.cadscreens.IB_IncidentBoard;
+import tmcsim.client.cadscreens.II_IncidentInquiry;
+import tmcsim.client.cadscreens.SA_IncidentSummary;
+import tmcsim.client.cadscreens.TO_RoutedMessage;
+import tmcsim.client.cadscreens.view.CADCommandLineView;
+import tmcsim.client.cadscreens.view.CADFooterView;
+import tmcsim.client.cadscreens.view.CADMainView;
+import tmcsim.common.ObserverMessage;
+import tmcsim.common.CADEnums.ARROW;
+import tmcsim.common.CADEnums.CADScreenNum;
+import tmcsim.common.CADEnums.CAD_ERROR;
+import tmcsim.common.CADEnums.CAD_KEYS;
+import tmcsim.common.CADProtocol.CAD_CLIENT_CMD;
+
+/**
+ * The CADClientView class is the view component to the CAD Client application.
+ * The CADSCreen is displayed with three separate view components: Command Line,
+ * Main Text Area, and Footer.  User input is handled by the Command Line Pane.
+ * Any commands are sent to the model which are then transmitted to the
+ * CAD Simulator.  The view keeps track of current CAD Screen Number and the
+ * current page being displayed on each screen.  This allows for the screen
+ * refresh and cycle commands to return the screen to its previous page. 
+ * 
+ * This view class observers the CADClientModel, listening for updates
+ * from the CAD Simulator.  Updates include new CADScreenModel objects notifying 
+ * that a new screen is to be displayed.  Other update data includes the current 
+ * CAD time, number of routed messages, screen update map, and information messages.  
+ * These are all displayed in the CAD Footer.
+ * 
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2009/04/20 17:58:27 $ $Revision: 1.7 $
+ */
+@SuppressWarnings("serial")
+public class CADClientView extends JFrame implements KeyListener, Observer {
+    
+    /** Error Logger. */
+    private static Logger cadLogger = Logger.getLogger("tmcsim.client");
+    
+    /** Reference to the CADClient model object. */
+    private CADClientModel theModel = null;
+      
+    /** View pane for the CAD Screen command line area. */
+    private CADCommandLineView CADCommandLinePane = null;
+      
+    /** View pane for the CAD Screen main area. */
+    private CADMainView        CADMainPane        = null;
+      
+    /** View pane for the CAD Screen footer area. */
+    private CADFooterView      CADFooterPane      = null;    
+    
+    /** CAD Command Line Parser.  */
+    private CADCommandParser cmdParser;
+
+    /** Boolean flag to designate whether the shift key is being pressed. */
+    private boolean shiftKeyPressed = false;
+          
+    /** Current CAD Screen number. */
+    private CADScreenNum currentScreenNum = null;
+    
+    /** Map of CADScreen numbers and the current page displayed on that screen. */
+    private TreeMap<CADScreenNum, Integer> pageLocationMap = null;
+    
+    /** Flag designating whether the screen's page location has been saved. */
+    private boolean pageLocationSaved = false;
+
+    /**
+     * Constructor. Build panes, add key listeners, and set up observer
+     * relationship between the footer and main panes.
+     * 
+     * @param position
+     *            The CAD position for this client terminal.
+     */
+    public CADClientView(CADClientModel mod) {
+        super("CAD Client");
+        theModel = mod;
+        
+        
+        cmdParser = new CADCommandParser();
+        
+        //Build and initialize all initial screens to the first page.
+        pageLocationMap = new TreeMap<CADScreenNum, Integer>();
+        for(CADScreenNum screen : CADScreenNum.values()) 
+        {
+            pageLocationMap.put(screen, 1);
+        }
+        
+        currentScreenNum = CADScreenNum.orderedList().get(0);
+        
+        buildPanes();       
+        buildPanels();
+
+        cmdLineTextPane.addKeyListener(this);
+        mainTextPane.addKeyListener(this);
+        footerTextPane.addKeyListener(this);
+    
+
+        CADMainPane.addObserver(CADFooterPane);
+        
+    }
+    
+    /**
+     * Build the command line, main, and footer text panes.
+     */
+    private void buildPanes() {
+
+        cmdLineTextPane    = new JTextPane();
+        cmdLineTextPane.setSize(new Dimension(730, 50)); 
+        cmdLineTextPane.setMinimumSize(new Dimension(730, 50));
+        cmdLineTextPane.setMaximumSize(new Dimension(730, 50));
+        cmdLineTextPane.setBorder(BorderFactory.createLineBorder(Color.black));
+
+        cmdLineTextPane.setBackground(Color.black);
+        cmdLineTextPane.setEditable(false);
+        CADCommandLinePane = new CADCommandLineView(cmdLineTextPane);
+        
+        mainTextPane = new JTextPane();
+        mainTextPane.setSize(new Dimension(730, 455));
+        mainTextPane.setMaximumSize(new Dimension(730, 455));
+        mainTextPane.setMinimumSize(new Dimension(730, 455));
+        mainTextPane.setBorder(BorderFactory.createLineBorder(Color.black));   
+        mainTextPane.setBackground(Color.black);
+        mainTextPane.setEditable(false);  
+        CADMainPane  = new CADMainView(mainTextPane.getDocument());      
+
+        footerTextPane = new JTextPane();
+        footerTextPane.setSize(new Dimension(730, 95)); 
+        footerTextPane.setMaximumSize(new Dimension(730, 95));
+        footerTextPane.setMinimumSize(new Dimension(730, 95));
+        footerTextPane.setBorder(BorderFactory.createLineBorder(Color.black));    
+        footerTextPane.setBackground(Color.black);
+        footerTextPane.setEditable(false);
+        CADFooterPane  = new CADFooterView(footerTextPane.getDocument());
+    }
+    
+    
+    /**
+     * Build the command line, main, and footer panels.
+     */
+    private void buildPanels() {
+        
+        cmdLinePanel = new JPanel();
+        cmdLinePanel.setSize(new Dimension(800, 50)); 
+        cmdLinePanel.setMinimumSize(new Dimension(800, 50));
+        cmdLinePanel.setMaximumSize(new Dimension(800, 50));
+        cmdLinePanel.setBackground(Color.black);
+        
+        Box cmdLineBox = new Box(BoxLayout.Y_AXIS);
+        cmdLineBox.add(Box.createHorizontalStrut(35));
+        cmdLineBox.add(cmdLineTextPane);
+        cmdLineBox.add(Box.createHorizontalStrut(35));
+        
+        cmdLinePanel.add(cmdLineBox);
+        
+        //***************************************************//
+        
+        mainPanel    = new JPanel();
+        mainPanel.setSize(new Dimension(800, 455)); 
+        mainPanel.setMaximumSize(new Dimension(800, 455));
+        mainPanel.setMinimumSize(new Dimension(800, 455));
+        mainPanel.setBackground(Color.black);
+       
+        
+        Box mainBox = new Box(BoxLayout.Y_AXIS);
+        mainBox.add(Box.createHorizontalStrut(35));
+        mainBox.add(mainTextPane);
+        mainBox.add(Box.createHorizontalStrut(35));
+        
+        mainPanel.add(mainBox);
+
+        //***************************************************//
+        
+        footerPanel  = new JPanel();        
+        footerPanel.setSize(new Dimension(800, 95)); 
+        footerPanel.setMaximumSize(new Dimension(800, 95));
+        footerPanel.setMinimumSize(new Dimension(800, 95));
+        footerPanel.setBackground(Color.black);
+        
+        Box footerBox = new Box(BoxLayout.Y_AXIS);
+        footerBox.add(Box.createHorizontalStrut(35));
+        footerBox.add(footerTextPane);
+        footerBox.add(Box.createHorizontalStrut(35));
+        
+        footerPanel.add(footerBox);
+        
+    }
+        
+    
+    /**
+     * Method adds the three CAD Screen components (CommandLine, MainTextArea, 
+     * Footer) to this view class.  The background is set to black, resized
+     * to 800x600, and shown to the screen.
+     */
+    public void initWindow() {
+        add(initBox());
+
+        addKeyListener(this);
+        setBackground(Color.black);     
+        setSize(new Dimension(800, 600));
+        setUndecorated(true);  
+        setDefaultCloseOperation(EXIT_ON_CLOSE);
+        //setVisible(true);       
+                
+    }
+    
+    /**
+     * Method contructs a box out of the three CAD Screen components:
+     * CommandLine, MainTextArea, Footer.  The Command Line panel is placed
+     * above the main text area panel, which is above the footer panel.
+     *
+     * @return Box Box containing all three panels.
+     */
+    public Box initBox() {
+        Box theBox = new Box(BoxLayout.Y_AXIS);
+        theBox.add(cmdLinePanel);
+        theBox.add(mainPanel);
+        theBox.add(footerPanel);    
+        theBox.setBackground(Color.black);
+        
+        return theBox;
+    }
+
+    /**  
+     * This method is called by the implemented KeyListener whenever a key is pressed.  The following
+     * keystrokes are listened for in this method.  Each keystroke pressed is referenced by the keycode 
+     * for the associated key.  These key codes are defined in the CADProtocol class.
+     *
+     * 
+     *<table cellpadding="2" cellspacing="2" border="1"
+     * style="text-align: left; width: 250px;">
+     *  <tbody>
+     *    <tr>
+     *      <th>CAD Protocol Command<br></th>
+     *      <th>Action Taken<br></th>
+     *    </tr>
+     *    <tr>
+     *      <td>SHIFT_KEY<br></td>
+     *      <td>Set shiftKeyPressed flag to true.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>COMMAND_LINE_CLEAR<br></td>
+     *      <td>If the shift key is pressed, clear the current CAD Screen's command line.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>SCREEN_CLEAR<br></td>
+     *      <td>If the shift key is pressed, transmit the SCREEN_CLEAR
+     *          command as a TERMINAL_FUNCTION to the CAD Simulator<br></td>
+     *   </tr>
+     *  </tbody>
+     *</table>
+     *
+     * @param e KeyEvent
+     */
+    public void keyPressed(KeyEvent evt) { 
+       //System.out.println("keyPressed" + evt.getKeyCode());   
+       
+        switch(CAD_KEYS.fromValue(CAD_KEYS.keyboard_type, evt.getKeyCode())) {  
+            case  SHIFT_KEY: 
+                shiftKeyPressed = true;
+                break; 
+                
+            case COMMAND_LINE_CLEAR:        
+                if(shiftKeyPressed)  {
+                    CADCommandLinePane.clearCommandLine();
+                }
+                break;
+    
+            case SCREEN_CLEAR:     
+                if(shiftKeyPressed) {          
+                    try {
+                        Document cmdDoc = DocumentBuilderFactory.newInstance()
+                            .newDocumentBuilder().newDocument();
+                        Element cmdElem = cmdDoc.createElement(
+                                CAD_CLIENT_CMD.TERMINAL_FUNCTION.type);                 
+                        cmdElem.appendChild(cmdDoc.createTextNode(
+                                CAD_KEYS.keyboard_type + ":" + 
+                                String.valueOf(evt.getKeyCode())));                 
+                        cmdDoc.appendChild(cmdElem);            
+                        theModel.transmitCommand(cmdDoc);                           
+                    } catch (Exception e) {
+                        cadLogger.logp(Level.SEVERE, "CADClientView", "keyPressed()",
+                                "Exception in sending screen clear command.", e);
+                    }
+                }
+                break;      
+        }
+    }
+        
+    /**
+     * This method is called by the implemented KeyListener whenever a key is released.  The following
+     * keystrokes are listened for in this method.  Each keystroke released is referenced by the keycode 
+     * for the associated key.  These key codes are defined in the CADProtocol class.
+     *
+     *<table cellpadding="2" cellspacing="2" border="1"
+     * style="text-align: left; width: 250px;">
+     *  <tbody>
+     *    <tr>
+     *      <th>CAD Protocol Command<br></th>
+     *      <th>Action Taken<br></th>
+     *    </tr>
+     *    <tr>
+     *      <td>SHIFT_KEY<br></td>
+     *      <td>Set the shiftKeyPressed flag to false.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>CYCLE<br></td>
+     *      <td>Preserve the current page number to return the screen to the same location after 
+     *          the cycle.  Transmit the current command line to the CAD Simulator with a 
+     *          SAVE_COMMAND_LINE message type.  Transmit the CYCLE command as a 
+     *          TERMINAL_FUNCTION to the CAD Simulator.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>REFRESH<br></td>
+     *      <td>Preserve the current page number to return the screen to the same location after 
+     *          the refresh.  Transmit the current command line to the CAD Simulator with a 
+     *          SAVE_COMMAND_LINE message type.  Transmit the CYCLE command as a 
+     *          TERMINAL_FUNCTION to the CAD Simulator.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>PGDN</td>
+     *      <td>Notify the main pane object of the received page down command.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>PGUP</td>
+     *      <td>Notify the main pane object of the received page up command.<br> </td>
+     *    </tr>
+     *    <tr>
+     *      <td>LEFT_ARROW</td>
+     *      <td>Notify the command line pane object of the received left arrow.<br> </td>
+     *    </tr>
+     *    <tr>
+     *      <td>UP_ARROW</td>
+     *      <td>Notify the command line pane object of the received up arrow.<br> </td>
+     *    </tr>
+     *    <tr>
+     *      <td>RIGHT_ARROW</td>
+     *      <td>Notify the command line pane object of the received right arrow.<br> </td>
+     *    </tr>
+     *    <tr>
+     *      <td>DOWN_ARROW</td>
+     *      <td>Notify the command line pane object of the received down arrow.<br> </td>
+     *    </tr>
+     *    <tr>
+     *      <td>COMMAND_LINE_TX<br> </td>
+     *      <td>Parse the current command line and create an XMLWriter with the 
+     *          converted XML representation of the command line data.
+     *          Transmit the command line as a TERMINAL_CMD_LINE message to 
+     *          the CAD Simulator.  Clear the current CAD screen's command line.
+     *          If there is an error in parsing, show the corresponding error
+     *          message and clear the command line.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>NEXT_QUEUE<br></td>
+     *      <td>Transmit the NEXT_QUEUE command as a TERMINAL_FUNCTION to the CAD Simulator.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>DELETE_QUEUE<br></td>
+     *      <td>Transmit the DELETE_QUEUE command as a TERMINAL_FUNCTION to the CAD Simulator.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>PREV_QUEUE<br></td>
+     *      <td>Transmit the PREV_QUEUE command as a TERMINAL_FUNCTION to the CAD Simulator.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>BACKSPACE<br></td>
+     *      <td>Notify the command line pane of the received backspace command.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>ENTER<br></td>
+     *      <td>Currently, do nothing<br></td>
+     *    </tr>
+     *  </tbody>
+     *</table>
+     *
+     * @param e KeyEvent
+     */        
+    public void keyReleased(KeyEvent evt) {
+       //System.out.println("keyReleased" + evt.getKeyCode());       
+        
+        switch(CAD_KEYS.fromValue(CAD_KEYS.keyboard_type, evt.getKeyCode())) {  
+            
+            case  SHIFT_KEY: 
+                shiftKeyPressed = false;
+                break; 
+
+            case REFRESH:
+            case CYCLE: 
+
+                pageLocationSaved = true;
+                pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+
+                try {
+                    Document cmdDoc = DocumentBuilderFactory.newInstance()
+                            .newDocumentBuilder().newDocument();
+                    Element cmdElem = cmdDoc.createElement(
+                            CAD_CLIENT_CMD.SAVE_COMMAND_LINE.type);                 
+                    cmdElem.appendChild(cmdDoc.createTextNode(
+                            CADCommandLinePane.getCommandLine()));
+                    cmdDoc.appendChild(cmdElem);                                    
+                    theModel.transmitCommand(cmdDoc);
+                                        
+                    cmdDoc = DocumentBuilderFactory.newInstance()
+                            .newDocumentBuilder().newDocument();
+                    cmdElem = cmdDoc.createElement(
+                            CAD_CLIENT_CMD.TERMINAL_FUNCTION.type);                 
+                    cmdElem.appendChild(cmdDoc.createTextNode(
+                            CAD_KEYS.keyboard_type + ":" + 
+                            String.valueOf(evt.getKeyCode())));                 
+                    cmdDoc.appendChild(cmdElem);            
+                    theModel.transmitCommand(cmdDoc);           
+                    
+                } catch (Exception e) {
+                    cadLogger.logp(Level.SEVERE, "CADClientView", 
+                            "keyReleased()",
+                            "Exception in sending cycle command.", e);
+                }
+                break;                  
+            
+            case PGDN:
+               
+               CADMainPane.pageDown();
+               break;
+            
+            case PGUP: 
+            
+               CADMainPane.pageUp();
+               break;  
+               
+            case LEFT_ARROW: 
+            
+               CADCommandLinePane.receiveArrow(ARROW.LEFT);
+               break;  
+               
+            case UP_ARROW: 
+            
+               CADCommandLinePane.receiveArrow(ARROW.UP);
+               break;  
+    
+            case RIGHT_ARROW: 
+            
+               CADCommandLinePane.receiveArrow(ARROW.RIGHT);
+               break;  
+    
+            case DOWN_ARROW: 
+            
+               CADCommandLinePane.receiveArrow(ARROW.DOWN);
+               break;                                                  
+    
+            case COMMAND_LINE_TX:
+                   
+                try {
+                    Document cmdDoc = DocumentBuilderFactory.newInstance()
+                        .newDocumentBuilder().newDocument();
+                    Element cmdElem = cmdDoc.createElement(CAD_CLIENT_CMD.TERMINAL_CMD_LINE.type);
+                    
+                    cmdParser.parseCommand(cmdElem, CADCommandLinePane.getCommandLine());
+                    cmdDoc.appendChild(cmdElem);
+                
+                    theModel.transmitCommand(cmdDoc);
+            
+                    CADCommandLinePane.clearCommandLine();
+
+                    pageLocationSaved = false;
+                }
+                catch (Exception ex) {
+                    CADFooterPane.displayInfoMessage(CAD_ERROR.UNAUTH_CMD.message);
+                    CADCommandLinePane.clearCommandLine();
+                }
+                break;  
+    
+            case PREV_QUEUE:
+            case DELETE_QUEUE:
+            case NEXT_QUEUE:
+                try {
+                    Document cmdDoc = DocumentBuilderFactory.newInstance()
+                            .newDocumentBuilder().newDocument();
+                    Element cmdElem = cmdDoc.createElement(
+                            CAD_CLIENT_CMD.TERMINAL_FUNCTION.type);
+                                        
+                    cmdElem.appendChild(cmdDoc.createTextNode(
+                            CAD_KEYS.keyboard_type + ":" + 
+                            String.valueOf(evt.getKeyCode())));
+                    cmdDoc.appendChild(cmdElem);                    
+                    theModel.transmitCommand(cmdDoc);
+    
+                } catch (Exception e) {
+                    cadLogger.logp(Level.SEVERE, "CADClientView", "keyReleased()",
+                            "Exception in sending queue command.", e);
+                }
+                break;
+
+            case BACKSPACE:
+               CADCommandLinePane.backspace();
+               break;       
+            case ENTER:                   
+                break;
+            default:  
+        }
+                
+    }
+
+    /**
+     * This method implements the necessary KeyListener functionality, and is 
+     * called whenever a key is typed.  Only letters, numbers, and standard 
+     * keyboard symbols, whose ascii value is between 32(inclusive) and 
+     * 127(exclusive).  Lower case character are in the range between 97 and 
+     * 122, inclusive.  These characters are made uppercase by substracting 
+     * 32 from their ascii value.  The ascii value for an upper case character 
+     * is 32 less than its lower case representation.  The valid character 
+     * is then sent to the CADCommandLinePane.
+     *
+     * @param e KeyEvent received.
+     */
+    public void keyTyped(KeyEvent e) {
+        //System.out.println("keyTyped" + e.getKeyCode());
+        
+        char key = e.getKeyChar();
+        //if valid character
+        if(key >= 32 && key < 127) {
+            //lower case letter
+            if(key >= 97 && key <= 122)
+                key -= 32; //make uppercase
+            
+            CADCommandLinePane.receiveKeyPress(key);                
+            
+        }
+    }
+
+    /**
+     * Observable update method.  The CADClientView class is an observer of the 
+     * CADClientModel.  If the model sends a null object, it is signifying that
+     * it has shut down.  In this case, an error message should be shown to prompt
+     * the user to restart the CAD Client.  If the update object is an
+     * ObserverMessage object, the following actions are to be taken:
+     * 
+     *<table cellpadding="2" cellspacing="2" border="1"
+     * style="text-align: left; width: 250px;">
+     *  <tbody>
+     *    <tr>
+     *      <th>Message Type</th>
+     *      <th>Message Data</th>
+     *      <th>Action Taken</th>
+     *    </tr>
+     *    <tr>
+     *      <td>INCIDENT_INQUIRY<br></td>
+     *      <td>IncidentInquiryModel<br></td>
+     *      <td>Construct a new II_IncidentInquiry view pane from the model data.
+     *          Reset the observer relationship between the footer and main pane.
+     *          Update the page location map and update the views with the model data.
+     *      </td>
+     *    </tr>
+     *    <tr>
+     *      <td>INCIDENT_SUMMARY<br></td>
+     *      <td>IncidentSummaryModel<br></td>
+     *      <td>Construct a new SA_IncidentSummary view pane from the model data.
+     *          Reset the observer relationship between the footer and main pane.
+     *          Update the page location map and update the views with the model data.
+     *      </td>
+     *    </tr>
+     *    <tr>
+     *      <td>INCIDENT_BOARD<br></td>
+     *      <td>IncidentBoardModel<br></td>
+     *      <td>Construct a new IB_IncidentBoard view pane from the model data.
+     *          Reset the observer relationship between the footer and main pane.
+     *          Update the page location map and update the views with the model data.
+     *      </td>
+     *    </tr>
+     *    <tr>
+     *      <td>ROUTED_MESSAGE<br></td>
+     *      <td>RoutedMessageModel<br></td>
+     *      <td>Construct a new TO_RoutedMessage view pane from the model data.
+     *          Reset the observer relationship between the footer and main pane.
+     *          Update the page location map and update the views with the model data.
+     *      </td>
+     *    </tr>
+     *    <tr>
+     *      <td>BLANK_SCREEN<br></td>
+     *      <td>BlankScreenModel<br></td>
+     *      <td>Construct a new empty view pane.
+     *          Reset the observer relationship between the footer and main pane.
+     *          Update the page location map and update the views with the model data.
+     *      </td>
+     *    </tr>
+     *    <tr>
+     *      <td>SCREEN_UPDATE<br></td>
+     *      <td>TreeMap<CADScreenNum, Boolean><br></td>
+     *      <td>Update the footer pane with the new screen updates map.</td>
+     *    </tr>
+     *    <tr>
+     *      <td>TIME_UPDATE<br></td>
+     *      <td>Time String<br></td>
+     *      <td>Update the footer pane with the new time.</td>
+     *    </tr>
+     *    <tr>
+     *      <td>ROUTED_MESSAGE_COUNT_UPDATE<br></td>
+     *      <td># Routed Messages<br></td>
+     *      <td>Update the footer pane with the new number of routed messages.</td>
+     *    </tr>
+     *    <tr>
+     *      <td>ROUTED_MESSAGE_UNREAD_UPDATE<br></td>
+     *      <td>Unread Routed Messages Boolean<br></td>
+     *      <td>Update the footer pane with the unread messages boolean.</td>
+     *    </tr>
+     *    <tr>
+     *      <td>CAD_INFO_MESSAGE<br></td>
+     *      <td>Information message<br></td>
+     *      <td>Update the footer pane with the new info message.</td>
+     *    </tr>
+     *  </tbody>
+     *</table>
+     */
+    public void update(Observable o, Object arg) {
+        
+        
+        if(arg == null) 
+        {
+            JOptionPane.showMessageDialog(this, 
+                    "Connection to the CAD Simulator has been lost.  " +
+                    "Restart the CAD Client.", "Connection Error", 
+                    JOptionPane.ERROR_MESSAGE); 
+            return;
+        }
+        
+        ObserverMessage oMessage = (ObserverMessage)arg;
+    
+        switch(oMessage.type) {
+            case INCIDENT_INQUIRY:
+                IncidentInquiryModel iiModel = (IncidentInquiryModel)oMessage.value;
+                
+                CADMainPane   = new II_IncidentInquiry(iiModel, mainTextPane.getDocument());
+                CADMainPane.addObserver(CADFooterPane);
+                
+                if(!pageLocationSaved)
+                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+                
+                updateViews(iiModel);               
+                
+                break;
+                
+            case INCIDENT_SUMMARY:
+                IncidentSummaryModel isModel = (IncidentSummaryModel)oMessage.value;
+                
+                CADMainPane   = new SA_IncidentSummary(isModel, mainTextPane.getDocument());
+                CADMainPane.addObserver(CADFooterPane);
+                
+                if(!pageLocationSaved)
+                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+                
+                updateViews(isModel);
+                break;
+                
+            case INCIDENT_BOARD:
+                IncidentBoardModel ibModel = (IncidentBoardModel)oMessage.value;
+            
+                CADMainPane   = new IB_IncidentBoard(ibModel, mainTextPane.getDocument());
+                CADMainPane.addObserver(CADFooterPane);     
+                
+                if(!pageLocationSaved)
+                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+                
+                updateViews(ibModel);
+                break;
+                
+            case ROUTED_MESSAGE:
+                RoutedMessageModel rmModel = (RoutedMessageModel)oMessage.value;
+            
+                CADMainPane = new TO_RoutedMessage(rmModel, mainTextPane.getDocument());
+                CADMainPane.addObserver(CADFooterPane);
+                
+                if(!pageLocationSaved)
+                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+                
+                updateViews(rmModel);
+                break;
+                
+            case BLANK_SCREEN:
+                BlankScreenModel bsModel = (BlankScreenModel)oMessage.value;
+                
+                CADMainPane = new CADMainView(mainTextPane.getDocument());
+                CADMainPane.addObserver(CADFooterPane); 
+
+                if(!pageLocationSaved)
+                    pageLocationMap.put(currentScreenNum, CADMainPane.getCurrentPage());
+                
+                updateViews(bsModel);
+                break;              
+                
+            case SCREEN_UPDATE:
+                CADFooterPane.updateStatus(CADScreenModel.updateStringToMap(
+                        (String)oMessage.value));
+                break;
+                
+            case TIME_UPDATE:
+                CADFooterPane.updateTime((String)oMessage.value);           
+                break;
+                
+            case ROUTED_MESSAGE_COUNT_UPDATE:
+                CADFooterPane.updateRoutedMessageCount((Integer)oMessage.value);
+                break;
+                
+            case ROUTED_MESSAGE_UNREAD_UPDATE:
+                CADFooterPane.updateUnreadMessages((Boolean)oMessage.value);
+                break;
+                
+            case CAD_INFO_MESSAGE:
+                CADFooterPane.displayInfoMessage((String)oMessage.value);
+                break;
+        }           
+    }
+    
+   
+    /**
+     * Update the command line and footer pane with model
+     * data.  Then refresh all of the views to repaint the screen.
+     * 
+     * @param model CADScreenModel shown in main Pane.
+     */
+    private void updateViews(CADScreenModel model) {
+                
+        currentScreenNum = model.getScreenNum();
+        
+        CADCommandLinePane.setCommandLine(model.commandLine);
+
+        CADFooterPane.setCADScreenNum(model.getScreenNum());        
+        CADFooterPane.updateTime(CADScreenModel.theCADTime);
+        CADFooterPane.updateDate(CADScreenModel.theCADDate);        
+        CADFooterPane.updateStatus(model.screenUpdateMap);
+        CADFooterPane.updateRoutedMessageCount(model.numberRoutedMessages); 
+        CADFooterPane.updateUnreadMessages(model.unreadMessages);       
+        
+        CADCommandLinePane.refreshView();
+        CADMainPane.refreshView(pageLocationMap.get(currentScreenNum));
+        CADFooterPane.refreshView();
+        
+    }
+    
+    /* SWING OBJECTS */       
+    
+    private JTextPane cmdLineTextPane = null;
+    private JTextPane mainTextPane    = null;
+    private JTextPane footerTextPane  = null;
+    
+    private JPanel cmdLinePanel = null;
+    private JPanel mainPanel    = null;
+    private JPanel footerPanel  = null;
+    
+    
+}    
Index: /branches/trunk/src/tmcsim/client/CADCommandParser.java
===================================================================
--- /branches/trunk/src/tmcsim/client/CADCommandParser.java	(revision 82)
+++ /branches/trunk/src/tmcsim/client/CADCommandParser.java	(revision 82)
@@ -0,0 +1,388 @@
+package tmcsim.client;
+
+import java.util.NoSuchElementException;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import tmcsim.common.CADProtocol.CAD_COMMANDS;
+import tmcsim.common.CADProtocol.CAD_FIELD_CODES;
+import tmcsim.common.CADProtocol.DATA_TAGS;
+
+
+/**
+ * CADCommandParser is used to parse user input from the CAD command line.
+ * The text is parsed for specific CAD command tokens and Field Codes
+ * as specified by the offical CAD syntax.  The parseCommand() method
+ * is used to parse a command line into the XML command Element that
+ * will be sent to the CAD Simulator.  
+ * TODO Where is this specified??? 
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class CADCommandParser {
+    
+    /**
+     * Inner class used in parsing CAD Command Lines.
+     * @author Matthew
+     */
+    private class CommandItem {
+        
+        /** Field Code Mnemonic. */
+        public String mnemonic;
+
+        /** Associated data. */
+        public String value;        
+        
+        public CommandItem(String m, String v) {
+            mnemonic = m;
+            value    = v;
+        }
+    }
+   
+    /**
+     * This method parses the parameter command line for CAD commands.  The
+     * command text is tokenized by the '.' character, which is a delimiter
+     * for CAD commands.  The first parsed token specifies which CAD
+     * command is being performed.  If the token matches a valid CAD command,
+     * the remaining command line is parsed for other '.' delimeted information 
+     * that accompanies that command.  <br>  
+     * As the command line is parsed, XML Elements are added to the root
+     * parameter Element to create a command message that will be sent to 
+     * the CAD Simulator.  The individual XML schemas are viewable ????
+     * If the command line is not properly formed, an Exception is thrown. 
+     * CAD Command syntax is viewable ????
+     * TODO Where are they available???  
+     * 
+     * 
+     * The following table specifies the valid CAD command tokens, their 
+     * associated CAD Command, the additional information, and error states.
+     * 
+     *<table cellpadding="2" cellspacing="2" border="1"
+     * style="text-align: left; width: 250px;">
+     *  <tbody>
+     *    <tr>
+     *      <th>CAD Command Token</th>
+     *      <th>CAD Command</th>
+     *      <th>Additional Information</th>
+     *      <th>Possible Errors</th>
+     *    </tr>
+     *    <tr>
+     *      <td>IB</td>
+     *      <td>Incident Board</td>
+     *      <td>None</td>
+     *      <td>None</td>
+     *    </tr>
+     *    <tr>
+     *      <td>II</td>
+     *      <td>Incident Inquiry</td>
+     *      <td>Numerical log number</td>
+     *      <td>Log number contains invalid characters.</td>
+     *    </tr>
+     *    <tr>
+     *      <td>SA</td>
+     *      <td>Incident Summary By Area</td>
+     *      <td>None</td>
+     *      <td>None</td>
+     *    </tr>
+     *    <tr>
+     *      <td>UI</td>
+     *      <td>Incident Update</td>
+     *      <td>1) Numerical log number (optional)<br>
+     *          2) CAD Field Codes with associated data </td>
+     *      <td>Missing Field Codes.</td>
+     *    </tr>
+     *    <tr>
+     *      <td>TO</td>
+     *      <td>Routed Mssage</td>
+     *      <td>1) Recipient CAD Position Numbers or Mnemonics<br>
+     *          2) Message text </td>
+     *      <td>1) Missing Recipients <br>
+     *          2) Missing Message Field Code</td>
+     *    </tr>
+     *    <tr>
+     *      <td>OF</td>
+     *      <td>Log Terminal Off</td>
+     *      <td>None</td>
+     *      <td>None</td>
+     *    </tr>
+     *  </tbody>
+     *</table>
+     * 
+     * 
+     * @param currElem Document Element to add command tags to.
+     * @param commandText Command line text to parse.
+     * @throws Exception 
+     */
+    public void parseCommand(Element currElem, String commandText) throws Exception {
+                        
+        StringTokenizer tokenizer = new StringTokenizer(commandText, ".");   
+        String          token;
+        
+        Document theDoc  = currElem.getOwnerDocument();
+        Element  cmdElem = null;
+                      
+        if(tokenizer.countTokens() >= 1 && commandText.indexOf(".") != -1) {
+            token = tokenizer.nextToken(); 
+                  
+            //INCIDENT_BOARD Request
+            if(token.equals(CAD_COMMANDS.INCIDENT_BOARD.mnemonic)) {
+                cmdElem = theDoc.createElement(CAD_COMMANDS.INCIDENT_BOARD.fullName);       
+                currElem.appendChild(cmdElem);
+            }
+            //INCIDENT_INQUIRY Request
+            else if(token.equals(CAD_COMMANDS.INCIDENT_INQUIRY.mnemonic)) {  
+                try {
+                    Integer logNumber = Integer.valueOf(tokenizer.nextToken().trim());
+                    
+                    cmdElem = theDoc.createElement(CAD_COMMANDS.INCIDENT_INQUIRY.fullName);
+                    cmdElem.appendChild(theDoc.createTextNode(logNumber.toString()));       
+                    currElem.appendChild(cmdElem);
+                } catch (Exception e) {
+                    //catch NumberFormatException
+                    throw new Exception();
+                }
+            }
+            //INCIDENT_SUMMARY Request
+            else if(token.equals(CAD_COMMANDS.INCIDENT_SUMMARY.mnemonic)) {   
+                cmdElem = theDoc.createElement(CAD_COMMANDS.INCIDENT_SUMMARY.fullName);           
+                currElem.appendChild(cmdElem);                  
+            }                 
+            //INCIDENT_UPDATE Request      
+            else if(token.equals(CAD_COMMANDS.INCIDENT_UPDATE.mnemonic)) {      
+                                     
+                Vector<CommandItem> commands = new Vector<CommandItem>();
+                
+                //ascertain if the next token is a number, if so, we're updating a 
+                //specific log, else updating the current log(assuming we're looking at one)
+
+                cmdElem = theDoc.createElement(CAD_COMMANDS.INCIDENT_UPDATE.fullName);           
+                currElem.appendChild(cmdElem);                  
+                
+                try {
+                    token = tokenizer.nextToken().trim();
+                    Integer logNumber = new Integer(token);
+                    cmdElem.setAttribute(DATA_TAGS.LOG_NUM.tag, logNumber.toString());
+                }                   
+                //"UI." missing information
+                catch (NoSuchElementException nsee) {throw new Exception();}  
+                //UI.xxx where xxx not a number, assume UI.D/ format
+                catch (NumberFormatException nfe) {
+                    commands.add(new CommandItem(token.substring(0,2), token.substring(2,token.length())));
+                }                       
+                
+                while(tokenizer.hasMoreTokens()) {
+                    token = tokenizer.nextToken().trim();       
+                    commands.add(new CommandItem(token.substring(0,2), token.substring(2,token.length()))); 
+                }
+                
+                parseIncidentUpdate(cmdElem, commands);                     
+       
+            }
+            //ROUTED_MESSAGE Request
+            else if(token.equals(CAD_COMMANDS.ROUTED_MESSAGE.mnemonic)) {
+                String  message       = "";
+                String  destPositions = "";
+
+                //comma delimited
+                destPositions = tokenizer.nextToken();
+                                
+                //in case there is a . in the following text
+                while(tokenizer.hasMoreTokens())
+                    message += tokenizer.nextToken();
+                    
+                    
+                if(message.substring(0,2).equalsIgnoreCase(CAD_FIELD_CODES.MESSAGE.mnemonic)) {
+                    cmdElem = theDoc.createElement(CAD_COMMANDS.ROUTED_MESSAGE.fullName);           
+                    currElem.appendChild(cmdElem);                  
+
+                    Element destElem = theDoc.createElement(DATA_TAGS.DESTINATION.tag);
+                    destElem.appendChild(theDoc.createTextNode(destPositions));
+                    cmdElem.appendChild(destElem);                  
+
+                    Element msgElem = theDoc.createElement(DATA_TAGS.MESSAGE.tag);
+                    msgElem.appendChild(theDoc.createTextNode(message.substring(2, message.length())));
+                    cmdElem.appendChild(msgElem);
+                }
+                else throw new Exception();                     
+            } 
+            //ENTER_INCIDENT Request
+            else if(token.equals(CAD_COMMANDS.ENTER_INCIDENT.mnemonic)) {
+                //TODO EI Implementation??
+                /*
+                Vector<CommandItem> commands = new Vector<CommandItem>();
+                
+                cmdElem = theDoc.createElement(CAD_COMMANDS.ENTER_INCIDENT.fullName);           
+                currElem.appendChild(cmdElem);                      
+                
+                while(tokenizer.hasMoreTokens()) {
+                    token = tokenizer.nextToken().trim();       
+                    commands.add(new CommandItem(token.substring(0,2), token.substring(2,token.length()))); 
+                }
+                
+                parseIncidentUpdate(cmdElem, commands);
+                */
+                
+            }
+            //TERMINAL_OFF Request
+            else if(token.equals(CAD_COMMANDS.TERMINAL_OFF.mnemonic)) {
+                cmdElem = theDoc.createElement(CAD_COMMANDS.TERMINAL_OFF.fullName);       
+                currElem.appendChild(cmdElem);  
+            }
+            //APP_CLOSE Request
+            else if(token.equals(CAD_COMMANDS.APP_CLOSE.mnemonic)) {
+                cmdElem = theDoc.createElement(CAD_COMMANDS.APP_CLOSE.fullName);       
+                currElem.appendChild(cmdElem);  
+            }
+            else throw new Exception();
+        }
+        else {
+            
+            try {
+                Integer cadLog = Integer.parseInt(commandText.trim());
+                
+                cmdElem = theDoc.createElement(CAD_COMMANDS.INCIDENT_INQUIRY.fullName);
+                cmdElem.appendChild(theDoc.createTextNode(cadLog.toString()));       
+                currElem.appendChild(cmdElem);
+                
+            } catch (Exception e) {
+                throw new Exception();
+            }
+        }       
+    }   
+
+
+    /**
+     * This method iterates through the parameter Vector of CommandItem objects.
+     * For each object, the appropriate Incident information is extracted 
+     * and added as a tag to the parameter XML Element.
+     * 
+     * @param currElem XML Element to append Incident information tags to.
+     * @param commands Vector of CommandItems to parse for Incident information.
+     */
+    public void parseIncidentUpdate(Element currElem, Vector<CommandItem> commands) {
+        
+        String witnessName  = null;
+        String witnessAddr  = null;
+        String witnessPhone = null;
+        
+        Document theDoc = currElem.getOwnerDocument();
+        
+        for(CommandItem item : commands) {
+                                            
+            //Address of Witness
+            if(item.mnemonic.equals(CAD_FIELD_CODES.WITNESS_ADDRESS.mnemonic)) {
+                //System.out.print("A");        
+                witnessAddr = item.value;               
+            }               
+            //Beat
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.BEAT.mnemonic)) {              
+                //System.out.print("B");            
+                Element beatElem = theDoc.createElement(CAD_FIELD_CODES.BEAT.fullName);
+                beatElem.appendChild(theDoc.createTextNode(item.value));
+                currElem.appendChild(beatElem);
+            }
+            //Callbox
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.CALLBOX.mnemonic)) {
+                //System.out.print("C");    
+                //xmlOut.writeTag(CALLBOX, commandMap.get(key));
+            }
+            //Details
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.DETAILS.mnemonic)) {
+                //System.out.print("D");
+                Element detailElem = theDoc.createElement(CAD_FIELD_CODES.DETAILS.fullName);
+                
+                //if the details contains a '|' character, the text is sensitive.  Remove
+                //the pipe and mark the detail as sensitive.
+                if(item.value.contains("|")) {
+                    StringBuffer detailBuf = new StringBuffer();
+                    detailBuf.append(item.value.substring(0, item.value.indexOf("|")));
+                    detailBuf.append(item.value.substring(item.value.indexOf("|") + 1, 
+                            item.value.length()));
+                    
+                    detailElem.setAttribute(DATA_TAGS.SENSITIVE.tag, 
+                            new Boolean(true).toString());
+                    detailElem.appendChild(theDoc.createTextNode(detailBuf.toString()));
+                }
+                else {
+                    detailElem.setAttribute(DATA_TAGS.SENSITIVE.tag, 
+                            new Boolean(false).toString());
+                    detailElem.appendChild(theDoc.createTextNode(item.value));
+                }
+                                
+                currElem.appendChild(detailElem);       
+            }
+            //Handling Unit
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.HANDLING_UNIT.mnemonic)) {
+                //System.out.print("H");    
+                Element unitElem = theDoc.createElement(CAD_FIELD_CODES.HANDLING_UNIT.fullName);
+                unitElem.appendChild(theDoc.createTextNode(item.value));
+                currElem.appendChild(unitElem);
+            }               
+            //IncidentNumber
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.INCIDENT_NUMBER.mnemonic)) {
+                //System.out.print("I");
+                currElem.setAttribute(CAD_FIELD_CODES.INCIDENT_NUMBER.fullName, item.value);
+            }
+            //Location
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.LOCATION.mnemonic)) {
+                //System.out.print("L");
+                currElem.setAttribute(DATA_TAGS.FULL_LOCATION.tag, item.value);
+                currElem.setAttribute(DATA_TAGS.TRUNC_LOCATION.tag, item.value);
+            }
+            //Priority
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.PRIORITY.mnemonic)) {
+                //System.out.print("P");                    
+                currElem.setAttribute(CAD_FIELD_CODES.PRIORITY.fullName, item.value);               
+            }                       
+            //Routing mnemonic
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.ROUTE.mnemonic)) {
+                //System.out.print("R");
+                Element unitElem = theDoc.createElement(CAD_FIELD_CODES.ROUTE.fullName);
+                unitElem.appendChild(theDoc.createTextNode(item.value));
+                currElem.appendChild(unitElem);
+            }   
+            //Witness Phone Number
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.WITNESS_PHONE.mnemonic)) {
+                //System.out.print("N");    
+                witnessPhone = item.value;
+            }
+            //Type
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.TYPE.mnemonic)) {
+                //System.out.print("T");
+                currElem.setAttribute(CAD_FIELD_CODES.TYPE.fullName, item.value);
+            }
+            //Tow
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.TOW.mnemonic)) {
+                //System.out.print("V");
+                Element towElem = theDoc.createElement(CAD_FIELD_CODES.TOW.fullName);
+                towElem.appendChild(theDoc.createTextNode("name=\"" + item.value + "\""));
+                currElem.appendChild(towElem);
+            }               
+            //Witness
+            else if(item.mnemonic.equals(CAD_FIELD_CODES.WITNESS.mnemonic)) {
+                //System.out.print("W");    
+                witnessName = item.value;
+            }                       
+        }   
+        
+        if(witnessName != null)
+        {
+
+            Element witnessElem = theDoc.createElement(CAD_FIELD_CODES.WITNESS.fullName);
+            currElem.appendChild(witnessElem);
+            
+            witnessElem.setAttribute(DATA_TAGS.WITNESS_NAME.tag, witnessName);
+        
+            if(witnessAddr != null)
+                witnessElem.setAttribute(DATA_TAGS.WITNESS_ADDR.tag, witnessAddr);  
+                
+            if(witnessPhone != null)
+                witnessElem.setAttribute(DATA_TAGS.WITNESS_PHONE.tag, witnessPhone);
+                
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/SimulationManagerView.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/SimulationManagerView.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/SimulationManagerView.java	(revision 82)
@@ -0,0 +1,1290 @@
+ package tmcsim.simulationmanager;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.TreeMap;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSpinner;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.border.CompoundBorder;
+import javax.swing.border.EtchedBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+
+import tmcsim.cadmodels.CMSDiversion;
+import tmcsim.cadmodels.CMSInfo;
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.common.RevisionNumber;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.CADEnums.SCRIPT_STATUS;
+import tmcsim.simulationmanager.actions.AddIncidentAction;
+import tmcsim.simulationmanager.actions.ApplyDiversionAction;
+import tmcsim.simulationmanager.actions.ConnectToParamicsAction;
+import tmcsim.simulationmanager.actions.DeleteIncidentAction;
+import tmcsim.simulationmanager.actions.ExitAction;
+import tmcsim.simulationmanager.actions.GotoTimeIndexAction;
+import tmcsim.simulationmanager.actions.LoadParamicsNetworkAction;
+import tmcsim.simulationmanager.actions.LoadScriptAction;
+import tmcsim.simulationmanager.actions.PauseSimulationAction;
+import tmcsim.simulationmanager.actions.RescheduleIncidentAction;
+import tmcsim.simulationmanager.actions.ResetSimulationAction;
+import tmcsim.simulationmanager.actions.StartSimulationAction;
+import tmcsim.simulationmanager.actions.TriggerIncidentAction;
+import tmcsim.simulationmanager.model.AppliedDiversionTableModel;
+import tmcsim.simulationmanager.model.IncidentListTableModel;
+import tmcsim.simulationmanager.model.IncidentTimeCellRenderer;
+import tmcsim.simulationmanager.model.IncidentTimeSpinnerModel;
+import tmcsim.simulationmanager.model.AppliedDiversionTableModel.APPLIED_DIV_COLUMNS;
+import tmcsim.simulationmanager.model.IncidentListTableModel.INCIDENT_LIST_COLUMNS;
+
+/**
+ * This class is the view component to the SimlationManager.  User 
+ * interaction with the SimulationManager is handled in this object.  
+ * The data contained within the SimlationManagerModel class is 
+ * displayed in the JTables contained in this class.  The view class 
+ * does not validate the user input.  Exception handling
+ * takes care of error in the user input.
+ *
+ * @author Matthew Cechini 
+ * @version $Revision: 1.6 $ $Date: 2006/06/06 22:52:56 $
+ */
+@SuppressWarnings("serial")
+public class SimulationManagerView extends JFrame { 
+
+    /** Default Paramics network ID */
+    private static int DEFAULT_NETWORK_ID = 1;
+
+    /** Maximum Paramics network ID (100) */
+    private static int MAX_NETWORK_ID    = 100;
+
+    /** Default directory for script loading. */
+    public static String SCRIPT_DIR      = ".";
+
+    /** Reference to the simulation manager model. */
+    private SimulationManagerModel theSimManagerModel;
+        
+    /** The Table Model for the incident list table. */
+    private IncidentListTableModel incidentListTableModel;
+    
+    /** The Table Model for the applied diversions table. */    
+    private AppliedDiversionTableModel appliedDiversionTableModel;
+    
+    /**
+     * A map of DefaultTableModel objects associated with each incident
+     * in the simulation.  Key values are the log numberes of incidents.  
+     */
+    //private TreeMap<Integer, IncidentHistoryTableModel> incidentTableMap = null;
+    private TreeMap<Integer, IncidentHistoryPanel> incidentTableMap = null;
+    
+    /** The current simulation time. */
+    private long currentSimulationTime = 0;
+    
+    /**
+     * Flag to designate whether the simulation has started. Initialized to false.
+     * Becomes true when the user presses the start button.  Becomes false again
+     * when the simulation is "reset" or another script is loaded.
+     */
+    private boolean simulationStarted = false;
+    
+    /** 
+     * Flag to designate whether a connection has been made to the remote 
+     * Paramics Communicator.
+     */
+    private boolean connectedToParamics = false;
+    
+    
+    /**
+     * Constructor. This class sets the local reference to the simulation manager
+     * model to the parameter object.  It then initializes all of the swing
+     * components that are used in this user interface.
+     *
+     * @param newModel The reference to the SimulationManagerModel object
+     */
+    public SimulationManagerView(SimulationManagerModel newModel) {
+        super("Simulation Manager");
+        
+        theSimManagerModel   = newModel;    
+        
+        incidentTableMap = new TreeMap<Integer, IncidentHistoryPanel>();
+        
+        initComponents();
+
+    }
+ 
+    /**
+     * Method gets the model object for the SimulationManagerView class.
+     * @return SimulationManagerModel object.
+     */
+    public SimulationManagerModel getModel() {
+        return theSimManagerModel;
+    }
+    
+    /**
+     * Method returns the boolean value designating whether a current
+     * connection has been made to the Paramics Communicator.
+     * 
+     * @return True if connected, false if not.
+     */
+    public Boolean isConnectedToParamics() {
+        return connectedToParamics;
+    }
+    
+    /**
+     * Method returns the boolean value designating whether the 
+     * simulation has started or not.
+     * 
+     * @return True if started, false if not.
+     */
+    public Boolean isSimulationStarted() {
+        return simulationStarted;
+    }
+    
+    /**
+     * Method returns the value of the current simulation time.
+     * 
+     * @return Current simulation time (in seconds).
+     */
+    public Long getCurrentSimTime() {
+        return currentSimulationTime;
+    }
+    
+    /**
+     * Creates a local JTable for the event history portion of the user interface
+     * with the table model passed in as a parameter.  The table has three columns.
+     * Addition and subtraction to this table are handled in the model clas.
+     *
+     * @param logNumber Log number for this incident.
+     */ 
+    public void addIncidentTab(Integer logNumber) {
+        
+        IncidentHistoryPanel newHistoryPanel = new IncidentHistoryPanel();
+    
+        incidentTableMap.put(logNumber, newHistoryPanel);
+
+        eventHistoryPane.addTab(String.valueOf(logNumber), newHistoryPanel);
+        
+    }
+    
+    /**
+     * Remove the incident tab whose log number matches the parameter.
+     * 
+     * @param logNumber Incident log number.
+     */
+    public void removeIncidentTab(Integer logNumber) {
+        for(int i = 0; i < eventHistoryPane.getTabCount(); i++) {
+            if(eventHistoryPane.getTitleAt(i).compareTo(String.valueOf(logNumber)) == 0) {
+                eventHistoryPane.remove(i);
+                break;  
+            }
+        }
+    }
+    
+    /**
+     * Remove all incident tabs from the event history pane.
+     */
+    public void resetIncidentTabs() {
+        eventHistoryPane.removeAll();
+    }
+    
+    /**
+     * Method is called to add a new incident to the IncidentManagement
+     * panel.  The incident object is added to the IncidentListTableModel.
+     * 
+     * @param newIncident The incident object being added to the simulation. 
+     */ 
+    public void addIncident(Incident newIncident) {
+        incidentListTableModel.addIncident(newIncident);
+    }   
+    
+    /**
+     * Method starts an incident found in the IncidentListTableModel. 
+     * @param logNumber Incident log number.
+     */
+    public void startIncident(Integer logNumber) {
+        incidentListTableModel.startIncident(logNumber);        
+    }   
+    
+    /**
+     * Method removes an incident by removing it from the 
+     * IncidentListTableModel.  If there are no more incidents
+     * in the simulation, reset the start, pause, and reset buttons
+     * to be disabled, and enable the load script button.
+     * 
+     * @param logNumber Incident log number.
+     */
+    public void removeIncident(Integer logNumber) {
+        incidentListTableModel.removeIncident(logNumber);       
+        
+        //TODO check if simulation started??    
+        if(incidentListTableModel.getRowCount() == 0 && !simulationStarted) 
+        {
+            startButton.setEnabled(false);
+            pauseButton.setEnabled(false);
+            resetButton.setEnabled(false);  
+            
+            loadScriptButton.setEnabled(true);
+        }       
+    }
+    
+    /**
+     * Method resets the current list of Incidents by clearing the 
+     * IncidentListTableModel. 
+     */ 
+    public void resetIncidents() {
+        incidentListTableModel.clearModelData();
+    }
+    
+    /**
+     * Method adds a new Incident event to the IncidentHistoryTableModel
+     * that corresponds to the Incident log number.  If the IncidentEvent
+     * has been received from a terminal, the tab containing the 
+     * incident's table will be colored red to notify the user.
+     * 
+     * @param logNumber Incident log number.
+     * @param newEvent Incident event to add.
+     */
+    public void addIncidentEvent(Integer logNumber, IncidentEvent newEvent) {
+        //IncidentHistoryTableModel historyTableModel = incidentTableMap.get(logNumber);
+        IncidentHistoryPanel historyPanel = incidentTableMap.get(logNumber);
+        
+        //historyTableModel.addEvent(logNumber, newEvent);
+        historyPanel.updateIncidentHistory(newEvent);
+    }
+    
+    /**
+     * Method is called to add a new diversion to the Diversions panel.  
+     * The CMSInfo and CMSDiversion objects are added to the 
+     * AppliedDiversionTableModel, which creates its needed view data.
+     * 
+     * @param theCMSInfo The CMSInfo that the new diversion corresponds to.
+     * @param theDiversion A new diversion to be applied.
+     */
+    public void addDiversion(CMSInfo theCMSInfo, CMSDiversion theDiversion) {       
+        appliedDiversionTableModel.addDiversion(theCMSInfo, theDiversion);
+    }       
+
+    /**
+     * Method is called to remove an existing diversion from the Diversions panel.  
+     * The diversion information is removed from the AppliedDiversionTableModel, 
+     * which removes the corresponding row.
+     * 
+     * @param theCMSInfo The CMSInfo that the new diversion corresponds to.
+     * @param theDiversion A new diversion to be applied.
+     */
+    public void removeDiversion(CMSInfo theCMSInfo, CMSDiversion theDiversion) {
+        appliedDiversionTableModel.removeDiversion(theCMSInfo, theDiversion);
+
+    }
+    
+    /**
+     * Method resets the list of diversions by clearing the 
+     * AppliedDiversionTableModel.
+     */
+    public void resetDiversions() {
+        appliedDiversionTableModel.clearModelData();
+    }
+    
+    /**
+     * Build the CMS ID combo box with the list of parameter ids.
+     * 
+     * @param cmsIDArray Array of cms IDs
+     */
+    public void setCMS_IDList(Object[] cmsIDArray) {
+        for(int i = 0; i < cmsIDArray.length; i++) {
+            cmsIDComboBox.addItem(cmsIDArray[i]);   
+        }
+    }
+    
+    /**
+     * Method is called by the model everytime a second has passed during the simulation.
+     * The time in the parameter is shown in the simulationClockLabel.  The parameter
+     * is formatted HH:MM:SS.
+     *
+     * @param time The new time.
+     */
+    public void tick(long time) {
+        currentSimulationTime = time;
+        
+        String newTime = longToTime(currentSimulationTime);
+        
+        simulationClockLabel.setText(newTime);
+        CADClientClockLabel.setText(newTime);
+    }
+    
+    /**
+     * Method updates the simulation control and 'load script' buttons' enabled status
+     * and the status text according to the parameter SCRIPT_STATUS.
+     * The following table describes each status and the actions taken. <br>
+     *
+     *<table cellpadding="2" cellspacing="2" border="1"
+     * style="text-align: left; width: 250px;">
+     *  <tbody>
+     *    <tr>
+     *      <th>Status<br></th>
+     *      <th>Actions Taken<br></th>
+     *    </tr>
+     *    <tr>
+     *      <td>NO_SCRIPT<br></td>
+     *      <td>Set the simulation status text to a black "No Script".  Then 
+     *          disable all simulation buttons.  Enable the 'Load Script' button.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>SCRIPT_STOPPED_NOT_STARTED<br></td>
+     *      <td>Set the simulation status text to a red "Not Started".  Then 
+     *          enable the 'Start' and 'Reset' buttons, and disable the 'Pause'
+     *          button. Enable the 'Load Script' button.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>SCRIPT_STOPPED_STARTED<br></td>
+     *      <td>Set the simulation status text to a red "Paused".  Then 
+     *          enable the 'Start' and 'Reset' buttons, and disable the 'Pause'
+     *          button. Enable the 'Load Script' button. Set the simulationStarted
+     *          flag to true.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>SCRIPT_RUNNING<br></td>
+     *      <td>Set the simulation status text to a green "Running".  Then 
+     *          disable the 'Start' and 'Reset' buttons, and enable the 'Pause'
+     *          button. Disable the 'Load Script' button.  Set the simulationStarted
+     *          flag to true.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>ATMS_SYNCHRONIZATION<br></td>
+     *      <td>Set the simulation status text to an orange "Synchronizing".  Then 
+     *          disable all simulation buttons and the 'Load Script' button.<br></td>
+     *    </tr>
+     *  </tbody>
+     *</table>
+     *
+     * @param status Script status value.
+     */
+    public void setScriptStatus(SCRIPT_STATUS status) {
+        
+        switch(status) {
+            case NO_SCRIPT:
+                simulationStatusText.setText("No Script");
+                simulationStatusText.setForeground(Color.BLACK);
+                    
+                startButton.setEnabled(false);
+                pauseButton.setEnabled(false);
+                resetButton.setEnabled(false);                                              
+                break;          
+                
+            case SCRIPT_STOPPED_NOT_STARTED:
+                
+                simulationStatusText.setText("Ready");
+                simulationStatusText.setForeground(Color.RED);
+                    
+                startButton.setEnabled(true);
+                pauseButton.setEnabled(false);
+                resetButton.setEnabled(true);       
+                
+                loadScriptButton.setEnabled(true);
+                
+                //simulationClockLabel.setText("0:00:00");
+                //CADClientClockLabel.setText("0:00:00");               
+                break;          
+                
+            case SCRIPT_PAUSED_STARTED:
+                simulationStatusText.setText("Paused");
+                simulationStatusText.setForeground(Color.RED);
+                    
+                startButton.setEnabled(true);
+                pauseButton.setEnabled(false);
+                resetButton.setEnabled(true);               
+                simulationStarted = true;
+
+                loadScriptButton.setEnabled(true);
+                break;
+                
+            case SCRIPT_RUNNING:
+                simulationStatusText.setText("Running");
+                simulationStatusText.setForeground(Color.GREEN.darker());
+                
+                startButton.setEnabled(false);
+                pauseButton.setEnabled(true);
+                resetButton.setEnabled(false);  
+                simulationStarted = true;
+
+                loadScriptButton.setEnabled(false);
+                break;
+            case ATMS_SYNCHRONIZATION:
+                simulationStatusText.setText("Synchronizing");
+                simulationStatusText.setForeground(Color.ORANGE);
+                
+                startButton.setEnabled(false);
+                pauseButton.setEnabled(false);
+                resetButton.setEnabled(false);  
+                simulationStarted = false;
+
+                loadScriptButton.setEnabled(false);
+                break;
+        }       
+    }
+    
+
+    /**
+     * Method updates the paramics control buttons' enabled status
+     * and the paramics status text according to the parameter PARAMICS_STATUS.
+     * The following table describes each status and the actions taken. <br>
+     *
+     *<table cellpadding="2" cellspacing="2" border="1"
+     * style="text-align: left; width: 250px;">
+     *  <tbody>
+     *    <tr>
+     *      <th>Status<br></th>
+     *      <th>Actions Taken<br></th>
+     *    </tr>
+     *    <tr>
+     *      <td>UNREACHABLE<br></td>
+     *      <td>Show a message dialog to the user notifying them that a 
+     *          connection to Paramics could not be made.  Reset the
+     *          connect button to be labled 'Connect to Paramics' and
+     *          set the status text to 'Unreachable'.  Enable the connect
+     *          button and disable the network load button.  Set the connected
+     *          to paramics flag to false.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>DROPPED<br></td>
+     *      <td>Show a message dialog to the user notifying them that the 
+     *          connection to Paramics has been dropped.  Reset the
+     *          connect button to be labled 'Connect to Paramics' and
+     *          set the status text to 'Dropped'.  <br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>CONNECTING<br></td>
+     *      <td>Set the status text to 'Connecting'.  Disable the connect
+     *          button and network load button.  <br></td>          
+     *    </tr>
+     *    <tr>
+     *      <td>CONNECTED<br></td>
+     *      <td>Set the connect button to be labled 'Disconnect from Paramics' 
+     *          and set the status text to 'Connected'.  Enable the disconnect
+     *          button and network load button.  Set the connected to paramics flag 
+     *          to true.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>DISCONNECTED<br></td>
+     *      <td>Set the connect button to be labled 'Connect to Paramics' 
+     *          and set the status text to 'Disconnected'.  Enable the connect
+     *          button and disable the network load button.  Set the connected 
+     *          to paramics flag to false.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>SENDING_NETWORK_ID<br></td>
+     *      <td>Set the status text to 'Sending Network ID'.  Disable the 
+     *          network load button.<br></td>      
+     *    </tr>
+     *    <tr>
+     *      <td>WARMING<br></td>
+     *      <td>Set the status text to 'Warming'.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>LOADING<br></td>
+     *      <td>Set the status text to 'Loading'.<br></td>
+     *    </tr>
+     *    <tr>
+     *      <td>LOADED<br></td>
+     *      <td>Get the paramics network that has been been loaded from
+     *          the model.   Set the status text to 'Network # Loaded'.
+     *          Enable the connect button and disable the network
+     *          load button<br></td>
+     *    </tr>
+     *  </tbody>
+     *</table>
+     *
+     * @param status Paramics status value.
+     */
+    public void setParamicsStatus(PARAMICS_STATUS status) {
+        
+        switch(status) {
+        
+            case UNREACHABLE:           
+                JOptionPane.showMessageDialog(this, 
+                "Unable to connect to Paramics.", 
+                "Communication Error", JOptionPane.ERROR_MESSAGE);
+        
+                connectToParamicsButton.setText("Connect to Paramics");
+                paramicsStatusInfoLabel.setText("Unreachable");
+
+                connectToParamicsButton.setEnabled(true);
+                loadParamicsNetworkButton.setEnabled(false);
+                //networkIDSpinner.setEnabled(false);       
+                connectedToParamics = false;
+                
+            break;
+            case DROPPED:
+            
+                JOptionPane.showMessageDialog(this, 
+                "      Connection to Paramics has been dropped.\n" +
+                "Restart the Paramics Communicator and reconnect.", 
+                "Communication Error", JOptionPane.ERROR_MESSAGE);
+        
+                connectToParamicsButton.setText("Connect to Paramics");
+                paramicsStatusInfoLabel.setText("Dropped");
+                
+                loadParamicsNetworkButton.setEnabled(false);
+                //networkIDSpinner.setEnabled(false);       
+                connectedToParamics = false;
+            break;          
+            case CONNECTING:
+                paramicsStatusInfoLabel.setText("Connecting");
+                
+                connectToParamicsButton.setEnabled(false);
+                loadParamicsNetworkButton.setEnabled(false);
+                //networkIDSpinner.setEnabled(true);    
+            break;
+            case CONNECTED:
+                connectToParamicsButton.setText("Disconnect from Paramics");                
+                paramicsStatusInfoLabel.setText("Connected");
+                
+                connectToParamicsButton.setEnabled(true);
+                loadParamicsNetworkButton.setEnabled(true);
+                //networkIDSpinner.setEnabled(true);    
+                connectedToParamics = true;         
+                break;          
+                
+            case DISCONNECTED:
+                connectToParamicsButton.setText("Connect to Paramics");                             
+                paramicsStatusInfoLabel.setText("Disconnected");
+
+                connectToParamicsButton.setEnabled(true);
+                loadParamicsNetworkButton.setEnabled(false);
+                //networkIDSpinner.setEnabled(false);       
+                connectedToParamics = false;
+                        
+                break;  
+            case SENDING_NETWORK_ID:
+                paramicsStatusInfoLabel.setText("Sending Network ID");
+                
+                loadParamicsNetworkButton.setEnabled(false);
+            break;      
+            case WARMING:
+                paramicsStatusInfoLabel.setText("Warming Up");
+            break;
+            case LOADING:
+                paramicsStatusInfoLabel.setText("Loading Network");
+            break;      
+            case LOADED:            
+                String network = "";
+                try {                   
+                    int networkLoaded = theSimManagerModel.getParamicsNetworkLoaded();
+                    
+                    if(networkLoaded != -1)
+                        network = String.valueOf(networkLoaded);
+                }
+                catch (SimulationException se) {
+                    SimulationExceptionHandler(se);
+                }
+                
+                paramicsStatusInfoLabel.setText("Network " + network + " Loaded");
+
+                connectToParamicsButton.setEnabled(true);
+                loadParamicsNetworkButton.setEnabled(false);
+                
+            break;
+        }   
+    }
+
+    /**
+     * Method is used to convert a String containing a time in format H:MM:SS to a long
+     * value of the number of seconds represented. 
+     *
+     * @param time String containing a time in format H:MM:SS
+     * @throws StringIndexOutOfBoundsException if parameter is not in format H:MM:SS
+     * @return long Number of seconds in parameter time  
+     */
+    public static long stringTimeToLong(String time) throws StringIndexOutOfBoundsException{
+        long seconds = 0;   
+        
+        seconds =  ((long) Character.digit(time.charAt(0), 10) * 3600 +
+                        Character.digit(time.charAt(2), 10) * 600 + 
+                        Character.digit(time.charAt(3), 10) * 60 + 
+                        Character.digit(time.charAt(5), 10) * 10 +
+                        Character.digit(time.charAt(6), 10));
+
+              
+        return seconds;
+    }
+    
+    /**
+     * Converts a the long representation of the time, to the H:MM:SS String format
+     *
+     * @param seconds number of seconds.
+     * @return String H:MM:SS time representation.
+     */
+    public static String longToTime(long seconds) {
+        String time = new String();     
+        long timeSegment;   
+        
+        timeSegment = seconds / 3600;
+        time += String.valueOf(timeSegment) + ":";      
+        
+        seconds = seconds % 3600;
+        
+        timeSegment = seconds / 60;
+        if(timeSegment < 10)
+            time += "0";
+        
+        time += String.valueOf(timeSegment) + ":";      
+        seconds = seconds % 60; 
+        
+        timeSegment = seconds;
+        if(timeSegment < 10)
+            time += "0";
+        
+        time += String.valueOf(timeSegment);
+        
+        return time;        
+    }
+
+    /**
+     * This method is used to disply a message dialog with the received 
+     * ScriptException's information.  The possible exceptions are found in the 
+     * ScriptException class information.
+     *
+     * @param se The ScriptException to display
+     * @see ScriptException
+     */
+    public void ScriptExceptionHandler(ScriptException se) {
+        JOptionPane.showMessageDialog(this, se.getMessage(), "Script Error", JOptionPane.ERROR_MESSAGE);    
+    }
+
+/**
+     * This method is used to disply a message dialog with the received 
+     * SimulationException's information.  The possible exceptions are found in the 
+     * SimulationException class information.
+     *
+     * @param se The SimulationException to display
+     * @see SimulationException
+     */
+    public void SimulationExceptionHandler(SimulationException se) {
+        JOptionPane.showMessageDialog(this, se.getMessage(), "Simulation Error", JOptionPane.ERROR_MESSAGE);    
+    }
+    
+
+      
+    /**
+     * Initilize the GUI swing components.
+     */  
+    private void initComponents() {
+
+        createMenuBar();
+        createTimeAndStatus();
+        createSimulationControl();
+        createParamicsControl();
+        createIncidentManagement();
+        createCMSTrafficDiversion();
+        createAdmin();
+        createEventHistory();   
+
+        addSimulationTab();     
+
+        setMinimumSize(new Dimension(1024, 768));
+        setMaximumSize(new Dimension(1600, 1200));
+        setPreferredSize(new Dimension(1024, 768)); 
+        
+        pack();
+    }
+    
+    /**
+     * Create the menu bar components.
+     */
+    private void createMenuBar() {
+
+        gotoMenuItem = new JMenuItem(new GotoTimeIndexAction(this));        
+        exitMenuItem = new JMenuItem(new ExitAction(this));
+        
+        fileMenu = new JMenu("File");
+        fileMenu.add(gotoMenuItem);
+        fileMenu.add(exitMenuItem);
+        
+        simManagerMenuBar = new JMenuBar();
+        simManagerMenuBar.add(fileMenu);
+        
+        javax.swing.JMenu helpMenu = new javax.swing.JMenu("Help");
+        javax.swing.JMenuItem aboutItem = new javax.swing.JMenuItem("About");
+
+        aboutItem.addActionListener(new java.awt.event.ActionListener(){
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                String ver = RevisionNumber.getString();
+                JOptionPane.showMessageDialog(rootPane, "Version: " + ver, "About", JOptionPane.INFORMATION_MESSAGE);
+            }
+        });
+        
+        helpMenu.add(aboutItem);
+        simManagerMenuBar.add(helpMenu);
+        
+        setJMenuBar(simManagerMenuBar);
+    }
+    
+    /**
+     * Create the time and status boxes, buttons, and listeners.
+     */
+    private void createTimeAndStatus() {
+        
+        simulationTime       = new JPanel();
+        simulationClock      = new JPanel();
+        simulationStatus     = new JLabel("Simulation Status");
+        simulationStatusText = new JLabel("No Script");
+        simulationStatusText.setName("simulationStatusText");
+        simulationStatusText.setFont(new Font("Geneva", Font.BOLD, 14));
+        
+        simulationTime.setLayout(new BorderLayout());       
+        simulationClock.setPreferredSize(new Dimension(100, 60));
+        
+        startButton = new JButton(new StartSimulationAction(this));
+        
+        pauseButton  = new JButton(new PauseSimulationAction(this));
+        resetButton = new JButton(new ResetSimulationAction(this));
+        loadScriptButton = new JButton(new LoadScriptAction(this));
+        loadScriptButton.setAlignmentX(Box.CENTER_ALIGNMENT);
+        
+        startButton.setEnabled(false);
+        pauseButton.setEnabled(false);
+        resetButton.setEnabled(false);
+
+        simulationStatusBox     = new Box(BoxLayout.Y_AXIS);        
+        simulationTimeBox       = new Box(BoxLayout.Y_AXIS);
+        simulationClockBox      = new Box(BoxLayout.X_AXIS);
+        simulationTimeButtonBox = new Box(BoxLayout.X_AXIS);
+        
+        simulationTimeButtonBox.add(loadScriptButton);
+        simulationTimeButtonBox.add(startButton);
+        simulationTimeButtonBox.add(pauseButton);
+        simulationTimeButtonBox.add(resetButton);
+//        currentScript = new JLabel(" no script loaded");
+        //currentScript.setAlignmentX(Box.LEFT_ALIGNMENT);
+//        simulationTimeButtonBox.add (currentScript);
+        
+        simulationStatus.setAlignmentX(Box.CENTER_ALIGNMENT);
+        simulationStatusText.setAlignmentX(Box.CENTER_ALIGNMENT);
+        
+        TitledBorder title = BorderFactory.createTitledBorder(
+                BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Status");
+        title.setTitleJustification(TitledBorder.LEFT);
+        simulationStatusBox.setBorder(title);
+        
+        simulationStatusBox.setMaximumSize(new Dimension(140, 60));
+        simulationStatusBox.setAlignmentX(Box.CENTER_ALIGNMENT);                    
+        
+        simulationStatusBox.add(Box.createVerticalGlue());
+        simulationStatusBox.add(simulationStatusText);
+        simulationStatusBox.add(Box.createVerticalGlue());
+        
+        scriptBox = new Box(BoxLayout.Y_AXIS);
+        scriptBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+        
+        scriptBox.add(simulationStatusBox);
+        scriptBox.add(Box.createVerticalStrut(5));
+        
+        simulationClockLabel = new JLabel("0:00:00");
+        simulationClockLabel.setFont(new Font("Geneva", Font.BOLD, 70));
+        simulationClockLabel.setForeground(Color.BLACK);
+        simulationClockLabel.setBackground(Color.BLACK);
+        simulationClockBox.setForeground(Color.BLACK);
+        simulationClockBox.setBackground(Color.BLACK);
+        simulationClockBox.add(simulationClockLabel);
+        simulationClockBox.setAlignmentX(Box.CENTER_ALIGNMENT); 
+        simulationTimeButtonBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+        simulationTimeBox.add(simulationClockBox);
+        simulationTimeBox.add(simulationTimeButtonBox);
+
+        simulationTimeAndStatusBox = Box.createHorizontalBox();
+        simulationTimeAndStatusBox.setAlignmentX(Box.LEFT_ALIGNMENT);
+        simulationTimeAndStatusBox.setMaximumSize(new Dimension(640, 300));
+        simulationTimeAndStatusBox.setPreferredSize(new Dimension(640, 1600));
+        simulationTimeAndStatusBox.add(Box.createHorizontalStrut(5));
+        simulationTimeAndStatusBox.add(simulationTimeBox);
+        simulationTimeAndStatusBox.add(Box.createHorizontalStrut(20));
+        simulationTimeAndStatusBox.add(scriptBox);
+        simulationTimeAndStatusBox.add(Box.createHorizontalStrut(5));
+        
+        //*** Clock for CAD Tab ***//
+        CADClientClockLabel = new JLabel("0:00:00");
+        CADClientClockLabel.setFont(new Font("Geneva", Font.BOLD, 60));
+        CADClientClockLabel.setForeground(Color.BLACK);
+        CADClientClockLabel.setBackground(Color.BLACK);
+        CADClientClockLabel.setAlignmentX(Box.CENTER_ALIGNMENT);        
+        
+    }
+    
+    
+    /**
+     * Create Simulation Control Box
+     */
+    private void createSimulationControl() {
+        
+        simulationControlBox = new Box(BoxLayout.Y_AXIS);
+        simulationControlBox.add(simulationTimeAndStatusBox);
+                
+        CompoundBorder cBorder = BorderFactory.createCompoundBorder(
+            BorderFactory.createTitledBorder(
+                BorderFactory.createRaisedBevelBorder(), "Simulation Control"),
+                BorderFactory.createEmptyBorder(5,5,5,5));
+
+        
+        simulationControlBox.setBorder(cBorder);    
+    }
+    
+    /**
+     * Create ParamicsControl Box
+     */
+    private void createParamicsControl() {
+        
+        paramicsControlBox = new Box(BoxLayout.Y_AXIS);
+        paramicsControlBox.setAlignmentX(Box.LEFT_ALIGNMENT);
+        paramicsControlBox.setMaximumSize(new Dimension(650, 150));     
+        paramicsControlBox.setMinimumSize(new Dimension(250, 95));  
+        paramicsControlBox.setPreferredSize(new Dimension(380, 95));
+        
+        paramicsStatusBox       = new Box(BoxLayout.X_AXIS);        
+        paramicsStatusLabel     = new JLabel("Status:");
+        paramicsStatusInfoLabel = new JLabel("Unknown");
+        paramicsStatusInfoLabel.setName("paramicsStatusInfoLabel");
+        paramicsStatusBox.add(paramicsStatusLabel);
+        paramicsStatusBox.add(Box.createHorizontalStrut(10));
+        paramicsStatusBox.add(paramicsStatusInfoLabel);
+        paramicsStatusBox.add(Box.createHorizontalGlue());
+        
+        networkIDSpinner = new JSpinner(
+            new SpinnerNumberModel(DEFAULT_NETWORK_ID, 1, MAX_NETWORK_ID, 1));
+        networkIDSpinner.setEnabled(false);     
+        networkIDSpinner.setMaximumSize(new Dimension(60, 30));
+        
+        connectToParamicsButton = new JButton(new ConnectToParamicsAction(this));
+
+        loadParamicsNetworkButton = new JButton(new LoadParamicsNetworkAction(this));
+        loadParamicsNetworkButton.setEnabled(false);
+        loadParamicsNetworkButton.getAction().putValue(
+                LoadParamicsNetworkAction.NETWORK_ID_SPINNER, networkIDSpinner);
+        
+
+        paramicsButtonBox = new Box(BoxLayout.X_AXIS);
+        paramicsButtonBox.add(Box.createHorizontalGlue());
+        paramicsButtonBox.add(connectToParamicsButton);
+        paramicsButtonBox.add(Box.createHorizontalGlue());
+        paramicsButtonBox.add(loadParamicsNetworkButton);
+        paramicsButtonBox.add(Box.createHorizontalStrut(10));
+        paramicsButtonBox.add(networkIDSpinner);
+        paramicsButtonBox.add(Box.createHorizontalGlue());
+
+        paramicsControlBox.add(Box.createVerticalStrut(5));
+        paramicsControlBox.add(paramicsStatusBox);
+        paramicsControlBox.add(Box.createVerticalStrut(5));
+        paramicsControlBox.add(paramicsButtonBox);  
+        paramicsControlBox.add(Box.createVerticalStrut(5));
+                
+        CompoundBorder cBorder = BorderFactory.createCompoundBorder(
+            BorderFactory.createTitledBorder(
+                BorderFactory.createRaisedBevelBorder(), "Paramics Control"),
+                BorderFactory.createEmptyBorder(5,5,5,5));
+
+        
+        paramicsControlBox.setBorder(cBorder);      
+    
+    }   
+    
+    /**
+     * Create the Incident Management portion of the Simulation 
+     * Management Box
+     */        
+    private void createIncidentManagement() {
+    
+        createIncidentListTable();
+        
+        incidentTimeModel = new IncidentTimeSpinnerModel();
+        reschedSpinner = new JSpinner(incidentTimeModel);        
+        reschedSpinner.setEnabled(false);
+        reschedSpinner.setMaximumSize(new Dimension(70,20));
+                
+        
+        triggerButton     = new JButton(new TriggerIncidentAction(this));
+        triggerButton.getAction().putValue(
+                TriggerIncidentAction.INCIDENT_LIST_TABLE, incidentListTable);
+        
+        deleteIncButton   = new JButton(new DeleteIncidentAction(this));
+        deleteIncButton.getAction().putValue(
+                DeleteIncidentAction.INCIDENT_LIST_TABLE, incidentListTable);
+    
+        reschedButton     = new JButton(new RescheduleIncidentAction(this));
+        reschedButton.getAction().putValue(
+                RescheduleIncidentAction.INCIDENT_LIST_TABLE, incidentListTable);
+        reschedButton.getAction().putValue(
+                RescheduleIncidentAction.INCIDENT_TIME_MODEL, incidentTimeModel);
+        
+        addIncidentButton = new JButton(new AddIncidentAction(this));
+        
+        timeScheduledLabel  = new JLabel("Time Scheduled: ");   
+                    
+        triggerButton.setEnabled(false);
+        deleteIncButton.setEnabled(false);
+        reschedButton.setEnabled(false);
+
+        Box temp = new Box(BoxLayout.X_AXIS);
+        temp.setAlignmentX(Box.CENTER_ALIGNMENT);       
+        temp.add(timeScheduledLabel);
+        temp.add(Box.createHorizontalStrut(10));
+        temp.add(reschedSpinner);
+        temp.add(Box.createHorizontalStrut(20));
+        temp.add(reschedButton);        
+
+        incidentManagementReSchedBox = new Box(BoxLayout.Y_AXIS);
+        incidentManagementReSchedBox.setAlignmentX(Box.CENTER_ALIGNMENT);       
+        incidentManagementReSchedBox.add(temp);     
+                
+        Box temp2 = new Box(BoxLayout.X_AXIS);
+        temp2.setAlignmentX(Box.CENTER_ALIGNMENT);
+        temp2.add(triggerButton);
+        temp2.add(Box.createHorizontalStrut(20));
+        temp2.add(deleteIncButton);
+        temp2.add(Box.createHorizontalStrut(20));
+        temp2.add(addIncidentButton);                   
+
+        incidentManagementButtonsBox = new Box(BoxLayout.Y_AXIS);
+        incidentManagementButtonsBox.setAlignmentY(Box.CENTER_ALIGNMENT);
+        incidentManagementButtonsBox.add(temp2);
+        
+        incidentManagementActionBox = new Box(BoxLayout.Y_AXIS);
+        incidentManagementActionBox.setMaximumSize(new Dimension(500, 100));
+        incidentManagementActionBox.setAlignmentX(Box.LEFT_ALIGNMENT);
+        incidentManagementActionBox.add(incidentManagementReSchedBox);      
+        incidentManagementActionBox.add(Box.createVerticalStrut(10));       
+        incidentManagementActionBox.add(incidentManagementButtonsBox);      
+
+        incidentManagementBox = new Box(BoxLayout.Y_AXIS);
+        incidentManagementBox.setAlignmentX(Box.LEFT_ALIGNMENT);
+        incidentManagementBox.setMaximumSize(new Dimension(650, 500));      
+        incidentManagementBox.setMinimumSize(new Dimension(250, 240));  
+        incidentManagementBox.setPreferredSize(new Dimension(380, 240));
+        incidentManagementBox.add(Box.createVerticalStrut(5));
+        incidentManagementBox.add(incidentListPane);        
+        incidentManagementBox.add(Box.createVerticalStrut(10));     
+        incidentManagementBox.add(incidentManagementActionBox);         
+        incidentManagementBox.add(Box.createVerticalStrut(5));
+        
+        CompoundBorder cBorder = BorderFactory.createCompoundBorder(
+            BorderFactory.createTitledBorder(
+                BorderFactory.createRaisedBevelBorder(), "Incident Management"),
+                BorderFactory.createEmptyBorder(5,5,5,5));
+
+        
+        incidentManagementBox.setBorder(cBorder);       
+    
+    }
+    
+    private void createIncidentListTable() {
+    
+        incidentListTableModel = new IncidentListTableModel();    
+        incidentListTableModel.addTableModelListener(new TableModelListener() {
+            public void tableChanged(TableModelEvent arg0) {
+
+                boolean incidentToTrigger = false;
+                
+                for(int i = 0; i < incidentListTableModel.getRowCount(); i++) {
+                    
+                    incidentToTrigger |= (((Long)incidentListTableModel.
+                            getValueAt(i, INCIDENT_LIST_COLUMNS.SCHEDULED_COL.colNum)) != -1); 
+                }                   
+
+                triggerButton.setEnabled(incidentToTrigger);
+                deleteIncButton.setEnabled(incidentToTrigger);
+                reschedButton.setEnabled(incidentToTrigger);
+                reschedSpinner.setEnabled(incidentToTrigger);           
+                
+            }
+        });
+            
+        incidentListTable = new JTable(incidentListTableModel);     
+        incidentListTable.getTableHeader().setReorderingAllowed(false);  
+        incidentListTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+        incidentListTable.setDragEnabled(false);      
+                
+        for(int c = 0; c < incidentListTable.getColumnCount(); c++) {
+            incidentListTable.getColumnModel().getColumn(c).setMinWidth(
+                    incidentListTableModel.getColumnMinWidth(c));
+            incidentListTable.getColumnModel().getColumn(c).setMaxWidth(
+                    incidentListTableModel.getColumnMaxWidth(c));
+            incidentListTable.getColumnModel().getColumn(c).setPreferredWidth(
+                    incidentListTableModel.getColumnPrefWidth(c));
+            incidentListTable.getColumnModel().getColumn(c).setResizable(true);
+            
+            if(c == INCIDENT_LIST_COLUMNS.SCHEDULED_COL.colNum)
+                incidentListTable.getColumnModel().getColumn(c).setCellRenderer(
+                        new IncidentTimeCellRenderer());
+                
+        }
+
+        incidentListPane = new JScrollPane();
+        incidentListPane.setAlignmentX(Box.LEFT_ALIGNMENT);
+        incidentListPane.setMaximumSize(new Dimension(650, 400));       
+        incidentListPane.setMinimumSize(new Dimension(200, 100));   
+        incidentListPane.setPreferredSize(new Dimension(380, 100));
+        incidentListPane.setViewportView(incidentListTable);
+        
+        incidentListTable.addMouseListener(new MouseListener() {
+            public void mouseClicked(MouseEvent e) {}
+            public void mouseEntered(MouseEvent e) {}           
+            public void mouseExited(MouseEvent e) {}            
+            public void mousePressed(MouseEvent e) {}           
+            public void mouseReleased(MouseEvent e)  {
+                long incTime = (Long)incidentListTable.getValueAt(incidentListTable.getSelectedRow(), 
+                        INCIDENT_LIST_COLUMNS.SCHEDULED_COL.colNum);
+                if(incTime != -1) {
+                    incidentTimeModel.setValue(incTime);
+                    triggerButton.setEnabled(true);
+                    deleteIncButton.setEnabled(true);
+                    reschedButton.setEnabled(true);
+                    reschedSpinner.setEnabled(true);
+                }
+                else {
+                    triggerButton.setEnabled(false);
+                    deleteIncButton.setEnabled(false);
+                    reschedButton.setEnabled(false);
+                    reschedSpinner.setEnabled(false);       
+                }
+                
+            }           
+        });
+    }
+
+    /**
+     * Create the cms traffic diversion box.
+     */    
+    private void createCMSTrafficDiversion() {
+    
+        cmsTrafficDiversionBox = new Box(BoxLayout.Y_AXIS);
+        cmsTrafficDiversionBox.setAlignmentX(Box.LEFT_ALIGNMENT);
+        cmsTrafficDiversionBox.setMaximumSize(new Dimension(650, 350));     
+        cmsTrafficDiversionBox.setMinimumSize(new Dimension(200, 145)); 
+        cmsTrafficDiversionBox.setPreferredSize(new Dimension(380, 250));   
+        
+        CompoundBorder cBorder = BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(BorderFactory.createRaisedBevelBorder(), "CMS Diversion Management"),
+                                                                    BorderFactory.createEmptyBorder(5,5,5,5));
+
+        cmsTrafficDiversionBox.setBorder(cBorder);                  
+                        
+        appliedDiversionTableModel = new AppliedDiversionTableModel();
+        appliedDiversionTable = new JTable(appliedDiversionTableModel);
+        appliedDiversionTable.getTableHeader().setReorderingAllowed(false);
+        appliedDiversionTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+        appliedDiversionTable.setCellSelectionEnabled(false);
+        appliedDiversionTable.setRowSelectionAllowed(true);
+        appliedDiversionTable.addMouseListener(new MouseListener() {
+            public void mouseClicked(MouseEvent evt)  {
+                if(evt.getClickCount() >= 2) {
+                    ((ApplyDiversionAction)divertButton.getAction()).showDiversionDialog(
+                            (String)appliedDiversionTableModel.getValueAt(
+                                    appliedDiversionTable.getSelectedRow(),
+                                    APPLIED_DIV_COLUMNS.CMS_ID_COL.colNum));
+                }
+            };
+            public void mouseEntered(MouseEvent arg0)  {};
+            public void mouseExited(MouseEvent arg0)   {};
+            public void mousePressed(MouseEvent arg0)  {};
+            public void mouseReleased(MouseEvent arg0) {};          
+        });
+        
+        for(int c = 0; c < appliedDiversionTable.getColumnCount(); c++) {
+            appliedDiversionTable.getColumnModel().getColumn(c).setMinWidth(
+                    appliedDiversionTableModel.getColumnMinWidth(c));
+            appliedDiversionTable.getColumnModel().getColumn(c).setMaxWidth(
+                    appliedDiversionTableModel.getColumnMaxWidth(c));
+            appliedDiversionTable.getColumnModel().getColumn(c).setPreferredWidth(
+                    appliedDiversionTableModel.getColumnPrefWidth(c));
+            appliedDiversionTable.getColumnModel().getColumn(c).setResizable(false);
+            
+            if(c == APPLIED_DIV_COLUMNS.APPLIED_COL.colNum) {
+                appliedDiversionTable.getColumnModel().getColumn(c).setCellRenderer(
+                        new IncidentTimeCellRenderer());
+            }       
+        }       
+
+        appliedDiversionPane = new JScrollPane();
+        appliedDiversionPane.setAlignmentX(Box.CENTER_ALIGNMENT);       
+        appliedDiversionPane.setMaximumSize(new Dimension(650, 800));       
+        appliedDiversionPane.setMinimumSize(new Dimension(200, 75));    
+        appliedDiversionPane.setPreferredSize(new Dimension(380,100));              
+        appliedDiversionPane.setViewportView(appliedDiversionTable);    
+        
+        cmsIDComboBox = new JComboBox();
+        cmsIDComboBox.setMaximumSize(new Dimension(40, 25));
+        
+        divertButton = new JButton(new ApplyDiversionAction(this));
+        divertButton.getAction().putValue(
+                ApplyDiversionAction.CMS_ID_COMBO_BOX, cmsIDComboBox);
+                
+        appliedDiversionButtonBox = new Box(BoxLayout.X_AXIS);
+        appliedDiversionButtonBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+        appliedDiversionButtonBox.setMaximumSize(new Dimension(1010, 40));
+        appliedDiversionButtonBox.add(Box.createGlue());
+        appliedDiversionButtonBox.add(new JLabel("CMS ID:  "));
+        appliedDiversionButtonBox.add(cmsIDComboBox);
+        appliedDiversionButtonBox.add(Box.createHorizontalStrut(15));
+        appliedDiversionButtonBox.add(divertButton);    
+        appliedDiversionButtonBox.add(Box.createGlue());
+
+        cmsTrafficDiversionBox.add(Box.createVerticalStrut(5));
+        cmsTrafficDiversionBox.add(appliedDiversionPane);       
+        cmsTrafficDiversionBox.add(Box.createVerticalStrut(5));
+        cmsTrafficDiversionBox.add(appliedDiversionButtonBox);      
+        cmsTrafficDiversionBox.add(Box.createVerticalStrut(5));             
+    
+    }
+        
+    /**
+     * Create the main admin box.
+     */            
+    private void createAdmin() {        
+        
+        adminInteractionBox = new Box(BoxLayout.Y_AXIS);
+        adminInteractionBox.setAlignmentX(Box.LEFT_ALIGNMENT);  
+        adminInteractionBox.setMinimumSize(new Dimension(425, 740));    
+        adminInteractionBox.setPreferredSize(new Dimension(425, 740));  
+        adminInteractionBox.setMaximumSize(new Dimension(625, 1975));       
+        
+        adminInteractionBox.add(Box.createVerticalStrut(10));       
+        adminInteractionBox.add(simulationControlBox);
+        adminInteractionBox.add(Box.createVerticalStrut(10));   
+        adminInteractionBox.add(paramicsControlBox);
+        adminInteractionBox.add(Box.createVerticalStrut(10));   
+        adminInteractionBox.add(incidentManagementBox);
+        adminInteractionBox.add(Box.createVerticalStrut(10));   
+        adminInteractionBox.add(cmsTrafficDiversionBox);        
+        adminInteractionBox.add(Box.createVerticalStrut(10));   
+        
+    }
+
+    /**
+     * Create the event history box.
+     */    
+    private void createEventHistory() {
+    
+        eventHistoryPane = new JTabbedPane();
+        
+        eventHistoryBox = new Box(BoxLayout.Y_AXIS);
+        eventHistoryBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+        eventHistoryBox.setMinimumSize(new Dimension(525, 700));    
+        eventHistoryBox.setPreferredSize(new Dimension(525, 700));
+        eventHistoryBox.setMaximumSize(new Dimension(925, 1975));   
+        
+        eventHistoryBox.add(eventHistoryPane);
+        eventHistoryBox.add(Box.createVerticalStrut(10));   
+        
+        CompoundBorder cBorder = BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(BorderFactory.createRaisedBevelBorder(), "Event History"),
+                                                                    BorderFactory.createEmptyBorder(5,5,5,5));
+        
+        eventHistoryBox.setBorder(cBorder);     
+        
+    }
+    
+
+    /**
+     * Create the administrator tab
+     */            
+    private void addSimulationTab() {
+        
+    simulationRightSideBox = new Box(BoxLayout.Y_AXIS);             
+        simulationRightSideBox.add(Box.createVerticalStrut(10));
+        simulationRightSideBox.add(eventHistoryBox);
+        simulationRightSideBox.add(Box.createVerticalStrut(10));    
+                
+        simulationBox = new Box(BoxLayout.X_AXIS);      
+        simulationBox.add(Box.createHorizontalStrut(20));
+        simulationBox.add(adminInteractionBox);
+        simulationBox.add(Box.createHorizontalStrut(20));   
+        simulationBox.add(simulationRightSideBox);
+        simulationBox.add(Box.createHorizontalStrut(20));
+                
+        getContentPane().add(simulationBox);
+    }   
+    
+    private JTabbedPane eventHistoryPane;
+    
+    private JScrollPane incidentListPane; 
+    private JScrollPane appliedDiversionPane;
+
+    private JTable incidentListTable;
+    private JTable appliedDiversionTable;
+    
+    private JPanel simulationTime;
+    private JPanel simulationClock;
+            
+    private JLabel paramicsStatusLabel;
+    private JLabel paramicsStatusInfoLabel;
+    private JLabel simulationStatus;
+    private JLabel simulationClockLabel;
+    private JLabel simulationStatusText;
+    private JLabel timeScheduledLabel;
+    private JLabel CADClientClockLabel;
+    private JLabel currentScript;
+    private Box adminInteractionBox;    
+    private Box simulationRightSideBox;
+    private Box simulationBox;          
+    private Box appliedDiversionButtonBox;  
+    private Box cmsTrafficDiversionBox;     
+    private Box eventHistoryBox;    
+    private Box incidentManagementActionBox;
+    private Box incidentManagementBox;  
+    private Box incidentManagementButtonsBox;
+    private Box incidentManagementReSchedBox;
+    private Box scriptBox;      
+    private Box paramicsButtonBox;
+    private Box paramicsControlBox; 
+    private Box paramicsStatusBox;
+    private Box simulationTimeAndStatusBox;
+    private Box simulationStatusBox;        
+    private Box simulationTimeBox;
+    private Box simulationClockBox;
+    private Box simulationControlBox;
+    private Box simulationTimeButtonBox;
+
+    private IncidentTimeSpinnerModel incidentTimeModel;
+    private JSpinner reschedSpinner;
+    private JSpinner networkIDSpinner;
+    
+    private JButton addIncidentButton;          
+    private JButton deleteIncButton;
+    private JButton loadScriptButton;
+    private JButton divertButton;
+    private JButton reschedButton;
+    private JButton resetButton;
+    private JButton startButton;
+    private JButton pauseButton;
+    private JButton triggerButton;  
+    private JButton connectToParamicsButton;
+    private JButton loadParamicsNetworkButton;
+    
+    private JComboBox cmsIDComboBox;                    
+        
+    private JMenuBar simManagerMenuBar;
+    private JMenu fileMenu;
+    private JMenuItem gotoMenuItem;
+    private JMenuItem exitMenuItem;
+    
+}
+
Index: /branches/trunk/src/tmcsim/simulationmanager/package.html
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/package.html	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/package.html	(revision 82)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+  	This package contains the classes for the Simulation Manager
+  </body>
+</html>
Index: /branches/trunk/src/tmcsim/simulationmanager/IncidentHistoryPanel.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/IncidentHistoryPanel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/IncidentHistoryPanel.java	(revision 82)
@@ -0,0 +1,149 @@
+package tmcsim.simulationmanager;
+
+import java.awt.Dimension;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.border.EtchedBorder;
+
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.simulationmanager.model.IncidentHistoryTableModel;
+import tmcsim.simulationmanager.model.IncidentTimeCellRenderer;
+import tmcsim.simulationmanager.model.LogEntryCellRenderer;
+import tmcsim.simulationmanager.model.IncidentHistoryTableModel.EVENT_HIST_COLUMNS;
+
+/**
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class IncidentHistoryPanel extends JPanel {
+
+    /**  */
+    private JTable eventHistoryTable = null;
+    
+    /**  */
+    private IncidentHistoryTableModel eventHistoryTableModel;
+    
+    
+    public IncidentHistoryPanel() {
+        
+        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+    
+        incTypeLbl = new JLabel("Type:");
+        incTypeLbl.setAlignmentX(Box.LEFT_ALIGNMENT);
+        
+        incTypeTF = new JTextField();
+        incTypeTF.setAlignmentX(Box.LEFT_ALIGNMENT);
+        //incTypeBox.setMinimumSize(new Dimension(50, 20));
+        //incTypeBox.setPreferredSize(new Dimension(100, 20));
+        incTypeTF.setMaximumSize(new Dimension(200, 20));
+        incTypeTF.setEditable(false);
+        incTypeTF.setName("incTypeTF");
+        
+        Box incTypeBox = Box.createVerticalBox();
+        incTypeBox.setAlignmentY(Box.CENTER_ALIGNMENT);
+        incTypeBox.add(incTypeLbl);
+        incTypeBox.add(incTypeTF);
+        incTypeBox.setBorder(BorderFactory.createEmptyBorder(10,0,10,0));
+
+        
+        incLocLbl = new JLabel("Location:");
+        incLocLbl.setAlignmentX(Box.LEFT_ALIGNMENT);
+        
+        incLocTF = new JTextField();
+        incLocTF.setAlignmentX(Box.LEFT_ALIGNMENT);
+        incLocTF.setMaximumSize(new Dimension(800, 20));
+        incLocTF.setEditable(false);
+        incLocTF.setName("incLocTF");
+        
+        Box incLocBox = Box.createVerticalBox();
+        incLocBox.setAlignmentY(Box.CENTER_ALIGNMENT);
+        incLocBox.add(incLocLbl);
+        incLocBox.add(incLocTF);
+                
+        Box incidentInfoBox = Box.createHorizontalBox();
+        incidentInfoBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+        incidentInfoBox.setMaximumSize(new Dimension(1000, 75));
+        incidentInfoBox.add(Box.createHorizontalStrut(10));
+        incidentInfoBox.add(incTypeBox);
+        incidentInfoBox.add(Box.createHorizontalStrut(10));
+        incidentInfoBox.add(incLocBox);
+        incidentInfoBox.add(Box.createHorizontalStrut(10));
+        incidentInfoBox.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), 
+                "Incident Information"));
+        
+        
+
+        eventHistoryTableModel = new IncidentHistoryTableModel();
+        eventHistoryTable = new JTable(eventHistoryTableModel);  
+        eventHistoryTable.getTableHeader().setReorderingAllowed(false);  
+        eventHistoryTable.setName("LogHistory");
+        
+        for(int c = 0; c < eventHistoryTable.getColumnCount(); c++) {
+            eventHistoryTable.getColumnModel().getColumn(c).setMinWidth(
+                    eventHistoryTableModel.getColumnMinWidth(c));
+            eventHistoryTable.getColumnModel().getColumn(c).setMaxWidth(
+                    eventHistoryTableModel.getColumnMaxWidth(c));
+            eventHistoryTable.getColumnModel().getColumn(c).setPreferredWidth(
+                    eventHistoryTableModel.getColumnPrefWidth(c));
+            eventHistoryTable.getColumnModel().getColumn(c).setResizable(true);
+            
+            if(c == EVENT_HIST_COLUMNS.TIME_COL.colNum)
+                eventHistoryTable.getColumnModel().getColumn(c).setCellRenderer(
+                        new IncidentTimeCellRenderer());
+            else if (c == EVENT_HIST_COLUMNS.EVENT_DESC_COL.colNum)
+                eventHistoryTable.getColumnModel().getColumn(c).setCellRenderer(
+                        new LogEntryCellRenderer());            
+                
+        }       
+        
+        logScrollPane     = new JScrollPane(new JLabel(""), 
+                javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
+                javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        logScrollPane.setAlignmentX(Box.CENTER_ALIGNMENT);      
+        logScrollPane.setViewportView(eventHistoryTable);
+        logScrollPane.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Log Entries"));
+        
+    
+        add(incidentInfoBox);
+        add(Box.createVerticalStrut(10));
+        add(logScrollPane);
+    }
+    
+    public void updateIncidentHistory(IncidentEvent event) {
+        
+        if(event.eventInfo.getHeader().type.trim().length() > 0 &&
+            !incTypeTF.getText().trim().equals(event.eventInfo.getHeader().type.trim())) 
+        {
+            incTypeTF.setText(event.eventInfo.getHeader().type.trim());         
+        }
+
+        if(event.eventInfo.getHeader().fullLocation.trim().length() > 0&&
+            !incLocTF.getText().trim().equals(event.eventInfo.getHeader().fullLocation.trim()))
+        {
+            incLocTF.setText(event.eventInfo.getHeader().fullLocation.trim());
+        }
+
+        eventHistoryTableModel.addEvent(event);
+    }
+        
+    private JLabel incTypeLbl;
+    private JLabel incLocLbl;
+    
+    private JTextField incTypeTF;
+    private JTextField incLocTF;
+    
+    private JScrollPane logScrollPane;
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/SimulationManager.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/SimulationManager.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/SimulationManager.java	(revision 82)
@@ -0,0 +1,234 @@
+package tmcsim.simulationmanager;
+
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.File;
+import java.io.FileInputStream;
+import java.rmi.RemoteException;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JOptionPane;
+import javax.swing.UIManager;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+
+/**
+ * Simulation Manager is the main class for this module. The Simulation Manager
+ * is used to control the view and control the simulation. Simulation incidents
+ * are loaded, removed, reschedule, and added from the Simulation Manager. The
+ * Simulation Manager provides functionality for connecting to the paramics
+ * communicator and applying diversions. A history of all events is shown as
+ * well.<br>
+ * The SimulationManager may be started at any point before, during, or after a
+ * simulation has begun. The SimulationManager connects to the CADSimulator and
+ * communicates through Java RMI methods. If two SimulationManagers are started,
+ * the second one started, chronologically, will receive communication from the
+ * CADSimulator. <br><br>
+ * The properties file for the SimulationManager class contains the following
+ * data.<br>
+ * <code>
+ * -----------------------------------------------------------------------------<br>
+ * Host Name The host name where the CADSimulator is located.<br>
+ * Error File The target file to use for error logging.<br>
+ * -----------------------------------------------------------------------------<br>
+ * Example File: <br>
+ * CADSimulatorHost = localhost <br>
+ * ErrorFile = sim_mgr_error.xml <br>
+ * -----------------------------------------------------------------------------<br>
+ * </code>
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2009/04/17 16:27:47 $ $Revision: 1.7
+ */
+public class SimulationManager
+{
+
+    private static final String CONFIG_FILE_NAME = "sim_manager_config.properties";
+    /**
+     * Error logger.
+     */
+    private static Logger simManLogger = Logger.getLogger("tmcsim.simulationmanager");
+
+    /**
+     * Enumeration containing property names.
+     *
+     * @author Matthew Cechini
+     */
+    private static enum PROPERTIES
+    {
+
+        CAD_SIM_HOST("CADSimulatorHost"),
+        CAD_SIM_PORT("CADSimulatorRMIPort"),
+        SCRIPT_DIR("ScriptDir"),
+        FAKE_PARAMICS("FakeParamicsConnection");
+        public String name;
+
+        private PROPERTIES(String n)
+        {
+            name = n;
+        }
+    }
+    /**
+     * Instance of the SimulationManagerModel which communicates with the CAD
+     * Simulator to display the current simulation information. This model class
+     * contains the data that is displayed by the SimulationManagerView class.
+     * The View purely provides a GUI interface for the data contained within
+     * the model.
+     */
+    SimulationManagerModel theSimManagerModel;
+    /**
+     * Instance of the SimulationManagerView class which provides a GUI for the
+     * user to view the current simulation information and to manage the
+     * simulation. The view communicates to the SimulationManagerModel class to
+     * get and set data.
+     */
+    SimulationManagerView theSimManagerView;
+    /**
+     * The Properties object for the Simulation Manager.
+     */
+    private Properties simManagerProperties;
+
+    /**
+     * Constructor. Set communication data members from properties file.
+     * Instantiate the SimulationManager Model and View objects, and set
+     * visibility to true.
+     *
+     * @param propertiesFile Properties file containing info for Simulation
+     * Manager.
+     */
+    public SimulationManager(String propertiesFile) throws SimulationException
+    {
+
+        try
+        {
+            simManagerProperties = new Properties();
+            simManagerProperties.load(new FileInputStream(new File(propertiesFile)));
+
+            SimulationManagerView.SCRIPT_DIR =
+                    simManagerProperties.getProperty(PROPERTIES.SCRIPT_DIR.name).trim();
+
+            //make sure properties aren't null
+            if (simManagerProperties.getProperty(PROPERTIES.CAD_SIM_HOST.name) == null)
+            {
+                throw new Exception("CAD Simulator host property is null.");
+            }
+
+            if (simManagerProperties.getProperty(PROPERTIES.CAD_SIM_PORT.name) == null)
+            {
+                throw new Exception("CAD Simulator port property is null.");
+            }
+
+        } catch (Exception e)
+        {
+            simManLogger.logp(Level.SEVERE, "SimulationManager", "Constructor",
+                    "Exception in reading properties file.", e);
+
+            throw new SimulationException(SimulationException.INITIALIZE_ERROR, e);
+        }
+
+        //Construct the SimulationManagerModel
+        try
+        {
+            theSimManagerModel = new SimulationManagerModel(
+                    simManagerProperties.getProperty(PROPERTIES.CAD_SIM_HOST.name).trim(),
+                    simManagerProperties.getProperty(PROPERTIES.CAD_SIM_PORT.name).trim());
+
+            //Construct the SimulationManagerView and set up the Model-View references.
+            theSimManagerView = new SimulationManagerView(theSimManagerModel);
+            theSimManagerModel.setView(theSimManagerView);
+        } catch (RemoteException re)
+        {
+            simManLogger.logp(Level.SEVERE, "SimulationManager", "Constructor",
+                    "Unable to establish RMI ", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_CONNECT, re);
+        }
+
+        theSimManagerView.addWindowListener(new WindowListener()
+        {
+            public void windowClosed(WindowEvent e)
+            {
+            }
+
+            public void windowOpened(WindowEvent e)
+            {
+            }
+
+            public void windowIconified(WindowEvent e)
+            {
+            }
+
+            public void windowDeiconified(WindowEvent e)
+            {
+            }
+
+            public void windowActivated(WindowEvent e)
+            {
+            }
+
+            public void windowDeactivated(WindowEvent e)
+            {
+            }
+
+            public void windowClosing(WindowEvent e)
+            {
+                theSimManagerModel.disconnect();
+                System.exit(0);
+            }
+        });
+
+        if (Boolean.parseBoolean(simManagerProperties.getProperty(
+                PROPERTIES.FAKE_PARAMICS.name).trim()))
+        {
+            theSimManagerView.setParamicsStatus(PARAMICS_STATUS.CONNECTED);
+        }
+
+        //Show the SimulationManager
+        theSimManagerView.setVisible(true);
+    }
+
+    /**
+     * Load a simulation script from the specified file.
+     *
+     * @param scriptFile the XML file containing the simulation control script
+     * to be run.
+     * @throws ScriptException if the script throws an exception
+     * @throws SimulationException if the simulation throws an exception
+     */
+    public void loadScript(File scriptFile) throws ScriptException, SimulationException
+    {
+        theSimManagerModel.loadScript(scriptFile);
+    }
+
+    /**
+     * Main class.
+     *
+     * @param args Command line arguments.
+     */
+    static public void main(String[] args)
+    {
+        //System.setProperty("swing.defaultlaf", "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
+        if (System.getProperty("CONFIG_DIR") == null)
+        {
+            System.setProperty("CONFIG_DIR", "config");
+        }
+
+        try
+        {
+            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+            new SimulationManager(System.getProperty("CONFIG_DIR") + System.getProperty("file.separator") + CONFIG_FILE_NAME);
+        } catch (Exception e)
+        {
+            simManLogger.logp(Level.SEVERE, "SimulationManager", "Main",
+                    "Error occured initializing application", e);
+
+            JOptionPane.showMessageDialog(null, e.getMessage(),
+                    "Error - Program Exiting", JOptionPane.ERROR_MESSAGE);
+
+            System.exit(-1);
+        }
+
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/SimulationManagerModel.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/SimulationManagerModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/SimulationManagerModel.java	(revision 82)
@@ -0,0 +1,735 @@
+package tmcsim.simulationmanager;
+
+import java.io.File;
+import java.rmi.Naming;
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import tmcsim.cadmodels.CMSDiversion;
+import tmcsim.cadmodels.CMSInfo;
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.common.CADEnums.SCRIPT_STATUS;
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CoordinatorInterface;
+import tmcsim.interfaces.SimulationManagerInterface;
+
+/**
+ * SimulationManagerModel is the model class for the Simulation Manager. All
+ * communication between the Coordinator and the Simulation Manager passes
+ * through this object. The view passes requests through local methods, and the
+ * Coordinator calls remote functions in this object to update the viewed
+ * simulation data.
+ * <br/>
+ * At construction, the SimulationManagerModel registers itself with the
+ * coordinator. Administrative commands for the simulation are received from the
+ * SimlationManagerView class, and then the appropriate Coordinator remote
+ * method is executed. During a simulation, the Coordinator calls remote methods
+ * contained in the SimulationManagerInterface. For a description of those
+ * methods, see the interface's documentation. After construction, this model
+ * class must have its setView() method called to set the reference to its view
+ * class.
+ *
+ * @see SimulationManagerView
+ * @see SimulationManagerInterface
+ * @author Matthew Cechini
+ * @version $Revision: 1.3 $ $Date: 2006/06/06 20:46:41 $
+ */
+@SuppressWarnings("serial")
+public class SimulationManagerModel extends UnicastRemoteObject
+        implements SimulationManagerInterface
+{
+
+    /**
+     * Error Logger.
+     */
+    private Logger simManagerLogger = Logger.getLogger("tmcsim.simulationmanager");
+    /**
+     * RMI interface for communication with the remote Coordinator.
+     */
+    private static CoordinatorInterface theCoorInt;
+    /**
+     * The SimulationManagerView object.
+     */
+    private SimulationManagerView theSimManagerView;
+
+    /**
+     * Constructor. Establishes the RMI communication with the Coordinator.
+     *
+     * @param hostname Host name of the CAD Simulator.
+     * @param portNumber Port number of the CAD Simulator RMI communication.
+     * @throws RemoteException if error in RMI communication
+     * @throws SimulationException if there is an error in registering RMI
+     * methods.
+     */
+    public SimulationManagerModel(String hostname, String portNumber)
+            throws RemoteException, SimulationException
+    {
+        super();
+
+        connect(hostname, portNumber);
+    }
+
+    /**
+     * Connect to the Coordinator's RMI object, and register this object for
+     * callback with the Coordinator.
+     *
+     * @param hostname Host name of the CAD Simulator.
+     * @param portNumber Port number of the CAD Simulator RMI communication.
+     * @throws SimulationException if there is an error creating the RMI
+     * connection.
+     */
+    protected void connect(String hostname, String portNumber)
+            throws SimulationException
+    {
+
+        String coorIntURL = "";
+
+        try
+        {
+            coorIntURL = "rmi://" + hostname + ":" + portNumber + "/coordinator";
+
+            theCoorInt = (CoordinatorInterface) Naming.lookup(coorIntURL);
+            theCoorInt.registerForCallback(this);
+
+        } catch (Exception e)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "establishRMIConnection", "Unable to establish RMI "
+                    + "communication with the CAD Simulator.  URL <" + coorIntURL + ">", e);
+
+            throw new SimulationException(SimulationException.CAD_SIM_CONNECT, e);
+        }
+    }
+
+    /**
+     * This method unregisters this SimulationManager from the Coordinator and
+     * closes the RMI communication.
+     */
+    public void disconnect()
+    {
+        try
+        {
+            theCoorInt.unregisterForCallback(this);
+            theCoorInt = null;
+        } catch (Exception e)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "closeSimManager", "Exception in unregistering Simulation"
+                    + "Manager from the CAD Simulator.", e);
+        }
+    }
+
+    /**
+     * Set the local reference to the SimulationManagerView object. The view is
+     * updated with the current simulation time, script status, and Paramics
+     * connection status.
+     *
+     * @param newView The instance of the SimulationManagerView class.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void setView(SimulationManagerView newView) throws SimulationException
+    {
+        try
+        {
+            theSimManagerView = newView;
+
+            theSimManagerView.tick(theCoorInt.getCurrentSimulationTime());
+            theSimManagerView.setScriptStatus(theCoorInt.getScriptStatus());
+            theSimManagerView.setParamicsStatus(theCoorInt.getParamicsStatus());
+
+            initialize();
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "startSimulation", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+
+    }
+
+    /**
+     * This method initializes the SimulationManager with all current simulation
+     * data from the Coordinator. If the simulation is running when the
+     * Simulation Manager is initialized, all previously occured incidents,
+     * events, and current diversion must be displayed. This method first loads
+     * the list of current incidents from the coordinator, then the triggered
+     * events, followed by all CMSInfo objects. The SimulationManagerView is
+     * notified of any current diversions within the CMSInfo objects.
+     *
+     * @throws SimulationException if there is an error in RMI communication or
+     * if the SimulationManagerView reference has not been set.
+     */
+    protected void initialize() throws SimulationException
+    {
+
+        try
+        {
+
+            //Load all incidents from Coordinator
+            loadIncidents();
+
+            //Load all triggered incidents from Coordinator
+            TreeMap<Integer, Vector<IncidentEvent>> tempEvents = theCoorInt.getTriggeredEvents();
+            for (Integer key : tempEvents.keySet())
+            {
+                for (IncidentEvent ie : tempEvents.get(key))
+                {
+                    eventOccured(key, ie);
+                }
+            }
+
+            //Load all current diversions from the Coordinator
+            TreeSet<String> cmsIDs = theCoorInt.getCMSIDs();
+            CMSInfo cmsinfo = null;
+            for (String cms_id : cmsIDs)
+            {
+                cmsinfo = theCoorInt.getCMSDiversionInfo(cms_id);
+
+                for (CMSDiversion div : cmsinfo.possibleDiversions)
+                {
+                    if (div.getCurrDiv() != 0)
+                    {
+                        theSimManagerView.addDiversion(cmsinfo, div);
+                    }
+                }
+            }
+
+            //Send the list of CMS IDs to the View.
+            theSimManagerView.setCMS_IDList(cmsIDs.toArray());
+
+        } catch (Exception e)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "initialize", "Unable to initialize the SimulationManager.", e);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, e);
+        }
+    }
+
+    public void tick(long theTime) throws RemoteException
+    {
+        if (theSimManagerView != null)
+        {
+            theSimManagerView.tick(theTime);
+        }
+    }
+
+    public void incidentAdded(Incident newIncident) throws RemoteException
+    {
+        if (theSimManagerView != null)
+        {
+            Integer logNum = new Integer(newIncident.getLogNumber());
+
+            theSimManagerView.addIncident(newIncident);
+            theSimManagerView.addIncidentTab(logNum);
+        }
+    }
+
+    public void incidentStarted(Integer logNumber) throws RemoteException
+    {
+        if (theSimManagerView != null)
+        {
+            theSimManagerView.startIncident(logNumber);
+        }
+    }
+
+    public void incidentRemoved(Integer logNumber) throws RemoteException
+    {
+        if (theSimManagerView != null)
+        {
+            theSimManagerView.removeIncident(logNumber);
+            theSimManagerView.removeIncidentTab(logNumber);
+        }
+    }
+
+    public void eventOccured(Integer logNumber, IncidentEvent theEvent) throws RemoteException
+    {
+        if (theSimManagerView != null)
+        {
+            theSimManagerView.addIncidentEvent(logNumber, theEvent);
+        }
+    }
+
+    public void setScriptStatus(SCRIPT_STATUS newStatus) throws RemoteException
+    {
+        if (theSimManagerView != null)
+        {
+            theSimManagerView.setScriptStatus(newStatus);
+        }
+    }
+
+    public void setParamicsStatus(PARAMICS_STATUS newStatus) throws RemoteException
+    {
+        if (theSimManagerView != null)
+        {
+            theSimManagerView.setParamicsStatus(newStatus);
+        }
+
+    }
+
+    /**
+     * This method passes the view's request to start the simulation on to the
+     * remote coordinator.
+     *
+     * @throws ScriptException if an error occurs in started the simulation.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void startSimulation() throws ScriptException, SimulationException
+    {
+
+        try
+        {
+            theCoorInt.startSimulation();
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "startSimulation", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+
+    }
+
+    /**
+     * This method passes the view's request to reset the simulation on to the
+     * remote coordinator. The View's simulation time is reset to 0. The view's
+     * incident tabs are cleared and incident list reset and initialized with
+     * the current list of incidents. The list of diversions is also reset.
+     *
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void resetSimulation() throws SimulationException
+    {
+
+        try
+        {
+            theCoorInt.resetSimulation();
+
+            tick(0);
+            theSimManagerView.resetIncidentTabs();
+            theSimManagerView.resetIncidents();
+            theSimManagerView.resetDiversions();
+
+            loadIncidents();
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "resetSimulation", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+
+    }
+
+    /**
+     * This method passes the view's request to pause the simulation on to the
+     * remote coordinator.
+     *
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void pauseSimulation() throws SimulationException
+    {
+
+        try
+        {
+            theCoorInt.pauseSimulation();
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "pauseSimulation", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+
+    }
+
+    /**
+     * This method passes the view's request to goto a new simulation time on to
+     * the remote coordinator.
+     *
+     * @param time Simulation time
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void gotoSimulationTime(long time) throws SimulationException
+    {
+
+        try
+        {
+            theCoorInt.gotoSimulationTime(time);
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "gotoSimulationTime", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to load a script file on to the
+     * remote Coordinator. If this is successful, the View's incident tabs are
+     * cleared and incident list reset and initialized with the current list of
+     * incidents. If the load is not successful, the View's incident tabs and
+     * incident list are cleared. The list of diversions is also reset.
+     *
+     * @param scriptFile the File chosen by the user in the open file dialog.
+     * @throws ScriptException if an error occurs in reading the script file.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void loadScript(File scriptFile) throws ScriptException, SimulationException
+    {
+
+        try
+        {
+            theCoorInt.loadScriptFile(scriptFile);
+
+            tick(0);
+            theSimManagerView.resetIncidentTabs();
+            theSimManagerView.resetIncidents();
+            theSimManagerView.resetDiversions();
+
+            loadIncidents();
+        } catch (ScriptException se)
+        {
+            theSimManagerView.resetIncidentTabs();
+            theSimManagerView.resetIncidents();
+            theSimManagerView.resetDiversions();
+            throw se;
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "loadScript", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to create a connection between the
+     * CADSimulator and the Paramics Communicator on to the remote Coordinator.
+     *
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void connectToParamics() throws SimulationException
+    {
+
+        try
+        {
+            theCoorInt.connectToParamics();
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "connectToParamics", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to drop the connection between the
+     * CADSimulator and the Paramics Communicator on to the remote Coordinator.
+     *
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void disconnectFromParamics() throws SimulationException
+    {
+
+        try
+        {
+            theCoorInt.disconnectFromParamics();
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "disconnectFromParamics", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to load a paramics network on to
+     * the remote Coordinator.
+     *
+     * @param networkID The unique network ID that is being loaded
+     *
+     * @throws ScriptException if there is an error in loading the network
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void loadParamicsNetwork(int networkID) throws ScriptException, SimulationException
+    {
+        try
+        {
+            theCoorInt.loadParamicsNetwork(networkID);
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "loadParamicsNetwork", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to get the value of the currently
+     * loaded paramics network on to the remote Coordinator.
+     *
+     * @return Value of the loaded paramics network.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public int getParamicsNetworkLoaded() throws SimulationException
+    {
+        try
+        {
+            return theCoorInt.getParamicsNetworkLoaded();
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "getParamicsNetworkLoaded", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to trigger an incident on to the
+     * remote Coordinator.
+     *
+     * @throws ScriptException if an error occurs in triggering an event.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void triggerIncident(int logNumber) throws ScriptException, SimulationException
+    {
+        try
+        {
+            theCoorInt.triggerIncident(logNumber);
+
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "startIncident", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to add an incident into the
+     * simulation on to the remote Coordinator.
+     *
+     * @param newIncident Incident to add to the simulation
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void addIncident(final Incident newIncident) throws SimulationException
+    {
+
+        try
+        {
+            theCoorInt.addIncident(newIncident);
+
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "addIncident", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+
+    }
+
+    /**
+     * This method passes the view's request to delete an incident from the
+     * simulation on to the remote Coordinator.
+     *
+     * @throws ScriptException if an error occurs in deleting an event.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void deleteIncident(int logNumber) throws ScriptException, SimulationException
+    {
+
+        try
+        {
+            theCoorInt.deleteIncident(logNumber);
+
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "deleteIncident", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to reschedule an incident on to the
+     * remote Coordinator.
+     *
+     * @param newTime New simulation time (in seconds).
+     * @throws ScriptException if the Incident has already started or the time
+     * for recheduling has already passed.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void rescheduleIncident(long newTime, int logNumber) throws ScriptException, SimulationException
+    {
+
+        try
+        {
+            theCoorInt.rescheduleIncident(logNumber, newTime);
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "rescheduleIncident", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to get the current list of
+     * Incidents loaded into the simulation on to the remote Coordinator.
+     *
+     * @return Vector The Vector of currently loaded incidents.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public Vector<Incident> getIncidentList() throws SimulationException
+    {
+
+        try
+        {
+            return theCoorInt.getIncidentList();
+
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "getIncidentList", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to get the CMSInfo object that
+     * corresponds to a unique CMS ID String on to the remote Coordinator.
+     *
+     * @param cms_id Unique CMS ID String.
+     * @return CMSInfo object corresponding to the parameter CMS id.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public CMSInfo getCMSDiversionInfo(String cms_id) throws SimulationException
+    {
+
+        try
+        {
+            return theCoorInt.getCMSDiversionInfo(cms_id);
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "getCMSDiversionInfo", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method passes the view's request to update diversions for a CMS on
+     * to the remote Coordinator.
+     *
+     * @param diversion CMS diversions information to apply.
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    public void applyDiversions(CMSInfo diversion) throws SimulationException
+    {
+
+        try
+        {
+            theCoorInt.applyDiversions(diversion);
+
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "applyDiversions", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+    }
+
+    /**
+     * This method loads the current list of incidents from the Coordinator into
+     * the SimulationManager. For each incident in the simulation, notify the
+     * view to add a new incident tab. If the Incident has begun in the
+     * simulation, call the incidentStarted() method to update the view
+     * accordingly.
+     *
+     * @throws SimulationException if there is an error in RMI communication to
+     * the CAD Simulator.
+     */
+    private void loadIncidents() throws SimulationException
+    {
+
+        try
+        {
+            for (Incident inc : theCoorInt.getIncidentList())
+            {
+
+                Integer logNum = new Integer(inc.getLogNumber());
+
+                theSimManagerView.addIncidentTab(logNum);
+                theSimManagerView.addIncident(inc);
+
+                if (inc.getSecondsToStart() < theCoorInt.getCurrentSimulationTime())
+                {
+                    incidentStarted(logNum);
+                }
+            }
+        } catch (RemoteException re)
+        {
+            simManagerLogger.logp(Level.SEVERE, "SimulationManagerModel",
+                    "loadIncidentListTable", "Unable to communicate with the "
+                    + "CAD Simulator.", re);
+
+            throw new SimulationException(SimulationException.CAD_SIM_COMM, re);
+        }
+
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/ExitAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/ExitAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/ExitAction.java	(revision 82)
@@ -0,0 +1,48 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import tmcsim.simulationmanager.SimulationManagerView;
+
+/**
+ * ExitAction is an AbstractAction that is used for exiting the Simulation
+ * Manager application. When the action is performed, the action prompts the
+ * user to confirm the exit, and then disposes of the SimulationManagerView
+ * class.
+ *
+ * @author Matthew Cechini
+ * @author jdalbey 06/23/2016 Removed confirmation prompt to simplify system
+ * testing.
+ */
+@SuppressWarnings("serial")
+public class ExitAction extends AbstractAction
+{
+
+    /**
+     * Reference to the SimulationManagerView object.
+     */
+    private SimulationManagerView theSimManagerView = null;
+
+    /**
+     * Constructor.
+     *
+     * @param view View class object for the Simulation Manager.
+     */
+    public ExitAction(SimulationManagerView view)
+    {
+        super("Exit");
+
+        theSimManagerView = view;
+    }
+
+    public void actionPerformed(ActionEvent evt)
+    {
+        theSimManagerView.dispose();
+//        if(JOptionPane.showConfirmDialog(
+//                null, "Exit Simulation Manager?", "Confirm Exit",
+//                JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
+//        {
+//            theSimManagerView.dispose();
+//        }
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/LoadParamicsNetworkAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/LoadParamicsNetworkAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/LoadParamicsNetworkAction.java	(revision 82)
@@ -0,0 +1,89 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.AbstractAction;
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.simulationmanager.SimulationManagerView;
+
+/**
+ * LoadParamicsNetworkAction is an AbstractAction that is used for loading 
+ * a Paramics traffic network.  When the action is performed, the action gets
+ * the network ID from the NetworkIDSpinner in the SimulationManagerView.  The 
+ * action sets the paramics status to SENDING_NETWORK_ID and calls the
+ * SimulationManagerModel to load the Paramics network.
+ * <br/>
+ * <br/>
+ * The NETWORK_ID_SPINNER key should be assigned the NetworkIDSpinner object
+ * from the SimulationManagerView object.
+ * @author Matthew Cechini
+ */
+@SuppressWarnings("serial")
+public class LoadParamicsNetworkAction extends AbstractAction {
+    
+    /** 
+     * This key string is used to reference the NetworkIDSpinner object
+     * from the SimulationManagerView object.
+     */
+    public static final String NETWORK_ID_SPINNER = "NETWORK_ID_SPINNER";
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+    
+    /** 
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */ 
+    public LoadParamicsNetworkAction(SimulationManagerView view) {
+        super("Load Network");
+        
+        theSimManagerView = view;
+    }
+
+    public void actionPerformed(ActionEvent evt) {
+        if(getValue(NETWORK_ID_SPINNER) == null) {
+            Logger.getLogger("tmcsim.simulationmanager.actions").logp(
+                    Level.WARNING, "LoadParamicsNetworkAction", 
+                    "actionPerformed", 
+                    "Object for NETWORK_ID_SPINNER is null.");
+            return;
+        }
+        
+        Runnable loadNetworkRunnable = new Runnable(){      
+            public void run() { 
+                try { 
+                
+                    int id = ((SpinnerNumberModel) ((JSpinner) getValue(NETWORK_ID_SPINNER))
+                            .getModel()).getNumber().intValue();
+                    
+                    theSimManagerView.setParamicsStatus(
+                            PARAMICS_STATUS.SENDING_NETWORK_ID);
+                            
+                    theSimManagerView.getModel().loadParamicsNetwork(id);
+                     
+                }
+                catch (NumberFormatException nfe) {
+                    theSimManagerView.ScriptExceptionHandler(
+                            new ScriptException("Invalid Network ID"));
+                }
+                catch (ScriptException se) {
+                    theSimManagerView.ScriptExceptionHandler(se);
+                }
+                catch (SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);   
+                }           
+            }
+        };
+
+        Thread theThread = new Thread(loadNetworkRunnable);
+        theThread.start();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/ConnectToParamicsAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/ConnectToParamicsAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/ConnectToParamicsAction.java	(revision 82)
@@ -0,0 +1,73 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+
+import tmcsim.common.SimulationException;
+import tmcsim.common.CADEnums.PARAMICS_STATUS;
+import tmcsim.simulationmanager.SimulationManagerView;
+
+/**
+ * ConnectToParamicsAction is an AbstractAction that is used for connecting
+ * and disconnecting to/from the Paramics traffic modeler.  When the action 
+ * is performed, the action determines whether a connection currently exists.
+ * If no connection has been made, the paramics status is set to CONNECTING and
+ * the SimulationManagerModel is called to connect to the Paramics communicator.
+ * If a connection has been made, the action prompts the user to confirm the
+ * disconnection and then calls the SimulationManagerModel to disconnect from
+ * Paramics.
+ * @author Matthew Cechini
+ */
+@SuppressWarnings("serial")
+public class ConnectToParamicsAction extends AbstractAction {
+
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+    
+    /** 
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */     
+    public ConnectToParamicsAction(SimulationManagerView view) {
+        super("Connect to Paramics");
+        
+        theSimManagerView = view;
+    }
+    
+    public void actionPerformed(ActionEvent evt) {
+        Runnable connectRunnable = new Runnable(){      
+            public void run() { 
+                if(!theSimManagerView.isConnectedToParamics()) {
+                    try{ 
+                        theSimManagerView.setParamicsStatus(PARAMICS_STATUS.CONNECTING);
+                        
+                        theSimManagerView.getModel().connectToParamics();               
+                    }
+                    catch (SimulationException se) {
+                        theSimManagerView.SimulationExceptionHandler(se);   
+                    }
+                }
+                else {   
+                    if(JOptionPane.showConfirmDialog(null, 
+                            "Disconnecting from paramics will require \n" +
+                            "  restarting the Paramics Communicator.  \n" +
+                            "           Do you wish to continue?") == JOptionPane.YES_OPTION) {
+                        
+                        try { 
+                            theSimManagerView.getModel().disconnectFromParamics();                  
+                        }
+                        catch (SimulationException se) {
+                            theSimManagerView.SimulationExceptionHandler(se);   
+                        }                   
+                    }
+                }           
+            }
+        };
+
+        Thread theThread = new Thread(connectRunnable);
+        theThread.start();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/GotoTimeIndexAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/GotoTimeIndexAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/GotoTimeIndexAction.java	(revision 82)
@@ -0,0 +1,73 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+
+import tmcsim.common.SimulationException;
+import tmcsim.simulationmanager.SimulationManagerView;
+import tmcsim.simulationmanager.dialogs.GotoTimeIndexDialog;
+
+/**
+ * GotoTimeIndexAction is an AbstractAction that is used for moving the 
+ * simulation to a new time mark.  When the action is performed, the action 
+ * shows the GotoTimeIndexDialog to prompt the user for a new time mark.
+ * If the user chooses a new time, the action asks the user to confirm 
+ * the Goto action and then calls the SimulationManagerModel to pause,
+ * reset, and then goto the new simulation time.  This is is done
+ * to ensure the current simulation is paused, to clear all current
+ * incident info from the view, and then to reset the simulation time.
+ * @author Matthew Cechini
+ */
+@SuppressWarnings("serial")
+public class GotoTimeIndexAction extends AbstractAction {
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+    
+    /** 
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */
+    public GotoTimeIndexAction(SimulationManagerView view) {
+        super("Goto");
+        
+        theSimManagerView = view;       
+    }
+    
+    public void actionPerformed(ActionEvent evt) {
+        Runnable gotoRunnable = new Runnable() {
+            public void run() {
+
+                try {                   
+                    GotoTimeIndexDialog gotoDialog = 
+                        new GotoTimeIndexDialog(null, theSimManagerView.getCurrentSimTime());
+                    
+                    if(gotoDialog.gotoApplied) {
+                        
+                        String gotoValue = gotoDialog.getGotoTime();
+                        
+                        if(JOptionPane.showConfirmDialog(null, 
+                                "Do you wish to reposition the simulation time to " + gotoValue,
+                                "Confirm Goto",
+                                JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) 
+                        {       
+                            theSimManagerView.getModel().pauseSimulation();
+                            theSimManagerView.getModel().resetSimulation();                 
+                            theSimManagerView.getModel().gotoSimulationTime(
+                                    SimulationManagerView.stringTimeToLong(gotoValue));
+                        }
+                    }
+                }
+                catch (SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);
+                }
+            }
+        };
+        
+        Thread theThread = new Thread(gotoRunnable);
+        theThread.start();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/DeleteIncidentAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/DeleteIncidentAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/DeleteIncidentAction.java	(revision 82)
@@ -0,0 +1,89 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.AbstractAction;
+import javax.swing.JTable;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.simulationmanager.SimulationManagerView;
+import tmcsim.simulationmanager.model.IncidentListTableModel.INCIDENT_LIST_COLUMNS;
+
+
+/**
+ * DeleteIncidentAction is an AbstractAction that is used for removing 
+ * an incident from the simulation that has not been started.  When the action 
+ * is performed, the incident selected in the incident list table on the 
+ * SimulationManagerView is chosen for triggering.  If the user has not 
+ * selected an incident to trigger, an information window is shown to prompt
+ * the user to select an incident.  If an incident has been selected, the 
+ * action calls the SimulationManagerModel with the Incident Log Number to remove 
+ * the incident.
+ * <br/>
+ * <br/>
+ * The NETWORK_ID_SPINNER key should be assigned the IncidentListTable object
+ * from the SimulationManagerView object.
+ */     
+@SuppressWarnings("serial")
+public class DeleteIncidentAction extends AbstractAction {
+
+    /** 
+     * This key string is used to reference the IncidentListTable object
+     * from the SimulationManagerView object.
+     */
+    public static final String INCIDENT_LIST_TABLE = "INCIDENT_LIST_TABLE";
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+        
+    /** 
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */     
+    public DeleteIncidentAction(SimulationManagerView view) {
+        super("Delete");
+        
+        theSimManagerView = view;
+    }
+    
+    
+    public void actionPerformed(ActionEvent evt) {
+        if(getValue(INCIDENT_LIST_TABLE) == null) {
+            Logger.getLogger("tmcsim.simulationmanager.actions").logp(
+                    Level.WARNING, "LoadParamicsNetworkAction", 
+                    "actionPerformed", 
+                    "Object for INCIDENT_LIST_TABLE is null.");
+            return;
+        }
+        
+        Runnable deleteRunnable = new Runnable(){       
+            public void run() { 
+                try {                   
+                    if(((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRowCount() == 0)  {
+                        throw new ScriptException("Please select the incident you wish to delete.");
+                    }
+                        
+                    int selectedRow        = ((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRow(); 
+                    Integer incidentLogNum = (Integer)((JTable)getValue(INCIDENT_LIST_TABLE)).getValueAt(
+                            selectedRow, INCIDENT_LIST_COLUMNS.LOG_NUM_COL.colNum);
+                    
+                    theSimManagerView.getModel().deleteIncident(incidentLogNum);                        
+                                        
+                }
+                catch (ScriptException se) {
+                    theSimManagerView.ScriptExceptionHandler(se);           
+                }
+                catch (SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);   
+                }   
+            }
+        };
+
+        Thread theThread = new Thread(deleteRunnable);
+        theThread.start();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/RescheduleIncidentAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/RescheduleIncidentAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/RescheduleIncidentAction.java	(revision 82)
@@ -0,0 +1,118 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+import java.util.StringTokenizer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.AbstractAction;
+import javax.swing.JTable;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.simulationmanager.SimulationManagerView;
+import tmcsim.simulationmanager.model.IncidentTimeSpinnerModel;
+import tmcsim.simulationmanager.model.IncidentListTableModel.INCIDENT_LIST_COLUMNS;
+
+
+/**
+ * RescheduleIncidentAction is an AbstractAction that is used for rescheduling
+ * an incident that has been loaded into the simulation, but not started. 
+ * When the action is performed, the incident selected in the incident list 
+ * table on the SimulationManagerView is chosen for triggering.  If the user has
+ * not selected an incident to trigger, an information window is shown to prompt
+ * the user to select an incident.  If an incident has been selected, the
+ * action calls the SimulationManagerModel with the Incident Log Number and
+ * the time parsed from the IncidentTimeModel object.
+ * <br/>
+ * <br/>
+ * The INCIDENT_LIST_TABLE key should be assigned the IncidentListTable object
+ * from the SimulationManagerView object.
+ * <br/>
+ * <br/>
+ * The INCIDENT_TIME_MODEL key should be assigned the IncidentTimeModel object
+ * from the SimulationManagerView object.
+ * @author Matthew Cechini
+ */     
+@SuppressWarnings("serial")
+public class RescheduleIncidentAction extends AbstractAction {
+    
+    /** 
+     * This key string is used to reference the IncidentListTable object
+     * from the SimulationManagerView object.
+     */
+    public static final String INCIDENT_LIST_TABLE = "INCIDENT_LIST_TABLE";
+    
+    /** 
+     * This key string is used to reference the IncidentTimeModel object
+     * from the SimulationManagerView object.
+     */
+    public static final String INCIDENT_TIME_MODEL = "INCIDENT_TIME_MODEL";
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+    
+    /**
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */
+    public RescheduleIncidentAction(SimulationManagerView view) {
+        super("Reschedule");
+        
+        theSimManagerView = view;
+    }
+    
+    public void actionPerformed(ActionEvent evt) {
+        if(getValue(INCIDENT_LIST_TABLE) == null) {
+            Logger.getLogger("tmcsim.simulationmanager.actions").logp(
+                    Level.WARNING, "RescheduleIncidentAction", 
+                    "actionPerformed", 
+                    "Object for INCIDENT_LIST_TABLE is null.");
+            return;
+        }
+        if(getValue(INCIDENT_TIME_MODEL) == null) {
+            Logger.getLogger("tmcsim.simulationmanager.actions").logp(
+                    Level.WARNING, "RescheduleIncidentAction", 
+                    "actionPerformed", 
+                    "Object for INCIDENT_TIME_MODEL is null.");
+            return;
+        }
+        
+        Runnable reschedRunnable = new Runnable(){      
+            public void run() { 
+                try {
+                    if(((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRowCount() == 0) 
+                        throw new ScriptException("Please select the incident you wish to reschedule.");        
+
+                    int selectedRow        = ((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRow();
+                    Integer incidentLogNum = (Integer)((JTable)getValue(INCIDENT_LIST_TABLE)).getValueAt(
+                            selectedRow, INCIDENT_LIST_COLUMNS.LOG_NUM_COL.colNum);
+                    
+
+                    StringTokenizer strTok = new StringTokenizer(
+                            (String)((IncidentTimeSpinnerModel)getValue(INCIDENT_TIME_MODEL)).getValue(), ":");
+                    
+                    Long newTime = Long.parseLong(strTok.nextToken()) * 3600  +
+                                   Long.parseLong(strTok.nextToken()) * 60  +
+                                   Long.parseLong(strTok.nextToken());
+                    
+                    theSimManagerView.getModel().rescheduleIncident(newTime, incidentLogNum);
+                    
+                    ((JTable)getValue(INCIDENT_LIST_TABLE)).setValueAt(newTime, selectedRow, 
+                            INCIDENT_LIST_COLUMNS.SCHEDULED_COL.colNum);
+                    
+                }
+                catch (ScriptException se) {
+                    theSimManagerView.ScriptExceptionHandler(se);           
+                }
+                catch (SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);   
+                }
+            }
+        };
+
+        Thread theThread = new Thread(reschedRunnable);
+        theThread.start();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/TriggerIncidentAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/TriggerIncidentAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/TriggerIncidentAction.java	(revision 82)
@@ -0,0 +1,79 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.AbstractAction;
+import javax.swing.JTable;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.simulationmanager.SimulationManagerView;
+
+/**
+ * TriggerIncidentAction is an AbstractAction that is used for triggering
+ * a simulation incident.  When the action is performed, the incident selected
+ * in the incident list table on the Simulation Manager is chosen for triggering.
+ * This is done by sending the incident's log number to the Simulation Manager
+ * model.  If an incident is not selected in the table, a notification
+ * window is shown to the user prompting for an incident to be selected.
+ * <br/>
+ * <br/>
+ * The INCIDENT_LIST_TABLE key must be assigned the IncidentListTable object
+ * from the SimulationManagerView object.
+ */     
+@SuppressWarnings("serial")
+public class TriggerIncidentAction extends AbstractAction {
+
+    /** 
+     * This key string is used to reference the IncidentListTable object
+     * from the SimulationManagerView object.
+     */
+    public static final String INCIDENT_LIST_TABLE = "INCIDENT_LIST_TABLE";
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+    
+    /** 
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */
+    public TriggerIncidentAction(SimulationManagerView view) {
+        super("Trigger");
+        
+        theSimManagerView = view;
+    }
+    
+    public void actionPerformed(ActionEvent evt) {
+        if(getValue(INCIDENT_LIST_TABLE) == null) {
+            Logger.getLogger("tmcsim.simulationmanager.actions").logp(
+                    Level.WARNING, "TriggerIncidentAction", "actionPerformed", 
+                    "Object for INCIDENT_LIST_TABLE is null.");
+            return;
+        }
+        
+        Runnable triggerRunnable = new Runnable(){      
+            public void run() { 
+                try {
+                    if(((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRowCount() == 0) 
+                        throw new ScriptException("Please select the incident you wish to trigger.");           
+                        
+                    theSimManagerView.getModel().triggerIncident(
+                            (Integer)((JTable)getValue(INCIDENT_LIST_TABLE)).getValueAt(
+                                    ((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRow(), 0));
+                }
+                catch (ScriptException se) {
+                    theSimManagerView.ScriptExceptionHandler(se);           
+                }
+                catch (SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);   
+                }
+            }
+        };
+
+        Thread theThread = new Thread(triggerRunnable);
+        theThread.start();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/PauseSimulationAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/PauseSimulationAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/PauseSimulationAction.java	(revision 82)
@@ -0,0 +1,47 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+
+import tmcsim.common.SimulationException;
+import tmcsim.simulationmanager.SimulationManagerView;
+
+/**
+ * PauseSimulationAction is an AbstractAction that is used for pausing
+ * the simulation. When the action is performed, the action
+ * calls the SimulationManagerModel to pause the simulation.
+ */
+@SuppressWarnings("serial")
+public class PauseSimulationAction extends AbstractAction {
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+
+    /** 
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */
+    public PauseSimulationAction(SimulationManagerView view) {
+        super("Pause");
+        
+        theSimManagerView = view;
+    }
+
+    public void actionPerformed(ActionEvent evt) {
+        Runnable pauseRunnable = new Runnable(){        
+            public void run() { 
+                try {
+                    theSimManagerView.getModel().pauseSimulation();
+                }
+                catch(SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);
+                }
+            }
+        };
+
+        Thread theThread = new Thread(pauseRunnable);
+        theThread.start();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/StartSimulationAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/StartSimulationAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/StartSimulationAction.java	(revision 82)
@@ -0,0 +1,67 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.simulationmanager.SimulationManagerView;
+
+/**
+ * StartSimulationAction is an AbstractAction that is used for starting
+ * the simulation. When the action is performed, the action checks
+ * whether the a connection has been made to Paramics.  If not, the user
+ * is prompted whether they want to continue without a connection to Paramics.
+ * If not, the action returns.  If there is a connection, or the user wishes to
+ * continue without, the action calls the SimulationManagerModel to start the 
+ * simulation.
+ * @author Matthew Cechini
+ */
+@SuppressWarnings("serial")
+public class StartSimulationAction extends AbstractAction {
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+    
+    /**
+     * Constructor.
+     * @param View class object for the Simulation Manager.
+     */
+    public StartSimulationAction(SimulationManagerView view) {
+        super("Start");
+        
+        theSimManagerView = view;
+    }
+    
+    public void actionPerformed(ActionEvent evt) {
+        Runnable startRunnable = new Runnable(){        
+            public void run() {             
+                if(!theSimManagerView.isConnectedToParamics()) {
+                    if (JOptionPane.showConfirmDialog(null, "Connection has not been " +
+                            "made to the Paramics Traffic Modeler.  Do you wish " +
+                            "to continue?", "Paramics Connection", 
+                            JOptionPane.YES_NO_OPTION, 
+                            JOptionPane.QUESTION_MESSAGE) == JOptionPane.NO_OPTION) {
+                                return;
+                            }
+                }
+                
+                try { 
+                    theSimManagerView.getModel().startSimulation();
+                }
+                catch (ScriptException se) {
+                    theSimManagerView.ScriptExceptionHandler(se);
+                }
+                catch (SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);
+                }
+            }       
+        };      
+
+        Thread theThread = new Thread(startRunnable);
+        theThread.start();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/LoadScriptAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/LoadScriptAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/LoadScriptAction.java	(revision 82)
@@ -0,0 +1,69 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import javax.swing.AbstractAction;
+import javax.swing.JFileChooser;
+import javax.swing.SwingUtilities;
+
+import tmcsim.common.ScriptException;
+import tmcsim.common.SimulationException;
+import tmcsim.simulationmanager.SimulationManagerView;
+import tmcsim.simulationmanager.model.XmlFilter;
+
+/**
+ * LoadScriptAction is an AbstractAction that is used for loading a
+ * simulation script.  When the action is performed, the action opens
+ * a file chooser dialog.  If the user chooses a file, the action calls the 
+ * SimulationMAnagerModel to load the script file.
+ * @author Matthew Cechini
+ */ 
+@SuppressWarnings("serial")
+public class LoadScriptAction extends AbstractAction {
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+    
+    /** 
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */ 
+    public LoadScriptAction(SimulationManagerView view) {
+        super("Load Script");
+        
+        theSimManagerView = view;       
+    }
+    
+    public void actionPerformed(ActionEvent evt) {
+        SwingUtilities.invokeLater(new Runnable(){      
+            public void run() { 
+                JFileChooser chooser = new JFileChooser(
+                        SimulationManagerView.SCRIPT_DIR);
+                
+                chooser.setDialogTitle("Open Simulation Script File");
+                chooser.setMultiSelectionEnabled(false);        
+                chooser.setFileFilter(new XmlFilter());
+        
+                int result = chooser.showOpenDialog(null);
+                
+                File selectedFile = chooser.getSelectedFile();
+                
+                if(result == JFileChooser.APPROVE_OPTION) {
+                
+                    try{ 
+                        theSimManagerView.getModel().loadScript(selectedFile);
+                        theSimManagerView.setTitle("Simulation Manager: " + selectedFile.getName());
+                    }
+                    catch (ScriptException se) {
+                        theSimManagerView.ScriptExceptionHandler(se);
+                    }
+                    catch (SimulationException se) {
+                        theSimManagerView.SimulationExceptionHandler(se);   
+                    }
+                }
+            }
+        });
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/AddIncidentAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/AddIncidentAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/AddIncidentAction.java	(revision 82)
@@ -0,0 +1,171 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.Vector;
+
+import javax.swing.AbstractAction;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.xml.parsers.SAXParserFactory;
+
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.common.ScriptException;
+import tmcsim.client.cadclientgui.ScriptHandler;
+import tmcsim.common.SimulationException;
+import tmcsim.common.CADEnums.SCRIPT_STATUS;
+import tmcsim.simulationmanager.SimulationManagerView;
+import tmcsim.simulationmanager.dialogs.AddIncidentDialog;
+
+
+/**
+ * AddIncidentAction is an AbstractAction that is used for adding an incident
+ * into the current simulation.  When the action is performed, a file chooser
+ * is shown and the user is prompted to select which file they want to load
+ * script incidents from.  If the user selects a file, the script file is parsed
+ * and available incidents are displayed in the AddIncidentDialog.  When the dialog
+ * window is closed, the action checks for selected incidents.  If a selected incident
+ * has a conflicting log number with a current incident, or if the scheduled time
+ * is prior to the current simulation time, the dialog is reshown with an error.
+ * Once the user has selected 0 or more incidents that can be added to the 
+ * simulation, the SimulationManagerModel is called with the new incidents to add.
+ * If incidents were added and the simulation has not been started, the 
+ * ScriptStatus is set to SCRIPT_STOPPED_NOT_STARTED.
+ */
+@SuppressWarnings("serial")
+public class AddIncidentAction extends AbstractAction {
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+    
+    /** AddIncidentDialog used for adding new incidents into the simulation. */
+    private AddIncidentDialog theAddIncidentDialog; 
+    
+    /** 
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */     
+    public AddIncidentAction(SimulationManagerView view) {
+        super("Add New Incident");
+        
+        theSimManagerView = view;
+
+        theAddIncidentDialog  = new AddIncidentDialog(
+                theSimManagerView);
+    }
+
+    public void actionPerformed(ActionEvent evt) {
+        Runnable addRunnable = new Runnable(){      
+            public void run() { 
+                try{                
+                    JFileChooser chooser   = new JFileChooser(
+                            SimulationManagerView.SCRIPT_DIR);
+                    
+                    chooser.setDialogTitle("Open Simulation Script File");
+                    chooser.setMultiSelectionEnabled(false);
+            
+                    if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
+                        
+                        File selectedFile = chooser.getSelectedFile();                              
+                        ScriptHandler sh  = null;
+                        
+                        try {                   
+                            sh = new ScriptHandler();
+                            SAXParserFactory.newInstance().newSAXParser().parse(selectedFile, sh);
+                            
+                        } catch (Exception e) {
+                            throw new SimulationException(SimulationException.INVALID_SCRIPT_FILE);
+                        }
+                        
+                        boolean incidentsAdded     = false;
+                        boolean incidentsValidated = true;
+                        Vector<Incident> currIncidents   = theSimManagerView.getModel().getIncidentList();
+                        Vector<Incident> parsedIncidents = sh.getIncidents();
+                        Vector<Integer>  duplicateIncNum = new Vector<Integer>();
+                        Vector<Integer>  invalidIncTime  = new Vector<Integer>();
+                                                
+                        //Show the dialog with the initialized list of incidents.
+                        theAddIncidentDialog.setModelData(parsedIncidents);
+                        
+                        //Loop until the user selects a list(may be empty) of valid incidents.
+                        do {                
+                            incidentsValidated = true;
+                            theAddIncidentDialog.showDialog();
+                            
+                            duplicateIncNum.clear();
+                            invalidIncTime.clear();
+                            
+                            //Validate the selected incidents.  Validation fails if:
+                            //  +  A selected incident's log number matches a log number already in the simulation.
+                            //  +  A selected incident has been scheduled to occur at a time that has passed in the simulation.
+                            for(Integer incidentNum : theAddIncidentDialog.getSelectedIncidentTimes().keySet()) {
+                                
+                                for(Incident inc : currIncidents) {
+                                    if(inc.logNum.equals(incidentNum)) {
+                                        duplicateIncNum.add(incidentNum);
+                                        incidentsValidated = false;
+                                    }
+                                }
+                                
+                                long incSchedTime = theAddIncidentDialog.getSelectedIncidentTimes().get(incidentNum); 
+                                if(incSchedTime < theSimManagerView.getCurrentSimTime()) 
+                                {
+                                    invalidIncTime.add(incidentNum);
+                                    incidentsValidated = false;
+                                }                               
+                            }
+                            
+                            if(duplicateIncNum.size() > 0) {
+                                JOptionPane.showMessageDialog(null, 
+                                        "Duplicate incidents selected: " + 
+                                        duplicateIncNum.toString().substring(1, 
+                                                duplicateIncNum.toString().length()-1),
+                                        "Error",
+                                        JOptionPane.ERROR_MESSAGE);
+                            }
+                            else if(invalidIncTime.size() > 0) {
+                                JOptionPane.showMessageDialog(null,
+                                        "Simulation time already passed for incidents: " + 
+                                        invalidIncTime.toString().substring(1, 
+                                                invalidIncTime.toString().length()-1),
+                                        "Error",
+                                        JOptionPane.ERROR_MESSAGE);
+                            }
+                            
+                        } while(!incidentsValidated);
+                        
+                
+                        //Loop through all selected incidents, set the new start time, and add the Incident
+                        //to simulation.
+                        for(Integer incidentNum : theAddIncidentDialog.getSelectedIncidentTimes().keySet()) {
+                            for(Incident inc : parsedIncidents) {
+                                if(inc.logNum.equals(incidentNum)) {
+                                    incidentsAdded = true;
+                                    inc.setSecondsToStart(theAddIncidentDialog
+                                            .getSelectedIncidentTimes().get(incidentNum));
+                                    
+                                    theSimManagerView.getModel().addIncident(inc);
+                                }
+                            }
+                        }
+                
+                        
+                        if(incidentsAdded && !theSimManagerView.isSimulationStarted()) 
+                        {
+                            theSimManagerView.setScriptStatus(
+                                    SCRIPT_STATUS.SCRIPT_STOPPED_NOT_STARTED);
+                        }
+                    } 
+                } 
+                catch (SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);   
+                }
+            }
+        };
+        
+        Thread theThread = new Thread(addRunnable);
+        theThread.start();
+
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/ResetSimulationAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/ResetSimulationAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/ResetSimulationAction.java	(revision 82)
@@ -0,0 +1,48 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+
+import tmcsim.common.SimulationException;
+import tmcsim.simulationmanager.SimulationManagerView;
+
+/**
+ * ResetSimulationAction is an AbstractAction that is used for resetting
+ * the simulation. When the action is performed, the action calls the 
+ * SimulationManagerModel to reset the simulation.
+ * @author Matthew Cechini
+ */ 
+@SuppressWarnings("serial")
+public class ResetSimulationAction extends AbstractAction {
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+    
+    /**
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */
+    public ResetSimulationAction(SimulationManagerView view) {
+        super("Reset");
+        
+        theSimManagerView = view;
+    }
+
+    public void actionPerformed(ActionEvent evt) {
+        Runnable resetRunnable = new Runnable(){        
+            public void run() { 
+                try {
+                    theSimManagerView.getModel().resetSimulation();
+                }
+                catch (SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);   
+                }
+            }
+        };
+
+        Thread theThread = new Thread(resetRunnable);
+        theThread.start();
+    }
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/actions/ApplyDiversionAction.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/actions/ApplyDiversionAction.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/actions/ApplyDiversionAction.java	(revision 82)
@@ -0,0 +1,109 @@
+package tmcsim.simulationmanager.actions;
+
+import java.awt.event.ActionEvent;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.AbstractAction;
+import javax.swing.JComboBox;
+
+import tmcsim.cadmodels.CMSDiversion;
+import tmcsim.common.SimulationException;
+import tmcsim.simulationmanager.SimulationManagerView;
+import tmcsim.simulationmanager.dialogs.CMSDiversionDialog;
+
+
+/**
+ * ApplyDiversionAction is an AbstractAction that is used for settings traffic
+ * diversions in the simulation.  When the action is performed, the action gets 
+ * the selected CMS ID from the CMSIDComboBox in the SimulationManagerView.
+ * The action then calls the SimulationManagerModel to get the current CMSInfo
+ * for this id.  The CMSDiversionDialog is then shown with this CMSInfo.  If
+ * the user updates the diversions at this CMS, the new info is sent to the
+ * SimulationManagerModel to update the current diversions.
+ * <br/>
+ * <br/>
+ * The CMS_ID_COMBO_BOX key should be assigned the CMSID JComboBox object
+ * from the SimulationManagerView object.
+ */
+@SuppressWarnings("serial")
+public class ApplyDiversionAction extends AbstractAction {
+    
+    /** 
+     * This key string is used to reference the CMSID JComboBox object
+     * from the SimulationManagerView object.
+     */
+    public static final String CMS_ID_COMBO_BOX = "CMS_ID_COMBO_BOX";
+    
+    /** Reference to the SimulationManagerView object. */
+    private SimulationManagerView theSimManagerView = null;
+
+    /** CMSDiversionDialog used for updating diversions in the simulation. */
+    private CMSDiversionDialog theCMSDiversionDialog;
+    
+    /** 
+     * Constructor.
+     * @param view View class object for the Simulation Manager.
+     */         
+    public ApplyDiversionAction(SimulationManagerView view) {
+        super("Divert Traffic");
+        
+        theSimManagerView     = view;
+        theCMSDiversionDialog = new CMSDiversionDialog(theSimManagerView);
+    }
+
+    public void actionPerformed(ActionEvent evt) {
+        if(getValue(CMS_ID_COMBO_BOX) == null) {
+            Logger.getLogger("tmcsim.simulationmanager.actions").logp(
+                    Level.WARNING, "ApplyDiversionAction", 
+                    "actionPerformed", 
+                    "Object for CMS_ID_COMBO_BOX is null.");
+            return;
+        }
+        
+
+        showDiversionDialog((String)((JComboBox)getValue(CMS_ID_COMBO_BOX)).getSelectedItem());
+    }
+
+    public void showDiversionDialog(final String cms_id) {
+
+        Runnable divertRunnable = new Runnable(){       
+            public void run() { 
+    
+                try{
+                    
+                    theCMSDiversionDialog.showDialog(
+                            theSimManagerView.getModel().getCMSDiversionInfo(cms_id));
+                    
+                    long currentSimTime = theSimManagerView.getCurrentSimTime(); 
+
+                    if(theCMSDiversionDialog.theCMSInfo.isUpdated()) {  
+
+                        for(CMSDiversion div : theCMSDiversionDialog.theCMSInfo.possibleDiversions) {
+                            if(div.isUpdated()) {
+                                div.timeApplied = currentSimTime;
+                                
+                                theSimManagerView.removeDiversion(theCMSDiversionDialog.theCMSInfo, div);
+                        
+                                if(!div.isCleared()) {
+                                    theSimManagerView.addDiversion(theCMSDiversionDialog.theCMSInfo, div);
+                                }
+                            }
+                        }
+                        
+                        theSimManagerView.getModel().applyDiversions(theCMSDiversionDialog.theCMSInfo);
+                    }   
+                    
+                }
+                catch (SimulationException se) {
+                    theSimManagerView.SimulationExceptionHandler(se);   
+                }
+            }
+        };
+
+        Thread theThread = new Thread(divertRunnable);
+        theThread.start();
+        
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/IncidentTimeSpinnerModel.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/IncidentTimeSpinnerModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/IncidentTimeSpinnerModel.java	(revision 82)
@@ -0,0 +1,102 @@
+package tmcsim.simulationmanager.model;
+
+import javax.swing.AbstractSpinnerModel;
+
+/**
+ * IncidentTimeSpinnerModel is an AbstractSpinnerModel used in rescheduling 
+ * and adding incidents into the simulation. The spinner shows a simulation time
+ * of format H:MM:SS.  The next and previous values are calculated by adding or 
+ * subtracting 30 seconds from the current value.  
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+public class IncidentTimeSpinnerModel extends AbstractSpinnerModel {
+
+    /** Current simulation time value (seconds). */
+    private long currentTime = 0;
+    
+    /**
+     * Constructor.
+     */
+    public IncidentTimeSpinnerModel() { }
+    
+    /**
+     * Method returns the next time value by adding 30 seconds
+     * to the current time value.  The returned value is a string
+     * of format H:MM:SS
+     * 
+     * @return H:MM:SS formatted time
+     */
+    public Object getNextValue() {
+        currentTime += 30 - (currentTime % 30);
+        
+        return longToTime();
+    }   
+
+    /**
+     * Method returns the previous time value by subtracting 30 seconds
+     * to the current time value.  If the current value is less than 0:00:30,
+     * the time is set to 0.  The returned value is a string of format H:MM:SS.
+     * 
+     * @return H:MM:SS formatted time
+     */ 
+    public Object getPreviousValue() {
+        if(currentTime > 30)
+            currentTime -= 30 + (currentTime % 30);
+        else 
+            currentTime = 0;
+        
+        return longToTime();
+    }
+    
+    /**
+     * Method returns the current time value as a string of format H:MM:SS.
+     * 
+     * @return H:MM:SS formatted time
+     */     
+    public Object getValue() {
+        return longToTime();
+    }
+    
+    /**
+     * Sets the current time.  If the parameter is a Long, set
+     * the current time to this value and call this class again
+     * with the String representation to update the spinner.
+     */
+    public void setValue(Object o) {
+        if(o.getClass() == String.class)
+            fireStateChanged();
+        else if (o.getClass() == Long.class) {
+            currentTime = ((Long)o).longValue();
+            setValue(longToTime());
+        }
+    }
+    
+    /** 
+     * Converts the currentTime value into string of format H:MM:SS.
+     * @return H:MM:SS format of the current simulation time.
+     */
+    private String longToTime() {
+        
+        String time = new String();     
+        long tempTime = currentTime;    
+        
+        time += String.valueOf(tempTime / 3600) + ":";      
+        
+        tempTime = tempTime % 3600;
+        
+        if(tempTime / 60 < 10)
+            time += "0";
+        
+        time += String.valueOf(tempTime / 60) + ":";        
+        tempTime = tempTime % 60;   
+        
+        if(tempTime < 10)
+            time += "0";
+        
+        time += String.valueOf(tempTime);
+        return time;        
+    }   
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/IncidentListTableItem.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/IncidentListTableItem.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/IncidentListTableItem.java	(revision 82)
@@ -0,0 +1,20 @@
+package tmcsim.simulationmanager.model;
+
+public class IncidentListTableItem implements Comparable<IncidentListTableItem> {
+    
+    public Integer logNumber;
+    public Long    scheduleTime;
+    public String  description;
+    
+    public IncidentListTableItem(Integer log, Long time, String desc) {
+        logNumber    = log;
+        scheduleTime = time;
+        description  = desc;
+    }
+    
+    public int compareTo(IncidentListTableItem arg) {
+        return scheduleTime.compareTo(arg.scheduleTime);
+    }
+    
+    
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/CMSDiversionSliderBox.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/CMSDiversionSliderBox.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/CMSDiversionSliderBox.java	(revision 82)
@@ -0,0 +1,111 @@
+package tmcsim.simulationmanager.model;
+
+import java.awt.Dimension;
+import java.text.NumberFormat;
+import java.util.Hashtable;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JFormattedTextField;
+import javax.swing.JLabel;
+import javax.swing.JSlider;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.text.NumberFormatter;
+
+import tmcsim.cadmodels.CMSDiversion;
+
+/**
+ * The CMSDiversionSliderBox is a GUI component that is used to create
+ * the diversion slider that allows the user to select a diversion percentage.
+ * This object represents a single possible diversion for a CMS.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class CMSDiversionSliderBox extends Box implements ChangeListener {
+
+    /** CMSDiversion object with data for this diversion slider. */
+    private CMSDiversion diversionObject;
+
+    /** Slider to allow user to adjust the diversion percentage. */
+    private JSlider diversionSlider;
+
+    /** Formatted Text Field to display current percentage. */
+    private JFormattedTextField textField;
+
+    /** Maximum allowed diversion percentage. */
+    private int maxDiversion;
+
+    /** Label table for diversion slider. */
+    private Hashtable<Integer, JLabel> diversionLabelTable = null;
+
+    
+    /**
+     * Constructor.  Initialize GUI components.  Create the diversion
+     * slider with a maximum value equal to the maximum diversion
+     * percentage in the parameter CMSDiversion object.
+     * 
+     * @param newDivObj CMS diversion data to be displayed.
+     */
+    public CMSDiversionSliderBox(CMSDiversion newDivObj) {
+        super(BoxLayout.Y_AXIS);
+        setAlignmentX(Box.CENTER_ALIGNMENT);
+
+        diversionObject = newDivObj;
+        maxDiversion    = diversionObject.maxDiversionPercent.intValue();
+
+        diversionLabelTable = new Hashtable<Integer, JLabel>();
+        diversionLabelTable.put(new Integer(0), new JLabel("0%"));
+        diversionLabelTable.put(new Integer(maxDiversion), 
+                new JLabel(String.valueOf(maxDiversion) + "%"));
+
+        NumberFormat numberFormat = NumberFormat.getPercentInstance();
+        NumberFormatter formatter = new NumberFormatter(numberFormat);
+        formatter.setMinimum(new Integer(0));
+        formatter.setMaximum(new Integer(maxDiversion));
+
+        textField = new JFormattedTextField(formatter);
+        textField.setValue(new Integer(0));
+        textField.setColumns(5);
+        textField.setAlignmentX(Box.CENTER_ALIGNMENT);
+        textField.setMaximumSize(new Dimension(50, 25));
+        textField.setMinimumSize(new Dimension(40, 25));
+
+        diversionSlider = new JSlider(JSlider.VERTICAL, 0, maxDiversion, 0);
+        diversionSlider.addChangeListener(this);
+        diversionSlider.setAlignmentX(Box.CENTER_ALIGNMENT);
+        diversionSlider.setPaintTicks(true);
+        diversionSlider.setPaintLabels(true);
+        diversionSlider.setMinorTickSpacing(10);
+        diversionSlider.setLabelTable(diversionLabelTable);
+        diversionSlider.setValue(diversionObject.getCurrDiv());
+
+        add(textField);
+        add(diversionSlider);
+    }
+
+    /**
+     * Set the CMSDiversion object's diversion percentage to the 
+     * new value on the slider.
+     */
+    public void apply() {
+        diversionObject.setCurrDiv(diversionSlider.getValue());
+    }
+
+    /**
+     * ChangeListener method.  When the slider changes, update the
+     * formatted text field with the new percentage.
+     */
+    public void stateChanged(ChangeEvent e) {
+
+        float newDiv = diversionSlider.getValue();
+        
+        if (!diversionSlider.getValueIsAdjusting()) {
+            textField.setValue(new Float(newDiv / 100f));
+        } else {
+            textField.setText(String.valueOf((int) newDiv) + "%");
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/IncidentListTableModel.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/IncidentListTableModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/IncidentListTableModel.java	(revision 82)
@@ -0,0 +1,259 @@
+package tmcsim.simulationmanager.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.client.cadclientgui.data.Incident;
+
+/** 
+ * IncidentListTableModel is a DefaultTableModel used to display the 
+ * list of current incidents in the Simulation Manager.  The columns in 
+ * this table show the incident log number, it's schedule time, and the
+ * incident description. The startIncident() method is used to set
+ * an incident in the table to 'started.'  See the method description for
+ * more information.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class IncidentListTableModel extends DefaultTableModel implements
+        Comparator<IncidentListTableItem> {
+    
+    /**
+     * Enumeration of columns for this table.
+     * @author Matthew Cechini
+     */
+    public static enum INCIDENT_LIST_COLUMNS {
+        LOG_NUM_COL    ("Log #", 0, 70, 100, 70),
+        SCHEDULED_COL  ("Scheduled", 1, 50, 80, 80),
+        INC_DESC_COL   ("Incident Description", 2, 130, 460, 200);
+        
+        public String colName;
+        public int colNum;
+        public int colMinWidth;
+        public int colMaxWidth;
+        public int colPrefWidth;
+        
+        private INCIDENT_LIST_COLUMNS (String name, int num, int min, int max, int pref) {
+            colName      = name;
+            colNum       = num;
+            colMinWidth  = min;
+            colMaxWidth  = max;
+            colPrefWidth = pref;
+        }
+        
+        public static int colCount() {
+            return values().length;
+        }
+        
+        public static String columnName(int num) {
+            
+            for(INCIDENT_LIST_COLUMNS column : INCIDENT_LIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colName;
+            }
+            
+            return "";
+        }
+        
+        public static int columnMinWidth(int num) {
+            
+            for(INCIDENT_LIST_COLUMNS column : INCIDENT_LIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMinWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnMaxWidth(int num) {
+            
+            for(INCIDENT_LIST_COLUMNS column : INCIDENT_LIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMaxWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnPrefWidth(int num) {
+            
+            for(INCIDENT_LIST_COLUMNS column : INCIDENT_LIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colPrefWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static INCIDENT_LIST_COLUMNS fromColNum(int column) {
+            for(INCIDENT_LIST_COLUMNS c : INCIDENT_LIST_COLUMNS.values()) {
+                if(c.colNum == column)
+                    return c;
+            }
+            
+            return LOG_NUM_COL;
+        }
+    }  
+
+
+    /** List of data displayed in the table. */
+    private List<IncidentListTableItem> event_list;
+    
+    /** 
+     * Constructor.
+     */
+    public IncidentListTableModel() {
+        event_list = new ArrayList<IncidentListTableItem>();
+    } 
+
+    public String getColumnName(int col) {
+        return INCIDENT_LIST_COLUMNS.columnName(col);
+    }
+
+    public int getRowCount() {
+        if(event_list == null) {
+            return 0;
+        }
+        else
+            return event_list.size();
+    }
+
+    public int getColumnCount() {
+        return INCIDENT_LIST_COLUMNS.colCount();
+    }
+
+
+    public int getColumnMinWidth(int c){
+        return INCIDENT_LIST_COLUMNS.columnMinWidth(c);
+    }
+
+
+    public int getColumnMaxWidth(int c){
+        return INCIDENT_LIST_COLUMNS.columnMaxWidth(c);
+    }
+
+
+    public int getColumnPrefWidth(int c){
+        return INCIDENT_LIST_COLUMNS.columnPrefWidth(c);
+    }
+
+    public boolean isCellEditable(int row, int col) {
+        return false;
+    }        
+    
+    public Object getValueAt(int row, int col) {
+        switch (INCIDENT_LIST_COLUMNS.fromColNum(col)) {
+            case INC_DESC_COL:
+                return event_list.get(row).description;
+            case LOG_NUM_COL:
+                return event_list.get(row).logNumber;
+            case SCHEDULED_COL:
+                return event_list.get(row).scheduleTime;
+            default:
+                return "";
+        }        
+    }
+   
+    
+    public void setValueAt(Object arg, int row, int col) {
+        switch (INCIDENT_LIST_COLUMNS.fromColNum(col)) {
+            case INC_DESC_COL:
+                event_list.get(row).description  = (String)arg;
+                break;
+            case LOG_NUM_COL:
+                event_list.get(row).logNumber    = (Integer)arg;
+                break;
+            case SCHEDULED_COL:
+                event_list.get(row).scheduleTime = (Long)arg;
+                break;
+        }        
+
+        fireTableChanged(new TableModelEvent(this));
+    }
+    
+    public int compare(IncidentListTableItem item0, IncidentListTableItem item1) {
+        return item0.compareTo(item1);
+    }
+    
+    /**
+     * Find the insertion point for the argument in a sorted list.
+     * 
+     * @param element find this object's insertion point in the sorted list
+     * @return the index of the insertion point
+     */
+    private int findInsertionPoint(IncidentListTableItem element) {
+
+        // Find the new element's insertion point.
+        int insertionPoint = Collections.binarySearch(event_list, element, this);
+        if (insertionPoint < 0) {
+            insertionPoint = -(insertionPoint + 1);
+        }
+        return insertionPoint;
+    }
+    
+    /**
+     * Method 'starts' the incident from the table whose log number
+     * matches the parameter value.  When an incident is 'started,' its
+     * scheduled time is set to -1.  This specific value is used by
+     * the CellRenderer to display "Started" in the table.
+     * @param logNumber Unique log number of an incident to 'start.'
+     */
+    public void startIncident(Integer logNumber) {
+        for(IncidentListTableItem eventInfo : event_list) {
+            if(eventInfo.logNumber.equals(logNumber)) {
+                eventInfo.scheduleTime = -1L;
+                fireTableChanged(new TableModelEvent(this));
+            }
+        }
+    }
+
+    /**
+     * Method adds a new incident into the table.
+     * @param newIncident Incident object to add.
+     */
+    public void addIncident(Incident newIncident) {
+        
+        IncidentListTableItem newItem = new IncidentListTableItem(
+                newIncident.getLogNumber(),
+                newIncident.getSecondsToStart(),
+                newIncident.description);
+        
+        event_list.add(findInsertionPoint(newItem), newItem);
+        fireTableChanged(new TableModelEvent(this));
+    }
+    
+    /**
+     * Method removes the incident from the table whose log number
+     * matches the parameter value.
+     * @param logNumber Unique log number of incident to remove.
+     */
+    public void removeIncident(Integer logNumber) {
+        for(Iterator<IncidentListTableItem> eventInfoIter = event_list.iterator();
+            eventInfoIter.hasNext();) {
+            
+            if(eventInfoIter.next().logNumber.equals(logNumber)) {
+                eventInfoIter.remove(); 
+                fireTableChanged(new TableModelEvent(this));
+            }
+        }       
+    }
+   
+    /** 
+     * Remove all incidents from the table's data.
+     */
+    public void clearModelData() {
+        event_list.clear();
+        fireTableChanged(new TableModelEvent(this));
+    }
+
+
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/IncidentTimeCellEditor.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/IncidentTimeCellEditor.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/IncidentTimeCellEditor.java	(revision 82)
@@ -0,0 +1,56 @@
+package tmcsim.simulationmanager.model;
+
+
+import java.awt.Component;
+import java.util.StringTokenizer;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JCheckBox;
+import javax.swing.JSpinner;
+import javax.swing.JTable;
+
+/**
+ * A DefaultCellEditor overriding the necessary base methods to 
+ * provide editor capability for changing the incident time to occur.
+ * This editor uses a JSpinner as its editor component.
+ * 
+ * @author Matthew
+ * @version
+ */
+@SuppressWarnings("serial")
+public class IncidentTimeCellEditor extends DefaultCellEditor {
+
+    public IncidentTimeCellEditor(JSpinner spinner) {
+          super(new JCheckBox());
+
+        editorComponent = spinner;
+        editorComponent.setOpaque(true);
+        editorComponent.setBorder(BorderFactory.createEmptyBorder());
+        setClickCountToStart(2);
+    }
+
+    public Object getCellEditorValue() {
+        
+        StringTokenizer strTok = new StringTokenizer(
+                (String)((JSpinner)editorComponent).getModel().getValue(), ":");
+        
+        
+        return Long.parseLong(strTok.nextToken()) * 3600  +
+                    Long.parseLong(strTok.nextToken()) * 60  + 
+                    Long.parseLong(strTok.nextToken());
+
+    }
+
+        
+    public Component getTableCellEditorComponent(JTable table,
+                                                 Object value,
+                                                 boolean isSelected,
+                                                 int row,
+                                                 int column) {
+      
+        ((JSpinner)editorComponent).getModel().setValue(value);
+        
+        return editorComponent;
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/IncidentTimeCellRenderer.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/IncidentTimeCellRenderer.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/IncidentTimeCellRenderer.java	(revision 82)
@@ -0,0 +1,48 @@
+package tmcsim.simulationmanager.model;
+
+import javax.swing.table.DefaultTableCellRenderer;
+
+/**
+ * IncidentTimeCellRenderer is a DefaultCellEditor overriding the necessary 
+ * base methods to render the Long incident time value as a string of format
+ * H:MM:SS.  If the incident time value is -1, this means the incident has 
+ * started, and the renderer returns "Started" as the display value.
+ * 
+ * @author Matthew
+ * @version
+ */
+@SuppressWarnings("serial")
+public class IncidentTimeCellRenderer extends DefaultTableCellRenderer {
+
+    public IncidentTimeCellRenderer() { }
+    
+    protected void setValue(Object value) {
+
+        if(value != null && value instanceof Number) {
+            String time_str = new String();
+            Long   time_val = (Long)value;
+                        
+            if(time_val == -1) {
+                super.setValue("Started");
+                return;
+            }
+                        
+            time_str += String.valueOf(time_val / 3600) + ":";      
+            
+            time_val = time_val % 3600;
+            
+            if(time_val / 60 < 10)
+                time_str += "0";
+            
+            time_str += String.valueOf(time_val / 60) + ":";        
+            time_val = time_val % 60;   
+            
+            if(time_val < 10)
+                time_str += "0";
+            
+            time_str += String.valueOf(time_val);
+
+            super.setValue(time_str);
+        }
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/XmlFilter.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/XmlFilter.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/XmlFilter.java	(revision 82)
@@ -0,0 +1,42 @@
+
+
+package tmcsim.simulationmanager.model;
+
+import java.io.File;
+
+import javax.swing.filechooser.FileFilter;
+
+/**
+ * FileFilter used to select only .xml files.
+ * 
+ * @author Matthew
+ * @version
+ */
+public class XmlFilter extends FileFilter{
+    
+    
+    public boolean accept(File f) {
+        if (f.isDirectory()) {
+            return true;
+        }
+
+        String s = f.getName();
+        int i = s.lastIndexOf('.');
+
+        if (i > 0 &&  i < s.length() - 1) {
+            String extension = s.substring(i+1).toLowerCase();
+            if (extension.equals("xml")) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /** 
+     * Get description for display in file chooser. 
+     * @return "XML Files (.xml)"
+     */
+    public String getDescription() {
+        return "XML Files (.xml)";
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/AppliedDiversionTableItem.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/AppliedDiversionTableItem.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/AppliedDiversionTableItem.java	(revision 82)
@@ -0,0 +1,40 @@
+package tmcsim.simulationmanager.model;
+
+/** 
+ * Container class to hold information displayed in the table.
+ * @author Matthew Cechini
+ */
+public class AppliedDiversionTableItem implements
+        Comparable<AppliedDiversionTableItem> {
+
+    public String cmsID;
+
+    public String originalPath;
+
+    public String newPath;
+
+    public Integer currentDiv;
+
+    public Long timeApplied;
+    
+    
+    public AppliedDiversionTableItem(String id, String oPath, String nPath,
+            Integer div, Long time) {
+        cmsID = id;
+        originalPath = oPath;
+        newPath = nPath;
+        currentDiv = div;
+        timeApplied = time;
+    }
+
+    public int compareTo(AppliedDiversionTableItem arg) {
+
+        if (cmsID.equals(arg.cmsID)) {
+            if (originalPath.equals(arg.originalPath)) {
+                return newPath.compareTo(arg.newPath);
+            }
+            return originalPath.compareTo(arg.originalPath);
+        } else
+            return cmsID.compareTo(arg.cmsID);
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/IncidentHistoryTableModel.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/IncidentHistoryTableModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/IncidentHistoryTableModel.java	(revision 82)
@@ -0,0 +1,196 @@
+package tmcsim.simulationmanager.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.cadmodels.IncidentInquiryDetails;
+import tmcsim.client.cadclientgui.data.IncidentEvent;
+
+/** 
+ * IncidentHistoryTableModel is a DefaultTableModel used to display the 
+ * list of current incident events in the Event History portion of the
+ * Simulation Manager.  The columns in this table show the event source,
+ * the simulation time the event occured, and the event's description.
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class IncidentHistoryTableModel extends DefaultTableModel {
+    
+    /**
+     * Enumeration of columns for this table.
+     * @author Matthew Cechini
+     */ 
+    public static enum EVENT_HIST_COLUMNS {
+        POSITION_COL    ("Position", 0, 70, 110, 80),
+        TIME_COL        ("Time", 1, 50, 100, 60),
+        EVENT_DESC_COL  ("Event Description", 2, 250, 600, 300);
+        
+        public String colName;
+        public int colNum;
+        public int colMinWidth;
+        public int colMaxWidth;
+        public int colPrefWidth;
+        
+        private EVENT_HIST_COLUMNS (String name, int num, int min, int max, int pref) {
+            colName      = name;
+            colNum       = num;
+            colMinWidth  = min;
+            colMaxWidth  = max;
+            colPrefWidth = pref;
+        }
+        
+        public static int colCount() {
+            return values().length;
+        }
+        
+        public static String columnName(int num) {
+            
+            for(EVENT_HIST_COLUMNS column : EVENT_HIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colName;
+            }
+            
+            return "";
+        }
+        
+        public static int columnMinWidth(int num) {
+            
+            for(EVENT_HIST_COLUMNS column : EVENT_HIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMinWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnMaxWidth(int num) {
+            
+            for(EVENT_HIST_COLUMNS column : EVENT_HIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMaxWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnPrefWidth(int num) {
+            
+            for(EVENT_HIST_COLUMNS column : EVENT_HIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colPrefWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static EVENT_HIST_COLUMNS fromColNum(int column) {
+            for(EVENT_HIST_COLUMNS c : EVENT_HIST_COLUMNS.values()) {
+                if(c.colNum == column)
+                    return c;
+            }
+            
+            return POSITION_COL;
+        }
+    }  
+    
+    /** 
+     * Container class to hold information displayed in the table.
+     * @author Matthew Cechini
+     */
+    protected class EventHistoryInfo {
+
+        public String source;
+        public Long   secondsOccured;
+        public String details;
+        
+        public EventHistoryInfo(String src, Long seconds, String d) {
+            source         = src;
+            secondsOccured = seconds;
+            details        = d;
+        }
+    }
+    
+
+    /** List of data displayed in the table. */
+    private List<EventHistoryInfo> event_list;
+    
+    /** Constructor. */
+    public IncidentHistoryTableModel() {
+        event_list = new ArrayList<EventHistoryInfo>();
+    }
+
+    public int getRowCount() {
+        if(event_list == null) {
+            return 0;
+        }
+        else
+            return event_list.size();
+    }
+
+    public int getColumnCount() {
+        return EVENT_HIST_COLUMNS.colCount();
+    }
+
+    public String getColumnName(int col) {
+        return EVENT_HIST_COLUMNS.columnName(col);
+    }
+
+    public int getColumnMinWidth(int c){
+        return EVENT_HIST_COLUMNS.columnMinWidth(c);
+    }
+
+    public int getColumnMaxWidth(int c){
+        return EVENT_HIST_COLUMNS.columnMaxWidth(c);
+    }
+
+    public int getColumnPrefWidth(int c){
+        return EVENT_HIST_COLUMNS.columnPrefWidth(c);
+    }
+
+    public boolean isCellEditable(int row, int col) {
+        return false;
+    }   
+    
+    public Object getValueAt(int row, int col) {
+        switch (EVENT_HIST_COLUMNS.fromColNum(col)) {
+            case EVENT_DESC_COL:
+                return event_list.get(row).details;
+            case POSITION_COL:
+                return event_list.get(row).source;
+            case TIME_COL:
+                return event_list.get(row).secondsOccured;
+            default:
+                return "";
+        }        
+    }
+    
+    /**
+     * Method adds a new incident event into the table.
+     * @param logNumber Incident log number corresponding to the parameter event.
+     * @param newEvent Incident event object to add.
+     */    
+    public void addEvent(IncidentEvent newEvent) {
+        
+        for(IncidentInquiryDetails detail : newEvent.eventInfo.getDetails()) {
+            event_list.add(new EventHistoryInfo(
+                    newEvent.eventInfo.getSource(),
+                    newEvent.secondsOccuredInSimulation,
+                    detail.details));       
+        }
+        fireTableChanged(new TableModelEvent(this));
+    }
+    
+    /** 
+     * Remove all events from the table's data.
+     */    
+    public void clearModelData() {
+        event_list.clear();
+        fireTableChanged(new TableModelEvent(this));
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/AppliedDiversionTableModel.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/AppliedDiversionTableModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/AppliedDiversionTableModel.java	(revision 82)
@@ -0,0 +1,240 @@
+package tmcsim.simulationmanager.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.cadmodels.CMSDiversion;
+import tmcsim.cadmodels.CMSInfo;
+
+/** 
+ * AppliedDiversionTableModel is a DefaultTableModel used to display the 
+ * list of current diversions in the Simulation Manager.  The columns in 
+ * this table show the divesion cms id, old path, new path, diversion pct,
+ * and simulation time it was applied. 
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class AppliedDiversionTableModel extends DefaultTableModel implements
+    Comparator<AppliedDiversionTableItem> {
+    
+    /**
+     * Enumeration of columns for this table.
+     * @author Matthew Cechini
+     */     
+    public static enum APPLIED_DIV_COLUMNS {
+        CMS_ID_COL     ("ID", 0, 140, 280, 180),
+        OLD_PATH_COL   ("Old Path", 1, 70, 120, 70),
+        NEW_PATH_COL   ("New Path", 2, 70, 120, 70),
+        PERCENT_COL    ("%", 3, 30, 60, 30),
+        APPLIED_COL    ("Applied", 4, 70, 120, 70);
+        
+        public String colName;
+        public int colNum;
+        public int colMinWidth;
+        public int colMaxWidth;
+        public int colPrefWidth;
+        
+        private APPLIED_DIV_COLUMNS (String name, int num, int min, int max, int pref) {
+            colName      = name;
+            colNum       = num;
+            colMinWidth  = min;
+            colMaxWidth  = max;
+            colPrefWidth = pref;
+        }
+        
+        public static int colCount() {
+            return values().length;
+        }
+        
+        public static String columnName(int num) {
+            
+            for(APPLIED_DIV_COLUMNS column : APPLIED_DIV_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colName;
+            }
+            
+            return "";
+        }
+        
+        public static int columnMinWidth(int num) {
+            
+            for(APPLIED_DIV_COLUMNS column : APPLIED_DIV_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMinWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnMaxWidth(int num) {
+            
+            for(APPLIED_DIV_COLUMNS column : APPLIED_DIV_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMaxWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnPrefWidth(int num) {
+            
+            for(APPLIED_DIV_COLUMNS column : APPLIED_DIV_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colPrefWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static APPLIED_DIV_COLUMNS fromColNum(int column) {
+            for(APPLIED_DIV_COLUMNS c : APPLIED_DIV_COLUMNS.values()) {
+                if(c.colNum == column)
+                    return c;
+            }
+            
+            return CMS_ID_COL;
+        }
+    }  
+
+
+    /** List of data displayed in the table. */
+    private List<AppliedDiversionTableItem> diversion_list;
+    
+    /** Constructor. */
+    public AppliedDiversionTableModel() {
+        diversion_list = new ArrayList<AppliedDiversionTableItem>();
+    }
+
+    public String getColumnName(int col) {
+        return APPLIED_DIV_COLUMNS.columnName(col);
+    }
+
+    public int getRowCount() {
+        if(diversion_list == null) {
+            return 0;
+        }
+        else
+            return diversion_list.size();
+    }
+
+    public int getColumnCount() {
+        return APPLIED_DIV_COLUMNS.colCount();
+    }
+
+    public int getColumnMinWidth(int c){
+        return APPLIED_DIV_COLUMNS.columnMinWidth(c);
+    }
+
+    public int getColumnMaxWidth(int c){
+        return APPLIED_DIV_COLUMNS.columnMaxWidth(c);
+    }
+
+    public int getColumnPrefWidth(int c){
+        return APPLIED_DIV_COLUMNS.columnPrefWidth(c);
+    }
+
+    public boolean isCellEditable(int row, int col) {
+        return false;
+    }          
+    
+    public Object getValueAt(int row, int col) {
+        switch (APPLIED_DIV_COLUMNS.fromColNum(col)) {
+            case APPLIED_COL:
+                return diversion_list.get(row).timeApplied;
+            case NEW_PATH_COL:
+                return diversion_list.get(row).newPath;
+            case CMS_ID_COL:
+                return diversion_list.get(row).cmsID;
+            case OLD_PATH_COL:
+                return diversion_list.get(row).originalPath;
+            case PERCENT_COL:
+                return diversion_list.get(row).currentDiv;
+            default:
+                return "";
+        }        
+    }
+    
+    public int compare(AppliedDiversionTableItem item0, AppliedDiversionTableItem item1) {
+        return item0.compareTo(item1);
+    }
+    
+    /**
+     * Find the insertion point for the argument in a sorted list.
+     * 
+     * @param element find this object's insertion point in the sorted list
+     * @return the index of the insertion point
+     */
+    private int findInsertionPoint(AppliedDiversionTableItem element) {
+
+        // Find the new element's insertion point.
+        int insertionPoint = Collections.binarySearch(diversion_list, element, this);
+        if (insertionPoint < 0) {
+            insertionPoint = -(insertionPoint + 1);
+        }
+        return insertionPoint;
+    }
+    
+    /**
+     * Method adds a new diversion into the table.
+     * @param theCMSInfo CMSInfo that the diversion is set for.
+     * @param theDiversion The new diversion data.
+     */        
+    public void addDiversion(CMSInfo theCMSInfo, CMSDiversion theDiversion) {
+        
+        AppliedDiversionTableItem newDiv = new AppliedDiversionTableItem(
+                theCMSInfo.cmsID,
+                theDiversion.originalPath,
+                theDiversion.newPath,
+                theDiversion.getCurrDiv(),
+                theDiversion.timeApplied);
+        
+        diversion_list.add(findInsertionPoint(newDiv), newDiv);
+        
+        fireTableChanged(new TableModelEvent(this));
+            
+    }
+    
+    /**
+     * Method removes a diversion from the table.
+     * @param theCMSInfo CMSInfo that the diversion is set for.
+     * @param theDiversion The new diversion data.
+     */        
+    public void removeDiversion(CMSInfo theCMSInfo, CMSDiversion theDiversion) {
+        
+        //loop through all rows.  Move down a row until the cmsID for the current diversion
+        //is greater ("04 - CMS 4" > "03 - CMS 3") than the current row, or the matching diversion row is found
+        //If the matching row is found, delete the current row for the new info will be added below. 
+        
+        AppliedDiversionTableItem divInfo = null;
+        for(Iterator<AppliedDiversionTableItem> divInfoIter = diversion_list.iterator();
+            divInfoIter.hasNext();) {
+            
+            divInfo = divInfoIter.next();
+            
+            if(divInfo.cmsID.equals(theCMSInfo.cmsID)) {
+                if(divInfo.originalPath.equals(theDiversion.originalPath) &&
+                   divInfo.newPath.equals(theDiversion.newPath)) {
+                    divInfoIter.remove();
+                }
+            }
+        }
+
+        fireTableChanged(new TableModelEvent(this));
+    }
+    
+    /** 
+     * Remove all diversions from the table's data.
+     */    
+    public void clearModelData() {
+        diversion_list.clear();
+        fireTableChanged(new TableModelEvent(this));
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/LogEntryCellRenderer.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/LogEntryCellRenderer.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/LogEntryCellRenderer.java	(revision 82)
@@ -0,0 +1,146 @@
+package tmcsim.simulationmanager.model;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+
+/**
+ * TableCellRender to display a multi-line cell.
+ *
+ * http://www.roseindia.net/javatutorials/JTable_in_JDK.shtml
+ *
+ * @author Dr. Heinz M. Kabutz
+ */
+@SuppressWarnings("serial")
+public class LogEntryCellRenderer extends JTextArea implements
+        TableCellRenderer
+{
+    /**
+     * DefaultTableCellRenderer for displaying multi line cells
+     */
+    private final DefaultTableCellRenderer adaptee;
+    /**
+     * map from table to map of rows to map of column heights
+     */
+    private final Map<JTable, Map<Integer, Map<Integer, Integer>>> cellSizes;
+
+    public LogEntryCellRenderer()
+    {
+
+        adaptee = new DefaultTableCellRenderer();
+        cellSizes = new HashMap<JTable, Map<Integer, Map<Integer, Integer>>>();
+
+        setLineWrap(true);
+        setWrapStyleWord(true);
+    }
+
+    public Component getTableCellRendererComponent(JTable table, Object obj,
+            boolean isSelected, boolean hasFocus, int row, int column)
+    {
+
+        // set the colours, etc. using the standard for that platform
+        adaptee.getTableCellRendererComponent(table, obj, isSelected, hasFocus,
+                row, column);
+        // FIXES defect where cell text disappears when selected
+        // TODO: Better would be to make table not selectable
+        // http://stackoverflow.com/questions/8291329/set-all-jtable-cells-unselectable
+        if (isSelected)
+        {
+            setForeground(Color.WHITE);
+            setBackground(Color.GRAY);
+        }
+        else
+        {
+            setForeground(adaptee.getForeground());
+            setBackground(adaptee.getBackground());
+        }
+        setBorder(adaptee.getBorder());
+        setFont(adaptee.getFont());
+        setText(adaptee.getText());
+
+        // This line was very important to get it working with JDK1.4
+        TableColumnModel columnModel = table.getColumnModel();
+        setSize(columnModel.getColumn(column).getWidth(), 100000);
+        int height_wanted = (int) getPreferredSize().getHeight();
+        addSize(table, row, column, height_wanted);
+        height_wanted = findTotalMaximumRowSize(table, row);
+        if (height_wanted != table.getRowHeight(row))
+        {
+            table.setRowHeight(row, height_wanted);
+        }
+
+        return this;
+    }
+
+    private void addSize(JTable table, int row, int column, int height)
+    {
+        Map<Integer, Map<Integer, Integer>> rows = cellSizes.get(table);
+        if (rows == null)
+        {
+            cellSizes.put(table, rows = new HashMap<Integer, Map<Integer, Integer>>());
+        }
+
+        Map<Integer, Integer> rowheights = rows.get(new Integer(row));
+        if (rowheights == null)
+        {
+            rows.put(new Integer(row), rowheights = new HashMap<Integer, Integer>());
+        }
+        rowheights.put(new Integer(column), new Integer(height));
+    }
+
+    /**
+     * Look through all columns and get the renderer. If it is also a
+     * TextAreaRenderer, we look at the maximum height in its hash table for
+     * this row.
+     */
+    private int findTotalMaximumRowSize(JTable table, int row)
+    {
+        int maximum_height = 0;
+        Enumeration columns = table.getColumnModel().getColumns();
+        while (columns.hasMoreElements())
+        {
+            TableColumn tc = (TableColumn) columns.nextElement();
+            TableCellRenderer cellRenderer = tc.getCellRenderer();
+            if (cellRenderer instanceof LogEntryCellRenderer)
+            {
+                LogEntryCellRenderer tar = (LogEntryCellRenderer) cellRenderer;
+                maximum_height = Math.max(maximum_height, tar
+                        .findMaximumRowSize(table, row));
+            }
+        }
+        return maximum_height;
+    }
+
+    private int findMaximumRowSize(JTable table, int row)
+    {
+        Map<Integer, Map<Integer, Integer>> rows = cellSizes.get(table);
+        if (rows == null)
+        {
+            return 0;
+        }
+
+        Map<Integer, Integer> rowheights = rows.get(new Integer(row));
+        if (rowheights == null)
+        {
+            return 0;
+        }
+        int maximum_height = 0;
+
+        for (Iterator it = rowheights.entrySet().iterator(); it.hasNext();)
+        {
+            Map.Entry entry = (Map.Entry) it.next();
+            int cellHeight = ((Integer) entry.getValue()).intValue();
+            maximum_height = Math.max(maximum_height, cellHeight);
+        }
+        return maximum_height;
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/AddIncidentListTableModel.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/AddIncidentListTableModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/AddIncidentListTableModel.java	(revision 82)
@@ -0,0 +1,248 @@
+package tmcsim.simulationmanager.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TreeMap;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.client.cadclientgui.data.Incident;
+
+/** 
+ * AddIncidentListTableModel is a DefaultTableModel used to display the 
+ * list of current incidents that may be added as a part of the 
+ * AddIncidentDialog.  The columns in this table show the incident log number, 
+ * description, length, a boolean checkbox, and scheduled time. 
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class AddIncidentListTableModel extends DefaultTableModel {
+
+    /**
+     * Enumeration of columns for this table.
+     * @author Matthew Cechini
+     */ 
+    public static enum ADD_INCIDENT_LIST_COLUMNS {
+        LOG_NUM_COL    ("Log #", 0, 50, 100, 50),
+        EVENT_DESC_COL ("Event Description", 1, 120, 300, 120),
+        EVENT_LEN_COL  ("Event Length", 2, 80, 100, 80),
+        ADD_COL        ("Add?", 3, 60, 80, 60),
+        SCHEDULED_COL  ("Scheduled Time", 4, 80, 120, 80);
+        
+        public String colName;
+        public int colNum;
+        public int colMinWidth;
+        public int colMaxWidth;
+        public int colPrefWidth;
+        
+        private ADD_INCIDENT_LIST_COLUMNS (String name, int num, int min, int max, int pref) {
+            colName      = name;
+            colNum       = num;
+            colMinWidth  = min;
+            colMaxWidth  = max;
+            colPrefWidth = pref;
+        }
+        
+        public static int colCount() {
+            return values().length;
+        }
+        
+        public static String columnName(int num) {
+            
+            for(ADD_INCIDENT_LIST_COLUMNS column : ADD_INCIDENT_LIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colName;
+            }
+            
+            return "";
+        }
+        
+        public static int columnMinWidth(int num) {
+            
+            for(ADD_INCIDENT_LIST_COLUMNS column : ADD_INCIDENT_LIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMinWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnMaxWidth(int num) {
+            
+            for(ADD_INCIDENT_LIST_COLUMNS column : ADD_INCIDENT_LIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colMaxWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static int columnPrefWidth(int num) {
+            
+            for(ADD_INCIDENT_LIST_COLUMNS column : ADD_INCIDENT_LIST_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colPrefWidth;
+            }
+            
+            return 0;
+        }
+        
+        public static ADD_INCIDENT_LIST_COLUMNS fromColNum(int column) {
+            for(ADD_INCIDENT_LIST_COLUMNS c : ADD_INCIDENT_LIST_COLUMNS.values()) {
+                if(c.colNum == column)
+                    return c;
+            }
+            
+            return LOG_NUM_COL;
+        }
+    }  
+
+    /** 
+     * Container class to hold information displayed in the table.
+     * @author Matthew Cechini
+     */ 
+    protected class AddIncidentEventInfo {
+    
+        public Integer logNumber;
+        public String  description;
+        public Long    length;
+        public Boolean addFlag;
+        public Long    scheduleTime;
+        
+        public AddIncidentEventInfo(Integer log, String desc, Long len, Boolean add, Long time) {
+            logNumber    = log;
+            description  = desc;
+            length       = len;
+            addFlag      = add;
+            scheduleTime = time;
+        }
+    }
+
+    /** List of data displayed in the table. */
+    private List<AddIncidentEventInfo> event_list;
+    
+    /** Constructor. */
+    public AddIncidentListTableModel() {
+        event_list = new ArrayList<AddIncidentEventInfo>();
+    } 
+
+    public String getColumnName(int col) {
+        return ADD_INCIDENT_LIST_COLUMNS.columnName(col);
+    }
+    
+    public Class getColumnClass(int c) {
+        return getValueAt(0, c).getClass();
+    }
+
+    public int getRowCount() {
+        if(event_list == null) {
+            return 0;
+        }
+        else
+            return event_list.size();
+    }
+
+    public int getColumnCount() {
+        return ADD_INCIDENT_LIST_COLUMNS.colCount();
+    }
+
+
+    public int getColumnMinWidth(int c){
+        return ADD_INCIDENT_LIST_COLUMNS.columnMinWidth(c);
+    }
+
+
+    public int getColumnMaxWidth(int c){
+        return ADD_INCIDENT_LIST_COLUMNS.columnMaxWidth(c);
+    }
+
+
+    public int getColumnPrefWidth(int c){
+        return ADD_INCIDENT_LIST_COLUMNS.columnPrefWidth(c);
+    }
+
+    public boolean isCellEditable(int row, int col) {
+        switch (ADD_INCIDENT_LIST_COLUMNS.fromColNum(col)) {
+            case ADD_COL:
+            case SCHEDULED_COL:
+                return true;
+            case LOG_NUM_COL:
+            case EVENT_DESC_COL:
+            case EVENT_LEN_COL:
+            default:
+                return false;
+        }        
+
+    }      
+    
+    public Object getValueAt(int row, int col) {
+        switch (ADD_INCIDENT_LIST_COLUMNS.fromColNum(col)) {
+            case ADD_COL:
+                return event_list.get(row).addFlag;
+            case LOG_NUM_COL:
+                return event_list.get(row).logNumber;
+            case SCHEDULED_COL:
+                return event_list.get(row).scheduleTime;
+            case EVENT_DESC_COL:
+                return event_list.get(row).description;
+            case EVENT_LEN_COL:
+                return event_list.get(row).length;
+            default: 
+                return "";
+        }  
+    }
+       
+    public void setValueAt(Object value, int row, int col) {
+        switch (ADD_INCIDENT_LIST_COLUMNS.fromColNum(col)) {
+            case ADD_COL:
+                event_list.get(row).addFlag = (Boolean)value;
+                break;
+            case SCHEDULED_COL:
+                event_list.get(row).scheduleTime = (Long)value;
+                break;
+        }    
+        fireTableChanged(new TableModelEvent(this));
+    }
+    
+    /**
+     * Method adds a new incident into the table.
+     * @param newIncident Incident object to add.
+     */
+    public void addIncident(Incident newIncident) {
+        event_list.add(new AddIncidentEventInfo(
+                newIncident.getLogNumber(),
+                newIncident.description,
+                newIncident.getIncidentLength(),
+                new Boolean(false), new Long(0)));
+        fireTableChanged(new TableModelEvent(this));
+    }    
+    
+
+    /**
+     * Method gets a map of incidents, and the scheduled start time
+     * for all incidents that have been selected in the table.
+     * 
+     * @return Map of incident log numbers (key) and scheduled start time (value)
+     */
+    public TreeMap<Integer, Long> getSelectedIncidentTimes() {
+        TreeMap<Integer, Long> selectedIncMap = new TreeMap<Integer, Long>();
+        
+        for(AddIncidentEventInfo info : event_list) {
+            if(info.addFlag)
+                selectedIncMap.put(info.logNumber, info.scheduleTime);
+        }   
+        
+        return selectedIncMap;
+    }
+    
+    /** 
+     * Remove all incidents from the table's data.
+     */    
+    public void clearModelData() {
+        event_list.clear();
+        fireTableChanged(new TableModelEvent(this));
+    }
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/model/UpperCaseField.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/model/UpperCaseField.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/model/UpperCaseField.java	(revision 82)
@@ -0,0 +1,53 @@
+package tmcsim.simulationmanager.model;
+
+import javax.swing.JTextField;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.PlainDocument;
+
+
+/**
+ * UpperCaseField extends from JTextField to provide a text field that only
+ * displays upper case characters.
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class UpperCaseField extends JTextField {
+
+    /**
+     * Constructor.
+     * @param cols Number of columns for the text field.
+     */ 
+    public UpperCaseField(int cols) {
+        super(cols);
+    }
+
+    protected Document createDefaultModel() {
+          return new UpperCaseDocument();
+    }
+
+    /**
+     * The UpperCaseDocument extends from PlainDocument to overload the
+     * insertString method to ensure that all characters are upper case.
+     * @author Matthew Cechini
+     */
+    class UpperCaseDocument extends PlainDocument {
+        
+        public void insertString(int offs, String str, AttributeSet a) 
+              throws BadLocationException {
+
+              if (str == null) {
+              return;
+              }
+              char[] upper = str.toCharArray();
+              for (int i = 0; i < upper.length; i++) {
+              upper[i] = Character.toUpperCase(upper[i]);
+              }
+              super.insertString(offs, new String(upper), a);
+          }
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/dialogs/CMSDiversionDialog.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/dialogs/CMSDiversionDialog.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/dialogs/CMSDiversionDialog.java	(revision 82)
@@ -0,0 +1,234 @@
+package tmcsim.simulationmanager.dialogs;
+
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Vector;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JSeparator;
+import javax.swing.JTextField;
+import javax.swing.border.CompoundBorder;
+
+import tmcsim.cadmodels.CMSDiversion;
+import tmcsim.cadmodels.CMSInfo;
+import tmcsim.simulationmanager.model.CMSDiversionSliderBox;
+
+
+/**
+ * The CMSDiversionDialog is used to allow the user to select diversion percentages
+ * for a specific changeable message sign.  This dialog is initialized with a CMSInfo
+ * object, which contains the unique identifying information and diversions for a CMS.
+ * A slider for each possible diversion is created and represented on the dialog.  
+ * The user may modify diversion percentages and then choose to apply them, or cancel 
+ * and close the dialog.  Diversion percentages are updated in the RouteSliderBox,
+ * which points to the local CMSInfo object.
+ * 
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/06 20:46:41 $ $Revision: 1.7 
+ */
+@SuppressWarnings("serial")
+public class CMSDiversionDialog extends JDialog {
+    
+    /** CMSInfo object associated with this dialog. */
+    public CMSInfo theCMSInfo = null;
+    
+    /** Vector of RouteSliderBox objects, each representing a possible diversion. */
+    private Vector<CMSDiversionSliderBox> diversionSliders;
+
+    /**
+     * Constructor.  Initialize GUI components.
+     * 
+     * @param parent View object to attach.
+     * @param newCMSInfo CMSInfo object containing diversion info.
+     */ 
+    public CMSDiversionDialog(Frame parent) {
+        super(parent, "Add New Diversion", true);
+        
+        diversionSliders = new Vector<CMSDiversionSliderBox>();
+        
+    }
+    
+    public void showDialog(CMSInfo newCMSInfo) {
+        theCMSInfo = newCMSInfo;
+        
+        diversionSliders.clear();
+        getContentPane().removeAll();
+        
+        initComponents(theCMSInfo);     
+
+        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+        setLocation(screenSize.width/2 - getWidth()/2, screenSize.height/2 - getHeight()/2);
+        
+        setVisible(true);
+    }
+    
+    /**
+     * Initialize GUI Swing elements and listeners.  Create RouteSliderBox 
+     * objects for each possible diversion in the CMSInfo object.
+     * 
+     * @param theDiversion
+     */
+    private void initComponents(CMSInfo theCMS) {
+
+        Box cmsSignInfoBox = new Box(BoxLayout.X_AXIS);
+        cmsSignInfoBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+        
+        JLabel cmsIDLabel        = new JLabel("CMS ID:  ");
+        JLabel cmsPostmileLabel  = new JLabel("Postmile:  ");
+        JLabel cmsMainLineLabel  = new JLabel("Main Line:  ");      
+        
+        JTextField cmsIDTextField        = new JTextField(String.valueOf(theCMS.cmsID), 4);
+        JTextField cmsPostmileTextField  = new JTextField(String.valueOf(theCMS.postmile), 10);
+        JTextField cmsMainLineTextField  = new JTextField(theCMS.initialRoute, 10);     
+        
+        cmsIDTextField.setEditable(false);
+        cmsIDTextField.setMaximumSize(new Dimension(190, 25));
+        cmsIDTextField.setMinimumSize(new Dimension(120, 25));
+        cmsPostmileTextField.setEditable(false);
+        cmsPostmileTextField.setMaximumSize(new Dimension(60, 25));
+        cmsPostmileTextField.setMinimumSize(new Dimension(40, 25));;
+        cmsMainLineTextField.setEditable(false);                
+        cmsMainLineTextField.setMaximumSize(new Dimension(60, 25));
+        cmsMainLineTextField.setMinimumSize(new Dimension(40, 25));
+
+        cmsSignInfoBox.add(cmsIDLabel);
+        cmsSignInfoBox.add(cmsIDTextField);     
+        cmsSignInfoBox.add(Box.createHorizontalStrut(10));
+        cmsSignInfoBox.add(cmsPostmileLabel);
+        cmsSignInfoBox.add(cmsPostmileTextField);       
+        cmsSignInfoBox.add(Box.createHorizontalStrut(10));
+        cmsSignInfoBox.add(cmsMainLineLabel);
+        cmsSignInfoBox.add(cmsMainLineTextField);       
+        
+        Box diversionSlidersBox = new Box(BoxLayout.X_AXIS);
+        diversionSlidersBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+        
+        Box labelBox = new Box(BoxLayout.Y_AXIS);
+        JLabel oldPathLabel = new JLabel("Old Path:");
+        oldPathLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
+        JLabel spaceLabel = new JLabel(" ");
+        oldPathLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
+        JLabel newPathLabel = new JLabel("New Path:");
+        newPathLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
+        
+        labelBox.add(oldPathLabel);
+        labelBox.add(spaceLabel);
+        labelBox.add(newPathLabel);
+        labelBox.add(Box.createVerticalGlue());
+
+        diversionSlidersBox.add(labelBox);
+        
+        CMSDiversionSliderBox slider;
+        // For each diversion, create a new RouteSliderBox and
+        // needed labels and GUI elements.
+        for(CMSDiversion cmsd : theCMS.possibleDiversions) {
+            
+            Box singleDiversionBox = new Box(BoxLayout.Y_AXIS);
+            JLabel originalLabel = new JLabel(cmsd.originalPath);
+            JLabel toLabel       = new JLabel("To");
+            JLabel newLabel      = new JLabel(cmsd.newPath);
+            
+            originalLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
+            toLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
+            newLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
+            
+            singleDiversionBox.add(originalLabel);
+            singleDiversionBox.add(toLabel);
+            singleDiversionBox.add(newLabel);
+    
+            slider = new CMSDiversionSliderBox(cmsd);
+            diversionSliders.add(slider);
+            singleDiversionBox.add(slider);
+            singleDiversionBox.add(Box.createHorizontalStrut(85));
+            
+            diversionSlidersBox.add(singleDiversionBox);
+            
+        }
+        
+        JLabel instructionsLabel = new JLabel("Choose the percentage of traffic " + 
+                                              "traveling on the main line that will be diverted.");
+        instructionsLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
+        
+        Box diversionInteractionBox = new Box(BoxLayout.Y_AXIS);
+        diversionInteractionBox.setAlignmentX(Box.CENTER_ALIGNMENT);
+        diversionInteractionBox.add(cmsSignInfoBox);
+        diversionInteractionBox.add(Box.createVerticalStrut(5));
+        diversionInteractionBox.add(new JSeparator());
+        diversionInteractionBox.add(instructionsLabel);
+        diversionInteractionBox.add(Box.createVerticalStrut(10));
+        diversionInteractionBox.add(diversionSlidersBox);       
+
+        CompoundBorder cBorder = BorderFactory.createCompoundBorder(
+                BorderFactory.createTitledBorder(BorderFactory.createRaisedBevelBorder(), 
+                                                 "Diversion Information"),
+                BorderFactory.createEmptyBorder(5,5,5,5));
+        diversionInteractionBox.setBorder(cBorder);         
+        
+        
+        JButton applyButton = new JButton("Apply");
+        applyButton.addActionListener(new ActionListener() {
+            /* 
+             * Set this dialog's visibility to false, and call the apply() 
+             * method in all route slider boxes to set the new diversion 
+             * percentages into the CMSDiversion objects.  
+             */
+            public void actionPerformed(ActionEvent evt) {
+                for(CMSDiversionSliderBox rs : diversionSliders)
+                    rs.apply();
+                
+                setVisible(false);              
+            }
+        });  
+        
+        JButton cancelButton = new JButton("Cancel");
+        cancelButton.addActionListener(new ActionListener() {
+            /* 
+             * Set this dialog's visibility to false, and call the reset() 
+             * method in all route slider boxes to reset them to the 
+             * original diversion percentage.
+             */         
+            public void actionPerformed(ActionEvent evt) {
+                theCMSInfo.reset();
+
+                setVisible(false);
+            }
+        });  
+        
+        Box diversionButtonBox = new Box(BoxLayout.X_AXIS);
+        diversionButtonBox.setAlignmentX(Box.CENTER_ALIGNMENT);     
+        
+        diversionButtonBox.add(Box.createHorizontalGlue());
+        diversionButtonBox.add(applyButton);
+        diversionButtonBox.add(Box.createHorizontalStrut(20));
+        diversionButtonBox.add(cancelButton);
+        diversionButtonBox.add(Box.createHorizontalStrut(15));      
+        
+                    
+        Box diversionDialogBox = new Box(BoxLayout.Y_AXIS);
+        diversionDialogBox.add(Box.createVerticalStrut(10));        
+        diversionDialogBox.add(diversionInteractionBox);
+        diversionDialogBox.add(diversionButtonBox);
+    
+        getContentPane().add(diversionDialogBox);
+        pack();
+        
+        int width = 550 > diversionSliders.size()*100 ? 550 : diversionSliders.size()*100;
+        setSize(new Dimension(width, 500));
+        setResizable(false);        
+        
+    }   
+    
+}
+
+
+
+
+
Index: /branches/trunk/src/tmcsim/simulationmanager/dialogs/AddIncidentDialog.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/dialogs/AddIncidentDialog.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/dialogs/AddIncidentDialog.java	(revision 82)
@@ -0,0 +1,215 @@
+package tmcsim.simulationmanager.dialogs;
+
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+import javax.swing.JSpinner;
+import javax.swing.JTable;
+import javax.swing.border.EtchedBorder;
+import javax.swing.border.TitledBorder;
+
+import tmcsim.client.cadclientgui.data.Incident;
+import tmcsim.simulationmanager.model.AddIncidentListTableModel;
+import tmcsim.simulationmanager.model.IncidentTimeCellEditor;
+import tmcsim.simulationmanager.model.IncidentTimeCellRenderer;
+import tmcsim.simulationmanager.model.IncidentTimeSpinnerModel;
+import tmcsim.simulationmanager.model.AddIncidentListTableModel.ADD_INCIDENT_LIST_COLUMNS;
+
+
+/**
+ * This dialog is used when the user chooses to add a new incident into the 
+ * simulation.  To show the dialog, mthe showDialog() method is called with
+ * the Incidents to display in the dialog.  These incidents are displayed to 
+ * the user, who may then select which incidents to add to the simulation, 
+ * and assign a time that each incident will occur.  
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2006/06/14 00:12:38 $ $Revision: 1.7 
+ */
+@SuppressWarnings("serial")
+public class AddIncidentDialog extends JDialog implements ActionListener {
+    
+    /**
+     * Constructor.  Initialize lists and GUI elements.
+     */ 
+    public AddIncidentDialog(Frame parent) {
+        super(parent);
+
+        setTitle("Add New Incidents");
+        setModal(true);
+        
+        setSize(new Dimension(600, 350));
+        setResizable(false);
+    
+        initComponents();   
+    }
+    
+    /**
+     * Populate the Incident Table with the parameter data.
+     *
+     * @param incidentList Vector of Incidents that have been read in from a
+     * selected file.
+     */
+    public void setModelData(Vector<Incident> incidentList) {
+        incidentListTableModel.clearModelData();
+        
+        for(Incident inc : incidentList) {
+            incidentListTableModel.addIncident(inc);
+        }
+
+    }
+    
+    /**
+     * Reposition the dialog to the center of the screen at set visible.
+     */
+    public void showDialog() {
+        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+        setLocation(screenSize.width/2 - getWidth()/2, screenSize.height/2 - getHeight()/2);
+        
+        setVisible(true);
+    }
+    
+    /**
+     * Method gets a map of incidents, and the scheduled start time
+     * for all incidents that have been selected in the table.
+     * 
+     * @return Map of incident log numbers (key) and scheduled start time (value)
+     */
+    public TreeMap<Integer, Long> getSelectedIncidentTimes() {
+        return incidentListTableModel.getSelectedIncidentTimes();
+    }
+    
+    public void actionPerformed(ActionEvent evt) {
+    
+        if(evt.getSource().equals(okButton)) {
+            incidentListTable.getColumnModel().getColumn(
+                    ADD_INCIDENT_LIST_COLUMNS.SCHEDULED_COL.colNum)
+                    .getCellEditor().stopCellEditing(); 
+            
+            setVisible(false);
+        }
+        else if(evt.getSource().equals(cancelButton)) {             
+            incidentListTable.getColumnModel().getColumn(
+                    ADD_INCIDENT_LIST_COLUMNS.SCHEDULED_COL.colNum)
+                    .getCellEditor().cancelCellEditing();
+            
+            incidentListTableModel.clearModelData();
+
+            setVisible(false);
+        }
+            
+    }
+    
+    /**
+     * Initialize GUI Swing elements and listeners.
+     */
+    private void initComponents() {
+
+        initIncidentTable();
+        initButtons();
+              
+        addIncidentBox = new Box(BoxLayout.Y_AXIS);
+        addIncidentBox.add(Box.createVerticalStrut(10));
+        addIncidentBox.add(incidentListPane);  
+        addIncidentBox.add(Box.createVerticalStrut(5));        
+        addIncidentBox.add(buttonBox);        
+        addIncidentBox.add(Box.createVerticalStrut(10));
+        
+        getContentPane().add(addIncidentBox);
+        pack();
+        
+    }   
+    
+    /**
+     * Initialize Incident Table Swing elements
+     */
+    private void initIncidentTable() {
+        
+        incidentTimeModel = new IncidentTimeSpinnerModel();
+        incidentSpinner   = new JSpinner(incidentTimeModel);
+        
+        incidentListTableModel = new AddIncidentListTableModel();        
+        incidentListTable = new JTable(incidentListTableModel);
+        incidentListTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+        incidentListTable.setDragEnabled(false);      
+                
+        for(int c = 0; c < incidentListTable.getColumnCount(); c++) {
+            incidentListTable.getColumnModel().getColumn(c).setMinWidth(
+                    incidentListTableModel.getColumnMinWidth(c));
+            incidentListTable.getColumnModel().getColumn(c).setMaxWidth(
+                    incidentListTableModel.getColumnMaxWidth(c));
+            incidentListTable.getColumnModel().getColumn(c).setPreferredWidth(
+                    incidentListTableModel.getColumnPrefWidth(c));
+            incidentListTable.getColumnModel().getColumn(c).setResizable(true);
+            
+            if(c == ADD_INCIDENT_LIST_COLUMNS.EVENT_LEN_COL.colNum) {
+                incidentListTable.getColumnModel().getColumn(c).setCellRenderer(
+                        new IncidentTimeCellRenderer());                
+            }
+            else if(c == ADD_INCIDENT_LIST_COLUMNS.SCHEDULED_COL.colNum) {
+                incidentListTable.getColumnModel().getColumn(c).setCellRenderer(
+                        new IncidentTimeCellRenderer());
+                incidentListTable.getColumnModel().getColumn(c).setCellEditor(
+                        new IncidentTimeCellEditor(incidentSpinner));
+            }               
+        }
+        
+                
+        incidentListPane  = new JScrollPane();      
+        incidentListPane.setMaximumSize(new Dimension(650, 400));       
+        incidentListPane.setMinimumSize(new Dimension(525, 200));   
+        incidentListPane.setPreferredSize(new Dimension(525, 200));
+        incidentListPane.setViewportView(incidentListTable);
+        incidentListPane.setAlignmentX(Box.CENTER_ALIGNMENT);       
+
+        TitledBorder title = BorderFactory.createTitledBorder(
+                BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), 
+                "Possible Incidents");
+        title.setTitleJustification(TitledBorder.LEFT);
+        incidentListPane.setBorder(title);                
+        
+    }
+    
+    /**
+     * Intialize Ok and Cancel button Swing elements and listeners.
+     */
+    private void initButtons() {
+        
+        okButton = new JButton("OK");
+        okButton.addActionListener(this);
+        
+        cancelButton = new JButton("Cancel");        
+        cancelButton.addActionListener(this);
+        
+        buttonBox = new Box(BoxLayout.X_AXIS);
+        buttonBox.add(okButton);
+        buttonBox.add(Box.createHorizontalStrut(50));
+        buttonBox.add(cancelButton);
+        buttonBox.setAlignmentX(Box.CENTER_ALIGNMENT);      
+    }   
+
+
+    private JTable incidentListTable;
+    private AddIncidentListTableModel incidentListTableModel;
+    private JScrollPane incidentListPane;
+    private JSpinner incidentSpinner;
+    private IncidentTimeSpinnerModel incidentTimeModel; 
+    
+    private JButton cancelButton;;
+    private JButton okButton;
+    
+    private Box addIncidentBox;
+    private Box buttonBox;  
+}
Index: /branches/trunk/src/tmcsim/simulationmanager/dialogs/GotoTimeIndexDialog.java
===================================================================
--- /branches/trunk/src/tmcsim/simulationmanager/dialogs/GotoTimeIndexDialog.java	(revision 82)
+++ /branches/trunk/src/tmcsim/simulationmanager/dialogs/GotoTimeIndexDialog.java	(revision 82)
@@ -0,0 +1,150 @@
+package tmcsim.simulationmanager.dialogs;
+
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JSpinner;
+
+import tmcsim.simulationmanager.SimulationManagerView;
+import tmcsim.simulationmanager.model.IncidentTimeSpinnerModel;
+
+
+/**
+ * GotoTimeIndexDialog is a dialog used to prompt the user for the
+ * simulation time that the simulation will be reset to.  
+ * When the dialog is closed, the gotoApplied flag is set to true 
+ * if the user has chosen a time to seek to.  Otherwise, the flag is false.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class GotoTimeIndexDialog extends JDialog {
+    
+    /** 
+     *  Boolean flag to designate whether the user has chosen to goto
+     *  a new position in the simulation.
+     */
+    public boolean gotoApplied = false;
+
+    /**
+     * Constructor.
+     *
+     * @param simulationManagerView View object to attach this dialog to.
+     * @param initialValue Long value (in seconds) of time to initialize spinner with. 
+     */
+    public GotoTimeIndexDialog(SimulationManagerView simulationManagerView, long initialValue) {
+        super(simulationManagerView, "Goto CAD Time Index", true);
+        
+        initComponents();   
+        
+        timeSpinner.setValue(initialValue);     
+
+        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+        setLocation(screenSize.width/2 - getWidth()/2, screenSize.height/2 - getHeight()/2);
+        
+        setSize(new Dimension(250, 150));
+        setResizable(false);
+        setModal(true);
+        setVisible(true);
+            
+    }   
+    
+    /**
+     * Initialize GUI Swing elements and listeners.
+     */
+    private void initComponents() {
+        
+        addWindowListener(new WindowListener() {
+            public void windowClosed(WindowEvent e)  {}
+            public void windowOpened(WindowEvent e)  {}            
+            public void windowIconified(WindowEvent e)  {}         
+            public void windowDeiconified(WindowEvent e)  {}    
+            public void windowActivated(WindowEvent e)  {}                             
+            public void windowDeactivated(WindowEvent e)  {}         
+            public void windowClosing(WindowEvent e)  {
+                gotoApplied = false;                
+            }    
+        });     
+        
+        gotoLabel = new JLabel("Choose the new simulation time:");
+        gotoLabel.setAlignmentX(Box.CENTER_ALIGNMENT);  
+
+        okButton = new JButton("OK");
+        okButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                gotoApplied = true;
+                setVisible(false);  
+            }
+            
+        });
+        
+        cancelButton = new JButton("Cancel");        
+        cancelButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                gotoApplied = false;
+                setVisible(false);  
+            }           
+        });
+        
+        incidentTimeModel = new IncidentTimeSpinnerModel();
+        timeSpinner = new JSpinner(incidentTimeModel);
+        timeSpinner.setMaximumSize(new Dimension(70,20));
+        timeSpinner.setAlignmentX(Box.CENTER_ALIGNMENT);
+        
+        buttonBox = new Box(BoxLayout.X_AXIS);
+        buttonBox.add(Box.createHorizontalStrut(20));
+        buttonBox.add(Box.createHorizontalGlue());
+        buttonBox.add(okButton);
+        buttonBox.add(Box.createHorizontalStrut(20));
+        buttonBox.add(cancelButton);
+        buttonBox.add(Box.createHorizontalGlue());
+        buttonBox.add(Box.createHorizontalStrut(20));   
+        buttonBox.setAlignmentX(Box.CENTER_ALIGNMENT);  
+              
+        gotoIndexBox = new Box(BoxLayout.Y_AXIS);
+        gotoIndexBox.add(Box.createVerticalStrut(10));
+        gotoIndexBox.add(Box.createVerticalGlue());
+        gotoIndexBox.add(gotoLabel);
+        gotoIndexBox.add(Box.createVerticalStrut(10));
+        gotoIndexBox.add(timeSpinner);
+        gotoIndexBox.add(Box.createVerticalStrut(10));
+        gotoIndexBox.add(buttonBox);    
+        gotoIndexBox.add(Box.createVerticalGlue());   
+        gotoIndexBox.add(Box.createVerticalStrut(10)); 
+        
+        getContentPane().add(gotoIndexBox);
+        pack();     
+    }       
+    
+    /**
+     * Gets a string representation of the time set by the time
+     * spinner in the dialog.  Format:  H:MM:SS
+     * @return String representation of spinner time.
+     */
+    public String getGotoTime() {
+        return (String)timeSpinner.getValue();
+    }   
+    
+    
+    private JLabel gotoLabel;
+    private JSpinner timeSpinner;
+    
+    private IncidentTimeSpinnerModel incidentTimeModel;
+    
+    private JButton cancelButton;;
+    private JButton okButton;
+
+    private Box gotoIndexBox;   
+    private Box buttonBox;  
+    
+}
Index: /branches/trunk/src/tmcsim/paramicscommunicator/ParamicsFileWriter.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicscommunicator/ParamicsFileWriter.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicscommunicator/ParamicsFileWriter.java	(revision 82)
@@ -0,0 +1,273 @@
+package tmcsim.paramicscommunicator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.Observable;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.XMLSerializer;
+import org.w3c.dom.Element;
+import tmcsim.paramicscommunicator.FileIOUpdate.IO_TYPE;
+
+/**
+ * The ParamicsFileWriter handles writing messages to a target file which is
+ * read by Paramics. Messages are received through the writeMessage() method.
+ * This object handles queueing messages and writing as the file becomes
+ * available. New data is written to the target file when it has been modified
+ * (cleared) by Paramics. If this does not happen, messages are queued and a
+ * timer is used to periodically determine if the file has become available for
+ * writing.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+public class ParamicsFileWriter extends Observable
+{
+
+    /**
+     * Duration (in ms) that the TimerTask will be scheduled to retry writing to
+     * the target file. Default = 2000ms
+     */
+    private static long TIMER_DURATION = 2000;
+    /**
+     * Error Logger.
+     */
+    private Logger paramLogger = Logger.getLogger("tmcsim.paramicscommunicator");
+    /**
+     * Linked List of messages that have been received
+     */
+    private LinkedList<Element> queuedMessages = null;
+    /**
+     *
+     */
+    private String writerID = null;
+    /**
+     * File name of the file where data is written
+     */
+    private String outputFile = null;
+    /**
+     * FileWriter used to write data to the output file.
+     */
+    private FileWriter fileWriter = null;
+    /**
+     * Value (seconds since 1/1/1970) of output file's last modifcation time
+     */
+    private long lastModified = 0;
+    /**
+     * Timer used to schedule file writing tasks.
+     */
+    private Timer writerTimer = null;
+    /**
+     * Synchronizing lock to protect File IO and message queuing.
+     */
+    private Object lock = null;
+
+    /**
+     * A TimerTask to retry writing messages that have been queued within this
+     * ParamicsWriter. If a message has been queued, see if the target file has
+     * been modified since last write. If so, write the first queued message to
+     * the file and remove the message from the queue. If writing is
+     * unsuccessful, do not remove the message from the queue. If there are no
+     * more messages in the queue, cancel this timer.
+     */
+    private class WriterTimerTask extends TimerTask
+    {
+
+        public void run()
+        {
+
+            synchronized (lock)
+            {
+                paramLogger.log(Level.INFO, "ParamicsFileWriter, WriterTimerTask "
+                        + "run() started, current queue size = " + queuedMessages.size());
+
+                //if we've queued something, continue.
+                if (queuedMessages.size() > 0)
+                {
+
+                    //if file has been modified, write to it
+                    // if file has been modifed by Paramics (i.e, cleared) since we 
+                    // last wrote to it, then it's available for us to write to.
+                    if (lastModified < new File(outputFile).lastModified())
+                    {
+                        try
+                        {
+                            writeToFile(queuedMessages.getFirst());
+                            queuedMessages.remove(0);
+                        } catch (IOException ioe)
+                        {
+                            paramLogger.logp(Level.SEVERE, "ParamicsFileWriter.WriterTimerTask",
+                                    "run()", "Exception in writing to the target file: "
+                                    + outputFile + ".  Queue size = " + queuedMessages.size(), ioe);
+                        }
+
+                        //all queued messages gone, cancel timer
+                        if (queuedMessages.size() == 0)
+                        {
+                            this.cancel();
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Constructor. Initialize data objects. If the target file exists, delete
+     * it, and then create a new file.
+     *
+     * @param workingDir Directory path where the output file is to be written
+     * @param mess The ParamicsCommMessage containing the outputFile filename.
+     */
+    public ParamicsFileWriter(String id, String workingDir, String targetFile)
+    {
+
+        try
+        {
+            writerID = id;
+
+            queuedMessages = new LinkedList<Element>();
+            lock = new Object();
+
+            outputFile = workingDir + targetFile;
+
+            File tempFile = new File(outputFile);
+            if (tempFile.exists())
+            {
+                tempFile.delete();
+            }
+
+            tempFile.createNewFile();
+
+            writerTimer = new Timer();
+
+        } catch (IOException ioe)
+        {
+            paramLogger.logp(Level.SEVERE, "ParamicsFileWriter", "Constructor",
+                    "Unable to create Paramics File Writer.", ioe);
+        }
+
+    }
+
+    /**
+     * Method is called when a message has been received from the CAD Simulator.
+     * If the message queue is not empty, add the new message to the queue. If
+     * the output file has not been modified (read) since last write, add the
+     * message to the queue and set a timer to repeatedly check for modification
+     * to the output file. Else, write the new message to the file. If there is
+     * an error in writing the data, queue the message start a timer to retry
+     * the writing.
+     *
+     * @param newMessage The received message which is to be written to the
+     * output file.
+     */
+    public void writeMessage(Element messageElem)
+    {
+
+        synchronized (lock)
+        {
+//            paramLogger.log(Level.INFO, "ParamicsFileWriter, writeMessage "
+//                    + "current queue size = " + queuedMessages.size());
+            double freebytes =  Runtime.getRuntime().freeMemory();
+            freebytes = freebytes / 1000000;
+            paramLogger.log(Level.INFO, "ParamicsFileWriter: "
+                    + freebytes + " MB free");
+            
+            //messages already queued... get in line, don't need to start the
+            // timer task.
+            if (queuedMessages.size() > 0)
+            {
+                queuedMessages.add(messageElem);
+
+//                paramLogger.log(Level.INFO, "Queueing message, new queue "
+//                        + "size = " + queuedMessages.size());
+            }
+            // No message queued, see if outputfile has been updated since
+            // the last time we wrote to it. 
+            //No modification since last write. (first queue)
+            else if (lastModified >= new File(outputFile).lastModified())
+            {
+//                paramLogger.log(Level.INFO, "ParamicsFileWriter, writeMessage "
+//                        + "adding msg to queue.");
+                queuedMessages.add(messageElem);
+                // Start a timer to periodically see if the queue can be written
+                writerTimer.scheduleAtFixedRate(new WriterTimerTask(),
+                        0L, TIMER_DURATION);
+
+//                paramLogger.log(Level.INFO, "First message queued");
+            } 
+            //free and clear, write.
+            // last time we wrote is < modified date on file,
+            // so the file has been changed by Modeler since last time we wrote to it.
+            else
+            {
+//                paramLogger.log(Level.INFO, "ParamicsFileWriter, writeMessage "
+//                        + "try to writeToFile" + outputFile);
+                try
+                {
+                    writeToFile(messageElem);
+                } catch (IOException ioe)
+                {
+                    paramLogger.logp(Level.SEVERE, "ParamicsFileWriter",
+                            "writeMessage()", "Exception in writing to the "
+                            + "target file: " + outputFile, ioe);
+
+                    queuedMessages.add(messageElem);
+
+                    writerTimer.scheduleAtFixedRate(new WriterTimerTask(),
+                            0L, TIMER_DURATION);
+                }
+//                paramLogger.log(Level.INFO, "ParamicsFileWriter, writeMessage "
+//                        + "writeToFile succeeded.");
+            }
+        }
+    }
+
+    /**
+     * Method writes data to the output file.
+     *
+     * @param output Data to be written to the file.
+     */
+    private void writeToFile(Element output) throws IOException
+    {
+
+        fileWriter = new FileWriter(outputFile);
+
+        OutputFormat of = new OutputFormat("XML", "ISO-8859-1", true);
+        of.setIndent(1);
+        of.setIndenting(true);
+
+        XMLSerializer serializer = new XMLSerializer(fileWriter, of);
+        serializer.asDOMSerializer();
+        serializer.serialize(output);
+
+        /**
+         * Added by Nathaniel Lehrer
+         */
+        try
+        {
+            java.io.ByteArrayOutputStream outputStream = new java.io.ByteArrayOutputStream();
+            new XMLSerializer(outputStream, of).serialize(output);
+            tmcsim.paramicslog.ParamicsLog.getInstance().writeToLog(outputStream.toString());
+        } catch (Exception e)
+        {
+            System.out.println(e);
+        }
+        /**
+         * End Add by Nathaniel Lehrer
+         */
+        fileWriter.flush();
+        fileWriter.close();
+
+        lastModified = new File(outputFile).lastModified();
+
+        setChanged();
+        notifyObservers(new FileIOUpdate(IO_TYPE.WRITE, writerID, new File(outputFile).length()));
+
+    }
+}
Index: /branches/trunk/src/tmcsim/paramicscommunicator/FileRegUpdate.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicscommunicator/FileRegUpdate.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicscommunicator/FileRegUpdate.java	(revision 82)
@@ -0,0 +1,52 @@
+package tmcsim.paramicscommunicator;
+
+import tmcsim.paramicscommunicator.FileIOUpdate.IO_TYPE;
+
+/**
+ * FileRegUpdate is an update class used to record registration operations 
+ * performed by the ParamicsCommunicator.
+ *  
+ * @author Matthew Cechini
+ * @version
+ */
+public class FileRegUpdate {
+
+    /**
+     * Enumeration of registration actions.
+     * @author Matthew Cechini
+     */
+    public static enum REG_TYPE { REGISTER, UNREGISTER };
+    
+    /** I/O action type performed by this Paramics FileReader or FileWriter */
+    public IO_TYPE  ioType;
+
+    /** Registration action performed. */
+    public REG_TYPE regType;
+
+    /** ID of FileReader or FileWriter. */
+    public String   ioID;
+
+    /** Target file to read from or write to. */
+    public String   targetFile;
+
+    /** Interval (in seconds) that the I/O action is performed. */
+    public Integer  ioInterval;
+    
+    /**
+     * Constructor.
+     * 
+     * @param io I/O action type.
+     * @param reg Registration action type.
+     * @param id   I/O object id.
+     * @param file Target file for I/O operation.
+     * @param interval Interval for I/O action.
+     */
+    public FileRegUpdate(IO_TYPE io, REG_TYPE reg, String id, String file, Integer interval) {
+        ioType  = io;
+        ioID    = id;
+        regType = reg;
+        targetFile = file;
+        ioInterval = interval;
+    }
+    
+}
Index: /branches/trunk/src/tmcsim/paramicscommunicator/ParamicsCommunicator.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicscommunicator/ParamicsCommunicator.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicscommunicator/ParamicsCommunicator.java	(revision 82)
@@ -0,0 +1,586 @@
+package tmcsim.paramicscommunicator;
+
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Properties;
+import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.UIManager;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import tmcsim.common.CADProtocol.PARAMICS_ACTIONS;
+import tmcsim.common.CADProtocol.PARAMICS_COMM_TAGS;
+import tmcsim.paramicscommunicator.FileIOUpdate.IO_TYPE;
+import tmcsim.paramicscommunicator.FileRegUpdate.REG_TYPE;
+import tmcsim.paramicscommunicator.gui.ParamicsCommunicatorGUI;
+
+/**
+ * ParamicsCommunicator is the main class for this module. The Paramics
+ * Communicator is used to provide communication between the CAD Simulator and
+ * the Paramics traffic modeler. While the application is running, data is
+ * received on a socket from the CAD Simulator. Transmitted data are XML
+ * documents containing information and action commands. The CAD Simulator
+ * registers readers and writers with the ParamicsCommunicator. Any data read by
+ * a ParamicsReader is sent back to the CAD Simulator. All data to be written by
+ * a ParamicsWriter is received through the socket.<br><br>
+ * The properties file for the ParamicsCommunicator class contains the following
+ * data.<br>
+ * <code>
+ * -----------------------------------------------------------------------------<br>
+ * Socket Port The port number to use for socket communication.<br>
+ * Working Directory The working directory use for Paramics file
+ * communication.<br>
+ * Error File The target file to use for error logging.<br>
+ * -----------------------------------------------------------------------------<br>
+ * Example File: <br>
+ * SocketPort = 4450 <br>
+ * WorkingDirectory = c:\\tmc_simulator\\ <br>
+ * ErrorFile = sim_mgr_error.xml <br>
+ * -----------------------------------------------------------------------------<br>
+ * </code>
+ *
+ * @author Matthew Cechini (mcechini@calpoly.edu)
+ * @version $Date: 2009/04/17 16:27:46 $ $Revision: 1.7
+ */
+public class ParamicsCommunicator extends Observable implements Observer
+{
+
+    /**
+     * Error logger.
+     */
+    private static Logger paramLogger = Logger.getLogger("tmcsim.paramicscommunicator");
+
+    /**
+     * Enumeration containing property names.
+     *
+     * @author Matthew Cechini
+     */
+    private static enum PROPERTIES
+    {
+
+        SOCKET_PORT("SocketPort"),
+        WORKING_DIR("WorkingDirectory");
+        public String name;
+
+        private PROPERTIES(String n)
+        {
+            name = n;
+        }
+    }
+    /**
+     * Properties object.
+     */
+    private Properties paramicsCommProp = null;
+    /**
+     * Current working directory where files will be read and written
+     */
+    private String workingDirectory = null;
+    /**
+     * Socket used to create socket communication with the CAD Simulator.
+     */
+    private ServerSocket serverSocket = null;
+    /**
+     * Soccket used to communicate with CAD Simulator.
+     */
+    private Socket paramicsSocket = null;
+    /**
+     * Input Stream for reading data from the CAD Simulator.
+     */
+    private ObjectInputStream in = null;
+    /**
+     * Output Stream for writing data to the CAD Simulator.
+     */
+    private ObjectOutputStream out = null;
+    /**
+     * Map of all current ParamicsFileWriters referenced by I/O ID.
+     */
+    private TreeMap<String, ParamicsFileWriter> writers = null;
+    /**
+     * Map of all current ParamicsFileReaders referenced by I/O ID.
+     */
+    private TreeMap<String, ParamicsFileReader> readers = null;
+    /**
+     * The view class for the ParamicsCommunicator.
+     */
+    private static ParamicsCommunicatorGUI theGUI;
+    /**
+     * The thread used to initialize the socket connection with the CADSimulator
+     */
+    Thread initThread;
+
+    /**
+     * Constructor. Read in the property values. If the properties file does not
+     * contain a value for the working directory, open a dialog to prompt the
+     * user for the path of the Paramics working directory. An empty string is
+     * not accepted. A null signifies that the user pressed cancel. Prompt the
+     * user to accept the cancel and exit the application if confirmed. Continue
+     * until a valid directory has been entered, that exists, and append a '\'
+     * to the end of the directory if necessary.
+     *
+     * Initialize the Sockets and begin communication.
+     *
+     * @param propertiesFilePath File Path of ParamicsCommunicator properties
+     * file.
+     */
+    public ParamicsCommunicator(String propertiesFile)
+    {
+        writers = new TreeMap<String, ParamicsFileWriter>();
+        readers = new TreeMap<String, ParamicsFileReader>();
+
+        try
+        {
+            paramicsCommProp = new Properties();
+            paramicsCommProp.load(new FileInputStream(propertiesFile));
+
+            if (paramicsCommProp.getProperty(PROPERTIES.SOCKET_PORT.name) == null)
+            {
+                JOptionPane.showMessageDialog(theGUI,
+                        "Properties file missing CAD Simulator Port information.",
+                        "Invalid Configuration", JOptionPane.ERROR_MESSAGE);
+                System.exit(0);
+            }
+            else if (paramicsCommProp.getProperty(PROPERTIES.WORKING_DIR.name) == null
+                    || paramicsCommProp.getProperty(PROPERTIES.WORKING_DIR.name).length() == 0)
+            {
+
+                try
+                {
+                    String workingDir = null;
+
+                    while (workingDir == null || workingDir.length() == 0)
+                    {
+                        workingDir = JOptionPane.showInputDialog(null,
+                                "Please set the output directory for Paramics communication.",
+                                "Paramics Working Directory", JOptionPane.QUESTION_MESSAGE);
+
+                        if (workingDir == null)
+                        {
+                        }
+                        else if (!new File(workingDir).exists())
+                        {
+                            JOptionPane.showMessageDialog(null,
+                                    "Directory does not exist.",
+                                    "Invalid Working Directory", JOptionPane.WARNING_MESSAGE);
+
+                            workingDir = null;
+                        }
+                        else if (!new File(workingDir).isDirectory())
+                        {
+                            JOptionPane.showMessageDialog(null,
+                                    workingDir + " is not a directory.",
+                                    "Invalid Working Directory", JOptionPane.WARNING_MESSAGE);
+
+                            workingDir = null;
+                        }
+                    }
+
+                    if (workingDir.lastIndexOf("\\") != workingDir.length() - 1)
+                    {
+                        workingDir = workingDir + "\\";
+                    }
+
+                    paramicsCommProp.setProperty(PROPERTIES.WORKING_DIR.name, workingDir);
+                    paramicsCommProp.store(new FileOutputStream(propertiesFile), "");
+                } catch (IOException ioe)
+                {
+                    paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", "Constructor",
+                            "Exception in writing properties file.", ioe);
+                }
+
+            }
+
+            workingDirectory = paramicsCommProp.getProperty(
+                    PROPERTIES.WORKING_DIR.name).trim();
+
+        } catch (Exception e)
+        {
+            paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", "Constructor",
+                    "Exception in reading properties file.", e);
+        }
+
+        Integer desiredPort = Integer.parseInt(paramicsCommProp.getProperty(
+                PROPERTIES.SOCKET_PORT.name).trim());
+        /* Start a thread to initialize the sockets that talk to CADsimulator */
+        initThread = new Thread(new SocketStarter(desiredPort));
+        initThread.start();
+    }
+
+    /**
+     * For testing, we want to be able to provide a non-visible instance of the
+     * GUI to be used. (As main won't be called).
+     *
+     * @param viewer
+     */
+    public void setGUI(ParamicsCommunicatorGUI viewer)
+    {
+        theGUI = viewer;
+        addObserver(theGUI);
+    }
+
+    /**
+     * Start the thread that does the main work of the communicator. This method
+     * waits until the initial thread has opened the needed sockets to connect
+     * to the CADSimulator, then it starts the socket reader thread, which runs
+     * until the application is terminated. Usage: Normally this method is
+     * called immediately after constructing this object, but for testing
+     * purposes it is available to be invoked by the test harness after the
+     * Simulation Manager initiates a connection.
+     */
+    public void startReading()
+    {
+        while (initThread.isAlive())
+        {
+            try
+            {
+                Thread.sleep(1000);
+            } catch (InterruptedException ex)
+            {
+                paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", "runstarter",
+                        "Sleep interrupted.");
+            }
+        }
+        Runnable sr = new SocketReader();
+        new Thread(sr).start();
+    }
+
+    /**
+     * Transmits a message XML document object to the CAD Simulator.
+     *
+     * @param mess The ParamicsCommMessage to be transmitted.
+     */
+    private void write(Document mess)
+    {
+
+        synchronized (paramicsSocket)
+        {
+            try
+            {
+                out.writeObject(mess);
+                out.flush();
+            } catch (Exception e)
+            {
+                paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", "write",
+                        "Exception in writing to the socket.", e);
+            }
+        }
+    }
+
+    /**
+     * Observer/Observable update method. The Paramics Communicator observers
+     * registered ParamicsReaders. When messages are to be sent, they are sent
+     * through this method. All messages are ParamicsCommMessage objects. Send
+     * these messages to the write() method for transmission on the socket.
+     */
+    public void update(Observable o, Object arg)
+    {
+
+        if (arg instanceof Document)
+        {
+            write((Document) arg);
+        }
+    }
+
+    private class SocketReader implements Runnable
+    {
+
+        /**
+         * Runnable method. While this thread is not interrupted, read in an
+         * object from the socket input stream. If an object exists, call
+         * doMessage() to parse and perform the received action in the message.
+         */
+        public void run()
+        {
+
+            while (true)
+            {
+                try
+                {
+                    doMessage((Document) in.readObject());
+                } catch (SocketTimeoutException ste)
+                {
+                    //just try again
+                } catch (EOFException eofe)
+                {
+                    paramLogger.logp(Level.SEVERE, "ParamicsCommunicator",
+                            "run", "EOF Exception in reading data from the socket.", eofe);
+                } catch (Exception e)
+                {
+                    paramLogger.logp(Level.SEVERE, "ParamicsCommunicator",
+                            "run", "Exception in reading data from the socket.", e);
+
+                    JOptionPane.showMessageDialog(theGUI,
+                            "Connection has been lost to the CAD Simulator.  "
+                            + "Paramics Communicator will now shutdown.",
+                            "Dropped Connection", JOptionPane.ERROR_MESSAGE);
+                    break;
+                }
+                try
+                {
+                    // Sleep for a second while waiting in this infinite loop
+                    // to yield to other threads run by test harness.
+                    Thread.sleep(1000);
+                } catch (InterruptedException ex)
+                {
+                    paramLogger.logp(Level.INFO, "ParamicsCommunicator",
+                            "run", "Exception in reading data from the socket.", ex);
+                }
+            }
+
+
+            try
+            {
+                in.close();
+            } catch (Exception e)
+            {
+            }
+            try
+            {
+                out.close();
+            } catch (Exception e)
+            {
+            }
+            try
+            {
+                serverSocket.close();
+            } catch (Exception e)
+            {
+            }
+            try
+            {
+                paramicsSocket.close();
+            } catch (Exception e)
+            {
+            }
+
+        }
+    }
+
+    /**
+     * Perform the action represented in the received XML document message.
+     * First determine if the action is from a READER, WRITER, and RESET. If the
+     * paramics action is REGISTER, add a new ParamicsFileReader/Writer to the
+     * local list of readers/writers and update the GUI with a FileRegUpdate
+     * object. If the paramics action is UNREGISTER, remove the
+     * ParamicsFileReader/Writer from the local list of readers/writers and
+     * update the GUI with a FileRegUpdate object. If RESET is received, clear
+     * all readers and writers.
+     *
+     * @param mess Received XML document message.
+     */
+    private void doMessage(Document mess)
+    {
+
+        Element rootElement = mess.getDocumentElement();
+
+        String id = null;
+        String action = null;
+
+        switch (PARAMICS_COMM_TAGS.fromString(rootElement.getNodeName()))
+        {
+            case READER:
+                id = rootElement.getAttribute(PARAMICS_COMM_TAGS.ID.tag);
+                action = rootElement.getAttribute(PARAMICS_COMM_TAGS.ACTION.tag);
+
+                switch (PARAMICS_ACTIONS.fromString(action))
+                {
+                    case REGISTER:
+                        Integer interval = Integer.parseInt(rootElement.getChildNodes().item(0).getTextContent());
+                        String targetFile = rootElement.getChildNodes().item(1).getTextContent();
+
+                        readers.put(id, new ParamicsFileReader(workingDirectory, id,
+                                interval, targetFile));
+                        readers.get(id).addObserver(this);
+                        readers.get(id).addObserver(theGUI);
+
+                        setChanged();
+                        notifyObservers(new FileRegUpdate(IO_TYPE.READ,
+                                REG_TYPE.REGISTER, id, targetFile, interval));
+                        break;
+                    case UNREGISTER:
+                        readers.get(id).deleteObserver(this);
+                        readers.get(id).deleteObserver(theGUI);
+                        readers.remove(id);
+
+                        setChanged();
+                        notifyObservers(new FileRegUpdate(IO_TYPE.READ,
+                                REG_TYPE.UNREGISTER, id, null, null));
+                        break;
+                }
+                break;
+            case WRITER:
+                id = rootElement.getAttribute(PARAMICS_COMM_TAGS.ID.tag);
+                action = rootElement.getAttribute(PARAMICS_COMM_TAGS.ACTION.tag);
+
+                switch (PARAMICS_ACTIONS.fromString(action))
+                {
+                    case REGISTER:
+                        String targetFile = rootElement.getChildNodes().item(0).getTextContent();
+
+                        writers.put(id, new ParamicsFileWriter(id,
+                                workingDirectory, targetFile));
+                        writers.get(id).addObserver(theGUI);
+
+                        setChanged();
+                        notifyObservers(new FileRegUpdate(IO_TYPE.WRITE,
+                                REG_TYPE.REGISTER, id, targetFile, null));
+                        break;
+                    case UNREGISTER:
+                        writers.remove(id);
+
+                        writers.get(id).deleteObserver(theGUI);
+
+                        setChanged();
+                        notifyObservers(new FileRegUpdate(IO_TYPE.WRITE,
+                                REG_TYPE.UNREGISTER, id, null, null));
+                        break;
+                    case WRITE_FILE:
+                        writers.get(id).writeMessage((Element) rootElement.getChildNodes().item(0));
+                        break;
+                }
+                break;
+            case RESET:
+                readers.clear();
+                writers.clear();
+                break;
+        }
+    }
+
+    private class SocketStarter implements Runnable
+    {
+
+        Integer socketPort;
+
+        /**
+         * Method waits to accept a socket connection from the CAD Simulator.
+         * When a connection has been established the method exits. The input
+         * and output streams are created on the new socket.
+         *
+         * @param socketPort Socket port to use for establishing Socket
+         * communication.
+         * @throws IOException if there is an exception in establishing Socket
+         * communication.
+         */
+        //private void initializeSockets(Integer socketPort) throws IOException
+        public SocketStarter(Integer socketPort)
+        {
+            this.socketPort = socketPort;
+        }
+
+        public void run()
+        {
+
+            boolean waiting = true;
+
+            try
+            {
+                serverSocket = new ServerSocket(socketPort);
+                //delay for accept timeout(milliseconds)
+                serverSocket.setSoTimeout(10 * 1000);
+            } catch (IOException ioe)
+            {
+                paramLogger.logp(Level.SEVERE, "ParamicsCommunicator",
+                        "initializeSockets", "Exception in creating "
+                        + "the server socket on port " + socketPort + ", terminating.");
+                System.exit(1);
+            }
+
+            while (waiting)
+            {
+                try
+                {
+                    paramicsSocket = serverSocket.accept();
+                    waiting = false;
+                } catch (SocketTimeoutException ste)
+                {
+                    System.out.println("...waiting...");
+                    try
+                    {
+                        Thread.sleep(2000);
+                        paramLogger.logp(Level.INFO, "ParamicsCommunicator",
+                                "initializeSockets", "sleeping.");
+                    } catch (InterruptedException ex)
+                    {
+                        paramLogger.logp(Level.INFO, "ParamicsCommunicator",
+                                "initializeSockets", "Exception exiting for socket.", ex);
+                    }
+                } catch (IOException ioe)
+                {
+                    paramLogger.logp(Level.SEVERE, "ParamicsCommunicator",
+                            "initializeSockets", "Exception in creating "
+                            + "the receiving socket on port " + socketPort + ", terminating.");
+                    System.exit(1);
+                }
+
+            }
+
+
+            //** out must be performed before in to unlock for connecting socket **//
+            try
+            {
+                out = new ObjectOutputStream(paramicsSocket.getOutputStream());
+                in = new ObjectInputStream(paramicsSocket.getInputStream());
+            } catch (IOException ioe)
+            {
+                paramLogger.logp(Level.SEVERE, "ParamicsCommunicator",
+                        "initializeSockets", "Exception in creating "
+                        + "input and output streams on socket, terminating.");
+                System.exit(1);
+            }
+
+        }
+    }
+
+    /**
+     * Construct the ParamicsCommunicator with the properties file path, either
+     * from the command line arguments or default.
+     *
+     * @param args Command line arguments.
+     */
+    public static void main(String[] args)
+    {
+        System.setProperty("PARAMICS_COMM_PROPERTIES", "config/paramics_communicator_config.properties");
+
+        try
+        {
+            if (System.getProperty("PARAMICS_COMM_PROPERTIES") != null)
+            {
+                ParamicsCommunicator pc = new ParamicsCommunicator(System.getProperty("PARAMICS_COMM_PROPERTIES"));
+                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+                theGUI = new ParamicsCommunicatorGUI();
+                pc.addObserver(theGUI);
+                theGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                theGUI.setVisible(true);
+                pc.startReading();
+
+            }
+            else
+            {
+                throw new Exception("PARAMICS_COMM_PROPERTIES system property not defined.");
+            }
+        } catch (Exception e)
+        {
+            paramLogger.logp(Level.SEVERE, "ParamicsCommunicator", "Main",
+                    "Error occured initializing application", e);
+
+            JOptionPane.showMessageDialog(null, e.getMessage(),
+                    "Error - Program Exiting", JOptionPane.ERROR_MESSAGE);
+
+            System.exit(-1);
+        }
+
+
+    }
+}
Index: /branches/trunk/src/tmcsim/paramicscommunicator/ParamicsFileReader.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicscommunicator/ParamicsFileReader.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicscommunicator/ParamicsFileReader.java	(revision 82)
@@ -0,0 +1,203 @@
+package tmcsim.paramicscommunicator;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Observable;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import tmcsim.common.CADProtocol.PARAMICS_ACTIONS;
+import tmcsim.common.CADProtocol.PARAMICS_COMM_TAGS;
+import tmcsim.paramicscommunicator.FileIOUpdate.IO_TYPE;
+
+/**
+ * The ParamicsFileReader handles reading fom a target file which is written to
+ * by Paramics. Once initialized, a timer task is started which periodically
+ * checks the target file for updates. If the file has been modified, it is read
+ * and cleared. The read data is transmitted to the CAD Simulator.
+ *
+ * @author Matthew Cechini
+ * @version 0.1 Notes by jdalbey: Paramics modeler is licensed third-party
+ * software and apparently we don't have an SDK for it. So it seems the
+ * workaround was to communicate with it via data files that the modeler
+ * produces. Wacky, but it works for now. Look at the run() method below: if
+ * (lastModified &lt; inputFile.lastModified()) Means it's watching the file to
+ * see if it has been updated by the modeler.
+ */
+public class ParamicsFileReader extends Observable
+{
+
+    /**
+     * Error Logger.
+     */
+    private Logger paramLogger = Logger.getLogger("tmcsim.paramicscommunicator");
+    /**
+     * FileReader ID used for creation of the ParamicsCommMessage
+     */
+    private String readerID = null;
+    /**
+     * File reference to the file where data is read.
+     */
+    private File inputFile = null;
+    /**
+     * FileReader used to read data from the input file.
+     */
+    private FileReader fileReader = null;
+    /**
+     * FileWriter used to clear the input file.
+     */
+    private FileWriter fileWriter = null;
+    /**
+     * Value (seconds since 1/1/1970) of input file's last modification time.
+     */
+    private long lastModified = 0;
+    /**
+     * Timer used to schedule file reading tasks.
+     */
+    private Timer readerTimer = null;
+    /**
+     * Duration (in seconds) that the TimerTask will be scheduled to read from
+     * the target file.
+     */
+    private long readerInterval;
+    /**
+     * Time formatter for diagnostic messages
+     */
+    private SimpleDateFormat formatter;
+
+    /**
+     * A TimerTask to read from the target file. If the file has been modified
+     * since last read, read the file and transmit the data to the CAD
+     * Simulator.
+     *
+     * @author Matthew Cechini
+     */
+    private class ReaderTimerTask extends TimerTask
+    {
+
+        public void run()
+        {
+//            System.out.println(
+//                    "Checking last modified time on " + inputFile.getName()
+//                    + formatter.format(lastModified) + ":" + formatter.format(inputFile.lastModified()));
+
+            if (lastModified < inputFile.lastModified())
+            {
+
+                try
+                {
+                    Document readerDoc = DocumentBuilderFactory.newInstance()
+                            .newDocumentBuilder().newDocument();
+
+                    Element readerElem = readerDoc.createElement(PARAMICS_COMM_TAGS.READER.tag);
+                    readerElem.setAttribute(PARAMICS_COMM_TAGS.ID.tag, readerID);
+                    readerElem.setAttribute(PARAMICS_COMM_TAGS.ACTION.tag,
+                            PARAMICS_ACTIONS.READ_FILE.action);
+
+                    Element messageElem = readerDoc.createElement(PARAMICS_COMM_TAGS.MESSAGE.tag);
+                    String fileContents = readFromFile();
+                    messageElem.appendChild(readerDoc.createTextNode(fileContents));
+                    readerElem.appendChild(messageElem);
+
+                    readerDoc.appendChild(readerElem);
+
+                    setChanged();
+                    notifyObservers(readerDoc);
+                } catch (Exception e)
+                {
+                    paramLogger.logp(Level.SEVERE,
+                            "ParamicsFileReader.ReaderTimerTask", "run()",
+                            "Exception in reading from file: "
+                            + inputFile.getName(), e);
+                }
+            }
+        }
+    }
+
+    /**
+     * Constructor. Set the reader id and interval from the parsed
+     * ParamicsCommMessage. The interval is found within the first three
+     * characters of the object's "message" data member. Create a file object
+     * for the target file, and create a new file if it does not already exist.
+     * Instantiate the timer and ReaderTimerTask to begin periodic reading of
+     * the file.
+     *
+     * @param workingDir Target working directory. // Oops, the following seem
+     * obsolete
+     * @param mess ParamicsCommMessage object containing registration data.
+     * @param theComm Reference to the ParamicsCommunicator.
+     */
+    public ParamicsFileReader(String workingDir, String id, Integer interval, String targetFile)
+    {
+
+        try
+        {
+            formatter = new SimpleDateFormat("HH:mm:ss");
+            readerID = id;
+            readerInterval = interval;
+
+            inputFile = new File(workingDir + targetFile);
+
+            if (!inputFile.exists())
+            {
+                inputFile.createNewFile();
+            }
+
+            readerTimer = new Timer();
+            readerTimer.scheduleAtFixedRate(new ReaderTimerTask(),
+                    0L, readerInterval * 1000);
+
+        } catch (IOException ioe)
+        {
+            paramLogger.logp(Level.SEVERE, "ParamicsFileReader",
+                    "Constructor()", "Exception in initializing file reading of "+workingDir + targetFile, ioe);
+        }
+    }
+
+    /**
+     * Method opens the target file and reads all contents. The file is then
+     * cleared.
+     *
+     * @returns
+     * @throws IOException if there is an error in reading or writing to the
+     * file.
+     */
+    private String readFromFile() throws IOException
+    {
+
+        char[] input = new char[(int) inputFile.length()];
+
+        fileReader = new FileReader(inputFile);
+        fileReader.read(input);
+        fileReader.close();
+
+        //make sure the new file has a modified time that is different
+        try
+        {
+            Thread.sleep(1000);
+        } catch (Exception e)
+        {
+        }
+
+        //clear file after reading contents
+        fileWriter = new FileWriter(inputFile);
+        fileWriter.write("");
+        fileWriter.close();
+
+        lastModified = inputFile.lastModified();
+//        System.out.println(
+//                "Read from a file last modified at " + formatter.format(lastModified));
+
+        setChanged();
+        notifyObservers(new FileIOUpdate(IO_TYPE.READ, readerID, (long) input.length));
+
+        return new String(input);
+    }
+}
Index: /branches/trunk/src/tmcsim/paramicscommunicator/gui/FileIOTableModel.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicscommunicator/gui/FileIOTableModel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicscommunicator/gui/FileIOTableModel.java	(revision 82)
@@ -0,0 +1,172 @@
+package tmcsim.paramicscommunicator.gui;
+
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.DefaultTableModel;
+
+import tmcsim.paramicscommunicator.FileIOUpdate;
+
+/**
+ * FileIOTableModel is a DefaultTableModel used to display the 
+ * list of I/O operations that have been performed by a 
+ * Paramics FileWriter or FileReader. The columns in this table 
+ * show the I/O time and bytes written or read. 
+ * 
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class FileIOTableModel extends DefaultTableModel {
+
+    /**
+     * Enumeration of columns for this table.
+     * @author Matthew Cechini
+     */     
+    public static enum FILE_IO_COLUMNS {
+        TIME_COL       ("Time", 0, 100),
+        NUM_BYTES_COL  ("Num Bytes", 1, 60);
+        
+        public String colName;
+        public int colNum;
+        public int colWidth;
+        
+        private FILE_IO_COLUMNS (String name, int num, int width) {
+            colName  = name;
+            colNum   = num;
+            colWidth = width;
+        }
+        
+        public static int colCount() {
+            return values().length;
+        }
+        
+        public static String columnName(int num) {
+            
+            for(FILE_IO_COLUMNS column : FILE_IO_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colName;
+            }
+            
+            return "";
+        }
+        
+        public static int columnWidth(int num) {
+            
+            for(FILE_IO_COLUMNS column : FILE_IO_COLUMNS.values()) {
+                if(column.colNum == num)
+                    return column.colWidth;
+            }
+            
+            return 0;
+        }
+    }
+    
+    /** 
+     * Container class to hold information displayed in the table.
+     * @author Matthew Cechini
+     */     
+    protected class FileIOTableItem {
+        String  ioTime;
+        Long    ioBytes;
+        
+        public FileIOTableItem(String time, Long bytes) {
+            ioTime  = time;
+            ioBytes = bytes;
+        }
+    }
+    
+
+    /** List of data displayed in the table. */
+    protected List<FileIOTableItem> tableData;
+    
+    /** DateFormat used to format time table values. */
+    protected DateFormat timeFormatter;
+    
+    /** Constructor. */
+    public FileIOTableModel() {
+        tableData = new ArrayList<FileIOTableItem>();
+        
+        timeFormatter = DateFormat.getTimeInstance();
+    }   
+
+    /**
+     *  Gets the rowCount attribute of the RideTableModel object
+     *
+     *@return    The rowCount value
+     */
+    public int getRowCount() {
+        if(tableData == null)
+            return 0;
+        else
+            return tableData.size();
+    }
+
+
+
+    /**
+     *  Gets the columnCount attribute of the RideTableModel object
+     *
+     *@return    The columnCount value
+     */
+    public int getColumnCount() {
+        return FILE_IO_COLUMNS.colCount();
+    }
+
+
+
+    /**
+     *  Gets the valueAt attribute of the RideTableModel object
+     *
+     *@param  row  Description of the Parameter
+     *@param  col  Description of the Parameter
+     *@return      The valueAt value
+     */
+    public Object getValueAt(int row, int col) {
+        
+        if(col == FILE_IO_COLUMNS.TIME_COL.colNum)
+            return tableData.get(row).ioTime;
+        else if(col == FILE_IO_COLUMNS.NUM_BYTES_COL.colNum)
+            return tableData.get(row).ioBytes;
+        else
+            return "";
+    }
+
+
+    public String getColumnName(int col) {
+        return FILE_IO_COLUMNS.columnName(col);
+    }
+
+    public int getColumnWidth(int col){
+        return FILE_IO_COLUMNS.columnWidth(col);
+    }
+    
+    /**
+     *  Gets the cellEditable attribute of the RideTableModel object
+     *
+     *@param  row  Description of the Parameter
+     *@param  col  Description of the Parameter
+     *@return      The cellEditable value
+     */
+    public boolean isCellEditable(int row, int col) {
+        return false;
+    }
+
+    
+    /**
+     * Add a new IOUpdate into the table model. Update the table.
+     * @param update New update object.
+     */
+    public void addIOUpdate(FileIOUpdate update) {
+ 
+        tableData.add(new FileIOTableItem(timeFormatter.format(new Date()), 
+                update.ioBytes));
+        
+        fireTableChanged(new TableModelEvent(this));        
+    }
+    
+
+}
Index: /branches/trunk/src/tmcsim/paramicscommunicator/gui/ParamicsIOInfoPanel.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicscommunicator/gui/ParamicsIOInfoPanel.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicscommunicator/gui/ParamicsIOInfoPanel.java	(revision 82)
@@ -0,0 +1,122 @@
+package tmcsim.paramicscommunicator.gui;
+
+import java.awt.Dimension;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+
+import tmcsim.paramicscommunicator.FileRegUpdate;
+import tmcsim.paramicscommunicator.FileIOUpdate.IO_TYPE;
+import tmcsim.paramicscommunicator.FileRegUpdate.REG_TYPE;
+
+/**
+ * ParamicsIOInfoPanel is a JPanel used in the ParamicsCommunicatorGUI to 
+ * display registration and I/O operations performed for a specific 
+ * Paramics FileReader or FileWriter.
+ * 
+ * @author Matthew Cechini
+ * @version 
+ */
+@SuppressWarnings("serial")
+public class ParamicsIOInfoPanel extends JPanel {
+    
+    /**
+     * Constructor. Initialie the GUI elements for this panel.
+     * 
+     * @param update Initial FileRegUpdate object.
+     * @param tableModel TableModel to be displayed on panel.
+     */
+    public ParamicsIOInfoPanel(FileRegUpdate update, FileIOTableModel tableModel) {
+        
+        Box infoBox = new Box(BoxLayout.Y_AXIS);
+        infoBox.setAlignmentY(Box.CENTER_ALIGNMENT);
+        infoBox.add(Box.createVerticalGlue());
+
+        idLbl = new JLabel("ID:");
+        idLbl.setAlignmentX(Box.LEFT_ALIGNMENT);
+        idTF  = new JTextField(update.ioID);
+        idTF.setAlignmentX(Box.LEFT_ALIGNMENT);
+        idTF.setMinimumSize(new Dimension(150, 25));
+        idTF.setPreferredSize(new Dimension(150, 25));
+        idTF.setMaximumSize(new Dimension(200, 25));
+        idTF.setEditable(false);
+        infoBox.add(idLbl);
+        infoBox.add(idTF);
+        infoBox.add(Box.createVerticalStrut(5));
+        
+        targetFileLbl = new JLabel("Target File:");
+        targetFileLbl.setAlignmentX(Box.LEFT_ALIGNMENT);
+        targetFileTF  = new JTextField(update.targetFile);
+        targetFileTF.setAlignmentX(Box.LEFT_ALIGNMENT);
+        targetFileTF.setMinimumSize(new Dimension(150, 25));
+        targetFileTF.setPreferredSize(new Dimension(150, 25));
+        targetFileTF.setMaximumSize(new Dimension(200, 25));
+        targetFileTF.setEditable(false);
+        infoBox.add(targetFileLbl);
+        infoBox.add(targetFileTF);
+        
+        if(update.ioType == IO_TYPE.READ) {
+            intervalLbl = new JLabel("Interval: ");
+            intervalLbl.setAlignmentX(Box.LEFT_ALIGNMENT);
+            intervalTF  = new JTextField(String.valueOf(update.ioInterval));
+            intervalTF.setAlignmentX(Box.LEFT_ALIGNMENT);
+            intervalTF.setMinimumSize(new Dimension(150, 25));
+            intervalTF.setPreferredSize(new Dimension(150, 25));
+            intervalTF.setMaximumSize(new Dimension(200, 25));
+            intervalTF.setEditable(false);
+
+            infoBox.add(Box.createVerticalStrut(5));
+            infoBox.add(intervalLbl);
+            infoBox.add(intervalTF);
+        }
+        infoBox.add(Box.createVerticalGlue());
+        infoBox.setMinimumSize(new Dimension(150, 200));
+        infoBox.setPreferredSize(new Dimension(150, 200));
+        infoBox.setMaximumSize(new Dimension(200, 200));
+        infoBox.setBorder(BorderFactory.createCompoundBorder(
+                BorderFactory.createTitledBorder(
+                    BorderFactory.createRaisedBevelBorder(), "Information"),
+                    BorderFactory.createEmptyBorder(5,5,5,5)));
+        
+        ioUpdateTable = new JTable(tableModel);     
+        ioUpdateTable.getTableHeader().setReorderingAllowed(false);  
+        ioUpdatePane  = new JScrollPane();
+        ioUpdatePane.setMinimumSize(new Dimension(200, 400));
+        ioUpdatePane.setPreferredSize(new Dimension(200, 400));
+        ioUpdatePane.setMaximumSize(new Dimension(200, 400));
+        ioUpdatePane.setViewportView(ioUpdateTable);
+        ioUpdatePane.setAlignmentY(Box.CENTER_ALIGNMENT);
+        
+        Box panelBox = new Box(BoxLayout.X_AXIS);
+        panelBox.add(ioUpdatePane);
+        panelBox.add(Box.createHorizontalStrut(20));
+        panelBox.add(infoBox);
+        panelBox.add(Box.createHorizontalGlue());
+        
+        add(panelBox);
+    }
+    
+    
+    public IO_TYPE  ioType; 
+    public REG_TYPE regType;
+    public String   ioID;
+    public String   targetFile;
+    public Integer  ioInterval;
+    
+    private JLabel idLbl;
+    private JLabel targetFileLbl;
+    private JLabel intervalLbl;
+    
+    private JTextField idTF;
+    private JTextField targetFileTF;
+    private JTextField intervalTF;
+    
+    private JTable ioUpdateTable;
+    private JScrollPane ioUpdatePane;
+}
Index: /branches/trunk/src/tmcsim/paramicscommunicator/gui/ParamicsCommunicatorGUI.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicscommunicator/gui/ParamicsCommunicatorGUI.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicscommunicator/gui/ParamicsCommunicatorGUI.java	(revision 82)
@@ -0,0 +1,289 @@
+package tmcsim.paramicscommunicator.gui;
+
+import java.awt.Dimension;
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.TreeMap;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JFrame;
+import javax.swing.JMenuBar;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextArea;
+import tmcsim.common.RevisionNumber;
+import tmcsim.paramicscommunicator.FileIOUpdate;
+import tmcsim.paramicscommunicator.FileRegUpdate;
+
+/**
+ * ParamicsCommunicatorGUI is the view class for the ParamicsCommunicator. The
+ * user interface shows a tab for each I/O reader or writer that has been
+ * registered with the ParamicsCommunicator. The tab shows the history of I/O
+ * reads and writes, and the unique information for the target file and I/O
+ * interval.
+ *
+ * @author Matthew Cechini
+ * @version
+ */
+@SuppressWarnings("serial")
+public class ParamicsCommunicatorGUI extends JFrame implements Observer
+{
+
+    /**
+     * Logging handler that writes all received log records to the error text
+     * area.
+     *
+     * @author Matthew Cechini
+     */
+    protected class ParamicsLoggerHandler extends Handler
+    {
+
+        DateFormat timeFormat = DateFormat.getTimeInstance();
+
+        public void close() throws SecurityException
+        {
+        }
+
+        public void flush()
+        {
+        }
+
+        public void publish(LogRecord record)
+        {
+            StringBuffer errorBuf = new StringBuffer();
+
+            errorBuf.append(timeFormat.format(new Date(record.getMillis())));
+            errorBuf.append("  -  " + record.getMessage() + "\n");
+
+            errorTA.setText(errorTA.getText() + errorBuf.toString());
+        }
+    }
+    /**
+     * Map of FileIOTableModel objects for each reader id.
+     */
+    protected TreeMap<String, FileIOTableModel> readerTables;
+    /**
+     * Map of FileIOTableModel objects for each writer id.
+     */
+    protected TreeMap<String, FileIOTableModel> writerTables;
+
+    /**
+     * Constructor. Initialize local lists, set up the logging handler and
+     * initialize the GUI.
+     */
+    public ParamicsCommunicatorGUI()
+    {
+        super("Paramics Communicator");
+
+        readerTables = new TreeMap<String, FileIOTableModel>();
+        writerTables = new TreeMap<String, FileIOTableModel>();
+
+        Logger.getLogger("tmcsim.paramicscommunicator").addHandler(new ParamicsLoggerHandler());
+
+        initializeGUI();
+    }
+
+    /**
+     * Observer update method. If the update object is a FileIOUpdate object,
+     * update the TableModel corresponding to the unique I/O id. If the update
+     * object is a FileRegUpdate object, add a new tab if the registration type
+     * is REGISTER, or update an existing tab if the registration type is
+     * UNREGISTER.
+     */
+    public void update(Observable o, Object arg)
+    {
+
+        if (arg instanceof FileIOUpdate)
+        {
+
+            try
+            {
+                FileIOUpdate update = (FileIOUpdate) arg;
+
+                switch (update.ioType)
+                {
+                    case READ:
+                        readerTables.get(update.ioID).addIOUpdate(update);
+                        break;
+                    case WRITE:
+                        writerTables.get(update.ioID).addIOUpdate(update);
+                        break;
+                }
+            } catch (Exception e)
+            {
+                Logger.getLogger("tmcsim.paramicscommunicator.gui").logp(
+                        Level.SEVERE, "ParamicsCommunicatorGUI", "update",
+                        "Exception in receiving FileIOUpdate object.", e);
+            }
+        }
+        else if (arg instanceof FileRegUpdate)
+        {
+            try
+            {
+                FileRegUpdate update = (FileRegUpdate) arg;
+
+                switch (update.ioType)
+                {
+                    case READ:
+                        switch (update.regType)
+                        {
+                            case REGISTER:
+                                FileIOTableModel model = new FileIOTableModel();
+                                readerTables.put(update.ioID, model);
+
+                                addTab(update, model);
+                                break;
+                            case UNREGISTER:
+                                //unregister
+                                break;
+                        }
+                        break;
+                    case WRITE:
+                        switch (update.regType)
+                        {
+                            case REGISTER:
+                                FileIOTableModel model = new FileIOTableModel();
+                                writerTables.put(update.ioID, model);
+
+                                addTab(update, model);
+                                break;
+                            case UNREGISTER:
+                                //unregister
+                                break;
+                        }
+                        break;
+                }
+
+            } catch (Exception e)
+            {
+                Logger.getLogger("tmcsim.paramicscommunicator.gui").logp(
+                        Level.SEVERE, "ParamicsCommunicatorGUI", "update",
+                        "Exception in receiving FileRegUpdate object.", e);
+            }
+        }
+    }
+
+    private void initializeGUI()
+    {
+
+        JMenuBar menuBar = new JMenuBar();
+
+        javax.swing.JMenu fileMenu = new javax.swing.JMenu("File");
+        javax.swing.JMenuItem logItem = new javax.swing.JMenuItem("Show Log");
+
+        logItem.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                tmcsim.paramicslog.gui.ParamicsLogGUI.getInstance().display();
+            }
+        });
+
+        fileMenu.add(logItem);
+        menuBar.add(fileMenu);
+
+        javax.swing.JMenu helpMenu = new javax.swing.JMenu("Help");
+        javax.swing.JMenuItem aboutItem = new javax.swing.JMenuItem("About");
+
+        aboutItem.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                String ver = RevisionNumber.getString();
+                JOptionPane.showMessageDialog(rootPane, "Version: " + ver, "About", JOptionPane.INFORMATION_MESSAGE);
+            }
+        });
+
+        helpMenu.add(aboutItem);
+        menuBar.add(helpMenu);
+
+        this.setJMenuBar(menuBar);
+
+        fileReaderTabs = new JTabbedPane();
+        fileReaderTabs.setAlignmentX(Box.CENTER_ALIGNMENT);
+        fileReaderTabs.setMinimumSize(new Dimension(420, 480));
+        fileReaderTabs.setPreferredSize(new Dimension(420, 480));
+        fileReaderTabs.setMaximumSize(new Dimension(420, 480));
+        fileReaderTabs.setBorder(BorderFactory.createCompoundBorder(
+                BorderFactory.createTitledBorder(
+                BorderFactory.createRaisedBevelBorder(), "Registered Readers "),
+                BorderFactory.createEmptyBorder(5, 5, 5, 5)));
+
+        fileWriterTabs = new JTabbedPane();
+        fileWriterTabs.setAlignmentX(Box.CENTER_ALIGNMENT);
+        fileWriterTabs.setMinimumSize(new Dimension(420, 480));
+        fileWriterTabs.setPreferredSize(new Dimension(420, 480));
+        fileWriterTabs.setMaximumSize(new Dimension(420, 480));
+        fileWriterTabs.setBorder(BorderFactory.createCompoundBorder(
+                BorderFactory.createTitledBorder(
+                BorderFactory.createRaisedBevelBorder(), "Registered Writers "),
+                BorderFactory.createEmptyBorder(5, 5, 5, 5)));
+
+        errorTA = new JTextArea();
+        errorTA.setLineWrap(true);
+
+        errorPane = new JScrollPane();
+        errorPane.setViewportView(errorTA);
+        errorPane.setAlignmentX(Box.CENTER_ALIGNMENT);
+        errorPane.setBorder(BorderFactory.createCompoundBorder(
+                BorderFactory.createTitledBorder(
+                BorderFactory.createRaisedBevelBorder(), "Errors"),
+                BorderFactory.createEmptyBorder(5, 5, 5, 5)));
+
+        Box tabbedBox = new Box(BoxLayout.X_AXIS);
+        tabbedBox.add(fileReaderTabs);
+        tabbedBox.add(fileWriterTabs);
+
+        Box guiBox = new Box(BoxLayout.Y_AXIS);
+        guiBox.add(tabbedBox);
+        guiBox.add(Box.createVerticalStrut(10));
+        guiBox.add(errorPane);
+
+        add(guiBox);
+
+        setMinimumSize(new Dimension(420, 680));
+        setPreferredSize(new Dimension(840, 680));
+        setResizable(false);
+        pack();
+        //setVisible(true);
+    }
+
+    /**
+     * Method creates a new tab for the new I/O object. The tab is labeled
+     * "Reader #" or "Writer #", where '#' is the I/O object's ID.
+     *
+     * @param update Initial update object.
+     * @param model TableModel for reader/writer that will display I/O
+     * operations.
+     */
+    private void addTab(FileRegUpdate update, FileIOTableModel model)
+    {
+
+        String tabName = null;
+
+        switch (update.ioType)
+        {
+            case READ:
+                tabName = "Reader " + update.ioID;
+                fileReaderTabs.add(tabName, new ParamicsIOInfoPanel(update, model));
+                break;
+            case WRITE:
+                tabName = "Writer " + update.ioID;
+                fileWriterTabs.add(tabName, new ParamicsIOInfoPanel(update, model));
+                break;
+        }
+
+    }
+    private JTabbedPane fileReaderTabs;
+    private JTabbedPane fileWriterTabs;
+    private JScrollPane errorPane;
+    private JTextArea errorTA;
+}
Index: /branches/trunk/src/tmcsim/paramicscommunicator/FileIOUpdate.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicscommunicator/FileIOUpdate.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicscommunicator/FileIOUpdate.java	(revision 82)
@@ -0,0 +1,40 @@
+package tmcsim.paramicscommunicator;
+
+/**
+ * FileIOUpdate is an update class used to record I/O operations 
+ * performed by FileReaders and FileWriters registered with the
+ * ParamicsCommunicator.
+ *  
+ * @author Matthew Cechini
+ * @version
+ */
+public class FileIOUpdate {
+
+    /**
+     * Enumeration of I/O action types.
+     * @author Matthew Cechini
+     */
+    public static enum IO_TYPE {READ, WRITE};
+    
+    /** Type of I/O performed. */
+    public IO_TYPE ioType;
+
+    /** ID of FileReader or FileWriter. */
+    public String  ioID;
+
+    /** Number of bytes written to or read from the target file. */
+    public Long    ioBytes;
+    
+    /**
+     * Constructor.
+     * 
+     * @param type I/O type.
+     * @param id   I/O object id.
+     * @param bytes Number of bytes for I/O action.
+     */
+    public FileIOUpdate(IO_TYPE type, String id, Long bytes) {
+        ioType       = type;
+        ioID         = id;
+        ioBytes      = bytes;
+    }
+}
Index: /branches/trunk/src/tmcsim/paramicslog/ParamicsLogFileHandler.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicslog/ParamicsLogFileHandler.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicslog/ParamicsLogFileHandler.java	(revision 82)
@@ -0,0 +1,307 @@
+package tmcsim.paramicslog;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.rmi.Naming;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+import javax.swing.JOptionPane;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CoordinatorInterface;
+
+/**
+ * Logs communication from ParamicsCommunicator to ParamicsSimulator.
+ *
+ * The system property "PARAMICS_LOG_CONFIG" should be set to the path where the
+ * properties file for this class is located. <br><br>
+ * The data for the properties file follows. <br>
+ * <code>
+ * -----------------------------------------------------------------<br>
+ * Log File The file to write the communication to. CAD Simulator Host The host
+ * that runs the CAD Simulator. CAD Simulator RMI Port The port on the host that
+ * runs the CAD Simulator where the RMI Coordinator object is registered to.
+ * -----------------------------------------------------------------<br>
+ * Example File: <br>
+ * LogFile=c:\\log.txt CADSimulatorHost=localhost CADSimulatorRMIPort=4445
+ * -----------------------------------------------------------------<br>
+ * </code>
+ *
+ * @author Nathaniel Lehrer
+ * @version
+ */
+public class ParamicsLogFileHandler extends java.util.logging.FileHandler
+{
+
+    /**
+     * Enmeration containing property names.
+     *
+     * @author Nathaniel Lehrer
+     */
+    private enum PROPERTIES
+    {
+
+        LOG_FILE("LogFile"),
+        CAD_SIM_HOST("CADSimulatorHost"),
+        CAD_SIM_PORT("CADSimulatorRMIPort");
+        public String name;
+
+        private PROPERTIES(String n)
+        {
+            name = n;
+        }
+    }
+    /**
+     * Error logger.
+     */
+    private static Logger paramLogger = Logger.getLogger("tmcsim.paramicslog");
+    /**
+     * Static instance.
+     */
+    private static ParamicsLogFileHandler instance;
+    private static String propertiesFile;
+    /**
+     * Properties object.
+     */
+    private static Properties paramicsLogProp;
+    /**
+     * File log entries are written to
+     */
+//    private static String logFile;
+    /**
+     * Stores the log entries. This contains the same information logFile.
+     */
+    private StringBuilder log;
+    /**
+     * Remote reference to the simulation
+     */
+    private CoordinatorInterface theCoorInt;
+    /**
+     * Object for synchronizing IO
+     */
+    Object lock;
+
+    /**
+     * Creates the singleton instance of this class.
+     */
+    public static ParamicsLogFileHandler getInstance() throws IOException
+    {
+        System.setProperty("PARAMICS_LOG_PROPERTIES", "config/paramics_communicator_logging.properties");
+        // Has an instance been created yet?
+        if (instance == null)
+        {
+            try
+            {
+                if (System.getProperty("PARAMICS_LOG_PROPERTIES") != null)
+                {
+                    propertiesFile = System.getProperty("PARAMICS_LOG_PROPERTIES");
+
+                    paramicsLogProp = new Properties();
+                    paramicsLogProp.load(new FileInputStream(propertiesFile));
+
+                    if ((paramicsLogProp.getProperty(PROPERTIES.LOG_FILE.name)) == null)
+                    {
+                        throw new Exception("Properties file missing log file location.");
+                    }
+                    String logFile = paramicsLogProp.getProperty(PROPERTIES.LOG_FILE.name);
+                    instance = new ParamicsLogFileHandler(logFile);
+                }
+                else
+                {
+                    throw new Exception("PARAMICS_LOG_PROPERTIES system property not defined.");
+                }
+            } catch (Exception e)
+            {
+                instance = new ParamicsLogFileHandler();
+
+                paramLogger.logp(Level.WARNING, "ParamicsLog", "static initializer",
+                        "Error occured initializing application", e);
+
+                JOptionPane.showMessageDialog(null, e.getMessage(),
+                        "Error - ParamicsLog will not save log to file.",
+                        JOptionPane.ERROR_MESSAGE);
+            }
+        }
+        return instance;
+    }
+
+    /**
+     * Creates an instance of ParamicsLog that does not write to a file when
+     * writeToLog is called.
+     */
+    private ParamicsLogFileHandler() throws IOException
+    {
+        lock = new Object();
+        log = new StringBuilder("");
+    }
+
+    /**
+     * Creates an instance of ParamicsLog that writes to a file when writeToLog
+     * is called.
+     *
+     * @param propertiesFile
+     */
+    private ParamicsLogFileHandler(String logFile) throws IOException
+    {
+        super(logFile);
+        lock = new Object();
+        log = new StringBuilder("");
+
+        //String logFile = null;
+        String CADSIMHost = null;
+        String CADSIMPort = null;
+
+        try
+        {
+            paramicsLogProp = new Properties();
+            paramicsLogProp.load(new FileInputStream(propertiesFile));
+
+            if ((CADSIMHost = paramicsLogProp.getProperty(PROPERTIES.CAD_SIM_HOST.name)) == null)
+            {
+                throw new Exception("Properties file missing CAD Simulator host.");
+            }
+            else if ((CADSIMPort = paramicsLogProp.getProperty(PROPERTIES.CAD_SIM_PORT.name)) == null)
+            {
+                throw new Exception("Properties file missing CAD Simulator RMI port.");
+            }
+
+            try
+            {
+                connect(CADSIMHost, CADSIMPort);
+            } catch (Exception e)
+            {
+                JOptionPane.showMessageDialog(null,
+                        "ParamicsLog: Could not connect to remote Coordinator object.",
+                        "Network Error", JOptionPane.ERROR_MESSAGE);
+            }
+
+//            try
+//            {
+//                createLogFile(logFile);
+//            } catch (Exception e)
+//            {
+//                JOptionPane.showMessageDialog(null,
+//                        "ParamicsLog: Could not create new log file.",
+//                        "File Error", JOptionPane.ERROR_MESSAGE);
+//            }
+
+        } catch (Exception e)
+        {
+
+            paramLogger.logp(Level.WARNING, "ParamicsLog", "ParamicsLog constructor",
+                    "Properties file incorrect or missing.", e);
+
+            JOptionPane.showMessageDialog(null,
+                    "ParamicsLog: Properties file invalid.",
+                    "Invalid Configuration", JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    /**
+     * Connect to the Coordinator's RMI object.
+     *
+     * @param hostname Host name of the CAD Simulator.
+     * @param portNumber Port number of the CAD Simulator RMI communication.
+     * @throws SimulationException if there is an error creating the RMI
+     * connection.
+     */
+    private void connect(String hostname, String portNumber)
+            throws SimulationException
+    {
+
+        String coorIntURL = "";
+
+        try
+        {
+            coorIntURL = "rmi://" + hostname + ":" + portNumber + "/coordinator";
+
+            theCoorInt = (CoordinatorInterface) Naming.lookup(coorIntURL);
+        } catch (Exception e)
+        {
+            paramLogger.logp(Level.WARNING, "ParamicsLog",
+                    "establishRMIConnection", "Unable to establish RMI "
+                    + "communication with the CAD Simulator.  URL <" + coorIntURL + ">", e);
+        }
+    }
+
+    /**
+     * Accessor to the entries in the log. No file IO is used.
+     *
+     * @return The entries in the log.
+     */
+    public String getLog()
+    {
+
+        return log.toString();
+    }
+
+    /**
+     * Writes an entry to the log. The simulator time when the message was sent
+     * is prepended to the entry. Entries are padded by a blank line before and
+     * after them. TODO: Ensure output is written in order of request.
+     *
+     * @param entry
+     */
+    public void publish(LogRecord rec)
+    {
+
+        String time = "?";
+        String formattedEntry;
+        String entry = rec.getMessage();
+
+        if (theCoorInt != null)
+        {
+            try
+            {
+                time = formatTime(theCoorInt.getCurrentSimulationTime());
+            } catch (Exception e)
+            {
+                paramLogger.logp(Level.WARNING, "ParamicsLog",
+                        "RMICommunication", "Unable to communicate with RMI object", e);
+            }
+        }
+
+        formattedEntry = "\n" + "<!-- Time written to file: " + time + " -->\n" + entry + "\n";
+        log.append(formattedEntry);
+        rec.setMessage(formattedEntry);
+        super.publish(rec);
+
+        //ParamicsLogGUI.getInstance().update(this, entry);
+    }
+
+    /**
+     * Formats the time given in seconds to hh:mm:ss format.
+     *
+     * @param time The time in seconds.
+     */
+    public String formatTime(long time)
+    {
+        long seconds = time % 60;
+        long minutes = (time - seconds) / 60;
+        long hours = (time - seconds - minutes * 60) / 60;
+
+        return padr(hours) + ":" + padr(minutes) + ":" + padr(seconds);
+    }
+
+    private String padr(long n)
+    {
+        if (n < 10)
+        {
+            return "0" + n;
+        }
+        {
+            return "" + n;
+        }
+    }
+    /**
+     * Accessor for static instance of this class.
+     *
+     * @return The instance of this class.
+     */
+//    public static ParamicsLogFileHandler getInstance()
+//    {
+//
+//        return instance;
+//    }
+}
Index: /branches/trunk/src/tmcsim/paramicslog/ParamicsLog.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicslog/ParamicsLog.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicslog/ParamicsLog.java	(revision 82)
@@ -0,0 +1,345 @@
+package tmcsim.paramicslog;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.rmi.Naming;
+import java.util.Observable;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JOptionPane;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CoordinatorInterface;
+import tmcsim.paramicslog.gui.ParamicsLogGUI;
+
+/**
+ * Logs communication from ParamicsCommunicator to ParamicsSimulator.
+ *
+ * The system property "PARAMICS_LOG_CONFIG" should be set to the path where the
+ * properties file for this class is located. <br><br>
+ * The data for the properties file follows. <br>
+ * <code>
+ * -----------------------------------------------------------------<br>
+ * Log File The file to write the communication to. CAD Simulator Host The host
+ * that runs the CAD Simulator. CAD Simulator RMI Port The port on the host that
+ * runs the CAD Simulator where the RMI Coordinator object is registered to.
+ * -----------------------------------------------------------------<br>
+ * Example File: <br>
+ * LogFile=c:\\log.txt CADSimulatorHost=localhost CADSimulatorRMIPort=4445
+ * -----------------------------------------------------------------<br>
+ * </code>
+ *
+ * @author Nathaniel Lehrer
+ * @version
+ */
+public class ParamicsLog extends Observable
+{
+
+    /**
+     * Enmeration containing property names.
+     *
+     * @author Nathaniel Lehrer
+     */
+    private enum PROPERTIES
+    {
+
+        LOG_FILE("LogFile"),
+        CAD_SIM_HOST("CADSimulatorHost"),
+        CAD_SIM_PORT("CADSimulatorRMIPort");
+        public String name;
+
+        private PROPERTIES(String n)
+        {
+            name = n;
+        }
+    }
+    private static final String CONFIG_FILE_NAME = "paramics_communicator_logging.properties";
+    /**
+     * Error logger.
+     */
+    private static Logger paramLogger = Logger.getLogger("tmcsim.paramicslog");
+    /**
+     * Static instance.
+     */
+    private static ParamicsLog instance;
+    /**
+     * Properties object.
+     */
+    private Properties paramicsLogProp;
+    /**
+     * File log entries are written to
+     */
+    private File logFile;
+    /**
+     * Stores the log entries. This contains the same information logFile.
+     */
+    private StringBuilder log;
+    /**
+     * Remote reference to the simulation
+     */
+    private CoordinatorInterface theCoorInt;
+    /**
+     * Object for synchronizing IO
+     */
+    Object lock;
+
+    /**
+     * Creates the singleton instance of this class.
+     */
+    static
+    {
+        try
+        {
+            if (System.getProperty("CONFIG_DIR") == null)
+            {
+                System.setProperty("CONFIG_DIR", "config");
+            }
+
+            instance = new ParamicsLog(System.getProperty("CONFIG_DIR") + System.getProperty("file.separator") + CONFIG_FILE_NAME);
+        } catch (Exception e)
+        {
+            instance = new ParamicsLog();
+
+            paramLogger.logp(Level.WARNING, "ParamicsLog", "static initializer",
+                    "Error occured initializing application", e);
+
+            JOptionPane.showMessageDialog(null, e.getMessage(),
+                    "Error - ParamicsLog will not save log to file.",
+                    JOptionPane.ERROR_MESSAGE);
+        }
+
+        instance.addObserver(ParamicsLogGUI.getInstance());
+    }
+
+    /**
+     * Creates an instance of ParamicsLog that does not write to a file when
+     * writeToLog is called.
+     */
+    private ParamicsLog()
+    {
+
+        lock = new Object();
+        log = new StringBuilder("");
+    }
+
+    /**
+     * Creates an instance of ParamicsLog that writes to a file when writeToLog
+     * is called.
+     *
+     * @param propertiesFile
+     */
+    private ParamicsLog(String propertiesFile)
+    {
+        this();
+
+        String logFile = null;
+        String CADSIMHost = null;
+        String CADSIMPort = null;
+
+        try
+        {
+            paramicsLogProp = new Properties();
+            paramicsLogProp.load(new FileInputStream(propertiesFile));
+
+            if ((logFile = paramicsLogProp.getProperty(PROPERTIES.LOG_FILE.name)) == null)
+            {
+                throw new Exception("Properties file missing log file location.");
+            }
+            else if ((CADSIMHost = paramicsLogProp.getProperty(PROPERTIES.CAD_SIM_HOST.name)) == null)
+            {
+                throw new Exception("Properties file missing CAD Simulator host.");
+            }
+            else if ((CADSIMPort = paramicsLogProp.getProperty(PROPERTIES.CAD_SIM_PORT.name)) == null)
+            {
+                throw new Exception("Properties file missing CAD Simulator RMI port.");
+            }
+
+            try
+            {
+                connect(CADSIMHost, CADSIMPort);
+            } catch (Exception e)
+            {
+                JOptionPane.showMessageDialog(null,
+                        "ParamicsLog: Could not connect to remote Coordinator object.",
+                        "Network Error", JOptionPane.ERROR_MESSAGE);
+            }
+
+            try
+            {
+                createLogFile(logFile);
+            } catch (Exception e)
+            {
+                JOptionPane.showMessageDialog(null,
+                        "ParamicsLog: Could not create new log file.",
+                        "File Error", JOptionPane.ERROR_MESSAGE);
+            }
+
+        } catch (Exception e)
+        {
+
+            paramLogger.logp(Level.WARNING, "ParamicsLog", "ParamicsLog constructor",
+                    "Properties file incorrect or missing.", e);
+
+            JOptionPane.showMessageDialog(null,
+                    "ParamicsLog: Properties file invalid.",
+                    "Invalid Configuration", JOptionPane.ERROR_MESSAGE);
+        }
+    }
+
+    /**
+     * Creates the log file.
+     *
+     * @param filePath The path to the file including the file name.
+     * @throws IOException If the log file could not be created.
+     */
+    private void createLogFile(String filePath) throws IOException
+    {
+        try
+        {
+            logFile = new File(filePath);
+
+            if (logFile.exists())
+            {
+                logFile.delete();
+            }
+
+            logFile.createNewFile();
+
+        } catch (Exception e)
+        {
+
+            logFile = null;
+
+            paramLogger.logp(Level.WARNING, "ParamicsLog", "ParamicsLog constructor",
+                    "Could not create new log file.", e);
+
+            throw new IOException("Could not create log file.");
+        }
+    }
+
+    /**
+     * Connect to the Coordinator's RMI object.
+     *
+     * @param hostname Host name of the CAD Simulator.
+     * @param portNumber Port number of the CAD Simulator RMI communication.
+     * @throws SimulationException if there is an error creating the RMI
+     * connection.
+     */
+    private void connect(String hostname, String portNumber)
+            throws SimulationException
+    {
+
+        String coorIntURL = "";
+
+        try
+        {
+            coorIntURL = "rmi://" + hostname + ":" + portNumber + "/coordinator";
+
+            theCoorInt = (CoordinatorInterface) Naming.lookup(coorIntURL);
+        } catch (Exception e)
+        {
+            paramLogger.logp(Level.WARNING, "ParamicsLog",
+                    "establishRMIConnection", "Unable to establish RMI "
+                    + "communication with the CAD Simulator.  URL <" + coorIntURL + ">", e);
+        }
+    }
+
+    /**
+     * Accessor to the entries in the log. No file IO is used.
+     *
+     * @return The entries in the log.
+     */
+    public String getLog()
+    {
+
+        return log.toString();
+    }
+
+    /**
+     * Writes an entry to the log. The simulator time when the message was sent
+     * is prepended to the entry. Entries are padded by a blank line before and
+     * after them. TODO: Ensure output is written in order of request.
+     *
+     * @param entry
+     */
+    public void writeToLog(String entry)
+    {
+
+        String time = "?";
+        String formattedEntry;
+
+        if (theCoorInt != null)
+        {
+            try
+            {
+                time = formatTime(theCoorInt.getCurrentSimulationTime());
+            } catch (Exception e)
+            {
+                paramLogger.logp(Level.WARNING, "ParamicsLog",
+                        "RMICommunication", "Unable to communicate with RMI object", e);
+            }
+        }
+
+        formattedEntry = "\n" + "<!-- Time written to file: " + time + " -->\n" + entry + "\n";
+        log.append(formattedEntry);
+
+        if (logFile != null)
+        {
+            try
+            {
+                synchronized (lock)
+                {
+                    FileWriter writer = new FileWriter(logFile, true);
+                    writer.append(formattedEntry);
+                    writer.flush();
+                    writer.close();
+                }
+            } catch (IOException e)
+            {
+                paramLogger.logp(Level.WARNING, "ParamicsLog", "writeToLog",
+                        "Could not write to log file.", e);
+            }
+        }
+
+        setChanged();
+        notifyObservers(entry);
+    }
+
+    /**
+     * Formats the time given in seconds to hh:mm:ss format.
+     *
+     * @param time The time in seconds.
+     */
+    public String formatTime(long time)
+    {
+        long seconds = time % 60;
+        long minutes = (time - seconds) / 60;
+        long hours = (time - seconds - minutes * 60) / 60;
+
+        return padr(hours) + ":" + padr(minutes) + ":" + padr(seconds);
+    }
+
+    private String padr(long n)
+    {
+        if (n < 10)
+        {
+            return "0" + n;
+        }
+        {
+            return "" + n;
+        }
+    }
+
+    /**
+     * Accessor for static instance of this class.
+     *
+     * @return The instance of this class.
+     */
+    public static ParamicsLog getInstance()
+    {
+
+        return instance;
+    }
+}
Index: /branches/trunk/src/tmcsim/paramicslog/gui/ParamicsLogGUI.java
===================================================================
--- /branches/trunk/src/tmcsim/paramicslog/gui/ParamicsLogGUI.java	(revision 82)
+++ /branches/trunk/src/tmcsim/paramicslog/gui/ParamicsLogGUI.java	(revision 82)
@@ -0,0 +1,104 @@
+package tmcsim.paramicslog.gui;
+
+import java.awt.event.WindowEvent;
+import java.util.*;
+import javax.swing.*;
+
+/**
+ * The UI for ParamicsLog.
+ *
+ * @author Nathaniel Lehrer
+ * @version
+ */
+public class ParamicsLogGUI extends JFrame implements Observer
+{
+
+    /**
+     * The static instance
+     */
+    private static ParamicsLogGUI instance = new ParamicsLogGUI();
+    /**
+     * The text area to display the log in
+     */
+    private JTextArea textArea;
+
+    /**
+     * Creates an instance of this class
+     */
+    public ParamicsLogGUI()
+    {
+
+        setupGUI();
+    }
+
+    /**
+     * Creates the UI
+     */
+    private void setupGUI()
+    {
+        try
+        {
+            UIManager.setLookAndFeel(
+                    UIManager.getSystemLookAndFeelClassName());
+        } catch (Exception ex)
+        {
+            System.out.println(ex.getMessage());
+            System.err.println("Couldn't use system look and feel.");
+        }
+
+        this.addWindowListener(new java.awt.event.WindowAdapter()
+        {
+            public void windowClosing(WindowEvent e)
+            {
+                setVisible(false);
+            }
+        });
+
+
+        setTitle("Paramics Log");
+
+        textArea = new JTextArea();
+        textArea.setColumns(60);
+        textArea.setRows(30);
+        JScrollPane scrollPane = new JScrollPane(textArea);
+
+        getContentPane().add(scrollPane);
+
+    }
+
+    /**
+     * Shows the UI window
+     */
+    public void display()
+    {
+        pack();
+        setVisible(true);
+    }
+
+    /**
+     * Updates the text area. If the observable class given is of type
+     * ParamicsLog then the log entries are displayed.
+     *
+     * @param o The model for this viewer.
+     * @param arg An argument that is not used.
+     */
+    public void update(Observable o, Object arg)
+    {
+        if (o instanceof tmcsim.paramicslog.ParamicsLog)
+        {
+            textArea.setText(((tmcsim.paramicslog.ParamicsLog) o).getLog());
+        }
+
+        repaint();
+    }
+
+    /**
+     * Accessor for the instance of ParamicsLogGUI.
+     *
+     * @return The instance of ParamicsLogGUI.
+     */
+    public static ParamicsLogGUI getInstance()
+    {
+        return instance;
+    }
+}
Index: /branches/trunk/src/spikes/TableDialogEditDemo.java
===================================================================
--- /branches/trunk/src/spikes/TableDialogEditDemo.java	(revision 82)
+++ /branches/trunk/src/spikes/TableDialogEditDemo.java	(revision 82)
@@ -0,0 +1,198 @@
+package spikes;
+
+/*
+ * TableDialogEditDemo.java requires these files:
+ *   ColorRenderer.java
+ *   ColorEditor.java
+ */
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.AbstractTableModel;
+
+/**
+ * This is like TableDemo, except that it substitutes a Favorite Color column
+ * for the Last Name column and specifies a custom cell renderer and editor for
+ * the color data.
+ */
+public class TableDialogEditDemo extends JPanel
+{
+    private boolean DEBUG = false;
+
+    public TableDialogEditDemo()
+    {
+        super(new GridLayout(1, 0));
+
+        JTable table = new JTable(new MyTableModel());
+        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
+        table.setFillsViewportHeight(true);
+
+        //Create the scroll pane and add the table to it.
+        JScrollPane scrollPane = new JScrollPane(table);
+
+        //Set up renderer and editor for the Favorite Color column.
+        table.setDefaultRenderer(Color.class,
+                new ColorRenderer(true));
+        table.setDefaultRenderer(String.class,
+                //new StringRenderer());
+                new SimpleWordRenderer());
+
+        //Add the scroll pane to this panel.
+        add(scrollPane);
+    }
+
+    class MyTableModel extends AbstractTableModel
+    {
+        private String[] columnNames =
+        {
+            "First Name",
+            "Favorite Color",
+            "Sport",
+            "# of Years",
+            "Vegetarian"
+        };
+        private Object[][] data =
+        {
+            {
+                "Mary", new Color(153, 0, 153),
+                "Snowboarding", new Integer(5), new Boolean(false)
+            },
+            {
+                "Alison", new Color(51, 51, 153),
+                "Rowing", new Integer(3), new Boolean(true)
+            },
+            {
+                "Kathy", new Color(51, 102, 51),
+                "Knitting", new Integer(2), new Boolean(false)
+            },
+            {
+                "Sharon", Color.red,
+                "Speed reading", new Integer(20), new Boolean(true)
+            },
+            {
+                "Philip", Color.pink,
+                "Pool", new Integer(10), new Boolean(false)
+            }
+        };
+
+        public int getColumnCount()
+        {
+            return columnNames.length;
+        }
+
+        public int getRowCount()
+        {
+            return data.length;
+        }
+
+        public String getColumnName(int col)
+        {
+            return columnNames[col];
+        }
+
+        public Object getValueAt(int row, int col)
+        {
+            return data[row][col];
+        }
+
+        /*
+         * JTable uses this method to determine the default renderer/
+         * editor for each cell.  If we didn't implement this method,
+         * then the last column would contain text ("true"/"false"),
+         * rather than a check box.
+         */
+        public Class getColumnClass(int c)
+        {
+            return getValueAt(0, c).getClass();
+        }
+
+        public boolean isCellEditable(int row, int col)
+        {
+            //Note that the data/cell address is constant,
+            //no matter where the cell appears onscreen.
+            if (col < 1)
+            {
+                return false;
+            }
+            else
+            {
+                return true;
+            }
+        }
+
+        public void setValueAt(Object value, int row, int col)
+        {
+            if (DEBUG)
+            {
+                System.out.println("Setting value at " + row + "," + col
+                        + " to " + value
+                        + " (an instance of "
+                        + value.getClass() + ")");
+            }
+
+            data[row][col] = value;
+            fireTableCellUpdated(row, col);
+
+            if (DEBUG)
+            {
+                System.out.println("New value of data:");
+                printDebugData();
+            }
+        }
+
+        private void printDebugData()
+        {
+            int numRows = getRowCount();
+            int numCols = getColumnCount();
+
+            for (int i = 0; i < numRows; i++)
+            {
+                System.out.print("    row " + i + ":");
+                for (int j = 0; j < numCols; j++)
+                {
+                    System.out.print("  " + data[i][j]);
+                }
+                System.out.println();
+            }
+            System.out.println("--------------------------");
+        }
+    }
+
+    /**
+     * Create the GUI and show it. For thread safety, this method should be
+     * invoked from the event-dispatching thread.
+     */
+    private static void createAndShowGUI()
+    {
+        //Create and set up the window.
+        JFrame frame = new JFrame("TableDialogEditDemo");
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+        //Create and set up the content pane.
+        JComponent newContentPane = new TableDialogEditDemo();
+        newContentPane.setOpaque(true); //content panes must be opaque
+        frame.setContentPane(newContentPane);
+
+        //Display the window.
+        frame.pack();
+        frame.setVisible(true);
+    }
+
+    public static void main(String[] args)
+    {
+        //Schedule a job for the event-dispatching thread:
+        //creating and showing this application's GUI.
+        javax.swing.SwingUtilities.invokeLater(new Runnable()
+        {
+            public void run()
+            {
+                createAndShowGUI();
+            }
+        });
+    }
+}
Index: /branches/trunk/src/spikes/ColorRenderer.java
===================================================================
--- /branches/trunk/src/spikes/ColorRenderer.java	(revision 82)
+++ /branches/trunk/src/spikes/ColorRenderer.java	(revision 82)
@@ -0,0 +1,62 @@
+package spikes;
+
+/*
+ * ColorRenderer.java (compiles with releases 1.2, 1.3, and 1.4) is used by
+ * TableDialogEditDemo.java.
+ */
+import java.awt.Color;
+import java.awt.Component;
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.border.Border;
+import javax.swing.table.TableCellRenderer;
+
+public class ColorRenderer extends JLabel
+        implements TableCellRenderer
+{
+    Border unselectedBorder = null;
+    Border selectedBorder = null;
+    boolean isBordered = true;
+
+    public ColorRenderer(boolean isBordered)
+    {
+        this.isBordered = isBordered;
+        setOpaque(true); //MUST do this for background to show up.
+    }
+
+    public Component getTableCellRendererComponent(
+            JTable table, Object color,
+            boolean isSelected, boolean hasFocus,
+            int row, int column)
+    {
+        Color newColor = (Color) color;
+        setBackground(newColor);
+        if (isBordered)
+        {
+            if (isSelected)
+            {
+                if (selectedBorder == null)
+                {
+                    selectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5,
+                            table.getSelectionBackground());
+                }
+                setBorder(selectedBorder);
+            }
+            else
+            {
+                if (unselectedBorder == null)
+                {
+                    unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5,
+                            table.getBackground());
+                }
+                setBorder(unselectedBorder);
+            }
+        }
+
+        setToolTipText("RGB value: " + newColor.getRed() + ", "
+                + newColor.getGreen() + ", "
+                + newColor.getBlue());
+        return this;
+    }
+}
Index: /branches/trunk/src/spikes/StdOutDemo.java
===================================================================
--- /branches/trunk/src/spikes/StdOutDemo.java	(revision 82)
+++ /branches/trunk/src/spikes/StdOutDemo.java	(revision 82)
@@ -0,0 +1,38 @@
+package spikes; 
+
+import java.io.PrintWriter;
+import java.io.Writer;
+
+/**
+ *
+ * @author jdalbey
+ */
+public class StdOutDemo
+{
+
+    private PrintWriter display;
+
+    /**
+     * Constructor.
+     */
+    public StdOutDemo()
+    {
+        display = new PrintWriter(System.out, true);
+    }
+
+    public void setWriter(Writer writer)
+    {
+        display = new PrintWriter(writer, true);
+    }
+
+    public void setVisible(boolean state)
+    {
+        display.print("--- Hello World ---\n");
+        display.println("Time to print to System.out.");
+    }
+
+    public static void main(String[] args)
+    {
+        (new StdOutDemo()).setVisible(true);
+    }
+}
Index: /branches/trunk/src/spikes/StringRenderer.java
===================================================================
--- /branches/trunk/src/spikes/StringRenderer.java	(revision 82)
+++ /branches/trunk/src/spikes/StringRenderer.java	(revision 82)
@@ -0,0 +1,46 @@
+package spikes;
+
+import java.awt.Component;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
+
+public class StringRenderer extends JLabel
+        implements TableCellRenderer
+{
+    public StringRenderer()
+    {
+    }
+
+    public Component getTableCellRendererComponent(
+            JTable table, Object message,
+            boolean isSelected, boolean hasFocus,
+            int row, int column)
+    {
+        String msgText = (String) message;
+        setText(msgText);
+        setToolTipText(msgText.toUpperCase());
+        return this;
+    }
+}
+
+/**
+ * This is an example of a CellRenderer that tailors the way the output is
+ * displayed.
+ */
+class SimpleWordRenderer extends DefaultTableCellRenderer
+{
+    protected void setValue(Object value)
+    {
+        String word = (String) value;
+        String name = word.toString().toUpperCase();
+        // Long words get a star added to them
+        if (word.length() > 9)
+        {
+            name = name + "*";
+        }
+        setToolTipText(name);
+        setText(name);
+    }
+}
Index: /branches/trunk/src/atmsdriver/ExchangeInfo.java
===================================================================
--- /branches/trunk/src/atmsdriver/ExchangeInfo.java	(revision 82)
+++ /branches/trunk/src/atmsdriver/ExchangeInfo.java	(revision 82)
@@ -0,0 +1,20 @@
+package atmsdriver;
+
+/**
+ *
+ * @author John A Torres
+ */
+public class ExchangeInfo {
+	/** The network ID **/
+	public int networkId;
+
+	/** The XML message **/
+	public String xmlMessage;
+	
+	/** Constructor **/
+	public ExchangeInfo(int networkId, String xmlMessage)
+	{
+		this.networkId = networkId;
+		this.xmlMessage = xmlMessage;
+	}
+}
Index: /branches/trunk/src/atmsdriver/ATMSDriver.java
===================================================================
--- /branches/trunk/src/atmsdriver/ATMSDriver.java	(revision 82)
+++ /branches/trunk/src/atmsdriver/ATMSDriver.java	(revision 82)
@@ -0,0 +1,129 @@
+package atmsdriver;
+
+import atmsdriver.model.Network;
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author John A. Torres
+ * @version 09/10/2017
+ */
+public class ATMSDriver implements Runnable {
+
+    /** ATMSDriver Error logger. */
+    private static Logger ATMSDriverLogger = Logger.getLogger("atmsdriver");
+
+    private static final String CONFIG_FILE_NAME = "atms_driver_config.properties";
+
+    /** Properties object for the CADClient class. */
+    private Properties ATMSDriverProperties;
+
+    /**
+     * Enumeration containing properties name values. See ATMSDriver class
+     * description for more information.
+     *
+     * @author John Torres
+     * @see ATMSDriver
+     */
+    private static enum PROPERTIES {
+
+        LDS_FILE_NAME("LDSFileName"),
+        LOOP_FILE_NAME("LoopFileName"),
+        NETWORK_FILE_NAME("NetworkFileName"),
+        EXCHANGE_FILE_NAME("ExchangeFileName"),
+        FEP_WRITER_HOST("FEPWriterHost"),
+        FEP_WRITER_PORT("FEPWriterPort");
+
+        public String name;
+
+        private PROPERTIES(String n) {
+            name = n;
+        }
+    }
+
+    /** Network model. */
+    final private Network network;
+    
+    /** Sleep Time (10 seconds). **/
+    private static final int SLEEP_TIME = 10000;
+    
+    /** Exchange Reader */
+    private ExchangeReader exchangeReader;
+    
+    @Override
+    public void run() {
+        // Check for packets and update the simulator
+        for (;;) {
+            // Flush the input file
+            ExchangeInfo exInfo = exchangeReader.parse(ATMSDriverProperties
+                    .getProperty(PROPERTIES.EXCHANGE_FILE_NAME.name));
+            
+            network.writeToFEP();
+            
+            // Update if exchangeInfo is recieved
+            if (exInfo != null) {
+                
+            }
+
+            // Sleep
+            try {
+                Thread.sleep(SLEEP_TIME);
+            } catch (InterruptedException ie) {
+                
+            }
+        }
+    }
+
+    public ATMSDriver(String propertiesFile) {
+
+        if (!verifyProperties(propertiesFile)) {
+            System.exit(0);
+        }
+
+        network = new Network(
+                new File(ATMSDriverProperties.getProperty(
+                                PROPERTIES.LDS_FILE_NAME.name)),
+                new File(ATMSDriverProperties.getProperty(
+                                PROPERTIES.LOOP_FILE_NAME.name)),
+                ATMSDriverProperties.getProperty(PROPERTIES.FEP_WRITER_HOST.name),
+                Integer.parseInt(ATMSDriverProperties.getProperty(
+                        PROPERTIES.FEP_WRITER_PORT.name)));
+        
+        exchangeReader = new ExchangeReader();
+    }
+
+    private boolean verifyProperties(String propertiesFile) {
+        // Load the properties file.
+        try {
+            ATMSDriverProperties = new Properties();
+            ATMSDriverProperties.load(new FileInputStream(propertiesFile));
+        } catch (Exception e) {
+            ATMSDriverLogger.logp(Level.SEVERE, "ATMSDriver",
+                    "Constructor", "Exception in reading properties file.", e);
+        }
+
+        return true;
+    }
+
+    /**
+     * Runs the Paramics simulator.
+     */
+    public static void main(String[] args) {
+        try {
+            if (System.getProperty("ATMSDRIVER_PROPERTIES") != null) {
+                new Thread(new ATMSDriver(System.getProperty(
+                        "ATMSDRIVER_PROPERTIES"))).start();
+            } else {
+                throw new Exception("ATMSDRIVER_PROPERTIES system property not defined.");
+            }
+        } catch (Exception e) {
+            ATMSDriverLogger.logp(Level.SEVERE, "ATMSDriver", "Main",
+                    "Error occured initializing application", e);
+            System.exit(-1);
+        }
+    }
+}
Index: /branches/trunk/src/atmsdriver/NetworkLoader.java
===================================================================
--- /branches/trunk/src/atmsdriver/NetworkLoader.java	(revision 82)
+++ /branches/trunk/src/atmsdriver/NetworkLoader.java	(revision 82)
@@ -0,0 +1,277 @@
+package atmsdriver;
+
+import atmsdriver.model.FEPLine;
+import atmsdriver.model.Station;
+import atmsdriver.model.LoopDetector;
+import atmsdriver.model.Station.DIRECTION;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/** The NetworkReader loads all static data for the traffic network through
+ *  network lookup files. 
+ * 
+ *  The public method getFEPLines() method can be used to get all the FEPLines 
+  within a network. All other methods are private and are used to construct
+  the FEPLines.
+ 
+  The "LDSFile" contains Station and FEPLine information.
+  ex.
+   < Insert file here >
+ *  The "loopFile" contains individual LoopDetector information.
+ *  ex.
+ *   < Insert file here > 
+ *
+ * @author John A. Torres
+ * @version 09/10/2017
+ */
+public class NetworkLoader {
+    // Two network config files
+    private final File LDSFile;
+    private final File loopFile;
+    
+    // The list of FEPLines
+    private List<FEPLine> lines;
+    
+    /**
+     * Constructor
+     * @param LDSFile contains FEPLine and Station static data
+     * @param loopFile contains individual LoopDetector static data
+     */
+    public NetworkLoader(File LDSFile, File loopFile)
+    {
+        this.LDSFile = LDSFile;
+        this.loopFile = loopFile;
+        this.lines = new ArrayList<>();
+        constructFEPLines();
+    }
+    
+    /**
+     * Returns the list of FEPLines in the configured network
+    */
+    public List<FEPLine> getFEPLines()
+    {
+        return lines;
+    }
+    
+    // returns a list of the line numbers found in LDSFile
+    private ArrayList<Integer> getLineNums(Scanner sc)
+    {
+        ArrayList<Integer> lineNums = new ArrayList<>();
+        
+        sc.nextLine(); // skip first line
+        
+        while(sc.hasNext())
+        {
+            sc.nextInt(); // skip to line no
+            Integer lineNum = sc.nextInt(); // get the line number
+            
+            /* If the line is new, and has not been added, add it to lineNums */
+            if(!lineNums.contains(lineNum))
+            {
+                lineNums.add(lineNum);
+            }
+       
+            sc.nextLine(); // skip to next line
+        }
+        
+        sc.close();
+        
+        return lineNums;
+    }
+    
+    // returns a list of station numbers for a given line
+    private ArrayList<Integer> getStationNums(Integer lineNum, Scanner sc)
+    {
+        ArrayList<Integer> stnNums = new ArrayList<>();
+        
+        sc.nextLine(); // skip first line
+        
+        while(sc.hasNext())
+        {
+            Integer stnNum = sc.nextInt();
+            Integer theLine = sc.nextInt();
+            if(theLine.equals(lineNum))
+            {
+                stnNums.add(stnNum);
+            }
+            
+            sc.nextLine();
+        }
+        
+        sc.close();
+        
+        return stnNums;
+    }
+    
+    // returns a list of loop detectors for a given station
+    private ArrayList<LoopDetector> getLoops(Integer stnNum, Scanner sc)
+    {
+        ArrayList<LoopDetector> loops = new ArrayList<>();
+        
+        sc.nextLine(); // skip first line
+        
+        while(sc.hasNext())
+        {
+            sc.next(); // skip FWY
+            sc.next(); // skip dir
+            sc.next(); // skip postmile
+            Integer ldsID = sc.nextInt(); // lds id
+            sc.next(); // skip vdsID
+            Integer loopID = sc.nextInt(); // loop id
+            sc.next(); // skip LOC
+            Integer laneNum = sc.nextInt(); // lane number
+            String loopLoc = sc.next();
+            if(stnNum.equals(ldsID))
+            {
+                LoopDetector loop = new LoopDetector(loopID, loopLoc, laneNum);
+                loops.add(loop);
+            }
+            sc.nextLine();
+        }
+        
+        sc.close();
+        
+        return loops;
+    }
+    
+    // method called to actually build the network from config files
+    private void constructFEPLines()
+    {
+        try {
+            System.out.println("Building network...");
+            
+            // Get FEPLine IDs
+            ArrayList<Integer> lineNums = getLineNums(new Scanner(LDSFile));
+            
+            // Create each FEPLine in the network
+            for(Integer lineNum : lineNums)
+            {
+                // Get Station IDs for the current FEPLine
+                ArrayList<Integer> stnNums = getStationNums(lineNum,
+                        new Scanner(LDSFile));
+                
+                // Create each Station for the current FEPLine
+                ArrayList<Station> stns = new ArrayList<>();
+                for(Integer stnNum : stnNums)
+                {
+                    // Get Loops for the current Station
+                    ArrayList<LoopDetector> loops =
+                            getLoops(stnNum, new Scanner(loopFile));
+                    
+                    // Create the Station and add to list for curr FEPLine
+                    Station stn =
+                            createStation(stnNum, new Scanner(LDSFile), loops);
+                    stns.add(stn);
+                }
+                
+                // Now that stations are created, create the actual FEPLine and
+                // and to FEPLines list
+                FEPLine line = createLine(lineNum, new Scanner(LDSFile), stns);
+                lines.add(line);
+            }
+        } catch (FileNotFoundException ex) {
+            Logger.getLogger(NetworkLoader.class.getName()).log(Level.SEVERE, null, ex);
+        }
+    }
+    
+    // Creates  line
+    private FEPLine createLine(int lineNum, Scanner scLine, ArrayList<Station> stns)
+    {
+        FEPLine line = null;
+        
+        scLine.nextLine();
+        
+        while(scLine.hasNext())
+        {
+            scLine.nextInt(); // skip ldsID
+            int currLineNum = scLine.nextInt(); // linenum
+            if(currLineNum == lineNum)
+            {
+                scLine.nextInt(); // skip drop
+                int sch = scLine.nextInt(); // schedule
+                int lineinfo = scLine.nextInt(); // lineinfo
+                int sysKey = scLine.nextInt(); // sysKey
+                int schSeq = scLine.nextInt(); // schSeq
+                int globSeq = scLine.nextInt(); // globSeq  
+                int count = scLine.nextInt(); // count
+                
+                line = new FEPLine(lineNum, stns, count, sch, lineinfo, sysKey, globSeq, schSeq);
+                
+                break;
+            }
+            
+            scLine.nextLine();
+        }
+        
+        scLine.close();
+        
+        return line;
+    }
+    
+    // Returns the loction given the whole line from the lookup file
+    private String getLocation(String line)
+    {
+        Scanner sc = new Scanner(line);
+        sc.nextInt(); // skip lds num
+        sc.nextInt(); // skip line num
+        int drop = sc.nextInt(); // drop num
+        sc.nextInt(); // skip schedule
+        sc.nextInt(); // skip lineinfo
+        sc.nextInt(); // skp systemkey
+        sc.nextInt(); // skip sch_seq
+        sc.nextInt(); // skip glob_seq
+        sc.nextInt(); // skip count
+        sc.nextInt(); // fwy
+        DIRECTION dir = DIRECTION.getEnum(sc.next()); // direction
+        sc.nextDouble();
+        
+        /** GRABS FROM CURRENT TO END OF LINE */
+        sc.useDelimiter("\\z"); 
+        String loc = sc.next().trim();
+        sc.close();
+        return loc;
+    }
+    
+    // creates a Station
+    private Station createStation(int stnNum, Scanner sc, ArrayList<LoopDetector> detectors)
+    {
+        Station LDS = null;
+        
+        sc.nextLine();
+        
+        while(sc.hasNext())
+        {        
+            String strLine = sc.nextLine();
+            Scanner scLine = new Scanner(strLine);
+            int ldsID = scLine.nextInt(); // get curr lds id
+            if(ldsID == stnNum) // if we are on correct stn
+            {
+                int lineNum = scLine.nextInt(); // skip line num
+                int drop = scLine.nextInt(); // drop num
+                scLine.nextInt(); // skip schedule
+                scLine.nextInt(); // skip lineinfo
+                scLine.nextInt(); // skp systemkey
+                scLine.nextInt(); // skip sch_seq
+                scLine.nextInt(); // skip glob_seq
+                scLine.nextInt(); // skip count
+                int fwy = scLine.nextInt(); // fwy
+                DIRECTION dir = DIRECTION.getEnum(scLine.next()); // direction
+                double postmile = scLine.nextDouble();
+                String ldsName = getLocation(strLine); /************* DOESNT GRAB WHOLE???? */////
+                LDS = new Station(lineNum, ldsID, drop, ldsName, detectors, fwy, dir, postmile);
+                
+                break;
+            }
+            scLine.close();
+        }
+        
+        sc.close();
+        
+        return LDS;
+    }
+}
Index: /branches/trunk/src/atmsdriver/model/HighwayStatusWriter.java
===================================================================
--- /branches/trunk/src/atmsdriver/model/HighwayStatusWriter.java	(revision 82)
+++ /branches/trunk/src/atmsdriver/model/HighwayStatusWriter.java	(revision 82)
@@ -0,0 +1,36 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package atmsdriver.model;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.Socket;
+
+/**
+ *
+ * @author jtorres
+ */
+class HighwayStatusWriter {
+    
+    private final String host;
+    private final int port;
+    
+    public HighwayStatusWriter(String host, int port)
+    {
+        this.host = host;
+        this.port = port;
+    }
+    
+    public void write(String xml) throws IOException
+    {
+        Socket sock = new Socket(host, port);
+        PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
+        out.print(xml);
+        sock.close();
+    }
+}
Index: /branches/trunk/src/atmsdriver/model/Station.java
===================================================================
--- /branches/trunk/src/atmsdriver/model/Station.java	(revision 82)
+++ /branches/trunk/src/atmsdriver/model/Station.java	(revision 82)
@@ -0,0 +1,173 @@
+package atmsdriver.model;
+
+import java.util.List;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/** A Station is a simulation of a station in a traffic network.
+ *  
+ *  A Station (LDS) contains static meta data about the station, and
+  two dynamic attributes, MLTotVol and OppTotVol. 
+ 
+  A single LDS contains multiple LoopDetectors, which
+  contain data for a single lane on one direction of the freeway. A LDS
+  is specific to a single freeway, direction, and postmile.
+ *
+ * @author John A. Torres
+ * @version 9/10/2017
+ */
+public class Station implements Comparable {
+    /* Static Station meta data */
+    final private int lineNum;
+    final private int ldsID; // double check
+    final private int drop;
+    final private String location;
+    final private List<LoopDetector> loops;
+    final private int freeway;
+    final private double postmile;
+    final private DIRECTION direction;
+    
+    /* Dynamic Station data */
+    private int MLTotVol;
+    private int OppTotVol;
+    
+    /* Constructor */
+    public Station(int lineNum, int ldsID, int drop,
+            String location, List<LoopDetector> loops, int fwy, 
+            DIRECTION direction, double postmile)
+    {
+        this.lineNum = lineNum;
+        this.ldsID = ldsID;
+        this.drop = drop;
+        this.loops = loops;
+        this.location = location;
+        this.postmile = postmile;
+        this.direction = direction;
+        this.freeway = fwy;
+        
+        this.MLTotVol = 0;
+        this.OppTotVol = 0;
+    }
+
+    @Override
+    public int compareTo(Object o) {
+        return 1;
+    }
+    
+    private static enum XML_TAGS
+    {
+        STATION("Station"),
+        LDS_ID("LDS_ID"),
+        LINE_NUM("Line_Num"),
+        DROP("Drop"),
+        LOOPS("Loops"),
+        LOCATION("Location"),
+        POST_MILE("Post_Mile"),
+        DIRECTION("Direction"),
+        FREEWAY("Freeway"),
+        ML_TOT_VOL("ML_Tot_Vol"),
+        OPP_TOT_VOL("Opp_Tot_Vol");
+        
+        String tag;
+        
+        private XML_TAGS(String n)
+        {
+            tag = n;
+        }
+    }
+    
+    public void toXML(Element currElem)
+    {
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element stationElement = theDoc.createElement(XML_TAGS.STATION.tag);
+        currElem.appendChild(stationElement);
+        
+        Element ldsIDElement = theDoc.createElement(XML_TAGS.LDS_ID.tag);
+        ldsIDElement.appendChild(theDoc.createTextNode(String.valueOf(this.ldsID)));
+        stationElement.appendChild(ldsIDElement);
+        
+        Element lineNumElement = theDoc.createElement(XML_TAGS.LINE_NUM.tag);
+        lineNumElement.appendChild(theDoc.createTextNode(String.valueOf(this.lineNum)));
+        stationElement.appendChild(lineNumElement);
+        
+        Element dropElement = theDoc.createElement(XML_TAGS.DROP.tag);
+        dropElement.appendChild(theDoc.createTextNode(String.valueOf(this.drop)));
+        stationElement.appendChild(dropElement);
+        
+        Element locationElement = theDoc.createElement(XML_TAGS.LOCATION.tag);
+        locationElement.appendChild(theDoc.createTextNode(this.location));
+        stationElement.appendChild(locationElement);
+        
+        Element postMileElement = theDoc.createElement(XML_TAGS.POST_MILE.tag);
+        postMileElement.appendChild(theDoc.createTextNode(String.valueOf(this.postmile)));
+        stationElement.appendChild(postMileElement);
+        
+        Element directionElement = theDoc.createElement(XML_TAGS.DIRECTION.tag);
+        directionElement.appendChild(theDoc.createTextNode(this.direction.name));
+        stationElement.appendChild(directionElement);
+        
+        Element freewayElement = theDoc.createElement(XML_TAGS.FREEWAY.tag);
+        freewayElement.appendChild(theDoc.createTextNode(String.valueOf(this.freeway)));
+        stationElement.appendChild(freewayElement);
+        
+        Element mlElement = theDoc.createElement(XML_TAGS.ML_TOT_VOL.tag);
+        mlElement.appendChild(theDoc.createTextNode(String.valueOf(this.MLTotVol)));
+        stationElement.appendChild(mlElement);
+        
+        Element oppElement = theDoc.createElement(XML_TAGS.OPP_TOT_VOL.tag);
+        oppElement.appendChild(theDoc.createTextNode(String.valueOf(this.OppTotVol)));
+        stationElement.appendChild(oppElement);
+        
+        Element loopsElement = theDoc.createElement(XML_TAGS.LOOPS.tag);
+        stationElement.appendChild(loopsElement);
+        
+        for(LoopDetector loop : loops)
+        {
+            loop.toXML(loopsElement);
+        }
+    }
+    
+    /**
+     * Enum for freeway direction.
+     * 
+     * @author John A. Torres
+     * @version 9/10/2017
+     */
+    public static enum DIRECTION
+    {
+        NORTH("N"),
+        SOUTH("S"),
+        EAST("E"),
+        WEST("W");
+        
+        String name;
+        
+        DIRECTION(String name)
+        {
+            this.name = name;
+        }
+        
+        /**
+         * Returns the direction enum, given a string value.
+         * @param name str value for enum
+         * @return enum for given str value
+         */
+        public static DIRECTION getEnum(String name)
+        {
+            switch(name)
+            {
+                case "S":
+                    return SOUTH;
+                case "N":
+                    return NORTH;
+                case "E":
+                    return EAST;
+                case "W":
+                    return WEST;
+                default:
+                    return null;
+            }
+        }
+    }
+}
Index: /branches/trunk/src/atmsdriver/model/FEPLine.java
===================================================================
--- /branches/trunk/src/atmsdriver/model/FEPLine.java	(revision 82)
+++ /branches/trunk/src/atmsdriver/model/FEPLine.java	(revision 82)
@@ -0,0 +1,106 @@
+package atmsdriver.model;
+
+import java.util.List;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+
+
+/** An FEPLine is a simulated line of communication from the FEP to 
+ *  LoopDetectorStations in the traffic network.
+ * 
+ *  An FEPLine contains static meta data and a list of LoopDetectorStations.
+ *  A single FEPLine contains multiple LoopDetectorStations.
+ *
+ * @author John A. Torres
+ * @version 09/10/2017
+ */ 
+public class FEPLine {
+    /* Static FEPLine meta data */
+    final private int lineNum;
+    final private List<Station> stations;
+    final private int count;
+    // NOT SURE IF NEXT IS FINAL
+    final private int schedule;
+    final private int lineInfo;
+    final private long systemKey;
+    final private long globalSeq;
+    final private long scheduleSeq;
+    
+    public FEPLine(int lineNum, List<Station> stations, int count,
+            int schedule, int lineInfo, long systemKey, long globalSeq,
+            long scheduleSeq)
+    {
+        this.lineNum = lineNum;
+        this.stations = stations;
+        this.count = count;
+        this.schedule = schedule;
+        this.lineInfo = lineInfo;
+        this.systemKey = systemKey;
+        this.globalSeq = globalSeq;
+        this.scheduleSeq = scheduleSeq;
+    }
+    
+    public void toXML(Element currElem)
+    {
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element lineElement = theDoc.createElement(XML_TAGS.LINE.tag);
+        currElem.appendChild(lineElement);
+        
+        Element lineNumElement = theDoc.createElement(XML_TAGS.LINE_NUM.tag);
+        lineNumElement.appendChild(theDoc.createTextNode(String.valueOf(this.lineNum)));
+        lineElement.appendChild(lineNumElement);
+        
+        Element countElement = theDoc.createElement(XML_TAGS.COUNT.tag);
+        countElement.appendChild(theDoc.createTextNode(String.valueOf(this.count)));
+        lineElement.appendChild(countElement);
+        
+        Element scheduleElement = theDoc.createElement(XML_TAGS.SCHEDULE.tag);
+        scheduleElement.appendChild(theDoc.createTextNode(String.valueOf(this.schedule)));
+        lineElement.appendChild(scheduleElement);
+        
+        Element lineInfoElement = theDoc.createElement(XML_TAGS.LINE_INFO.tag);
+        lineInfoElement.appendChild(theDoc.createTextNode(String.valueOf(this.lineInfo)));
+        lineElement.appendChild(lineInfoElement);
+        
+        Element systemKeyElement = theDoc.createElement(XML_TAGS.SYSTEM_KEY.tag);
+        systemKeyElement.appendChild(theDoc.createTextNode(String.valueOf(this.systemKey)));
+        lineElement.appendChild(systemKeyElement);
+        
+        Element globalSeqElement = theDoc.createElement(XML_TAGS.GLOBAL_SEQ.tag);
+        globalSeqElement.appendChild(theDoc.createTextNode(String.valueOf(this.globalSeq)));
+        lineElement.appendChild(globalSeqElement);
+        
+        Element scheduleSeqElement = theDoc.createElement(XML_TAGS.SCHEDULE_SEQ.tag);
+        scheduleSeqElement.appendChild(theDoc.createTextNode(String.valueOf(this.scheduleSeq)));
+        lineElement.appendChild(scheduleSeqElement);
+        
+        Element stationsElement = theDoc.createElement(XML_TAGS.STATIONS.tag);
+        lineElement.appendChild(stationsElement);
+        for(Station station : stations)
+        {
+            station.toXML(stationsElement);
+        }
+    }
+    
+    private static enum XML_TAGS
+    {
+        LINE("Line"),
+        LINE_NUM("Line_Num"),
+        STATIONS("Stations"),
+        COUNT("Count"),
+        SCHEDULE("Schedule"),
+        LINE_INFO("Line_Info"),
+        SYSTEM_KEY("System_Key"),
+        GLOBAL_SEQ("Global_Seq"),
+        SCHEDULE_SEQ("Schedule_Seq");
+        
+        String tag;
+        
+        private XML_TAGS(String n)
+        {
+            tag = n;
+        }
+    }
+}
Index: /branches/trunk/src/atmsdriver/model/LoopDetector.java
===================================================================
--- /branches/trunk/src/atmsdriver/model/LoopDetector.java	(revision 82)
+++ /branches/trunk/src/atmsdriver/model/LoopDetector.java	(revision 82)
@@ -0,0 +1,103 @@
+package atmsdriver.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/** A LoopDetector represents a single detector for a single lane in a network.
+ * 
+ *  A LoopDetector contains static meta data, and three dynamic attributes: vol,
+ *  occ, and spd.
+ *
+ * @author John A. Torres
+ * @version 09/10/2017
+ */
+public class LoopDetector 
+{
+    /* static data */
+    final private int loopID;
+    final private String loopLocation;
+    final private int laneNum;
+    
+    /* dynamic data */
+    private int vol;
+    private int occ;
+    private int spd;
+    
+    public LoopDetector(int loopID, String loopLocation, int laneNum)
+    {
+        /* Set static data */
+        this.loopID = loopID;
+        this.loopLocation = loopLocation;
+        this.laneNum = laneNum;
+        
+        /* Init dynamic data */
+        this.vol = 0;
+        this.spd = 0;
+        this.occ = 0;
+    }
+    
+    private static enum XML_TAGS
+    {
+        LOOP_ID("Loop_ID"),
+        LOOP_LOCATION("Loop_Location"),
+        LANE_NUM("Lane_Num"),
+        VOL("Vol"),
+        SPD("Spd"),
+        OCC("Occ"),
+        LOOP("Loop");
+        
+        String tag;
+        
+        private XML_TAGS(String n)
+        {
+            tag = n;
+        }
+    }
+    
+    /** 
+     * Updates loop detector dynamic attributes.
+     * @param vol volume
+     * @param occ occupancy
+     * @param spd speed
+     */
+    public void updateLoop(int vol, int occ, int spd)
+    {
+        this.vol = vol;
+        this.occ = occ;
+        this.spd = spd;
+    }
+    
+    public void toXML(Element currElem)
+    {
+        Document theDoc = currElem.getOwnerDocument();
+        
+        Element loopElement = theDoc.createElement(XML_TAGS.LOOP.tag);
+        currElem.appendChild(loopElement);
+        
+        Element loopIDElement = theDoc.createElement(XML_TAGS.LOOP_ID.tag);
+        loopIDElement.appendChild(theDoc.createTextNode(String.valueOf(this.loopID)));
+        loopElement.appendChild(loopIDElement);
+        
+        Element loopLocElement = theDoc.createElement(XML_TAGS.LOOP_LOCATION.tag);
+        loopLocElement.appendChild(theDoc.createTextNode(this.loopLocation));
+        loopElement.appendChild(loopLocElement);
+        
+        Element laneNumElement = theDoc.createElement(XML_TAGS.LANE_NUM.tag);
+        laneNumElement.appendChild(theDoc.createTextNode(String.valueOf(this.laneNum)));
+        loopElement.appendChild(laneNumElement);
+        
+        Element volElement = theDoc.createElement(XML_TAGS.VOL.tag);
+        volElement.appendChild(theDoc.createTextNode(String.valueOf(this.vol)));
+        loopElement.appendChild(volElement);
+        
+        Element occElement = theDoc.createElement(XML_TAGS.OCC.tag);
+        occElement.appendChild(theDoc.createTextNode(String.valueOf(this.occ)));
+        loopElement.appendChild(occElement);
+        
+        Element spdElement = theDoc.createElement(XML_TAGS.SPD.tag);
+        spdElement.appendChild(theDoc.createTextNode(String.valueOf(this.spd)));
+        loopElement.appendChild(spdElement);
+    }
+}
Index: /branches/trunk/src/atmsdriver/model/Network.java
===================================================================
--- /branches/trunk/src/atmsdriver/model/Network.java	(revision 82)
+++ /branches/trunk/src/atmsdriver/model/Network.java	(revision 82)
@@ -0,0 +1,84 @@
+package atmsdriver.model;
+
+import atmsdriver.NetworkLoader;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ *
+ * @author andrew
+ */
+public class Network {
+
+    final private ArrayList<FEPLine> lines;
+    final private HighwayStatusWriter hwyStatusWriter;
+
+    public Network(File LDSFile, File loopFile, String hostName, int portNum) {
+        lines = (ArrayList<FEPLine>) new NetworkLoader(LDSFile, loopFile).getFEPLines();
+        hwyStatusWriter = new HighwayStatusWriter(hostName, portNum);
+    }
+
+    public void writeToFEP() {
+        try {
+            hwyStatusWriter.write(toXML());
+        } catch (IOException ex) {
+            Logger.getLogger(Network.class.getName()).log(Level.SEVERE, null, ex);
+        }
+    }
+
+    public String toXML() {
+        String xml = null;
+        try {
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            Document theDoc = builder.newDocument();
+
+            Element networkElement = theDoc.createElement(XML_TAGS.NETWORK.tag);
+            theDoc.appendChild(networkElement);
+
+            for (FEPLine line : lines) {
+                line.toXML(networkElement);
+            }
+
+            Transformer tf = TransformerFactory.newInstance().newTransformer();
+
+            tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+            tf.setOutputProperty(OutputKeys.INDENT, "yes");
+            tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+
+            Writer out = new StringWriter();
+            tf.transform(new DOMSource(theDoc), new StreamResult(out));
+            xml = out.toString();
+            out.close();
+        } catch (Exception ex) {
+            Logger.getLogger(Network.class.getName()).log(Level.SEVERE, null, ex);
+        }
+        return xml;
+
+    }
+
+    private static enum XML_TAGS {
+
+        NETWORK("Network");
+
+        String tag;
+
+        private XML_TAGS(String n) {
+            tag = n;
+        }
+    }
+}
Index: /branches/trunk/src/atmsdriver/ExchangeReader.java
===================================================================
--- /branches/trunk/src/atmsdriver/ExchangeReader.java	(revision 82)
+++ /branches/trunk/src/atmsdriver/ExchangeReader.java	(revision 82)
@@ -0,0 +1,280 @@
+package atmsdriver;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ *
+ * @author John A Torres
+ */
+public class ExchangeReader {
+	/** Error Log **/
+	private static Logger ATMSDriverLogger = Logger.getLogger("atmsdriver");
+	
+	/** A SAX Handler that is used to parse received Incident Status Node. **/
+	private IncidentStatusHandler ish = null;
+	
+	/** The current networkId **/
+	private int networkId = 1;
+	
+	/** The Paramics Simulation Info for the most recent incident read **/
+	private ExchangeInfo exInfo = null;
+	
+	/** Value (seconds since 1/1/1970) of input file's last modification time. */
+	private long lastModified = 0;
+	
+	/**
+	 * Constructor.
+	 */
+	public ExchangeReader() 
+	{		
+		ish = new IncidentStatusHandler();
+	}
+	
+	/**
+	 * This method parses the received XML node with the local CameraStatusHandler.
+	 * All updated camera information is sent to the ParamicsSimulationManager.
+	 * 
+	 * If a successful read of the file occurs, the file is written with an empty string
+	 * and the date of the last modification is stored.
+	 *
+	 * @param filename The file to check for message in.
+	 * @return A ParamicsSimulationInfo object containing the file's information
+	 * 		   A null pointer on:
+	 * 		     - The file does not exist
+	 * 		     - No new modification
+	 * 		     - An error opening file 		  
+	 *           - An empty file
+	 *           - An error parsing the file
+	 *           
+	 *         The caller is able to call this function to check if there are any new messages
+	 *         in the file.  If there are, a PSI object is returned.  If there aren't any new
+	 *         messages, a null pointer is returned.
+	 */
+	public ExchangeInfo parse(String filename) 
+	{	
+		ExchangeInfo exInfo = null;
+		
+		File f = new File(filename);
+		BufferedReader r = null;
+		
+		// File does not exist: No information
+		if (!(f.exists()))
+		{
+			return null;
+		}
+		
+		// File not modified: No new information
+		if (f.lastModified() <= lastModified)
+		{
+			return null;
+		}
+		
+		try 
+		{
+			// Try to open the file
+			r = new BufferedReader(new FileReader(f));
+			
+			// Read the file to the end
+			StringBuilder xml = new StringBuilder("");
+			String line = r.readLine();
+			while (line != null)
+			{
+				xml.append(line + "\n");
+				line = r.readLine();
+			}
+			
+			// If the file has contents in it, read them and returned a PSI describing the contents
+			if(xml.length() > 0) 
+			{
+				// Parse the file
+				SAXParserFactory.newInstance().newSAXParser().parse(new InputSource(new StringReader(xml.toString())), ish);
+                                exInfo = new ExchangeInfo(networkId, xml.toString());
+			}
+			else if (xml.length() == 0)
+			{
+				lastModified = modifyFile(f);
+				r.close();
+			}
+		}
+		catch (FileNotFoundException fnfe)
+		{
+			ATMSDriverLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					filename + " dissapeared before reading.", fnfe);
+			exInfo = null;
+		}
+		catch (IOException ioe)
+		{
+			ATMSDriverLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					"Error while reading file " + filename + ".", ioe);
+			exInfo = null;
+		}
+		catch (SAXException saxe)
+		{
+			ATMSDriverLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					"Error while parsing file " + filename + ".", saxe);
+			exInfo = null;
+		}
+		catch (ParserConfigurationException pce)
+		{
+			ATMSDriverLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					"Error while configuring parser.", pce);
+		}
+		
+		// If a incident was read
+		if (exInfo != null)
+		{
+			lastModified = modifyFile(f);
+			try
+			{
+				r.close();
+			}
+			catch (IOException e)
+			{
+				ATMSDriverLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+						"Error while closing file" + filename + ".", e);
+			}			
+		}
+		
+		// Return no object if there was an error while reading, or the psi created from
+		// parsing the file if the operation was successful.
+		return exInfo;
+	}
+	
+	private long modifyFile(File f)
+	{
+		FileWriter w = null;
+		
+		// Write to the file to show that it was read.
+		try
+		{
+			w = new FileWriter(f);
+			w.write("");
+			w.close();
+		}
+		catch (IOException e)
+		{
+			ATMSDriverLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "parse", 
+					"Error while writing to file " + f.getName() + " to show that file was read.", e);
+		}
+		
+		// Save the last modified time
+		return f.lastModified();
+	}
+
+    /**
+     * Internal SAX Handler used to parse the Incident Status Document read by
+     * the remote Status Reader.  The schema for this document is: <br/>
+     *
+	 * <CAD_DATA><br>
+	 *    <Basic><br>
+	 *       <Comm_Interval/><br/>
+	 *       <Network_ID/><br/>
+	 *       <Simulation/><br/>
+	 *       <Incident/><br/>
+	 *    </Basic>
+	 *
+	 *    <Simulation_Data>
+	 *       <Simulation_speed/><br/>
+	 *       <CAD_clock><br/>
+	 *          <hour/><br/>
+	 *          <minute/><br/>
+	 *          <second/><br/>
+	 *          <Location><br/>
+	 *       </CAD_clock><br/>
+	 *    </Simulation_Data>
+	 *    
+	 *    <CAD_Incidents>
+	 *       <Incident><br/>
+	 *          <Identifier/><br/>
+	 *          <Status/><br/>
+	 *          <Location><br/>
+	 *              <Route/><br/>
+	 *              <Direction/><br/>
+	 *              <Location_type/><br/>
+	 *              <Postmile/><br/>
+	 *          </Location><br/>
+	 *          <Incident_type/><br/>
+	 *          <Lanes><br/>
+	 *             <Lane_number/><br/>
+	 *             ...
+	 *          </Lanes><br/>
+	 *       </Incident><br/>
+	 *       ...
+	 *    </CAD_Incidents>   
+	 *    
+	 *    <Management>
+	 *       <Diversion>
+     *          <Diversion_path>
+     *             <Identifier/>
+     *             <Percentage/>
+     *          <Diversion_path>
+     *          ...
+     *       </Diversion>
+     *       ...
+	 *    </Management>
+	 *  
+	 * </CAD_DATA>
+     */	
+	protected class IncidentStatusHandler extends DefaultHandler 
+	{
+		private final String NETWORK_ID   = "Network_ID";
+		
+		/** A buffer for reading characters **/
+		private StringBuffer parsedValue  = new StringBuffer();
+
+		public void startDocument() 
+		{ 
+		}	
+		
+		/** Appends characters to the xmlMessage and parsedValue buffers **/
+		public void characters(char[] ch, int start, int length) 
+		{
+			parsedValue.append(new String(ch, start, length).trim());
+		}
+		
+	    public void startElement (String uri, String localName, String qName, Attributes attributes)
+			throws SAXException
+		{
+	    }
+		
+		public void endElement(String uri, String localName, String qName)  
+		{
+			if(qName.equals(NETWORK_ID)) { networkId = Integer.parseInt(parsedValue.toString()); }
+			
+			parsedValue.setLength(0);
+		}	
+		
+		public void error(SAXParseException e) 
+		{
+			ATMSDriverLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "error", 
+					"Error in parsing received incident status.", e);
+		}
+		
+		public void fatalError(SAXParseException e) 
+		{
+			ATMSDriverLogger.logp(Level.SEVERE, "ParamicsIncidentReader", "fatalError", 
+					"Fatal error in parsing received incident status.", e);
+		}
+		
+		public void warning(SAXParseException e) 
+		{
+			ATMSDriverLogger.logp(Level.WARNING, "ParamicsIncidentReader", "warning", 
+					"Warning in parsing received incident status.", e);
+		}		
+	}
+}
Index: /branches/FEPSimulator/DataPacker.h
===================================================================
--- /branches/FEPSimulator/DataPacker.h	(revision 80)
+++ /branches/FEPSimulator/DataPacker.h	(revision 82)
@@ -14,5 +14,5 @@
 
 // Include dependencies
-#include "network.h";
+#include "network.h"
 #include <iostream>
 #include <string.h>
Index: /branches/FEPSimulator/nbproject/Makefile-impl.mk
===================================================================
--- /branches/FEPSimulator/nbproject/Makefile-impl.mk	(revision 77)
+++ /branches/FEPSimulator/nbproject/Makefile-impl.mk	(revision 82)
@@ -25,5 +25,5 @@
 
 # Project Name
-PROJECTNAME=fep_rpc_client
+PROJECTNAME=FEPSimulator
 
 # Active Configuration
Index: /branches/FEPSimulator/nbproject/Makefile-Debug.mk
===================================================================
--- /branches/FEPSimulator/nbproject/Makefile-Debug.mk	(revision 80)
+++ /branches/FEPSimulator/nbproject/Makefile-Debug.mk	(revision 82)
@@ -22,6 +22,6 @@
 
 # Macros
-CND_PLATFORM=GNU-Linux-x86
-CND_DLIB_EXT=so
+CND_PLATFORM=GNU-MacOSX
+CND_DLIB_EXT=dylib
 CND_CONF=Debug
 CND_DISTDIR=dist
@@ -37,5 +37,5 @@
 OBJECTFILES= \
 	${OBJECTDIR}/DataPacker.o \
-	${OBJECTDIR}/FEPClient.o \
+	${OBJECTDIR}/FEPSim.o \
 	${OBJECTDIR}/NetworkReader.o \
 	${OBJECTDIR}/fep_clnt.o \
@@ -57,15 +57,15 @@
 
 # Link Libraries and Options
-LDLIBSOPTIONS=tinyxml/tinyxml.a
+LDLIBSOPTIONS=tinyxml/libosxtinyxml.a
 
 # Build Targets
 .build-conf: ${BUILD_SUBPROJECTS}
-	"${MAKE}"  -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fep_rpc_client
+	"${MAKE}"  -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fepsimulator
 
-${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fep_rpc_client: tinyxml/tinyxml.a
+${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fepsimulator: tinyxml/libosxtinyxml.a
 
-${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fep_rpc_client: ${OBJECTFILES}
+${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fepsimulator: ${OBJECTFILES}
 	${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}
-	${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fep_rpc_client ${OBJECTFILES} ${LDLIBSOPTIONS}
+	${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fepsimulator ${OBJECTFILES} ${LDLIBSOPTIONS}
 
 ${OBJECTDIR}/DataPacker.o: DataPacker.cpp 
@@ -74,8 +74,8 @@
 	$(COMPILE.cc) -g -Itinyxml -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/DataPacker.o DataPacker.cpp
 
-${OBJECTDIR}/FEPClient.o: FEPClient.cpp 
+${OBJECTDIR}/FEPSim.o: FEPSim.cpp 
 	${MKDIR} -p ${OBJECTDIR}
 	${RM} "$@.d"
-	$(COMPILE.cc) -g -Itinyxml -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/FEPClient.o FEPClient.cpp
+	$(COMPILE.cc) -g -Itinyxml -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/FEPSim.o FEPSim.cpp
 
 ${OBJECTDIR}/NetworkReader.o: NetworkReader.cpp 
@@ -100,5 +100,5 @@
 .clean-conf: ${CLEAN_SUBPROJECTS}
 	${RM} -r ${CND_BUILDDIR}/${CND_CONF}
-	${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fep_rpc_client
+	${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fepsimulator
 
 # Subprojects
Index: /branches/FEPSimulator/nbproject/Makefile-variables.mk
===================================================================
--- /branches/FEPSimulator/nbproject/Makefile-variables.mk	(revision 77)
+++ /branches/FEPSimulator/nbproject/Makefile-variables.mk	(revision 82)
@@ -8,11 +8,11 @@
 CND_DISTDIR=dist
 # Debug configuration
-CND_PLATFORM_Debug=GNU-Linux-x86
-CND_ARTIFACT_DIR_Debug=dist/Debug/GNU-Linux-x86
-CND_ARTIFACT_NAME_Debug=fep_rpc_client
-CND_ARTIFACT_PATH_Debug=dist/Debug/GNU-Linux-x86/fep_rpc_client
-CND_PACKAGE_DIR_Debug=dist/Debug/GNU-Linux-x86/package
-CND_PACKAGE_NAME_Debug=feprpcclient.tar
-CND_PACKAGE_PATH_Debug=dist/Debug/GNU-Linux-x86/package/feprpcclient.tar
+CND_PLATFORM_Debug=GNU-MacOSX
+CND_ARTIFACT_DIR_Debug=dist/Debug/GNU-MacOSX
+CND_ARTIFACT_NAME_Debug=fepsimulator
+CND_ARTIFACT_PATH_Debug=dist/Debug/GNU-MacOSX/fepsimulator
+CND_PACKAGE_DIR_Debug=dist/Debug/GNU-MacOSX/package
+CND_PACKAGE_NAME_Debug=fepsimulator.tar
+CND_PACKAGE_PATH_Debug=dist/Debug/GNU-MacOSX/package/fepsimulator.tar
 # Release configuration
 CND_PLATFORM_Release=GNU-Linux-x86
Index: /branches/FEPSimulator/nbproject/configurations.xml
===================================================================
--- /branches/FEPSimulator/nbproject/configurations.xml	(revision 80)
+++ /branches/FEPSimulator/nbproject/configurations.xml	(revision 82)
@@ -6,5 +6,5 @@
                    projectFiles="true">
       <itemPath>DataPacker.h</itemPath>
-      <itemPath>FEPClient.h</itemPath>
+      <itemPath>FEPSim.h</itemPath>
       <itemPath>NetworkReader.h</itemPath>
       <itemPath>fep.h</itemPath>
@@ -19,5 +19,5 @@
                    projectFiles="true">
       <itemPath>DataPacker.cpp</itemPath>
-      <itemPath>FEPClient.cpp</itemPath>
+      <itemPath>FEPSim.cpp</itemPath>
       <itemPath>NetworkReader.cpp</itemPath>
       <itemPath>fep_clnt.c</itemPath>
@@ -52,5 +52,5 @@
         <linkerTool>
           <linkerLibItems>
-            <linkerLibFileItem>tinyxml/tinyxml.a</linkerLibFileItem>
+            <linkerLibFileItem>tinyxml/libosxtinyxml.a</linkerLibFileItem>
           </linkerLibItems>
         </linkerTool>
@@ -60,7 +60,7 @@
       <item path="DataPacker.h" ex="false" tool="3" flavor2="0">
       </item>
-      <item path="FEPClient.cpp" ex="false" tool="1" flavor2="0">
+      <item path="FEPSim.cpp" ex="false" tool="1" flavor2="0">
       </item>
-      <item path="FEPClient.h" ex="false" tool="3" flavor2="0">
+      <item path="FEPSim.h" ex="false" tool="3" flavor2="0">
       </item>
       <item path="NetworkReader.cpp" ex="false" tool="1" flavor2="0">
@@ -101,7 +101,7 @@
       <item path="DataPacker.h" ex="false" tool="3" flavor2="0">
       </item>
-      <item path="FEPClient.cpp" ex="false" tool="1" flavor2="0">
+      <item path="FEPSim.cpp" ex="false" tool="1" flavor2="0">
       </item>
-      <item path="FEPClient.h" ex="false" tool="3" flavor2="0">
+      <item path="FEPSim.h" ex="false" tool="3" flavor2="0">
       </item>
       <item path="NetworkReader.cpp" ex="false" tool="1" flavor2="0">
Index: /branches/FEPSimulator/nbproject/private/configurations.xml
===================================================================
--- /branches/FEPSimulator/nbproject/private/configurations.xml	(revision 80)
+++ /branches/FEPSimulator/nbproject/private/configurations.xml	(revision 82)
@@ -6,5 +6,5 @@
       <toolsSet>
         <developmentServer>localhost</developmentServer>
-        <platform>2</platform>
+        <platform>4</platform>
       </toolsSet>
       <dbx_gdbdebugger version="1">
@@ -28,6 +28,8 @@
           <runcommandpicklistitem>"${OUTPUT_PATH}" localhost networkFile.txt</runcommandpicklistitem>
           <runcommandpicklistitem>"${OUTPUT_PATH}" 192.168.251.27 networkFile.txt</runcommandpicklistitem>
+          <runcommandpicklistitem>"${OUTPUT_PATH}" 192.168.251.27</runcommandpicklistitem>
+          <runcommandpicklistitem>"${OUTPUT_PATH}" 192.168.251.27 8080</runcommandpicklistitem>
         </runcommandpicklist>
-        <runcommand>"${OUTPUT_PATH}" 192.168.251.27 networkFile.txt</runcommand>
+        <runcommand>"${OUTPUT_PATH}" 192.168.251.27 8080</runcommand>
         <rundir></rundir>
         <buildfirst>true</buildfirst>
Index: /branches/FEPSimulator/nbproject/Package-Debug.bash
===================================================================
--- /branches/FEPSimulator/nbproject/Package-Debug.bash	(revision 77)
+++ /branches/FEPSimulator/nbproject/Package-Debug.bash	(revision 82)
@@ -7,14 +7,14 @@
 # Macros
 TOP=`pwd`
-CND_PLATFORM=GNU-Linux-x86
+CND_PLATFORM=GNU-MacOSX
 CND_CONF=Debug
 CND_DISTDIR=dist
 CND_BUILDDIR=build
-CND_DLIB_EXT=so
+CND_DLIB_EXT=dylib
 NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging
 TMPDIRNAME=tmp-packaging
-OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fep_rpc_client
-OUTPUT_BASENAME=fep_rpc_client
-PACKAGE_TOP_DIR=feprpcclient/
+OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/fepsimulator
+OUTPUT_BASENAME=fepsimulator
+PACKAGE_TOP_DIR=fepsimulator/
 
 # Functions
@@ -61,5 +61,5 @@
 # Copy files and create directories and links
 cd "${TOP}"
-makeDirectory "${NBTMPDIR}/feprpcclient/bin"
+makeDirectory "${NBTMPDIR}/fepsimulator/bin"
 copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755
 
@@ -67,7 +67,7 @@
 # Generate tar file
 cd "${TOP}"
-rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/feprpcclient.tar
+rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/fepsimulator.tar
 cd ${NBTMPDIR}
-tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/feprpcclient.tar *
+tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/fepsimulator.tar *
 checkReturnCode
 
Index: /branches/FEPSimulator/NetworkReader.cpp
===================================================================
--- /branches/FEPSimulator/NetworkReader.cpp	(revision 80)
+++ /branches/FEPSimulator/NetworkReader.cpp	(revision 82)
@@ -5,7 +5,7 @@
  * @param networkFileName input xml file
  */
-NetworkReader::NetworkReader(const char * networkFileName) {
+NetworkReader::NetworkReader(const char * xml) {
     ldsIndex = 0;
-    loadLines(networkFileName);
+    loadLines(xml);
 }
 
@@ -108,11 +108,8 @@
  * @param networkFileName the input xml file
  */
-void NetworkReader::loadLines(const char * networkFileName) {
+void NetworkReader::loadLines(const char * xml) {
     // Load network xml file
-    TiXmlDocument doc(networkFileName);
-    if (!doc.LoadFile()) {
-        cerr << "TiXmlDocument did not load network file..." << endl;
-        return;
-    }
+    TiXmlDocument doc;
+    doc.Parse((const char*)xml, 0, TIXML_ENCODING_UTF8);
 
     // grab <Network> element
Index: /branches/FEPSimulator/FEPSim.cpp
===================================================================
--- /branches/FEPSimulator/FEPSim.cpp	(revision 82)
+++ /branches/FEPSimulator/FEPSim.cpp	(revision 82)
@@ -0,0 +1,206 @@
+#include "FEPSim.h"
+
+/**
+ * Constructor
+ * 
+ * @param host The host rpc server ip address
+ * @param networkFile the xml network file
+ */
+FEPSim::FEPSim(char * ATMShost, char * xml) {
+    networkReader = new NetworkReader(xml);
+    this->ATMSHost = ATMShost;
+    updateATMS();
+}
+
+/**
+ * Destructor
+ */
+FEPSim::~FEPSim() {
+    cout << "Destroying client..." << endl;
+    clnt_destroy(clnt);
+}
+
+/**
+ * Handler for the ATMS RPC Response (to the client RPC Call)
+ * @param response pointer to fep_reply struct
+ */
+void FEPSim::handleCallResponse(void *response) {
+    /* If ATMS reply call fails */
+    if (response == NULL) {
+        clnt_perror(clnt, "RPC call failed");
+    }/* If ATMS reply is successful */
+    else {
+        cout << "Successful RPC call to ATMS..." << endl;
+    }
+}
+
+/**
+ * Sends an fep_reply for every line in the FEP.
+ */
+void FEPSim::updateATMS() {
+    int i, j; // i == line_index, j == lds_index
+    void *rv;
+    vector<FEP_LINE*> lines = networkReader->getLines();
+    vector<STATION*> ldsMap = networkReader->getStations();
+
+    // Send one reply for every "line" in the FEP
+    for (i = 0; i < lines.size(); i++) {
+        fep_reply fepReply;
+        cout << "Sending fepReply for line #" << lines.at(i)->lineNum << endl;
+        // populate reply
+        fepReply.reply = SHORTPOLL;
+        fepReply.schedule = lines.at(i)->schedule;
+        fepReply.lineinfo = lines.at(i)->lineInfo;
+        fepReply.kind = (enum polltype) 0;
+        fepReply.flag = (enum replykind) 0;
+
+        /***********************************
+                 This is an update to an extern, this should happen on the Java driver side??
+        lines.at(i).schedleSeq += 1;
+        lines.at(i).globalSeq += 51;
+         */
+
+        fepReply.schedule_sequence = lines.at(i)->schedleSeq;
+        fepReply.global_sequence = lines.at(i)->globalSeq;
+        /************************************
+                 Need to find out what appropriate schedule time is: look at uci_unix_simulation_time src code
+        fepReply.schedule_time =
+                uci_unix_simulation_time(uci_simulation_time());	// GMT time
+         */
+        fepReply.schedule_time = time(NULL);
+
+        fepReply.user_info1 = lines.at(i)->lineNum;
+        fepReply.user_info2 = lines.at(i)->lineNum;
+        fepReply.system_key = lines.at(i)->systemKey;
+
+        fepReply.answers.size = 1;
+        fepReply.answers.fep_answer_list_u.shortp.count = 1;
+
+        /* for each LDS in the Line.... (constructs the short_answer message) */
+        for (j = 0; j < lines.at(i)->lds.size(); j++) {
+            fep_shortanswer fsa;
+            int index = lines.at(i)->ldsIndex.at(j);
+            cout << "LDS index: " << index << endl;
+            // msg: oa, od, ldsMap.at(index).dataPack, od, ff
+            fsa.msg.message_len = ldsMap.at(index)->length + 2;
+            fsa.msg.message[0] = 0x0d;
+            fsa.msg.message[1] = 0x0a;
+            for (int k = 0; k < ldsMap.at(index)->length; k++)
+                fsa.msg.message[2 + k] = ldsMap.at(index)->dataPack[k];
+            int aa = ldsMap.at(index)->length;
+            fsa.msg.message[2 + aa] = 0x0d;
+            fsa.msg.message[3 + aa] = 0xff; //????????????? warning ?????
+
+            // info
+            fsa.info.poll_error_count = 0;
+            /***************************************
+                     Need to find out polltime uci time function src code
+            fsa.info.poll_time = uci_unix_simulation_time(uci_simulation_time());
+             */
+            fsa.info.poll_user_info1 = ldsMap.at(index)->drop; // drop number
+            fsa.info.poll_user_info2 = 1; //always 1
+            fsa.info.retries = 0;
+            fsa.info.status = (enum replystatus) 1;
+
+            //fepReply.answers.fep_answer_list_u.shortp.answers[j +1] = fsa;
+            fepReply.answers.fep_answer_list_u.shortp.answers[0] = fsa;
+
+            // send out data
+            printf("Transferring line=%d, lds_drop_no=%d...\n", lines.at(i)->lineNum, ldsMap.at(index)->drop);
+            rv = fep_reply_xfer_32(&fepReply, clnt);
+
+            /* Handle ATMS response to RPC Call */
+            printf("Handling ATMS response...\n");
+            handleCallResponse(rv);
+        }
+    }
+}
+
+/**
+ * Creates the RPC Client. If not successful, exit with status 1.
+ * @param host rpc server ip
+ */
+void FEPSim::createClient(char * host) {
+    /* Create RPC Client to communicate with ATMS */
+    cout << "Creating RPC Client" << endl;
+    clnt = clnt_create(host, /*100090,*/ 103121, 32, "tcp");
+    cout << "Client created" << endl;
+    /* Check if client creation failed */
+    if (clnt == (CLIENT *) NULL) {
+        cerr << "Can't create client to " << host << endl;
+        exit(1);
+    }
+}
+
+/**
+ * Main driver for ATMSCommunicator. Creates an RPC Client from command line args.
+ * @param argc
+ * @param argv
+ * @return 
+ */
+int main(int argc, char *argv[]) {
+
+    int sockfd, newsockfd, portno, clilen;
+    char buffer[BUFF_SIZE];
+    struct sockaddr_in serv_addr, cli_addr;
+    int n;
+    
+    char *FEPSimHost = argv[1];
+    portno = atoi(argv[2]);
+
+    /* First call to socket() function */
+    sockfd = socket(AF_INET, SOCK_STREAM, 0);
+
+    if (sockfd < 0) {
+        perror("ERROR opening socket");
+        exit(1);
+    }
+
+    /* Initialize socket structure */
+    bzero((char *) &serv_addr, sizeof (serv_addr));
+
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_addr.s_addr = INADDR_ANY;
+    serv_addr.sin_port = htons(portno);
+
+    /* Now bind the host address using bind() call.*/
+    if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0) {
+        perror("ERROR on binding");
+        exit(1);
+    }
+
+    /* Now start listening for the clients, here process will
+     * go in sleep mode and will wait for the incoming connection
+     */
+
+    listen(sockfd, 5);
+    clilen = sizeof (cli_addr);
+
+    /* Accept actual connection from the client */
+    while(1) {
+        newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
+
+        if (newsockfd < 0) {
+            perror("ERROR on accept");
+            exit(1);
+        }
+
+        /* If connection is established then start communicating */
+        bzero(buffer, BUFF_SIZE);
+        
+        // NEEDS OUTER LOOP TO GET WHOLE MESSAGE FROM TCP CONN
+        n = read(newsockfd, buffer, sizeof(buffer));
+
+        if (n < 0) {
+            perror("ERROR reading from socket");
+            exit(1);
+        }
+        
+        /* Create RPC Client to send an fep_reply to ATMS */
+
+        FEPSim *client = new FEPSim(FEPSimHost, buffer);
+        delete client;
+    }
+
+    return 0;
+}
Index: /branches/FEPSimulator/FEPSim.h
===================================================================
--- /branches/FEPSimulator/FEPSim.h	(revision 82)
+++ /branches/FEPSimulator/FEPSim.h	(revision 82)
@@ -0,0 +1,64 @@
+/* 
+ * File: FEPSim.h
+ * 
+ * The FEPSim is an RPC Client which transfers network data to the
+ * ATMS Server.
+ *
+ * An FEPSim is created every 30 seconds, and an fep_reply structure
+ * for every FEP_LINE_LDS is transferred to the ATMS through an RPC Call.
+ * After the FEPSim has transferred all fep_replys, it is destroyed.
+ *
+ * An FEPSim is script-like in nature. There are no public methods other than
+ * the constructor. To construct an FEPSim, an input file (containing network 
+ * data in xml form) and a host server_ip (for the ATMS) are necessary. The 
+ * format of the xml input file can be fount in "networkReader.cpp" source file.
+ *
+ * @author John A. Torres
+ * @version 9/8/2017
+ */
+
+// Include guard
+#ifndef __FEPSIM_H_INCLUDED__
+#define __FEPSIM_H_INCLUDED__
+
+// Forward declared dependencies
+class NetworkReader;
+
+// Included dependencies
+#include "fep.h"
+#include <iostream>
+#include <stdio.h>
+#include <stdlib.h>
+#include "time.h"
+#include "NetworkReader.h"
+#include <netdb.h>
+#include <sys/types.h> 
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <unistd.h>
+
+const int BUFF_SIZE = 1000000;
+
+class FEPSim
+{
+	public:
+        /* members */
+		CLIENT *clnt; // RPC Client
+
+        /* methods */
+		FEPSim(char * host, char * networkFile); // Constructor
+		~FEPSim(); // Destructor
+
+	private:
+        /* members */
+        NetworkReader *networkReader;
+        char * ATMSHost;
+        
+        /* methods */
+        void handleCallResponse(void *response); //
+        void createClient(char *host);
+        void updateATMS(); // updates ATMS
+
+};
+
+#endif // __FEPSIM_H_INCLUDED__
Index: anches/FEPSimulator/FEPClient.cpp
===================================================================
--- /branches/FEPSimulator/FEPClient.cpp	(revision 80)
+++ 	(revision )
@@ -1,160 +1,0 @@
-#include "FEPClient.h"
-
-/**
- * Constructor
- * 
- * @param host The host rpc server ip address
- * @param networkFile the xml network file
- */
-FEPClient::FEPClient(char * host, char * networkFile) {
-    networkReader = new NetworkReader(networkFile);
-    createClient(host);
-    updateATMS();
-}
-
-/**
- * Destructor
- */
-FEPClient::~FEPClient() {
-    cout << "Destroying client..." << endl;
-    clnt_destroy(clnt);
-}
-
-/**
- * Handler for the ATMS RPC Response (to the client RPC Call)
- * @param response pointer to fep_reply struct
- */
-void FEPClient::handleCallResponse(void *response) {
-    /* If ATMS reply call fails */
-    if (response == NULL) {
-        clnt_perror(clnt, "RPC call failed");
-    }        /* If ATMS reply is successful */
-    else {
-        cout << "Successful RPC call to ATMS..." << endl;
-    }
-}
-
-/**
- * Sends an fep_reply for every line in the FEP.
- */
-void FEPClient::updateATMS() {
-    int i, j; // i == line_index, j == lds_index
-    void *rv;
-
-    vector<FEP_LINE*> lines = networkReader->getLines();
-    vector<STATION*> ldsMap = networkReader->getStations();
-
-    // Send one reply for every "line" in the FEP
-    for (i = 0; i < lines.size(); i++) {
-        fep_reply fepReply;
-        cout << "Sending fepReply for line #" << lines.at(i)->lineNum << endl;
-        // populate reply
-        fepReply.reply = SHORTPOLL;
-        fepReply.schedule = lines.at(i)->schedule;
-        fepReply.lineinfo = lines.at(i)->lineInfo;
-        fepReply.kind = (enum polltype) 0;
-        fepReply.flag = (enum replykind) 0;
-
-        /***********************************
-                 This is an update to an extern, this should happen on the Java driver side??
-        lines.at(i).schedleSeq += 1;
-        lines.at(i).globalSeq += 51;
-         */
-
-        fepReply.schedule_sequence = lines.at(i)->schedleSeq;
-        fepReply.global_sequence = lines.at(i)->globalSeq;
-        /************************************
-                 Need to find out what appropriate schedule time is: look at uci_unix_simulation_time src code
-        fepReply.schedule_time =
-                uci_unix_simulation_time(uci_simulation_time());	// GMT time
-         */
-        fepReply.schedule_time = time(NULL);
-
-        fepReply.user_info1 = lines.at(i)->lineNum;
-        fepReply.user_info2 = lines.at(i)->lineNum;
-        fepReply.system_key = lines.at(i)->systemKey;
-
-        fepReply.answers.size = 1;
-        fepReply.answers.fep_answer_list_u.shortp.count = 1;
-
-        /* for each LDS in the Line.... (constructs the short_answer message) */
-        for (j = 0; j < lines.at(i)->lds.size(); j++) {
-            fep_shortanswer fsa;
-            int index = lines.at(i)->ldsIndex.at(j);
-            cout << "LDS index: " << index << endl;
-            // msg: oa, od, ldsMap.at(index).dataPack, od, ff
-            fsa.msg.message_len = ldsMap.at(index)->length + 2;
-            fsa.msg.message[0] = 0x0d;
-            fsa.msg.message[1] = 0x0a;
-            for (int k = 0; k < ldsMap.at(index)->length; k++)
-                fsa.msg.message[2 + k] = ldsMap.at(index)->dataPack[k];
-            int aa = ldsMap.at(index)->length;
-            fsa.msg.message[2 + aa] = 0x0d;
-            fsa.msg.message[3 + aa] = 0xff; //????????????? warning ?????
-
-            // info
-            fsa.info.poll_error_count = 0;
-            /***************************************
-                     Need to find out polltime uci time function src code
-            fsa.info.poll_time = uci_unix_simulation_time(uci_simulation_time());
-             */
-            fsa.info.poll_user_info1 = ldsMap.at(index)->drop; // drop number
-            fsa.info.poll_user_info2 = 1; //always 1
-            fsa.info.retries = 0;
-            fsa.info.status = (enum replystatus) 1;
-
-            //fepReply.answers.fep_answer_list_u.shortp.answers[j +1] = fsa;
-            fepReply.answers.fep_answer_list_u.shortp.answers[0] = fsa;
-
-            // send out data
-            printf("Transferring line=%d, lds_drop_no=%d...\n", lines.at(i)->lineNum, ldsMap.at(index)->drop);
-            rv = fep_reply_xfer_32(&fepReply, clnt);
-
-            /* Handle ATMS response to RPC Call */
-            printf("Handling ATMS response...\n");
-            handleCallResponse(rv);
-        }
-    }
-}
-
-/**
- * Creates the RPC Client. If not successful, exit with status 1.
- * @param host rpc server ip
- */
-void FEPClient::createClient(char * host) {
-    /* Create RPC Client to communicate with ATMS */
-    cout << "Creating RPC Client" << endl;
-    clnt = clnt_create(host, /*100090,*/ 103121, 32, "tcp");
-    cout << "Client created" << endl;
-    /* Check if client creation failed */
-    if (clnt == (CLIENT *) NULL) {
-        cerr << "Can't create client to " << host << endl;
-        exit(1);
-    }
-}
-
-/**
- * Main driver for ATMSCommunicator. Creates an RPC Client from command line args.
- * @param argc
- * @param argv
- * @return 
- */
-int main(int argc, char *argv[]) {
-
-    char *host;
-    char *networkFile;
-
-    if (argc < 3) {
-        cout << "usage:  " << argv[0] << " server_host networkFile" << endl;
-        exit(1);
-    }
-
-    /* Create RPC Client to send an fep_reply to ATMS */
-    host = argv[1];
-    networkFile = argv[2];
-
-    FEPClient *client = new FEPClient(host, networkFile);
-    delete client;
-
-    return 0;
-}
Index: anches/FEPSimulator/FEPClient.h
===================================================================
--- /branches/FEPSimulator/FEPClient.h	(revision 80)
+++ 	(revision )
@@ -1,55 +1,0 @@
-/* 
- * File: FEPClient.h
- * 
- * The FEPClient is an RPC Client which transfers network data to the
- * ATMS Server.
- *
- * An FEPClient is created every 30 seconds, and an fep_reply structure
- * for every FEP_LINE_LDS is transferred to the ATMS through an RPC Call.
- * After the FEPClient has transferred all fep_replys, it is destroyed.
- *
- * An FEPClient is script-like in nature. There are no public methods other than
- * the constructor. To construct an FEPClient, an input file (containing network 
- * data in xml form) and a host server_ip (for the ATMS) are necessary. The 
- * format of the xml input file can be fount in "networkReader.cpp" source file.
- *
- * @author John A. Torres
- * @version 9/8/2017
- */
-
-// Include guard
-#ifndef __FEPCLIENT_H_INCLUDED__
-#define __FEPCLIENT_H_INCLUDED__
-
-// Forward declared dependencies
-class NetworkReader;
-
-// Included dependencies
-#include "fep.h"
-#include <iostream>
-#include <stdlib.h>
-#include "time.h"
-#include "NetworkReader.h"
-
-class FEPClient
-{
-	public:
-        /* members */
-		CLIENT *clnt; // RPC Client
-
-        /* methods */
-		FEPClient(char * host, char * networkFile); // Constructor
-		~FEPClient(); // Destructor
-
-	private:
-        /* members */
-        NetworkReader *networkReader;
-
-        /* methods */
-		void handleCallResponse(void *response); //
-		void createClient(char *host);
-        void updateATMS(); // updates ATMS
-
-};
-
-#endif // __FEPCLIENT_H_INCLUDED__
