Index: trunk/src/tmcsim/application.properties
===================================================================
--- trunk/src/tmcsim/application.properties	(revision 234)
+++ trunk/src/tmcsim/application.properties	(revision 237)
@@ -1,5 +1,5 @@
-#Thu, 23 Nov 2017 17:06:06 -0800
+#Wed, 13 Dec 2017 04:11:31 -0800
 
-Application.revision=232
+Application.revision=234
 
 Application.buildnumber=88
Index: trunk/src/atmsdriver/model/Highway.java
===================================================================
--- trunk/src/atmsdriver/model/Highway.java	(revision 212)
+++ trunk/src/atmsdriver/model/Highway.java	(revision 237)
@@ -1,4 +1,5 @@
 package atmsdriver.model;
 
+import atmsdriver.model.Station.DIRECTION;
 import java.util.ArrayList;
 import java.util.List;
@@ -17,5 +18,5 @@
     /** The ordered list of stations (lane detector stations) on this highway */
     public final List<Station> stations;
-
+        
     /** Construct a highway 
      * 
@@ -28,3 +29,26 @@
         this.stations = stations;
     }
+    
+    /**
+     * 
+     */
+    public List<DIRECTION> getDirections()
+    {
+                    // Get available directions for route
+            ArrayList<DIRECTION> availDirs = new ArrayList<>();
+            for(Station stn : stations)
+            {
+                if(!availDirs.contains(stn.direction))
+                {
+                    availDirs.add(stn.direction);
+                }
+            }
+            return availDirs;
+    }
+    
+    @Override
+    public String toString()
+    {
+        return Integer.toString(this.routeNumber);
+    }
 }
Index: trunk/src/atmsdriver/model/Station.java
===================================================================
--- trunk/src/atmsdriver/model/Station.java	(revision 234)
+++ trunk/src/atmsdriver/model/Station.java	(revision 237)
@@ -2,4 +2,5 @@
 
 import atmsdriver.model.LoopDetector.DOTCOLOR;
+import java.util.ArrayList;
 import java.util.List;
 import org.w3c.dom.Document;
@@ -366,5 +367,5 @@
             return this.toString().substring(0, 1);
         }
-
+        
         public DIRECTION getOpposite()
         {
@@ -392,7 +393,16 @@
         public static DIRECTION toDirection(String letter)
         {
+            if(letter.indexOf(letter.charAt(0)) == -1)
+            {
+                return null;
+            }
             return values()[allLetters.indexOf(letter.charAt(0))];
         }
-
+    }
+    
+    @Override
+    public String toString()
+    {
+        return Integer.toString(this.ldsID);
     }
 }
Index: trunk/src/atmsdriver/model/Highways.java
===================================================================
--- trunk/src/atmsdriver/model/Highways.java	(revision 234)
+++ trunk/src/atmsdriver/model/Highways.java	(revision 237)
@@ -1,4 +1,6 @@
 package atmsdriver.model;
 
+import atmsdriver.batchbuilder.TrafficLaneEvent;
+import atmsdriver.model.LoopDetector.DOTCOLOR;
 import atmsdriver.model.Station.DIRECTION;
 import java.io.File;
@@ -520,4 +522,20 @@
         return result.toString();
     }
+    
+    /**
+     * Generates the route number list, used for user input validation.
+     * @return list of route numbers.
+     */
+    public List<Integer> getAllRouteNums()
+    {
+        ArrayList<Integer> routeNums = new ArrayList<>();
+        // add the route number for each highway to the list
+        for(Highway hwy : highways)
+        {
+            routeNums.add(hwy.routeNumber);
+        }
+        return routeNums;
+    }
+    
     /**
      * XML tags used in writeToXML()
@@ -535,3 +553,40 @@
         }
     }
+    
+    public void reset()
+    {
+        for(FEPLine line : lines)
+        {
+            for(Station stn : line.stations)
+            {
+                for(LoopDetector ld : stn.loops)
+                {
+                    ld.occ = 0;
+                    ld.vol = 0;
+                }
+            }
+        }
+    }
+    
+    public void applyTrafficLaneEvent(TrafficLaneEvent event)
+    {
+        Integer routeNum = event.routeNum;
+        Highway hwy = getHighwayByRouteNumber(routeNum);
+        for(Station stn: hwy.stations)
+        {
+            if(stn.equals(event.station))
+            {
+                for(LoopDetector ld : stn.loops)
+                {
+                    if(ld.equals(event.loopDetector))
+                    {
+                        ld.occ = event.color.occupancy();
+                        ld.vol = event.color.volume();
+                        break;
+                    }
+                }
+                break;
+            }
+        }
+    }
 }
Index: trunk/src/atmsdriver/batchbuilder/TrafficLaneEvent.java
===================================================================
--- trunk/src/atmsdriver/batchbuilder/TrafficLaneEvent.java	(revision 237)
+++ trunk/src/atmsdriver/batchbuilder/TrafficLaneEvent.java	(revision 237)
@@ -0,0 +1,45 @@
+package atmsdriver.batchbuilder;
+
+import atmsdriver.model.LoopDetector;
+import atmsdriver.model.LoopDetector.DOTCOLOR;
+import atmsdriver.model.Station;
+
+/**
+ *
+ * @author jtorres
+ */
+final public class TrafficLaneEvent implements Comparable
+{
+    final public Integer routeNum;
+    final public Station station;
+    final public LoopDetector loopDetector;
+    final public DOTCOLOR color;
+    
+    public TrafficLaneEvent(Integer routeNum, Station stn, LoopDetector loopDetector,
+            DOTCOLOR color)
+    {
+        this.routeNum = routeNum;
+        this.station = stn;
+        this.loopDetector = loopDetector;
+        this.color = color;
+    }
+
+    @Override
+    public int compareTo(Object o)
+    {
+        if(!(o instanceof TrafficLaneEvent))
+        {
+            return -1;
+        }
+        TrafficLaneEvent other = (TrafficLaneEvent) o;
+        if(other.station == this.station && other.routeNum == this.routeNum
+                && other.loopDetector == this.loopDetector)
+        {
+            return 0;
+        }
+        else
+        {
+            return -1;
+        }
+    }
+}
Index: trunk/src/atmsdriver/batchbuilder/TimeFrame.java
===================================================================
--- trunk/src/atmsdriver/batchbuilder/TimeFrame.java	(revision 237)
+++ trunk/src/atmsdriver/batchbuilder/TimeFrame.java	(revision 237)
@@ -0,0 +1,38 @@
+package atmsdriver.batchbuilder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author jtorres
+ */
+public class TimeFrame
+{
+    final public String time;
+    public List<TrafficLaneEvent> events;
+    
+    public TimeFrame(String time)
+    {
+        this.time = time;
+        this.events = new ArrayList<>();
+    }
+    
+    public void addEvent(TrafficLaneEvent newEvent)
+    {
+        for(TrafficLaneEvent event : events)
+        {
+            if(event.equals(newEvent))
+            {
+                events.remove(event);
+            }
+        }
+        events.add(newEvent);
+    }
+    
+    @Override
+    public String toString()
+    {
+        return time;
+    }
+}
Index: trunk/src/atmsdriver/batchbuilder/TimeFrames.java
===================================================================
--- trunk/src/atmsdriver/batchbuilder/TimeFrames.java	(revision 237)
+++ trunk/src/atmsdriver/batchbuilder/TimeFrames.java	(revision 237)
@@ -0,0 +1,204 @@
+/*
+ * 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.batchbuilder;
+
+import atmsdriver.model.Highway;
+import atmsdriver.model.Highways;
+import atmsdriver.model.LoopDetector;
+import atmsdriver.model.LoopDetector.DOTCOLOR;
+import atmsdriver.model.Station;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Observable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import tmcsim.common.SimulationException;
+
+/**
+ *
+ * @author jtorres
+ */
+public class TimeFrames extends Observable
+{
+    public List<TimeFrame> frames;
+    final public Highways highways;
+    public Highway currentHighway;
+    public TimeFrame currentTimeFrame;
+    public Station currentStation;
+    public LoopDetector currentLoopDetector;
+    public TrafficLaneEvent currentTrafficLaneEvent;
+    
+    public TimeFrames()
+    {
+        frames = new ArrayList<>();
+        highways = new Highways("./config/vds_data/highways_fullmap.txt", 
+                "localhost", 8080);
+    }
+    
+    public void addTimeFrame(String time)
+    {
+        TimeFrame frame = new TimeFrame(time);
+        frames.add(frame);
+        
+        setCurrentTimeFrame(this.frames.size() - 1);
+        
+        setChanged();
+        notifyObservers("add frame");
+    }
+    
+    public void addEventToTimeFrame(DOTCOLOR dotcolor)
+    {
+        TrafficLaneEvent event = new TrafficLaneEvent(
+                currentHighway.routeNumber, currentStation, 
+                currentLoopDetector, dotcolor);
+        currentTimeFrame.addEvent(event);
+        
+        setChanged();
+        notifyObservers("add event");
+    }
+    
+    public void setCurrentHighway(int index)
+    {
+        currentHighway = highways.highways.get(index);
+        currentStation = null;
+        currentLoopDetector = null;
+        
+        setChanged();
+        notifyObservers("select hwy");
+    }
+    
+    public void setCurrentTimeFrame(int index)
+    {
+        currentTimeFrame = frames.get(index);
+        
+        setChanged();
+        notifyObservers("select frame");
+    }
+    
+    public void setCurrentStation(int index)
+    {
+        currentStation = currentHighway.stations.get(index);
+        currentLoopDetector = null;
+        
+        setChanged();
+        notifyObservers("select station");
+    }
+    
+    public void setCurrentLoopDetector(int index)
+    {
+        currentLoopDetector = currentStation.loops.get(index);
+        
+        setChanged();
+        notifyObservers("select loop");
+    }
+
+    public void setCurrentTrafficLaneEvent(int index)
+    {
+        currentTrafficLaneEvent = currentTimeFrame.events.get(index);
+        
+        setChanged();
+        notifyObservers("select event");
+    }
+    
+    int getCurrentTrafficEventIndex()
+    {
+        return currentTimeFrame.events.indexOf(currentTrafficLaneEvent);
+    }
+    
+    int getCurrentTimeFrameIndex()
+    {
+        return frames.indexOf(currentTimeFrame);
+    }
+
+    int getCurrentHighwayIndex()
+    {
+        return highways.highways.indexOf(currentHighway);
+    }
+
+    public void deleteTrafficLaneEvent(int index)
+    {
+        currentTimeFrame.events.remove(index);
+        
+        if(currentTimeFrame.events.size() > 0)
+        {
+            if(index == 0)
+            {
+                currentTrafficLaneEvent = currentTimeFrame.events.get(0);
+            }
+            else
+            {
+                currentTrafficLaneEvent = currentTimeFrame.events.get(index - 1);
+            }
+        }
+        else
+        {
+            currentTrafficLaneEvent = null;
+        }
+        
+        setChanged();
+        notifyObservers("delete event");
+    }
+    
+    void deleteTimeFrame(int selectedIndex)
+    {
+        frames.remove(selectedIndex);
+        
+        if(frames.size() > 0)
+        {
+            if(selectedIndex == 0)
+            {
+                currentTimeFrame = frames.get(0);
+            }
+            else
+            {
+                currentTimeFrame = frames.get(selectedIndex - 1);
+            }
+        }
+        else
+        {
+            currentTimeFrame = null;
+        }
+        
+        setChanged();
+        notifyObservers("delete frame");
+    }
+
+    void singlePreviewStation()
+    {
+        highways.reset();
+        List<TrafficLaneEvent> events = currentTimeFrame.events;
+        for(TrafficLaneEvent event : events)
+        {
+            if(event.station.equals(currentStation))
+            {
+                highways.applyTrafficLaneEvent(event);
+            }
+        }
+        writeToFEP();
+    }
+
+    void singlePreviewHighways()
+    {
+        highways.reset();
+        for(TrafficLaneEvent event : currentTimeFrame.events)
+        {
+            highways.applyTrafficLaneEvent(event);
+        }
+        writeToFEP();
+    }
+    
+    void writeToFEP()
+    {
+        try
+        {
+            highways.writeToFEP();
+        } 
+        catch (SimulationException ex)
+        {
+            System.out.println("writeToFEP() failed");
+        }
+    }
+}
Index: trunk/src/atmsdriver/batchbuilder/BatchBuilderGUI.java
===================================================================
--- trunk/src/atmsdriver/batchbuilder/BatchBuilderGUI.java	(revision 237)
+++ trunk/src/atmsdriver/batchbuilder/BatchBuilderGUI.java	(revision 237)
@@ -0,0 +1,1236 @@
+/*
+ * 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.batchbuilder;
+
+import atmsdriver.model.Highway;
+import atmsdriver.model.LoopDetector;
+import atmsdriver.model.LoopDetector.DOTCOLOR;
+import atmsdriver.model.Station;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Observable;
+import java.util.Observer;
+import javax.swing.AbstractButton;
+import javax.swing.AbstractListModel;
+import javax.swing.ButtonGroup;
+import javax.swing.DefaultListSelectionModel;
+import javax.swing.JComboBox;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.AbstractTableModel;
+
+/**
+ *
+ * @author jtorres
+ */
+public class BatchBuilderGUI extends javax.swing.JFrame implements Observer
+{
+    
+    TimeFrames timeFrames;
+    
+    /**
+     * Creates new form BatchBuilderGUI
+     */
+    public BatchBuilderGUI(TimeFrames timeFrames)
+    {
+        initComponents();
+        this.timeFrames = timeFrames;
+        
+        HighwayList.setModel(new HighwaysListModel());
+        HighwayList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        HighwayList.addListSelectionListener(new HighwaysListSelectionListener());
+        
+        StationTable.setModel(new StationTableModel());
+        StationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        StationTable.getSelectionModel().addListSelectionListener(
+                new StationTableListSelectionListener());
+        
+        TimeFrameList.setModel(new TimeFrameListModel());
+        TimeFrameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        TimeFrameList.addListSelectionListener(new TimeFrameListSelectionListener());
+        
+        LoopDetectorTable.setModel(new LoopDetectorTableModel());
+        LoopDetectorTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        LoopDetectorTable.getSelectionModel().addListSelectionListener(
+                new LoopDetectorTableListSelectionListener());
+        
+        TrafficLaneEventsTable.setModel(new TrafficLaneEventsTableModel());
+        TrafficLaneEventsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        TrafficLaneEventsTable.getSelectionModel().addListSelectionListener(
+                new TrafficLaneEventsTableSelectionListener());
+        
+        GreenButton.setSelected(true);
+    }
+    
+    private class TrafficLaneEventsTableModel extends AbstractTableModel
+    {
+        String[] columnNames = {"Route", "StationID", "Postmile", "LoopID", "LoopType", 
+            "LoopDesc", "Color"};
+        int rows;
+        int cols;
+        String[][] data;
+        TimeFrame currFrame;
+        public TrafficLaneEventsTableModel()
+        {            
+            currFrame = timeFrames.currentTimeFrame;
+            rows = currFrame != null ? currFrame.events.size() : 0;
+            cols = columnNames.length;
+            data = new String[rows][cols];
+            for(int i = 0; i < rows; i++)
+            {
+                TrafficLaneEvent currEvent = currFrame.events.get(i);
+                data[i][0] = Integer.toString(currEvent.routeNum);
+                data[i][1] = Integer.toString(currEvent.station.ldsID);
+                data[i][2] = Double.toString(currEvent.station.postmile);
+                data[i][3] = Integer.toString(currEvent.loopDetector.loopID);
+                data[i][4] = currEvent.loopDetector.loopLocationID;
+                data[i][5] = currEvent.loopDetector.loopLocation;
+                data[i][6] = currEvent.color.getLetter();
+            }
+        }
+        
+        @Override
+        public String getColumnName(int col)
+        {
+            return columnNames[col];
+        }
+        
+        @Override
+        public int getRowCount()
+        {
+            return rows;
+        }
+
+        @Override
+        public int getColumnCount()
+        {
+            return cols;
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex)
+        {
+            return data[rowIndex][columnIndex];
+        }
+        
+    }
+    
+    private class LoopDetectorTableModel extends AbstractTableModel
+    {
+        String[] columnnames = {"Loop_ID", "Loop_Type", "Loop_Desc"};
+        int rows;
+        int cols;
+        String[][] data;
+        Station currStn;
+        
+        public LoopDetectorTableModel()
+        {
+            currStn = timeFrames.currentStation;
+            rows = currStn != null ? currStn.loops.size() : 0;
+            cols = columnnames.length;
+            data = new String[rows][cols];
+            for(int i = 0; i < rows; i++)
+            {
+                data[i][0] = Integer.toString(currStn.loops.get(i).loopID);
+                data[i][1] = currStn.loops.get(i).loopLocationID;
+                data[i][2] = currStn.loops.get(i).loopLocation;
+            }
+        }
+        
+        @Override
+        public String getColumnName(int col)
+        {
+            return columnnames[col];
+        }
+        
+        @Override
+        public int getRowCount()
+        {
+            return rows;
+        }
+
+        @Override
+        public int getColumnCount()
+        {
+            return cols;
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex)
+        {
+            return data[rowIndex][columnIndex];
+        }
+        
+    }
+    
+    private class TimeFrameListModel extends AbstractListModel
+    {
+        ArrayList<TimeFrame> frames;
+        
+        public TimeFrameListModel()
+        {
+            frames = (ArrayList<TimeFrame>) timeFrames.frames;
+        }
+
+        @Override
+        public int getSize()
+        {
+            return frames.size();
+        }
+
+        @Override
+        public Object getElementAt(int index)
+        {
+            return frames.get(index);
+        }
+        
+    }
+
+    private class TrafficLaneEventsTableSelectionListener implements ListSelectionListener
+    {
+        @Override
+        public void valueChanged(ListSelectionEvent e)
+        {
+            if(e.getValueIsAdjusting())
+                return;
+            DefaultListSelectionModel mod = (DefaultListSelectionModel) e.getSource();
+            int index = mod.getMaxSelectionIndex();
+            if(index >= 0)
+                timeFrames.setCurrentTrafficLaneEvent(index);
+        }
+    }
+    
+    private class HighwaysListSelectionListener implements ListSelectionListener
+    {
+        @Override
+        public void valueChanged(ListSelectionEvent e)
+        {
+            if(e.getValueIsAdjusting())
+                return;
+            JList source = (JList) e.getSource();
+            timeFrames.setCurrentHighway(source.getSelectedIndex());
+        }
+    }
+    
+    private class TimeFrameListSelectionListener implements ListSelectionListener
+    {
+        @Override
+        public void valueChanged(ListSelectionEvent e)
+        {
+            if(e.getValueIsAdjusting())
+                return;
+            JList source = (JList) e.getSource();
+            int index = source.getSelectedIndex();
+            if(index >= 0)
+            {
+                timeFrames.setCurrentTimeFrame(index);
+            }
+        }
+    }
+    
+    private class StationTableListSelectionListener implements ListSelectionListener
+    {
+
+        @Override
+        public void valueChanged(ListSelectionEvent e)
+        {
+            if(e.getValueIsAdjusting())
+                return;
+            DefaultListSelectionModel mod = (DefaultListSelectionModel) e.getSource();
+            int index = mod.getMaxSelectionIndex();
+            if(index >= 0)
+                timeFrames.setCurrentStation(index);
+        }
+    }
+    
+    private class LoopDetectorTableListSelectionListener implements ListSelectionListener
+    {
+
+        @Override
+        public void valueChanged(ListSelectionEvent e)
+        {
+            if(e.getValueIsAdjusting())
+                return;
+            DefaultListSelectionModel mod = (DefaultListSelectionModel) e.getSource();
+            int index = mod.getMaxSelectionIndex();
+            if(index >= 0)
+                timeFrames.setCurrentLoopDetector(index);
+        }
+        
+    }
+    
+    private class StationTableModel extends AbstractTableModel
+    {
+        String[] columnNames = {"lds_id", "postmile", "location"};
+        String[][] data;
+        Highway hwy;
+        int rows;
+        int cols;
+        
+        public StationTableModel()
+        {
+            hwy = BatchBuilderGUI.this.timeFrames.currentHighway;
+            cols = 3;
+            rows = hwy != null ? hwy.stations.size() : 0;
+            data = new String[rows][cols];
+            for(int i = 0; i < rows; i++)
+            {
+                data[i][0] = Integer.toString(hwy.stations.get(i).ldsID);
+                data[i][1] = Double.toString(hwy.stations.get(i).postmile);
+                data[i][2] = hwy.stations.get(i).location;
+            }
+        }
+        
+        @Override
+        public String getColumnName(int col)
+        {
+            return columnNames[col];
+        }
+
+        @Override
+        public int getRowCount()
+        {
+            return rows;
+        }
+
+        @Override
+        public int getColumnCount()
+        {
+            return cols;
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex)
+        {
+            return data[rowIndex][columnIndex];
+        }
+    }
+    
+    private class HighwaysListModel extends AbstractListModel
+    {
+        
+        @Override
+        public int getSize()
+        {
+            return BatchBuilderGUI.this.timeFrames.highways.highways.size();
+        }
+
+        @Override
+        public Object getElementAt(int index)
+        {
+            return BatchBuilderGUI.this.timeFrames.highways.highways.get(index);
+        }
+    }
+
+    /**
+     * 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()
+    {
+
+        colorRadioButtons = new javax.swing.ButtonGroup();
+        jPanel6 = new javax.swing.JPanel();
+        jPanel3 = new javax.swing.JPanel();
+        TimeFrameScrollPane = new javax.swing.JScrollPane();
+        TimeFrameList = new javax.swing.JList();
+        jPanel10 = new javax.swing.JPanel();
+        AddNewTimeFrameButton = new javax.swing.JButton();
+        DeleteTimeFrameButton = new javax.swing.JButton();
+        jPanel2 = new javax.swing.JPanel();
+        HighwayScrollPane = new javax.swing.JScrollPane();
+        HighwayList = new javax.swing.JList();
+        jPanel4 = new javax.swing.JPanel();
+        StationScrollPane = new javax.swing.JScrollPane();
+        StationTable = new javax.swing.JTable();
+        jPanel5 = new javax.swing.JPanel();
+        LoopDetectorScrollPane = new javax.swing.JScrollPane();
+        LoopDetectorTable = new javax.swing.JTable();
+        jPanel8 = new javax.swing.JPanel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        TrafficLaneEventsTable = new javax.swing.JTable();
+        jPanel1 = new javax.swing.JPanel();
+        jPanel9 = new javax.swing.JPanel();
+        jLabel1 = new javax.swing.JLabel();
+        CurrentTimeFrameLabel = new javax.swing.JLabel();
+        CurrentHighwayLabel = new javax.swing.JLabel();
+        jLabel2 = new javax.swing.JLabel();
+        jLabel3 = new javax.swing.JLabel();
+        CurrentStationLabel = new javax.swing.JLabel();
+        CurrentStationPostmileLabel = new javax.swing.JLabel();
+        jLabel4 = new javax.swing.JLabel();
+        jLabel5 = new javax.swing.JLabel();
+        CurrentStationLocationLabel = new javax.swing.JLabel();
+        CurrentLoopDetectorLabel = new javax.swing.JLabel();
+        jLabel6 = new javax.swing.JLabel();
+        jLabel7 = new javax.swing.JLabel();
+        CurrentLoopDetectorTypeLabel = new javax.swing.JLabel();
+        CurrentLoopDetectorDescLabel = new javax.swing.JLabel();
+        jLabel8 = new javax.swing.JLabel();
+        jPanel7 = new javax.swing.JPanel();
+        GreenButton = new javax.swing.JRadioButton();
+        YellowButton = new javax.swing.JRadioButton();
+        RedButton = new javax.swing.JRadioButton();
+        AddNewEventButton = new javax.swing.JButton();
+        DeleteEventButton = new javax.swing.JButton();
+        jPanel11 = new javax.swing.JPanel();
+        jPanel12 = new javax.swing.JPanel();
+        SinglePreviewStationButton = new javax.swing.JButton();
+        SinglePreviewHighwaysButton = new javax.swing.JButton();
+        jPanel13 = new javax.swing.JPanel();
+        CumulativePreviewStationButton = new javax.swing.JButton();
+        CumulativePreviewHighwaysButton = new javax.swing.JButton();
+        jPanel14 = new javax.swing.JPanel();
+        jButton1 = new javax.swing.JButton();
+        jButton2 = new javax.swing.JButton();
+        jButton3 = new javax.swing.JButton();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+
+        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Time Frame"));
+
+        TimeFrameList.setModel(new javax.swing.AbstractListModel()
+        {
+            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
+            public int getSize() { return strings.length; }
+            public Object getElementAt(int i) { return strings[i]; }
+        });
+        TimeFrameScrollPane.setViewportView(TimeFrameList);
+
+        jPanel10.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+
+        AddNewTimeFrameButton.setText("Add");
+        AddNewTimeFrameButton.setActionCommand("addTimeFrame");
+        AddNewTimeFrameButton.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                addNewTimeFrameButtonClicked(evt);
+            }
+        });
+
+        DeleteTimeFrameButton.setText("Delete");
+        DeleteTimeFrameButton.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                DeleteTimeFrameButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
+        jPanel10.setLayout(jPanel10Layout);
+        jPanel10Layout.setHorizontalGroup(
+            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel10Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(AddNewTimeFrameButton, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(DeleteTimeFrameButton, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap())
+        );
+        jPanel10Layout.setVerticalGroup(
+            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel10Layout.createSequentialGroup()
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(AddNewTimeFrameButton)
+                    .addComponent(DeleteTimeFrameButton))
+                .addContainerGap())
+        );
+
+        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
+        jPanel3.setLayout(jPanel3Layout);
+        jPanel3Layout.setHorizontalGroup(
+            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(TimeFrameScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)
+            .addComponent(jPanel10, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+        );
+        jPanel3Layout.setVerticalGroup(
+            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel3Layout.createSequentialGroup()
+                .addComponent(TimeFrameScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jPanel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Highway"));
+
+        HighwayList.setModel(new javax.swing.AbstractListModel()
+        {
+            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
+            public int getSize() { return strings.length; }
+            public Object getElementAt(int i) { return strings[i]; }
+        });
+        HighwayScrollPane.setViewportView(HighwayList);
+
+        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
+        jPanel2.setLayout(jPanel2Layout);
+        jPanel2Layout.setHorizontalGroup(
+            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(HighwayScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
+        );
+        jPanel2Layout.setVerticalGroup(
+            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(HighwayScrollPane)
+        );
+
+        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Station"));
+
+        StationTable.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 []
+            {
+                "Title 1", "Title 2", "Title 3", "Title 4"
+            }
+        ));
+        StationScrollPane.setViewportView(StationTable);
+
+        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
+        jPanel4.setLayout(jPanel4Layout);
+        jPanel4Layout.setHorizontalGroup(
+            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(StationScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE)
+        );
+        jPanel4Layout.setVerticalGroup(
+            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(StationScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+        );
+
+        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Loop Detector"));
+
+        LoopDetectorTable.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 []
+            {
+                "Title 1", "Title 2", "Title 3", "Title 4"
+            }
+        ));
+        LoopDetectorScrollPane.setViewportView(LoopDetectorTable);
+
+        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
+        jPanel5.setLayout(jPanel5Layout);
+        jPanel5Layout.setHorizontalGroup(
+            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(LoopDetectorScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 329, Short.MAX_VALUE)
+        );
+        jPanel5Layout.setVerticalGroup(
+            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(LoopDetectorScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+        );
+
+        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()
+                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+        jPanel6Layout.setVerticalGroup(
+            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel6Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(jPanel6Layout.createSequentialGroup()
+                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(0, 0, Short.MAX_VALUE))
+                    .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+        );
+
+        jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Traffic Lane Events"));
+
+        TrafficLaneEventsTable.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 []
+            {
+                "Title 1", "Title 2", "Title 3", "Title 4"
+            }
+        ));
+        jScrollPane1.setViewportView(TrafficLaneEventsTable);
+
+        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
+        jPanel8.setLayout(jPanel8Layout);
+        jPanel8Layout.setHorizontalGroup(
+            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(jScrollPane1)
+        );
+        jPanel8Layout.setVerticalGroup(
+            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel8Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 201, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+
+        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Current Selection"));
+        jPanel1.setLayout(new java.awt.GridLayout(1, 0));
+
+        jLabel1.setText("TimeFrame:");
+
+        CurrentTimeFrameLabel.setText("null");
+
+        CurrentHighwayLabel.setText("null");
+
+        jLabel2.setText("Highway:");
+
+        jLabel3.setText("Station:");
+
+        CurrentStationLabel.setText("null");
+
+        CurrentStationPostmileLabel.setText("null");
+
+        jLabel4.setText("Postmile:");
+
+        jLabel5.setText("Location:");
+
+        CurrentStationLocationLabel.setText("null");
+
+        CurrentLoopDetectorLabel.setText("null");
+
+        jLabel6.setText("Loop:");
+
+        jLabel7.setText("Type:");
+
+        CurrentLoopDetectorTypeLabel.setText("null");
+
+        CurrentLoopDetectorDescLabel.setText("null");
+
+        jLabel8.setText("Desc:");
+
+        javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9);
+        jPanel9.setLayout(jPanel9Layout);
+        jPanel9Layout.setHorizontalGroup(
+            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel9Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jLabel1)
+                    .addComponent(jLabel2)
+                    .addComponent(jLabel3)
+                    .addComponent(jLabel6)
+                    .addGroup(jPanel9Layout.createSequentialGroup()
+                        .addGap(6, 6, 6)
+                        .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(jLabel5)
+                            .addComponent(jLabel4)
+                            .addComponent(jLabel7)))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel9Layout.createSequentialGroup()
+                        .addComponent(jLabel8)
+                        .addGap(33, 33, 33)))
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(CurrentLoopDetectorDescLabel)
+                    .addComponent(CurrentLoopDetectorTypeLabel)
+                    .addComponent(CurrentLoopDetectorLabel)
+                    .addComponent(CurrentStationPostmileLabel)
+                    .addComponent(CurrentStationLabel)
+                    .addComponent(CurrentHighwayLabel)
+                    .addComponent(CurrentTimeFrameLabel)
+                    .addComponent(CurrentStationLocationLabel))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        jPanel9Layout.setVerticalGroup(
+            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel9Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel1)
+                    .addComponent(CurrentTimeFrameLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel2)
+                    .addComponent(CurrentHighwayLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel3)
+                    .addComponent(CurrentStationLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel4)
+                    .addComponent(CurrentStationPostmileLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel5)
+                    .addComponent(CurrentStationLocationLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel6)
+                    .addComponent(CurrentLoopDetectorLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel7)
+                    .addComponent(CurrentLoopDetectorTypeLabel))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel8)
+                    .addComponent(CurrentLoopDetectorDescLabel))
+                .addContainerGap(31, Short.MAX_VALUE))
+        );
+
+        jPanel1.add(jPanel9);
+
+        jPanel7.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
+
+        colorRadioButtons.add(GreenButton);
+        GreenButton.setText("Green");
+
+        colorRadioButtons.add(YellowButton);
+        YellowButton.setText("Yellow");
+
+        colorRadioButtons.add(RedButton);
+        RedButton.setText("Red");
+
+        AddNewEventButton.setText("Add Event");
+        AddNewEventButton.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                AddLaneEventButtonActionPerformed(evt);
+            }
+        });
+
+        DeleteEventButton.setText("Delete Event");
+        DeleteEventButton.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                DeleteEventButtonActonPerformed(evt);
+            }
+        });
+
+        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(DeleteEventButton, javax.swing.GroupLayout.DEFAULT_SIZE, 237, Short.MAX_VALUE)
+                    .addGroup(jPanel7Layout.createSequentialGroup()
+                        .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(RedButton)
+                            .addComponent(YellowButton)
+                            .addComponent(GreenButton))
+                        .addGap(0, 0, Short.MAX_VALUE))
+                    .addComponent(AddNewEventButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap())
+        );
+        jPanel7Layout.setVerticalGroup(
+            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel7Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(GreenButton)
+                .addGap(12, 12, 12)
+                .addComponent(YellowButton)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(RedButton)
+                .addGap(18, 18, 18)
+                .addComponent(AddNewEventButton)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(DeleteEventButton)
+                .addContainerGap(22, Short.MAX_VALUE))
+        );
+
+        jPanel1.add(jPanel7);
+
+        jPanel11.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Preview and Import/Export Panel"));
+
+        jPanel12.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED), "Frame Preview"));
+
+        SinglePreviewStationButton.setText("Preview Station");
+        SinglePreviewStationButton.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                SinglePreviewStationButtonActionPerformed(evt);
+            }
+        });
+
+        SinglePreviewHighwaysButton.setText("Preview Highways");
+        SinglePreviewHighwaysButton.addActionListener(new java.awt.event.ActionListener()
+        {
+            public void actionPerformed(java.awt.event.ActionEvent evt)
+            {
+                SinglePreviewHighwaysButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12);
+        jPanel12.setLayout(jPanel12Layout);
+        jPanel12Layout.setHorizontalGroup(
+            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel12Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(SinglePreviewHighwaysButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(SinglePreviewStationButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap(15, Short.MAX_VALUE))
+        );
+        jPanel12Layout.setVerticalGroup(
+            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel12Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(SinglePreviewStationButton)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(SinglePreviewHighwaysButton)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        jPanel13.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED), "Cumulative Preview"));
+
+        CumulativePreviewStationButton.setText("Preview Station");
+
+        CumulativePreviewHighwaysButton.setText("Preview Highways");
+
+        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)
+                    .addComponent(CumulativePreviewHighwaysButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(CumulativePreviewStationButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        jPanel13Layout.setVerticalGroup(
+            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel13Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(CumulativePreviewStationButton)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(CumulativePreviewHighwaysButton)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        jPanel14.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED), "Export/Import Scripts"));
+
+        jButton1.setText("Load Script");
+
+        jButton2.setText("Save Script");
+
+        jButton3.setText("Save Script As");
+
+        javax.swing.GroupLayout jPanel14Layout = new javax.swing.GroupLayout(jPanel14);
+        jPanel14.setLayout(jPanel14Layout);
+        jPanel14Layout.setHorizontalGroup(
+            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel14Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        jPanel14Layout.setVerticalGroup(
+            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel14Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jButton1)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jButton2)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jButton3)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11);
+        jPanel11.setLayout(jPanel11Layout);
+        jPanel11Layout.setHorizontalGroup(
+            jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel11Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jPanel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addComponent(jPanel14, 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.LEADING)
+                    .addComponent(jPanel13, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(jPanel12, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(jPanel14, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap())
+        );
+
+        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(12, 12, 12)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(jPanel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                .addContainerGap())
+            .addComponent(jPanel6, 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()
+                .addContainerGap()
+                .addComponent(jPanel6, 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, false)
+                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(jPanel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void AddLaneEventButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_AddLaneEventButtonActionPerformed
+    {//GEN-HEADEREND:event_AddLaneEventButtonActionPerformed
+        timeFrames.addEventToTimeFrame(getDotColorFromText(
+                getSelectedButtonText(colorRadioButtons)));
+    }//GEN-LAST:event_AddLaneEventButtonActionPerformed
+
+    private void DeleteTimeFrameButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_DeleteTimeFrameButtonActionPerformed
+    {//GEN-HEADEREND:event_DeleteTimeFrameButtonActionPerformed
+        timeFrames.deleteTimeFrame(TimeFrameList.getSelectedIndex());
+    }//GEN-LAST:event_DeleteTimeFrameButtonActionPerformed
+
+    private String[] getTimeChoices()
+    {
+        String[] choices = new String[60];
+        for(int i = 0; i < 60; i++)
+        {
+            choices[i] = String.format("%02d", i);
+        }
+        return choices;
+    }
+    
+    private void addNewTimeFrameButtonClicked(java.awt.event.ActionEvent evt)//GEN-FIRST:event_addNewTimeFrameButtonClicked
+    {//GEN-HEADEREND:event_addNewTimeFrameButtonClicked
+        // String name = JOptionPane.showInputDialog(this, "Enter a time frame (HH:MM:SS)");
+        String[] hourChoices = getTimeChoices();
+        String[] minChoices = getTimeChoices();
+        String[] secChoices = {"00", "30"};
+        
+        JComboBox hourCombo = new JComboBox(hourChoices);
+        JComboBox minCombo = new JComboBox(minChoices);
+        JComboBox secCombo = new JComboBox(secChoices);
+        
+        Object[] message = {
+            "Hour:", hourCombo,
+            "Minute:", minCombo,
+            "Second:", secCombo
+        };
+        int option = JOptionPane.showConfirmDialog(this, message, "Enter a time frame:", JOptionPane.OK_CANCEL_OPTION);
+        if(option == JOptionPane.OK_OPTION)
+        {
+            String h = hourCombo.getSelectedItem().toString();
+            String m = minCombo.getSelectedItem().toString();
+            String s = secCombo.getSelectedItem().toString();
+            String cum = h + ":" + m + ":" + s;
+            timeFrames.addTimeFrame(cum);
+        }
+        /*if(name != null)
+        {
+            timeFrames.addTimeFrame(name);
+        }*/
+    }//GEN-LAST:event_addNewTimeFrameButtonClicked
+
+    private void DeleteEventButtonActonPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_DeleteEventButtonActonPerformed
+    {//GEN-HEADEREND:event_DeleteEventButtonActonPerformed
+        timeFrames.deleteTrafficLaneEvent(TrafficLaneEventsTable
+                .getSelectionModel().getMaxSelectionIndex());
+    }//GEN-LAST:event_DeleteEventButtonActonPerformed
+
+    private void SinglePreviewStationButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_SinglePreviewStationButtonActionPerformed
+    {//GEN-HEADEREND:event_SinglePreviewStationButtonActionPerformed
+        timeFrames.singlePreviewStation();
+    }//GEN-LAST:event_SinglePreviewStationButtonActionPerformed
+
+    private void SinglePreviewHighwaysButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_SinglePreviewHighwaysButtonActionPerformed
+    {//GEN-HEADEREND:event_SinglePreviewHighwaysButtonActionPerformed
+        timeFrames.singlePreviewHighways();
+    }//GEN-LAST:event_SinglePreviewHighwaysButtonActionPerformed
+
+    private DOTCOLOR getDotColorFromText(String text)
+    {
+        return DOTCOLOR.toDotColor(text);
+    }
+    
+    private String getSelectedButtonText(ButtonGroup buttonGroup)
+    {
+        for(Enumeration<AbstractButton> buttons = buttonGroup.getElements(); buttons.hasMoreElements();)
+        {
+            AbstractButton button = buttons.nextElement();
+            if(button.isSelected())
+            {
+                return button.getText();
+            }
+        }
+        return null;
+    }
+    
+    /**
+     * @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(BatchBuilderGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        } catch (InstantiationException ex)
+        {
+            java.util.logging.Logger.getLogger(BatchBuilderGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        } catch (IllegalAccessException ex)
+        {
+            java.util.logging.Logger.getLogger(BatchBuilderGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        } catch (javax.swing.UnsupportedLookAndFeelException ex)
+        {
+            java.util.logging.Logger.getLogger(BatchBuilderGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+        }
+        //</editor-fold>
+        
+        TimeFrames timeFrames = new TimeFrames();
+        final BatchBuilderGUI gui = new BatchBuilderGUI(timeFrames);
+        timeFrames.addObserver(gui);
+        
+        /* Create and display the form */
+        java.awt.EventQueue.invokeLater(new Runnable()
+        {
+            public void run()
+            {
+                gui.update(null, null);
+                gui.setVisible(true);
+            }
+        });
+    }
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton AddNewEventButton;
+    private javax.swing.JButton AddNewTimeFrameButton;
+    private javax.swing.JButton CumulativePreviewHighwaysButton;
+    private javax.swing.JButton CumulativePreviewStationButton;
+    private javax.swing.JLabel CurrentHighwayLabel;
+    private javax.swing.JLabel CurrentLoopDetectorDescLabel;
+    private javax.swing.JLabel CurrentLoopDetectorLabel;
+    private javax.swing.JLabel CurrentLoopDetectorTypeLabel;
+    private javax.swing.JLabel CurrentStationLabel;
+    private javax.swing.JLabel CurrentStationLocationLabel;
+    private javax.swing.JLabel CurrentStationPostmileLabel;
+    private javax.swing.JLabel CurrentTimeFrameLabel;
+    private javax.swing.JButton DeleteEventButton;
+    private javax.swing.JButton DeleteTimeFrameButton;
+    private javax.swing.JRadioButton GreenButton;
+    private javax.swing.JList HighwayList;
+    private javax.swing.JScrollPane HighwayScrollPane;
+    private javax.swing.JScrollPane LoopDetectorScrollPane;
+    private javax.swing.JTable LoopDetectorTable;
+    private javax.swing.JRadioButton RedButton;
+    private javax.swing.JButton SinglePreviewHighwaysButton;
+    private javax.swing.JButton SinglePreviewStationButton;
+    private javax.swing.JScrollPane StationScrollPane;
+    private javax.swing.JTable StationTable;
+    private javax.swing.JList TimeFrameList;
+    private javax.swing.JScrollPane TimeFrameScrollPane;
+    private javax.swing.JTable TrafficLaneEventsTable;
+    private javax.swing.JRadioButton YellowButton;
+    private javax.swing.ButtonGroup colorRadioButtons;
+    private javax.swing.JButton jButton1;
+    private javax.swing.JButton jButton2;
+    private javax.swing.JButton jButton3;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JLabel jLabel5;
+    private javax.swing.JLabel jLabel6;
+    private javax.swing.JLabel jLabel7;
+    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 jPanel14;
+    private javax.swing.JPanel jPanel2;
+    private javax.swing.JPanel jPanel3;
+    private javax.swing.JPanel jPanel4;
+    private javax.swing.JPanel jPanel5;
+    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;
+    // End of variables declaration//GEN-END:variables
+    
+    private void updateStatusLabels()
+    {
+        CurrentTimeFrameLabel.setText(timeFrames.currentTimeFrame != null
+                ? timeFrames.currentTimeFrame.toString()
+                : "");
+        
+        CurrentStationLabel.setText(timeFrames.currentStation != null
+                ? timeFrames.currentStation.toString()
+                : "");
+        
+        CurrentHighwayLabel.setText(timeFrames.currentHighway != null
+                ? timeFrames.currentHighway.toString()
+                : "");
+        CurrentStationPostmileLabel.setText(timeFrames.currentStation != null
+                ? Double.toString(timeFrames.currentStation.postmile)
+                : "");
+        CurrentStationLocationLabel.setText(timeFrames.currentStation != null
+                ? timeFrames.currentStation.location
+                : "");
+        
+        CurrentLoopDetectorLabel.setText(timeFrames.currentLoopDetector != null
+                ? Integer.toString(timeFrames.currentLoopDetector.loopID)
+                : "");
+        CurrentLoopDetectorTypeLabel.setText(timeFrames.currentLoopDetector != null
+                ? timeFrames.currentLoopDetector.loopLocationID
+                : "");
+        CurrentLoopDetectorDescLabel.setText(timeFrames.currentLoopDetector != null
+                ? timeFrames.currentLoopDetector.loopLocation
+                : "");
+    }
+    
+    private void updateButtonEnabled()
+    {
+        // add event button
+        this.AddNewEventButton.setEnabled(
+                timeFrames.currentTimeFrame != null 
+                && timeFrames.currentHighway != null
+                && timeFrames.currentStation != null 
+                && timeFrames.currentLoopDetector != null
+        );
+        
+        // delete event button
+        DeleteEventButton.setEnabled(
+                !TrafficLaneEventsTable.getSelectionModel().isSelectionEmpty());
+        
+        // delete time frame button
+        DeleteTimeFrameButton.setEnabled(!TimeFrameList.isSelectionEmpty());
+        
+        // single preview buttons
+        SinglePreviewStationButton.setEnabled(
+                timeFrames.currentStation != null
+                && timeFrames.currentTimeFrame != null
+        );
+        
+        SinglePreviewHighwaysButton.setEnabled(
+                timeFrames.currentTimeFrame != null
+        );
+        
+        // cumulative preview buttons
+        CumulativePreviewHighwaysButton.setEnabled(
+                timeFrames.currentTimeFrame != null
+        );
+        
+        CumulativePreviewStationButton.setEnabled(
+                timeFrames.currentTimeFrame != null
+                && timeFrames.currentStation != null
+        );
+    }
+    
+    @Override
+    public void update(Observable o, Object arg)
+    {
+        String updateArg = (String) arg;
+        updateStatusLabels();
+        if(updateArg != null)
+        {
+            if(updateArg.equals("add frame") || updateArg.equals("delete frame"))
+            {
+                TimeFrameList.setModel(new TimeFrameListModel());
+                TimeFrameList.setSelectedIndex(
+                        timeFrames.getCurrentTimeFrameIndex());
+                TrafficLaneEventsTable.setModel(new TrafficLaneEventsTableModel());
+            }
+            else if(updateArg.equals("select hwy"))
+            {
+                StationTable.setModel(new StationTableModel());
+                LoopDetectorTable.setModel(new LoopDetectorTableModel());
+            }
+            else if(updateArg.equals("select station"))
+            {
+                LoopDetectorTable.setModel(new LoopDetectorTableModel());
+            }
+            else if(updateArg.equals("select frame"))
+            {
+                TrafficLaneEventsTable.setModel(
+                        new TrafficLaneEventsTableModel());
+            }
+            else if(updateArg.equals("add event") 
+                    || updateArg.equals("delete event"))
+            {
+                TrafficLaneEventsTable.setModel(
+                        new TrafficLaneEventsTableModel());
+                TrafficLaneEventsTable.getSelectionModel()
+                        .setSelectionInterval(
+                                timeFrames.getCurrentTrafficEventIndex(), 
+                                timeFrames.getCurrentTrafficEventIndex());
+            }
+        }
+        updateButtonEnabled();
+    }
+}
Index: trunk/src/atmsdriver/batchbuilder/BatchBuilderGUI.form
===================================================================
--- trunk/src/atmsdriver/batchbuilder/BatchBuilderGUI.form	(revision 237)
+++ trunk/src/atmsdriver/batchbuilder/BatchBuilderGUI.form	(revision 237)
@@ -0,0 +1,892 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <NonVisualComponents>
+    <Component class="javax.swing.ButtonGroup" name="colorRadioButtons">
+    </Component>
+  </NonVisualComponents>
+  <Properties>
+    <Property name="defaultCloseOperation" type="int" value="3"/>
+  </Properties>
+  <SyntheticProperties>
+    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+    <SyntheticProperty name="generateCenter" type="boolean" value="false"/>
+  </SyntheticProperties>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="jPanel8" max="32767" attributes="0"/>
+                  <Group type="102" attributes="0">
+                      <Component id="jPanel1" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="jPanel11" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+          <Component id="jPanel6" alignment="0" max="32767" attributes="0"/>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jPanel6" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                  <Component id="jPanel1" max="32767" attributes="0"/>
+                  <Component id="jPanel11" max="32767" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jPanel8" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JPanel" name="jPanel6">
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jPanel3" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jPanel2" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jPanel4" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jPanel5" max="32767" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="jPanel2" max="32767" attributes="0"/>
+                      <Component id="jPanel4" alignment="0" max="32767" attributes="0"/>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="jPanel3" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
+                      </Group>
+                      <Component id="jPanel5" alignment="0" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Container class="javax.swing.JPanel" name="jPanel3">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                <TitledBorder title="Time Frame">
+                  <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder/>
+                  </Border>
+                </TitledBorder>
+              </Border>
+            </Property>
+          </Properties>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="TimeFrameScrollPane" alignment="0" min="-2" pref="215" max="-2" attributes="0"/>
+                  <Component id="jPanel10" alignment="1" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <Component id="TimeFrameScrollPane" min="-2" pref="238" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jPanel10" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Container class="javax.swing.JScrollPane" name="TimeFrameScrollPane">
+
+              <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+              <SubComponents>
+                <Component class="javax.swing.JList" name="TimeFrameList">
+                  <Properties>
+                    <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+                      <StringArray count="5">
+                        <StringItem index="0" value="Item 1"/>
+                        <StringItem index="1" value="Item 2"/>
+                        <StringItem index="2" value="Item 3"/>
+                        <StringItem index="3" value="Item 4"/>
+                        <StringItem index="4" value="Item 5"/>
+                      </StringArray>
+                    </Property>
+                  </Properties>
+                </Component>
+              </SubComponents>
+            </Container>
+            <Container class="javax.swing.JPanel" name="jPanel10">
+              <Properties>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
+                    <EtchetBorder/>
+                  </Border>
+                </Property>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="AddNewTimeFrameButton" min="-2" pref="81" max="-2" attributes="0"/>
+                          <EmptySpace max="32767" attributes="0"/>
+                          <Component id="DeleteTimeFrameButton" min="-2" pref="84" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" attributes="0">
+                          <EmptySpace max="32767" attributes="0"/>
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="AddNewTimeFrameButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="DeleteTimeFrameButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+              <SubComponents>
+                <Component class="javax.swing.JButton" name="AddNewTimeFrameButton">
+                  <Properties>
+                    <Property name="text" type="java.lang.String" value="Add"/>
+                    <Property name="actionCommand" type="java.lang.String" value="addTimeFrame"/>
+                  </Properties>
+                  <Events>
+                    <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="addNewTimeFrameButtonClicked"/>
+                  </Events>
+                </Component>
+                <Component class="javax.swing.JButton" name="DeleteTimeFrameButton">
+                  <Properties>
+                    <Property name="text" type="java.lang.String" value="Delete"/>
+                  </Properties>
+                  <Events>
+                    <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="DeleteTimeFrameButtonActionPerformed"/>
+                  </Events>
+                </Component>
+              </SubComponents>
+            </Container>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel2">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                <TitledBorder title="Highway">
+                  <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder/>
+                  </Border>
+                </TitledBorder>
+              </Border>
+            </Property>
+          </Properties>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="HighwayScrollPane" alignment="0" pref="100" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="HighwayScrollPane" alignment="0" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Container class="javax.swing.JScrollPane" name="HighwayScrollPane">
+
+              <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+              <SubComponents>
+                <Component class="javax.swing.JList" name="HighwayList">
+                  <Properties>
+                    <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+                      <StringArray count="5">
+                        <StringItem index="0" value="Item 1"/>
+                        <StringItem index="1" value="Item 2"/>
+                        <StringItem index="2" value="Item 3"/>
+                        <StringItem index="3" value="Item 4"/>
+                        <StringItem index="4" value="Item 5"/>
+                      </StringArray>
+                    </Property>
+                  </Properties>
+                </Component>
+              </SubComponents>
+            </Container>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel4">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                <TitledBorder title="Station">
+                  <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder/>
+                  </Border>
+                </TitledBorder>
+              </Border>
+            </Property>
+          </Properties>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="StationScrollPane" alignment="0" pref="480" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="StationScrollPane" alignment="0" pref="0" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Container class="javax.swing.JScrollPane" name="StationScrollPane">
+
+              <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+              <SubComponents>
+                <Component class="javax.swing.JTable" name="StationTable">
+                  <Properties>
+                    <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
+                      <Table columnCount="4" rowCount="4">
+                        <Column editable="true" title="Title 1" type="java.lang.Object"/>
+                        <Column editable="true" title="Title 2" type="java.lang.Object"/>
+                        <Column editable="true" title="Title 3" type="java.lang.Object"/>
+                        <Column editable="true" title="Title 4" type="java.lang.Object"/>
+                      </Table>
+                    </Property>
+                  </Properties>
+                </Component>
+              </SubComponents>
+            </Container>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel5">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                <TitledBorder title="Loop Detector">
+                  <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder/>
+                  </Border>
+                </TitledBorder>
+              </Border>
+            </Property>
+          </Properties>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="LoopDetectorScrollPane" alignment="0" pref="329" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="LoopDetectorScrollPane" alignment="0" pref="0" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Container class="javax.swing.JScrollPane" name="LoopDetectorScrollPane">
+              <AuxValues>
+                <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+              </AuxValues>
+
+              <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+              <SubComponents>
+                <Component class="javax.swing.JTable" name="LoopDetectorTable">
+                  <Properties>
+                    <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
+                      <Table columnCount="4" rowCount="4">
+                        <Column editable="true" title="Title 1" type="java.lang.Object"/>
+                        <Column editable="true" title="Title 2" type="java.lang.Object"/>
+                        <Column editable="true" title="Title 3" type="java.lang.Object"/>
+                        <Column editable="true" title="Title 4" type="java.lang.Object"/>
+                      </Table>
+                    </Property>
+                  </Properties>
+                </Component>
+              </SubComponents>
+            </Container>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPanel" name="jPanel8">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+            <TitledBorder title="Traffic Lane Events">
+              <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
+                <LineBorder/>
+              </Border>
+            </TitledBorder>
+          </Border>
+        </Property>
+      </Properties>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Component id="jScrollPane1" alignment="0" max="32767" attributes="0"/>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jScrollPane1" pref="201" max="32767" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+          <SubComponents>
+            <Component class="javax.swing.JTable" name="TrafficLaneEventsTable">
+              <Properties>
+                <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
+                  <Table columnCount="4" rowCount="4">
+                    <Column editable="true" title="Title 1" type="java.lang.Object"/>
+                    <Column editable="true" title="Title 2" type="java.lang.Object"/>
+                    <Column editable="true" title="Title 3" type="java.lang.Object"/>
+                    <Column editable="true" title="Title 4" type="java.lang.Object"/>
+                  </Table>
+                </Property>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPanel" name="jPanel1">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+            <TitledBorder title="Current Selection">
+              <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
+                <LineBorder/>
+              </Border>
+            </TitledBorder>
+          </Border>
+        </Property>
+      </Properties>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+        <Property name="columns" type="int" value="0"/>
+        <Property name="rows" type="int" value="1"/>
+      </Layout>
+      <SubComponents>
+        <Container class="javax.swing.JPanel" name="jPanel9">
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel6" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Group type="102" alignment="0" attributes="0">
+                              <EmptySpace min="6" pref="6" max="-2" attributes="0"/>
+                              <Group type="103" groupAlignment="0" attributes="0">
+                                  <Component id="jLabel5" min="-2" max="-2" attributes="0"/>
+                                  <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
+                                  <Component id="jLabel7" min="-2" max="-2" attributes="0"/>
+                              </Group>
+                          </Group>
+                          <Group type="102" alignment="1" attributes="0">
+                              <Component id="jLabel8" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace min="-2" pref="33" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="CurrentLoopDetectorDescLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentLoopDetectorTypeLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentLoopDetectorLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentStationPostmileLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentStationLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentHighwayLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentTimeFrameLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentStationLocationLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentTimeFrameLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentHighwayLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentStationLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentStationPostmileLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="jLabel5" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentStationLocationLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentLoopDetectorLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="jLabel7" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentLoopDetectorTypeLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="jLabel8" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="CurrentLoopDetectorDescLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace pref="31" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JLabel" name="jLabel1">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="TimeFrame:"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="CurrentTimeFrameLabel">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="null"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="CurrentHighwayLabel">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="null"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="jLabel2">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Highway:"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="jLabel3">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Station:"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="CurrentStationLabel">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="null"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="CurrentStationPostmileLabel">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="null"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="jLabel4">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Postmile:"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="jLabel5">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Location:"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="CurrentStationLocationLabel">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="null"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="CurrentLoopDetectorLabel">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="null"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="jLabel6">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Loop:"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="jLabel7">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Type:"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="CurrentLoopDetectorTypeLabel">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="null"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="CurrentLoopDetectorDescLabel">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="null"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="jLabel8">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Desc:"/>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel7">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
+                <BevelBorder/>
+              </Border>
+            </Property>
+          </Properties>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="DeleteEventButton" alignment="0" pref="237" max="32767" attributes="0"/>
+                          <Group type="102" attributes="0">
+                              <Group type="103" groupAlignment="0" attributes="0">
+                                  <Component id="RedButton" min="-2" max="-2" attributes="0"/>
+                                  <Component id="YellowButton" alignment="0" min="-2" max="-2" attributes="0"/>
+                                  <Component id="GreenButton" alignment="0" min="-2" max="-2" attributes="0"/>
+                              </Group>
+                              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
+                          </Group>
+                          <Component id="AddNewEventButton" alignment="0" max="32767" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="GreenButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
+                      <Component id="YellowButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="RedButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="separate" max="-2" attributes="0"/>
+                      <Component id="AddNewEventButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="DeleteEventButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace pref="22" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JRadioButton" name="GreenButton">
+              <Properties>
+                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+                  <ComponentRef name="colorRadioButtons"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Green"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JRadioButton" name="YellowButton">
+              <Properties>
+                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+                  <ComponentRef name="colorRadioButtons"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Yellow"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JRadioButton" name="RedButton">
+              <Properties>
+                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+                  <ComponentRef name="colorRadioButtons"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Red"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JButton" name="AddNewEventButton">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Add Event"/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="AddLaneEventButtonActionPerformed"/>
+              </Events>
+            </Component>
+            <Component class="javax.swing.JButton" name="DeleteEventButton">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Delete Event"/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="DeleteEventButtonActonPerformed"/>
+              </Events>
+            </Component>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPanel" name="jPanel11">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+            <TitledBorder title="Preview and Import/Export Panel">
+              <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
+                <LineBorder/>
+              </Border>
+            </TitledBorder>
+          </Border>
+        </Property>
+      </Properties>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jPanel12" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace type="separate" max="-2" attributes="0"/>
+                  <Component id="jPanel13" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace type="separate" max="-2" attributes="0"/>
+                  <Component id="jPanel14" max="32767" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="jPanel13" alignment="1" max="32767" attributes="0"/>
+                      <Component id="jPanel12" alignment="1" max="32767" attributes="0"/>
+                      <Component id="jPanel14" alignment="0" max="32767" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Container class="javax.swing.JPanel" name="jPanel12">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                <TitledBorder title="Frame Preview">
+                  <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
+                    <BevelBorder/>
+                  </Border>
+                </TitledBorder>
+              </Border>
+            </Property>
+          </Properties>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                          <Component id="SinglePreviewHighwaysButton" max="32767" attributes="0"/>
+                          <Component id="SinglePreviewStationButton" max="32767" attributes="0"/>
+                      </Group>
+                      <EmptySpace pref="15" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="SinglePreviewStationButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="SinglePreviewHighwaysButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JButton" name="SinglePreviewStationButton">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Preview Station"/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="SinglePreviewStationButtonActionPerformed"/>
+              </Events>
+            </Component>
+            <Component class="javax.swing.JButton" name="SinglePreviewHighwaysButton">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Preview Highways"/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="SinglePreviewHighwaysButtonActionPerformed"/>
+              </Events>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel13">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                <TitledBorder title="Cumulative Preview">
+                  <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
+                    <BevelBorder/>
+                  </Border>
+                </TitledBorder>
+              </Border>
+            </Property>
+          </Properties>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                          <Component id="CumulativePreviewHighwaysButton" max="32767" attributes="0"/>
+                          <Component id="CumulativePreviewStationButton" max="32767" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="CumulativePreviewStationButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="CumulativePreviewHighwaysButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JButton" name="CumulativePreviewStationButton">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Preview Station"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JButton" name="CumulativePreviewHighwaysButton">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Preview Highways"/>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel14">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                <TitledBorder title="Export/Import Scripts">
+                  <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
+                    <BevelBorder/>
+                  </Border>
+                </TitledBorder>
+              </Border>
+            </Property>
+          </Properties>
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                          <Component id="jButton3" alignment="0" max="32767" attributes="0"/>
+                          <Component id="jButton2" alignment="0" max="32767" attributes="0"/>
+                          <Component id="jButton1" alignment="0" max="32767" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jButton1" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jButton2" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jButton3" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JButton" name="jButton1">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Load Script"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JButton" name="jButton2">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Save Script"/>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JButton" name="jButton3">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Save Script As"/>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
Index: trunk/src/atmsdriver/ConsoleTrafficDriver.java
===================================================================
--- trunk/src/atmsdriver/ConsoleTrafficDriver.java	(revision 234)
+++ trunk/src/atmsdriver/ConsoleTrafficDriver.java	(revision 237)
@@ -79,5 +79,5 @@
             ConsoleDriverProperties.load(new FileInputStream(System.getProperty("ATMSDRIVER_PROPERTIES")));
         } catch (Exception e) {
-            Logger.getLogger("CosoleDriver").logp(Level.SEVERE, "ConsoleDriver",
+            Logger.getLogger("ConsoleDriver").logp(Level.SEVERE, "ConsoleDriver",
                     "Constructor", "Exception in reading properties file.", e);
         }
