Index: /branches/ScriptBuilder4/.cvsignore
===================================================================
--- /branches/ScriptBuilder4/.cvsignore	(revision 6)
+++ /branches/ScriptBuilder4/.cvsignore	(revision 6)
@@ -0,0 +1,3 @@
+.DS_Store
+build
+dist
Index: /branches/ScriptBuilder4/build.xml
===================================================================
--- /branches/ScriptBuilder4/build.xml	(revision 6)
+++ /branches/ScriptBuilder4/build.xml	(revision 6)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="ScriptBuilder" default="default" basedir=".">
+    <description>Builds, tests, and runs the project ScriptBuilder.</description>
+    <import file="nbproject/build-impl.xml"/>
+    <!--
+
+    There exist several targets which are by default empty and which can be 
+    used for execution of your tasks. These targets are usually executed 
+    before and after some main targets. They are: 
+
+      -pre-init:                 called before initialization of project properties
+      -post-init:                called after initialization of project properties
+      -pre-compile:              called before javac compilation
+      -post-compile:             called after javac compilation
+      -pre-compile-single:       called before javac compilation of single file
+      -post-compile-single:      called after javac compilation of single file
+      -pre-compile-test:         called before javac compilation of JUnit tests
+      -post-compile-test:        called after javac compilation of JUnit tests
+      -pre-compile-test-single:  called before javac compilation of single JUnit test
+      -post-compile-test-single: called after javac compilation of single JUunit test
+      -pre-jar:                  called before JAR building
+      -post-jar:                 called after JAR building
+      -post-clean:               called after cleaning build products
+
+    (Targets beginning with '-' are not intended to be called on their own.)
+
+    Example of inserting an obfuscator after compilation could look like this:
+
+        <target name="-post-compile">
+            <obfuscate>
+                <fileset dir="${build.classes.dir}"/>
+            </obfuscate>
+        </target>
+
+    For list of available properties check the imported 
+    nbproject/build-impl.xml file. 
+
+
+    Another way to customize the build is by overriding existing main targets.
+    The targets of interest are: 
+
+      -init-macrodef-javac:     defines macro for javac compilation
+      -init-macrodef-junit:     defines macro for junit execution
+      -init-macrodef-debug:     defines macro for class debugging
+      -init-macrodef-java:      defines macro for class execution
+      -do-jar-with-manifest:    JAR building (if you are using a manifest)
+      -do-jar-without-manifest: JAR building (if you are not using a manifest)
+      run:                      execution of project 
+      -javadoc-build:           Javadoc generation
+      test-report:              JUnit report generation
+
+    An example of overriding the target for project execution could look like this:
+
+        <target name="run" depends="ScriptBuilder-impl.jar">
+            <exec dir="bin" executable="launcher.exe">
+                <arg file="${dist.jar}"/>
+            </exec>
+        </target>
+
+    Notice that the overridden target depends on the jar target and not only on 
+    the compile target as the regular run target does. Again, for a list of available 
+    properties which you can use, check the target you are overriding in the
+    nbproject/build-impl.xml file. 
+
+    -->
+</project>
Index: /branches/ScriptBuilder4/build/built-jar.properties
===================================================================
--- /branches/ScriptBuilder4/build/built-jar.properties	(revision 6)
+++ /branches/ScriptBuilder4/build/built-jar.properties	(revision 6)
@@ -0,0 +1,4 @@
+#Tue, 18 Jul 2017 06:27:31 -0800
+
+
+/home/jdalbey/Downloads/ScriptBuilder4=
Index: /branches/ScriptBuilder4/nbproject/project.xml
===================================================================
--- /branches/ScriptBuilder4/nbproject/project.xml	(revision 6)
+++ /branches/ScriptBuilder4/nbproject/project.xml	(revision 6)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.java.j2seproject</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
+            <name>ScriptBuilder</name>
+            <source-roots>
+                <root id="src.dir"/>
+            </source-roots>
+            <test-roots>
+                <root id="test.src.dir"/>
+            </test-roots>
+        </data>
+    </configuration>
+</project>
Index: /branches/ScriptBuilder4/nbproject/genfiles.properties
===================================================================
--- /branches/ScriptBuilder4/nbproject/genfiles.properties	(revision 6)
+++ /branches/ScriptBuilder4/nbproject/genfiles.properties	(revision 6)
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=c690a94a
+build.xml.script.CRC32=bc533468
+build.xml.stylesheet.CRC32=28e38971@1.56.1.46
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=c690a94a
+nbproject/build-impl.xml.script.CRC32=1a245ef2
+nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.56.1.46
Index: /branches/ScriptBuilder4/nbproject/private/private.properties
===================================================================
--- /branches/ScriptBuilder4/nbproject/private/private.properties	(revision 6)
+++ /branches/ScriptBuilder4/nbproject/private/private.properties	(revision 6)
@@ -0,0 +1,1 @@
+user.properties.file=/home/jdalbey/.netbeans/7.3.1/build.properties
Index: /branches/ScriptBuilder4/nbproject/.cvsignore
===================================================================
--- /branches/ScriptBuilder4/nbproject/.cvsignore	(revision 6)
+++ /branches/ScriptBuilder4/nbproject/.cvsignore	(revision 6)
@@ -0,0 +1,1 @@
+private
Index: /branches/ScriptBuilder4/nbproject/build-impl.xml
===================================================================
--- /branches/ScriptBuilder4/nbproject/build-impl.xml	(revision 6)
+++ /branches/ScriptBuilder4/nbproject/build-impl.xml	(revision 6)
@@ -0,0 +1,1411 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT  ***
+***         EDIT ../build.xml INSTEAD         ***
+
+For the purpose of easier reading the script
+is divided into following sections:
+
+  - initialization
+  - compilation
+  - jar
+  - execution
+  - debugging
+  - javadoc
+  - test compilation
+  - test execution
+  - test debugging
+  - applet
+  - cleanup
+
+        -->
+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="ScriptBuilder-impl">
+    <fail message="Please build using Ant 1.8.0 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.8.0"/>
+            </not>
+        </condition>
+    </fail>
+    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
+    <!-- 
+                ======================
+                INITIALIZATION SECTION 
+                ======================
+            -->
+    <target name="-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init" name="-init-private">
+        <property file="nbproject/private/config.properties"/>
+        <property file="nbproject/private/configs/${config}.properties"/>
+        <property file="nbproject/private/private.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private" name="-init-user">
+        <property file="${user.properties.file}"/>
+        <!-- The two properties below are usually overridden -->
+        <!-- by the active platform. Just a fallback. -->
+        <property name="default.javac.source" value="1.4"/>
+        <property name="default.javac.target" value="1.4"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
+        <property file="nbproject/configs/${config}.properties"/>
+        <property file="nbproject/project.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
+        <available file="${manifest.file}" property="manifest.available"/>
+        <condition property="splashscreen.available">
+            <and>
+                <not>
+                    <equals arg1="${application.splash}" arg2="" trim="true"/>
+                </not>
+                <available file="${application.splash}"/>
+            </and>
+        </condition>
+        <condition property="main.class.available">
+            <and>
+                <isset property="main.class"/>
+                <not>
+                    <equals arg1="${main.class}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="manifest.available+main.class">
+            <and>
+                <isset property="manifest.available"/>
+                <isset property="main.class.available"/>
+            </and>
+        </condition>
+        <condition property="do.archive">
+            <not>
+                <istrue value="${jar.archive.disabled}"/>
+            </not>
+        </condition>
+        <condition property="do.mkdist">
+            <and>
+                <isset property="do.archive"/>
+                <isset property="libs.CopyLibs.classpath"/>
+                <not>
+                    <istrue value="${mkdist.disabled}"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="manifest.available+main.class+mkdist.available">
+            <and>
+                <istrue value="${manifest.available+main.class}"/>
+                <isset property="do.mkdist"/>
+            </and>
+        </condition>
+        <condition property="do.archive+manifest.available">
+            <and>
+                <isset property="manifest.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+main.class.available">
+            <and>
+                <isset property="main.class.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+splashscreen.available">
+            <and>
+                <isset property="splashscreen.available"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="do.archive+manifest.available+main.class">
+            <and>
+                <istrue value="${manifest.available+main.class}"/>
+                <istrue value="${do.archive}"/>
+            </and>
+        </condition>
+        <condition property="manifest.available-mkdist.available">
+            <or>
+                <istrue value="${manifest.available}"/>
+                <isset property="do.mkdist"/>
+            </or>
+        </condition>
+        <condition property="manifest.available+main.class-mkdist.available">
+            <or>
+                <istrue value="${manifest.available+main.class}"/>
+                <isset property="do.mkdist"/>
+            </or>
+        </condition>
+        <condition property="have.tests">
+            <or>
+                <available file="${test.src.dir}"/>
+            </or>
+        </condition>
+        <condition property="have.sources">
+            <or>
+                <available file="${src.dir}"/>
+            </or>
+        </condition>
+        <condition property="netbeans.home+have.tests">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="have.tests"/>
+            </and>
+        </condition>
+        <condition property="no.javadoc.preview">
+            <and>
+                <isset property="javadoc.preview"/>
+                <isfalse value="${javadoc.preview}"/>
+            </and>
+        </condition>
+        <property name="run.jvmargs" value=""/>
+        <property name="run.jvmargs.ide" value=""/>
+        <property name="javac.compilerargs" value=""/>
+        <property name="work.dir" value="${basedir}"/>
+        <condition property="no.deps">
+            <and>
+                <istrue value="${no.dependencies}"/>
+            </and>
+        </condition>
+        <property name="javac.debug" value="true"/>
+        <property name="javadoc.preview" value="true"/>
+        <property name="application.args" value=""/>
+        <property name="source.encoding" value="${file.encoding}"/>
+        <property name="runtime.encoding" value="${source.encoding}"/>
+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+            <and>
+                <isset property="javadoc.encoding"/>
+                <not>
+                    <equals arg1="${javadoc.encoding}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>
+        <property name="includes" value="**"/>
+        <property name="excludes" value=""/>
+        <property name="do.depend" value="false"/>
+        <condition property="do.depend.true">
+            <istrue value="${do.depend}"/>
+        </condition>
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+            <length length="0" string="${endorsed.classpath}" when="greater"/>
+        </condition>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <property name="javac.fork" value="${jdkBug6558476}"/>
+        <property name="jar.index" value="false"/>
+        <property name="jar.index.metainf" value="${jar.index}"/>
+        <property name="copylibs.rebase" value="true"/>
+        <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
+        <condition property="junit.available">
+            <or>
+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>
+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
+            </or>
+        </condition>
+        <condition property="testng.available">
+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
+        </condition>
+        <condition property="junit+testng.available">
+            <and>
+                <istrue value="${junit.available}"/>
+                <istrue value="${testng.available}"/>
+            </and>
+        </condition>
+        <condition else="testng" property="testng.mode" value="mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+        <condition else="" property="testng.debug.mode" value="-mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+    </target>
+    <target name="-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
+        <fail unless="src.dir">Must set src.dir</fail>
+        <fail unless="test.src.dir">Must set test.src.dir</fail>
+        <fail unless="build.dir">Must set build.dir</fail>
+        <fail unless="dist.dir">Must set dist.dir</fail>
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+        <fail unless="dist.jar">Must set dist.jar</fail>
+    </target>
+    <target name="-init-macrodef-property">
+        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${@{value}}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <mkdir dir="@{apgeneratedsrcdir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <compilerarg value="-processorpath"/>
+                    <compilerarg path="@{processorpath}:${empty.dir}"/>
+                    <compilerarg line="${ap.processors.internal}"/>
+                    <compilerarg line="${annotation.processing.processor.options}"/>
+                    <compilerarg value="-s"/>
+                    <compilerarg path="@{apgeneratedsrcdir}"/>
+                    <compilerarg line="${ap.proc.none.internal}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <sequential>
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </depend>
+            </sequential>
+        </macrodef>
+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <sequential>
+                <fail unless="javac.includes">Must set javac.includes</fail>
+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
+                    <path>
+                        <filelist dir="@{destdir}" files="${javac.includes}"/>
+                    </path>
+                    <globmapper from="*.java" to="*.class"/>
+                </pathconvert>
+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
+                <delete>
+                    <files includesfile="${javac.includesfile.binary}"/>
+                </delete>
+                <delete>
+                    <fileset file="${javac.includesfile.binary}"/>
+                </delete>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-init">
+        <condition else="false" property="nb.junit.batch" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <not>
+                    <isset property="test.method"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="nb.junit.single" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <isset property="test.method"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-init-test-properties">
+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
+        <property name="test.binarytestincludes" value=""/>
+        <property name="test.binaryexcludes" value=""/>
+    </target>
+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
+    <target if="${testng.available}" name="-init-macrodef-testng">
+        <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
+                    <isset property="test.method"/>
+                </condition>
+                <union id="test.set">
+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
+                </union>
+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
+                <testng classfilesetref="test.set" failureProperty="tests.failed" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="ScriptBuilder" testname="TestNG tests" workingDir="${work.dir}">
+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
+                    <propertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </propertyset>
+                    <customize/>
+                </testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-test-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <echo>No tests executed.</echo>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
+        <macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <sequential>
+                <j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${run.jvmargs}"/>
+                        <jvmarg line="${run.jvmargs.ide}"/>
+                    </customize>
+                </j2seproject3:test-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="junit.forkmode" value="perTest"/>
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </j2seproject3:junit-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${testng.available}" name="-init-macrodef-testng-debug">
+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element name="customize2" optional="true"/>
+            <sequential>
+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
+                    <isset property="test.method"/>
+                </condition>
+                <condition else="-suitename ScriptBuilder -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
+                    <matches pattern=".*\.xml" string="@{testClass}"/>
+                </condition>
+                <delete dir="${build.test.results.dir}" quiet="true"/>
+                <mkdir dir="${build.test.results.dir}"/>
+                <j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">
+                    <customize>
+                        <customize2/>
+                        <jvmarg value="-ea"/>
+                        <arg line="${testng.debug.mode}"/>
+                        <arg line="-d ${build.test.results.dir}"/>
+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>
+                        <arg line="${testng.cmd.args}"/>
+                    </customize>
+                </j2seproject3:debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element implicit="true" name="customize2" optional="true"/>
+            <sequential>
+                <j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2/>
+                </j2seproject3:testng-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${run.jvmargs}"/>
+                        <jvmarg line="${run.jvmargs.ide}"/>
+                    </customize>
+                </j2seproject3:test-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2>
+                        <syspropertyset>
+                            <propertyref prefix="test-sys-prop."/>
+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                        </syspropertyset>
+                    </customize2>
+                </j2seproject3:testng-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
+    <!--
+                pre NB7.2 profiling section; consider it deprecated
+            -->
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
+    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">
+        <macrodef name="resolve">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${env.@{value}}"/>
+            </sequential>
+        </macrodef>
+        <macrodef name="profile">
+            <attribute default="${main.class}" name="classname"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property environment="env"/>
+                <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
+                <java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="${profiler.info.jvmargs.agent}"/>
+                    <jvmarg line="${profiler.info.jvmargs}"/>
+                    <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+                    <arg line="${application.args}"/>
+                    <classpath>
+                        <path path="${run.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">
+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
+    </target>
+    <!--
+                end of pre NB7.2 profiling section
+            -->
+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${main.class}" name="name"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <attribute default="" name="stopclassname"/>
+            <sequential>
+                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </nbjpdastart>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${build.classes.dir}" name="dir"/>
+            <sequential>
+                <nbjpdareload>
+                    <fileset dir="@{dir}" includes="${fix.classes}">
+                        <include name="${fix.includes}*.class"/>
+                    </fileset>
+                </nbjpdareload>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-debug">
+        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-java">
+        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${run.classpath}" name="classpath"/>
+            <attribute default="jvm" name="jvm"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-copylibs">
+        <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
+            <attribute default="${manifest.file}" name="manifest"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+                <pathconvert property="run.classpath.without.build.classes.dir">
+                    <path path="${run.classpath}"/>
+                    <map from="${build.classes.dir.resolved}" to=""/>
+                </pathconvert>
+                <pathconvert pathsep=" " property="jar.classpath">
+                    <path path="${run.classpath.without.build.classes.dir}"/>
+                    <chainedmapper>
+                        <flattenmapper/>
+                        <filtermapper>
+                            <replacestring from=" " to="%20"/>
+                        </filtermapper>
+                        <globmapper from="*" to="lib/*"/>
+                    </chainedmapper>
+                </pathconvert>
+                <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+                <copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
+                    <fileset dir="${build.classes.dir}"/>
+                    <manifest>
+                        <attribute name="Class-Path" value="${jar.classpath}"/>
+                        <customize/>
+                    </manifest>
+                </copylibs>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-presetdef-jar">
+        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
+            <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}">
+                <j2seproject1:fileset dir="${build.classes.dir}"/>
+            </jar>
+        </presetdef>
+    </target>
+    <target name="-init-ap-cmdline-properties">
+        <property name="annotation.processing.enabled" value="true"/>
+        <property name="annotation.processing.processors.list" value=""/>
+        <property name="annotation.processing.processor.options" value=""/>
+        <property name="annotation.processing.run.all.processors" value="true"/>
+        <property name="javac.processorpath" value="${javac.classpath}"/>
+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+        <condition property="ap.supported.internal" value="true">
+            <not>
+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+            <isfalse value="${annotation.processing.run.all.processors}"/>
+        </condition>
+        <condition else="" property="ap.proc.none.internal" value="-proc:none">
+            <isfalse value="${annotation.processing.enabled}"/>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+        <property name="ap.cmd.line.internal" value=""/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
+    <!--
+                ===================
+                COMPILATION SECTION
+                ===================
+            -->
+    <target name="-deps-jar-init" unless="built-jar.properties">
+        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>
+        <delete file="${built-jar.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
+        <echo level="warn" message="Cycle detected: ScriptBuilder was already built"/>
+    </target>
+    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-jar.properties}" verbose="false"/>
+        <property file="${built-jar.properties}" prefix="already.built.jar."/>
+        <antcall target="-warn-already-built-jar"/>
+        <propertyfile file="${built-jar.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+    </target>
+    <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
+    <target depends="init" name="-check-automatic-build">
+        <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
+    </target>
+    <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
+        <antcall target="clean"/>
+    </target>
+    <target depends="init,deps-jar" name="-pre-pre-compile">
+        <mkdir dir="${build.classes.dir}"/>
+    </target>
+    <target name="-pre-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-depend">
+        <pathconvert property="build.generated.subdirs">
+            <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="*"/>
+            </dirset>
+        </pathconvert>
+        <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
+        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target if="has.persistence.xml" name="-copy-persistence-xml">
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy todir="${build.classes.dir}/META-INF">
+            <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>
+        </copy>
+    </target>
+    <target name="-post-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
+    <target name="-pre-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <j2seproject3:force-recompile/>
+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>
+    </target>
+    <target name="-post-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
+    <!--
+                ====================
+                JAR BUILDING SECTION
+                ====================
+            -->
+    <target depends="init" name="-pre-pre-jar">
+        <dirname file="${dist.jar}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+    </target>
+    <target name="-pre-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">
+        <j2seproject1:jar/>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available">
+        <j2seproject1:jar manifest="${manifest.file}"/>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">
+        <j2seproject1:jar manifest="${manifest.file}">
+            <j2seproject1:manifest>
+                <j2seproject1:attribute name="Main-Class" value="${main.class}"/>
+            </j2seproject1:manifest>
+        </j2seproject1:jar>
+        <echo level="info">To run this application from the command line without Ant, try:</echo>
+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <pathconvert property="run.classpath.with.dist.jar">
+            <path path="${run.classpath}"/>
+            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
+        </pathconvert>
+        <echo level="info">java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
+    </target>
+    <target depends="init" if="do.archive" name="-do-jar-with-libraries-create-manifest" unless="manifest.available">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <touch file="${tmp.manifest.file}" verbose="false"/>
+    </target>
+    <target depends="init" if="do.archive+manifest.available" name="-do-jar-with-libraries-copy-manifest">
+        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+        <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>
+    </target>
+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+main.class.available" name="-do-jar-with-libraries-set-main">
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="Main-Class" value="${main.class}"/>
+        </manifest>
+    </target>
+    <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-with-libraries-set-splashscreen">
+        <basename file="${application.splash}" property="splashscreen.basename"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
+        <manifest file="${tmp.manifest.file}" mode="update">
+            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
+        </manifest>
+    </target>
+    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen" if="do.mkdist" name="-do-jar-with-libraries-pack">
+        <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+        <echo level="info">To run this application from the command line without Ant, try:</echo>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>
+    </target>
+    <target depends="-do-jar-with-libraries-pack" if="do.archive" name="-do-jar-with-libraries-delete-manifest">
+        <delete>
+            <fileset file="${tmp.manifest.file}"/>
+        </delete>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen,-do-jar-with-libraries-pack,-do-jar-with-libraries-delete-manifest" name="-do-jar-with-libraries"/>
+    <target name="-post-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR." name="jar"/>
+    <!--
+                =================
+                EXECUTION SECTION
+                =================
+            -->
+    <target depends="init,compile" description="Run a main class." name="run">
+        <j2seproject1:java>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <target name="-do-not-recompile">
+        <property name="javac.includes.binary" value=""/>
+    </target>
+    <target depends="init,compile-single" name="run-single">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}"/>
+    </target>
+    <target depends="init,compile-test-single" name="run-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+    </target>
+    <!--
+                =================
+                DEBUGGING SECTION
+                =================
+            -->
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+        <j2seproject1:nbjpdastart name="${debug.class}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+    </target>
+    <target depends="init,compile" name="-debug-start-debuggee">
+        <j2seproject3:debug>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
+    </target>
+    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+    <target depends="init" name="-pre-debug-fix">
+        <fail unless="fix.includes">Must set fix.includes</fail>
+        <property name="javac.includes" value="${fix.includes}.java"/>
+    </target>
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+        <j2seproject1:nbjpdareload/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+    <!--
+                =================
+                PROFILING SECTION
+                =================
+            -->
+    <!--
+                pre NB7.2 profiler integration
+            -->
+    <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile/>
+    </target>
+    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">
+        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="${profile.class}"/>
+    </target>
+    <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <profile classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </profile>
+    </target>
+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg line="${profiler.info.jvmargs}"/>
+            <test name="${profile.class}"/>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+            </classpath>
+            <syspropertyset>
+                <propertyref prefix="test-sys-prop."/>
+                <mapper from="test-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+            <formatter type="brief" usefile="false"/>
+            <formatter type="xml"/>
+        </junit>
+    </target>
+    <!--
+                end of pre NB72 profiling section
+            -->
+    <target if="netbeans.home" name="-profile-check">
+        <condition property="profiler.configured">
+            <or>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+            </or>
+        </condition>
+    </target>
+    <target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
+        <startprofiler/>
+        <antcall target="run"/>
+    </target>
+    <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcall target="run-single"/>
+    </target>
+    <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>
+    <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <startprofiler/>
+        <antcall target="test-single"/>
+    </target>
+    <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <startprofiler/>
+        <antcal target="run-test-with-main"/>
+    </target>
+    <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <startprofiler/>
+        <antcall target="run-applet"/>
+    </target>
+    <!--
+                ===============
+                JAVADOC SECTION
+                ===============
+            -->
+    <target depends="init" if="have.sources" name="-javadoc-build">
+        <mkdir dir="${dist.javadoc.dir}"/>
+        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">
+            <and>
+                <isset property="endorsed.classpath.cmd.line.arg"/>
+                <not>
+                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+            <classpath>
+                <path path="${javac.classpath}"/>
+            </classpath>
+            <fileset dir="${src.dir}" excludes="*.java,${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/*.java"/>
+                <exclude name="*.java"/>
+            </fileset>
+            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
+        </javadoc>
+        <copy todir="${dist.javadoc.dir}">
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/doc-files/**"/>
+            </fileset>
+        </copy>
+    </target>
+    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+    </target>
+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
+    <!--
+                =========================
+                TEST COMPILATION SECTION
+                =========================
+            -->
+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+        <mkdir dir="${build.test.classes.dir}"/>
+    </target>
+    <target name="-pre-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-test-depend">
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+    <target name="-pre-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+    <!--
+                =======================
+                TEST EXECUTION SECTION
+                =======================
+            -->
+    <target depends="init" if="have.tests" name="-pre-test-run">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
+        <j2seproject3:test testincludes="**/*Test.java"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init" if="have.tests" name="test-report"/>
+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+    <target depends="init" if="have.tests" name="-pre-test-run-single">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
+    <!--
+                =======================
+                TEST DEBUGGING SECTION
+                =======================
+            -->
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+    <!--
+                =========================
+                APPLET EXECUTION SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" name="run-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject1:java classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <!--
+                =========================
+                APPLET DEBUGGING  SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+        <j2seproject3:debug classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
+    <!--
+                ===============
+                CLEANUP SECTION
+                ===============
+            -->
+    <target name="-deps-clean-init" unless="built-clean.properties">
+        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>
+        <delete file="${built-clean.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
+        <echo level="warn" message="Cycle detected: ScriptBuilder was already built"/>
+    </target>
+    <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-clean.properties}" verbose="false"/>
+        <property file="${built-clean.properties}" prefix="already.built.clean."/>
+        <antcall target="-warn-already-built-clean"/>
+        <propertyfile file="${built-clean.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+    </target>
+    <target depends="init" name="-do-clean">
+        <delete dir="${build.dir}"/>
+        <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>
+    </target>
+    <target name="-post-clean">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
+    <target name="-check-call-dep">
+        <property file="${call.built.properties}" prefix="already.built."/>
+        <condition property="should.call.dep">
+            <and>
+                <not>
+                    <isset property="already.built.${call.subproject}"/>
+                </not>
+                <available file="${call.script}"/>
+            </and>
+        </condition>
+    </target>
+    <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">
+        <ant antfile="${call.script}" inheritall="false" target="${call.target}">
+            <propertyset>
+                <propertyref prefix="transfer."/>
+                <mapper from="transfer.*" to="*" type="glob"/>
+            </propertyset>
+        </ant>
+    </target>
+</project>
Index: /branches/ScriptBuilder4/nbproject/project.properties
===================================================================
--- /branches/ScriptBuilder4/nbproject/project.properties	(revision 6)
+++ /branches/ScriptBuilder4/nbproject/project.properties	(revision 6)
@@ -0,0 +1,72 @@
+application.title=ScriptBuilder
+application.vendor=nathaniellehrer
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+    ${run.classpath}
+debug.test.classpath=\
+    ${run.test.classpath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/ScriptBuilder.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+includes=**
+jar.compress=false
+javac.classpath=\
+    ${libs.swing-layout.classpath}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.source=1.5
+javac.target=1.5
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}:\
+    ${libs.junit.classpath}:\
+    ${libs.junit_4.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api"
+jnlp.codebase.type=local
+jnlp.descriptor=application
+jnlp.enabled=false
+jnlp.offline-allowed=false
+jnlp.signed=false
+main.class=scriptbuilder.gui.ScriptBuilderFrame
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+platform.active=default_platform
+run.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test
Index: /branches/ScriptBuilder4/manifest.mf
===================================================================
--- /branches/ScriptBuilder4/manifest.mf	(revision 6)
+++ /branches/ScriptBuilder4/manifest.mf	(revision 6)
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
Index: /branches/ScriptBuilder4/src/event/editor/TowPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/TowPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/TowPanel.form	(revision 6)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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 max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="help" pref="543" max="32767" attributes="0"/>
+                  <Component id="removeButton" alignment="1" min="-2" max="-2" attributes="0"/>
+                  <Group type="102" alignment="0" 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="jLabel4" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jTextField2" alignment="0" pref="396" max="32767" attributes="0"/>
+                          <Component id="jTextField1" alignment="0" pref="396" max="32767" attributes="0"/>
+                          <Component id="confirmationNumber" alignment="0" pref="396" max="32767" attributes="0"/>
+                          <Component id="publicNumber" alignment="0" pref="396" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="removeButton" min="-2" max="-2" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jTextField1" 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="confirmationNumber" 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="publicNumber" 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="jTextField2" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace pref="72" max="32767" attributes="0"/>
+              <Component id="help" min="-2" pref="20" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="removeThisProperty"/>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="removeButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Company"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField1">
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Confirmation Number"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="confirmationNumber">
+      <Properties>
+        <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor" preCode="try {" postCode="} catch (java.text.ParseException ex) {&#xa;ex.printStackTrace();&#xa;}">
+          <Format format="(###)###-####" subtype="-1" type="5"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Public Number"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="publicNumber">
+      <Properties>
+        <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor" preCode="try {" postCode="} catch (java.text.ParseException ex) {&#xa;ex.printStackTrace();&#xa;}">
+          <Format format="(###)###-####" subtype="-1" type="5"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel4">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Beat"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField2">
+    </Component>
+    <Component class="javax.swing.JLabel" name="help">
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/CMSEvaluationPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/CMSEvaluationPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/CMSEvaluationPanel.form	(revision 6)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="jScrollPane1" pref="584" max="32767" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="1" attributes="0">
+                      <Component id="removeButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jComboBox1" alignment="0" pref="520" max="32767" attributes="1"/>
+                          <Component id="jTextField1" alignment="0" pref="520" max="32767" attributes="0"/>
+                          <Component id="jFormattedTextField1" alignment="0" pref="520" max="32767" attributes="1"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
+                      <Component id="addButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="deleteButton" min="-2" pref="178" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="293" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace min="-2" pref="17" max="-2" attributes="0"/>
+              <Component id="removeButton" min="-2" max="-2" 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="jFormattedTextField1" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jComboBox1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jTextField1" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace min="-2" pref="31" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="deleteButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="addButton" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jScrollPane1" pref="191" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+        <Property name="toolTipText" type="java.lang.String" value="Removes this property"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="removeButtonremoveThisProperty"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Location"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField1">
+      <Properties>
+        <Property name="toolTipText" type="java.lang.String" value="Example: SB 55 @ WARNER AVE"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Type"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox1">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="3">
+            <StringItem index="0" value="Update"/>
+            <StringItem index="1" value="New"/>
+            <StringItem index="2" value="Remove"/>
+          </StringArray>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="jFormattedTextField1">
+      <Properties>
+        <Property name="toolTipText" type="java.lang.String" value="Example: 72"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="CMS ID"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="deleteButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Delete Selected Message"/>
+        <Property name="toolTipText" type="java.lang.String" value="Deletes the selected message from the table"/>
+      </Properties>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <Properties>
+        <Property name="horizontalScrollBar" type="javax.swing.JScrollBar" editor="org.netbeans.modules.form.ComponentChooserEditor">
+          <ComponentRef name="null"/>
+        </Property>
+      </Properties>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+    </Container>
+    <Component class="javax.swing.JButton" name="addButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Add Message"/>
+        <Property name="toolTipText" type="java.lang.String" value="Adds a message to the table"/>
+      </Properties>
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/WitnessPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/WitnessPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/WitnessPanel.java	(revision 6)
@@ -0,0 +1,128 @@
+package event.editor;
+
+import java.awt.event.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class WitnessPanel extends javax.swing.JPanel implements RemoveablePanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form WitnessPanel */
+    public WitnessPanel() {
+        initComponents();
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+    
+    /** 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() {
+
+        removeButton = new javax.swing.JButton();
+        jLabel1 = new javax.swing.JLabel();
+        jTextField1 = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        jTextField2 = new javax.swing.JTextField();
+        jLabel3 = new javax.swing.JLabel();
+        jTextField3 = new javax.swing.JTextField();
+        jLabel4 = new javax.swing.JLabel();
+        jFormattedTextField1 = new javax.swing.JFormattedTextField();
+
+        removeButton.setText("Remove");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                removeThisProperty(evt);
+            }
+        });
+
+        jLabel1.setText("First Name");
+
+        jLabel2.setText("Last Name");
+
+        jLabel3.setText("Street Address");
+
+        jLabel4.setText("Phone Number");
+
+        jFormattedTextField1.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("(###)###-####"))));
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+                    .add(removeButton)
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jLabel3)
+                            .add(jLabel1)
+                            .add(jLabel2))
+                        .add(15, 15, 15)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(org.jdesktop.layout.GroupLayout.TRAILING, jTextField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 547, Short.MAX_VALUE)
+                            .add(jTextField3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 547, Short.MAX_VALUE)
+                            .add(org.jdesktop.layout.GroupLayout.TRAILING, jTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 547, Short.MAX_VALUE)))
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
+                        .add(jLabel4)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(jFormattedTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 547, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(removeButton)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jLabel1))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jLabel2))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jTextField3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jLabel3))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel4)
+                    .add(jFormattedTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(168, Short.MAX_VALUE))
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void removeThisProperty(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeThisProperty
+        if (removeListener != null)
+        {
+            removeListener.actionPerformed(new ActionEvent(this, 0, ""));
+        }
+    }//GEN-LAST:event_removeThisProperty
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JFormattedTextField jFormattedTextField1;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JTextField jTextField1;
+    private javax.swing.JTextField jTextField2;
+    private javax.swing.JTextField jTextField3;
+    private javax.swing.JButton removeButton;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/CCTVPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/CCTVPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/CCTVPanel.java	(revision 6)
@@ -0,0 +1,159 @@
+package event.editor;
+
+import java.awt.event.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class CCTVPanel extends javax.swing.JPanel implements RemoveablePanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form CCTVInfoPanel */
+    public CCTVPanel() {
+        initComponents();
+
+        dir.addFocusListener(new FocusListener() {
+
+            public void focusGained(FocusEvent e) {
+                help.setText("Dir is an integer or decimal");
+            }
+
+            public void focusLost(FocusEvent e) {
+                help.setText("");
+            }
+
+        });
+
+        toggle.addFocusListener(new FocusListener() {
+
+            public void focusGained(FocusEvent e) {
+                help.setText("toggle is an integer or decimal");
+            }
+
+            public void focusLost(FocusEvent e) {
+                help.setText("");
+            }
+
+        });
+    }
+
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    public boolean isOptional()
+    {
+        return false;
+    }
+
+    /** 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() {
+
+        removeButton = new javax.swing.JButton();
+        jLabel1 = new javax.swing.JLabel();
+        dir = new javax.swing.JFormattedTextField();
+        jLabel3 = new javax.swing.JLabel();
+        jTextField1 = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        toggle = new javax.swing.JFormattedTextField();
+        help = new javax.swing.JLabel();
+
+        removeButton.setText("Remove");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                removeButtonremoveThisProperty(evt);
+            }
+        });
+        removeButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                removeButtonActionPerformed(evt);
+            }
+        });
+
+        jLabel1.setText("ID");
+
+        dir.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+
+        jLabel3.setText("Toggle");
+
+        jLabel2.setText("Dir");
+
+        toggle.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(org.jdesktop.layout.GroupLayout.TRAILING, help, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 540, Short.MAX_VALUE)
+                    .add(org.jdesktop.layout.GroupLayout.TRAILING, removeButton)
+                    .add(layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jLabel1)
+                            .add(jLabel2)
+                            .add(jLabel3))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 487, Short.MAX_VALUE)
+                            .add(dir, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 487, Short.MAX_VALUE)
+                            .add(toggle, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 487, Short.MAX_VALUE))))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(removeButton)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel1)
+                    .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel2)
+                    .add(dir, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel3)
+                    .add(toggle, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .add(48, 48, 48)
+                .add(help, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 13, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void removeButtonremoveThisProperty(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeButtonremoveThisProperty
+        if (removeListener != null) {
+            removeListener.actionPerformed(new ActionEvent(this, 0, ""));
+        }
+}//GEN-LAST:event_removeButtonremoveThisProperty
+
+    private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
+        // TODO add your handling code here:
+}//GEN-LAST:event_removeButtonActionPerformed
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JFormattedTextField dir;
+    private javax.swing.JLabel help;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JTextField jTextField1;
+    private javax.swing.JButton removeButton;
+    private javax.swing.JFormattedTextField toggle;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/ParamicsPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/ParamicsPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/ParamicsPanel.java	(revision 6)
@@ -0,0 +1,300 @@
+package event.editor;
+
+import java.awt.event.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class ParamicsPanel extends javax.swing.JPanel implements RemoveablePanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form ParamicsPanel */
+    public ParamicsPanel() {
+        initComponents();
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    /** 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() {
+
+        removeButton = new javax.swing.JButton();
+        jLabel1 = new javax.swing.JLabel();
+        jLabel2 = new javax.swing.JLabel();
+        jComboBox1 = new javax.swing.JComboBox();
+        jComboBox2 = new javax.swing.JComboBox();
+        jLabel3 = new javax.swing.JLabel();
+        jLabel4 = new javax.swing.JLabel();
+        jCheckBox1 = new javax.swing.JCheckBox();
+        jCheckBox2 = new javax.swing.JCheckBox();
+        jCheckBox3 = new javax.swing.JCheckBox();
+        jCheckBox4 = new javax.swing.JCheckBox();
+        jCheckBox5 = new javax.swing.JCheckBox();
+        jCheckBox6 = new javax.swing.JCheckBox();
+        jCheckBox7 = new javax.swing.JCheckBox();
+        jCheckBox8 = new javax.swing.JCheckBox();
+        jCheckBox9 = new javax.swing.JCheckBox();
+        jCheckBox10 = new javax.swing.JCheckBox();
+        jComboBox3 = new javax.swing.JComboBox();
+
+        removeButton.setText("Remove");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                removeThisProperty(evt);
+            }
+        });
+
+        jLabel1.setText("Location");
+
+        jLabel2.setText("Status");
+
+        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "New", "Changed", "Cleared" }));
+
+        jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Lane Breakdown", "Lane Obstruction" }));
+
+        jLabel3.setText("Incident Type");
+
+        jLabel4.setText("Lanes affected:");
+
+        jCheckBox1.setText("Lane 1");
+        jCheckBox1.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox1ActionPerformed(evt);
+            }
+        });
+
+        jCheckBox2.setText("Lane 2");
+        jCheckBox2.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox2ActionPerformed(evt);
+            }
+        });
+
+        jCheckBox3.setText("Lane 3");
+        jCheckBox3.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox3ActionPerformed(evt);
+            }
+        });
+
+        jCheckBox4.setText("Lane 4");
+        jCheckBox4.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox4ActionPerformed(evt);
+            }
+        });
+
+        jCheckBox5.setText("Lane 5");
+        jCheckBox5.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox5ActionPerformed(evt);
+            }
+        });
+
+        jCheckBox6.setText("Lane 8");
+        jCheckBox6.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox6ActionPerformed(evt);
+            }
+        });
+
+        jCheckBox7.setText("Lane 6");
+        jCheckBox7.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox7ActionPerformed(evt);
+            }
+        });
+
+        jCheckBox8.setText("Lane 7");
+        jCheckBox8.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox8ActionPerformed(evt);
+            }
+        });
+
+        jCheckBox9.setText("Lane 10");
+        jCheckBox9.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox9ActionPerformed(evt);
+            }
+        });
+
+        jCheckBox10.setText("Lane 9");
+        jCheckBox10.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox10ActionPerformed(evt);
+            }
+        });
+
+        jComboBox3.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "187_S_55_ML", "187_N_405_HV" }));
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, jLabel3)
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
+                        .add(jLabel4)
+                        .add(18, 18, 18)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jCheckBox2)
+                            .add(jCheckBox1))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jCheckBox3)
+                            .add(jCheckBox4))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+                            .add(jCheckBox7)
+                            .add(jCheckBox5))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jCheckBox8)
+                            .add(jCheckBox6))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jCheckBox10)
+                            .add(jCheckBox9)))
+                    .add(removeButton)
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jLabel1)
+                            .add(jLabel2))
+                        .add(36, 36, 36)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(org.jdesktop.layout.GroupLayout.TRAILING, jComboBox2, 0, 597, Short.MAX_VALUE)
+                            .add(jComboBox1, 0, 597, Short.MAX_VALUE)
+                            .add(jComboBox3, 0, 597, Short.MAX_VALUE))))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(removeButton)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel1)
+                    .add(jComboBox3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jLabel2))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel3)
+                    .add(jComboBox2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .add(18, 18, 18)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+                    .add(layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                            .add(jLabel4)
+                            .add(jCheckBox1))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(jCheckBox2))
+                    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                        .add(layout.createSequentialGroup()
+                            .add(jCheckBox5)
+                            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                            .add(jCheckBox7))
+                        .add(layout.createSequentialGroup()
+                            .add(jCheckBox3)
+                            .add(2, 2, 2)
+                            .add(jCheckBox4))
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+                            .add(layout.createSequentialGroup()
+                                .add(jCheckBox10)
+                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                                .add(jCheckBox9))
+                            .add(layout.createSequentialGroup()
+                                .add(jCheckBox8)
+                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                                .add(jCheckBox6)))))
+                .addContainerGap(116, Short.MAX_VALUE))
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void removeThisProperty(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeThisProperty
+        if (removeListener != null)
+        {
+            removeListener.actionPerformed(new ActionEvent(this, 0, ""));
+        }    
+    }//GEN-LAST:event_removeThisProperty
+
+    private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox1ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox1ActionPerformed
+
+    private void jCheckBox2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox2ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox2ActionPerformed
+
+    private void jCheckBox3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox3ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox3ActionPerformed
+
+    private void jCheckBox4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox4ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox4ActionPerformed
+
+    private void jCheckBox5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox5ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox5ActionPerformed
+
+    private void jCheckBox6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox6ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox6ActionPerformed
+
+    private void jCheckBox7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox7ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox7ActionPerformed
+
+    private void jCheckBox8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox8ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox8ActionPerformed
+
+    private void jCheckBox9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox9ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox9ActionPerformed
+
+    private void jCheckBox10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox10ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox10ActionPerformed
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JCheckBox jCheckBox1;
+    private javax.swing.JCheckBox jCheckBox10;
+    private javax.swing.JCheckBox jCheckBox2;
+    private javax.swing.JCheckBox jCheckBox3;
+    private javax.swing.JCheckBox jCheckBox4;
+    private javax.swing.JCheckBox jCheckBox5;
+    private javax.swing.JCheckBox jCheckBox6;
+    private javax.swing.JCheckBox jCheckBox7;
+    private javax.swing.JCheckBox jCheckBox8;
+    private javax.swing.JCheckBox jCheckBox9;
+    private javax.swing.JComboBox jComboBox1;
+    private javax.swing.JComboBox jComboBox2;
+    private javax.swing.JComboBox jComboBox3;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JButton removeButton;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/UnitPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/UnitPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/UnitPanel.form	(revision 6)
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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 max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="removeButton" alignment="1" min="-2" max="-2" attributes="0"/>
+                  <Component id="help" alignment="1" pref="565" max="32767" attributes="0"/>
+                  <Group type="102" alignment="0" 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"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jComboBox1" pref="475" max="32767" attributes="0"/>
+                          <Component id="unitNumber" alignment="0" pref="475" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel4" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace min="-2" pref="43" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jComboBox3" alignment="0" pref="475" max="32767" attributes="0"/>
+                          <Component id="jComboBox2" alignment="0" pref="475" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+              </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="removeButton" min="-2" max="-2" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="unitNumber" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jComboBox1" 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="jComboBox2" 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="jComboBox3" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace pref="128" max="32767" attributes="0"/>
+              <Component id="help" min="-2" pref="20" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Unit Number"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="unitNumber">
+      <Properties>
+        <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor" preCode="try {" postCode="} catch (java.text.ParseException ex) {&#xa;ex.printStackTrace();&#xa;}">
+          <Format format="#-#" subtype="-1" type="5"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="removeThisProperty"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Status"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox1">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="3">
+            <StringItem index="0" value="1098"/>
+            <StringItem index="1" value="1097"/>
+            <StringItem index="2" value="ENRT"/>
+          </StringArray>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Primary"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox2">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="2">
+            <StringItem index="0" value="True"/>
+            <StringItem index="1" value="False"/>
+          </StringArray>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel4">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Active"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox3">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="2">
+            <StringItem index="0" value="True"/>
+            <StringItem index="1" value="False"/>
+          </StringArray>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="help">
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/MaintenanceRadioPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/MaintenanceRadioPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/MaintenanceRadioPanel.java	(revision 6)
@@ -0,0 +1,67 @@
+package event.editor;
+
+import java.awt.event.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class MaintenanceRadioPanel extends javax.swing.JPanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form MaintenanceRadio */
+    public MaintenanceRadioPanel() {
+        initComponents();
+    }
+
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jTextArea1 = new javax.swing.JTextArea();
+        jLabel1 = new javax.swing.JLabel();
+
+        jTextArea1.setColumns(20);
+        jTextArea1.setRows(5);
+        jTextArea1.setToolTipText("The radio transmission");
+        jScrollPane1.setViewportView(jTextArea1);
+
+        jLabel1.setText("Transmission:");
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 583, Short.MAX_VALUE)
+                    .add(jLabel1))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(jLabel1)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextArea jTextArea1;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/AudioPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/AudioPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/AudioPanel.java	(revision 6)
@@ -0,0 +1,137 @@
+package event.editor;
+
+import java.awt.event.*;
+import javax.swing.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class AudioPanel extends javax.swing.JPanel implements RemoveablePanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form AudioPanel */
+    public AudioPanel() {
+        initComponents();
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    /** 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() {
+
+        removeButton = new javax.swing.JButton();
+        jLabel1 = new javax.swing.JLabel();
+        audioText = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        jFormattedTextField1 = new javax.swing.JFormattedTextField();
+        browseButton = new javax.swing.JButton();
+
+        removeButton.setText("Remove");
+        removeButton.setToolTipText("Removes this property");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                removeThisProperty(evt);
+            }
+        });
+        removeButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                removeButtonActionPerformed(evt);
+            }
+        });
+
+        jLabel1.setText("Audio File");
+
+        audioText.setToolTipText("The path to the audio file");
+
+        jLabel2.setText("Length");
+
+        jFormattedTextField1.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(java.text.NumberFormat.getIntegerInstance())));
+
+        browseButton.setText("Browse");
+        browseButton.setToolTipText("Browse for the audio file");
+        browseButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                browse(evt);
+            }
+        });
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(org.jdesktop.layout.GroupLayout.TRAILING, removeButton)
+                    .add(layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jLabel1)
+                            .add(jLabel2))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(layout.createSequentialGroup()
+                                .add(audioText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 395, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                                .add(browseButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 93, Short.MAX_VALUE))
+                            .add(jFormattedTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE))))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(removeButton)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(audioText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jLabel1)
+                    .add(browseButton))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jFormattedTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jLabel2))
+                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_removeButtonActionPerformed
+
+    private void removeThisProperty(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeThisProperty
+        if (removeListener != null)
+        {
+            removeListener.actionPerformed(new ActionEvent(this, 0, ""));
+        }
+    }//GEN-LAST:event_removeThisProperty
+
+    private void browse(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_browse
+        JFileChooser browser = new JFileChooser();
+        int returnVal = browser.showOpenDialog(this);
+        if(returnVal == JFileChooser.APPROVE_OPTION) {
+           audioText.setText(browser.getSelectedFile().getPath());
+        }
+    }//GEN-LAST:event_browse
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JTextField audioText;
+    private javax.swing.JButton browseButton;
+    private javax.swing.JFormattedTextField jFormattedTextField1;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JButton removeButton;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/GenericEvaluationPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/GenericEvaluationPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/GenericEvaluationPanel.java	(revision 6)
@@ -0,0 +1,97 @@
+package event.editor;
+
+import java.awt.event.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class GenericEvaluationPanel extends javax.swing.JPanel implements RemoveablePanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form GenericEvaluation */
+    public GenericEvaluationPanel() {
+        initComponents();
+
+        GenericTable.genericizeTable(
+                jScrollPane1, jComboBox1, addButton, deleteButton, "Scale", "Criteria");
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    /** 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() {
+
+        addButton = new javax.swing.JButton();
+        deleteButton = new javax.swing.JButton();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jComboBox1 = new javax.swing.JComboBox();
+        jLabel1 = new javax.swing.JLabel();
+
+        addButton.setText("Add Criteria");
+        addButton.setToolTipText("Adds a new row in the table below");
+
+        deleteButton.setText("Delete Selected Criteria");
+        deleteButton.setToolTipText("Deletes the selected row in the table below");
+
+        jScrollPane1.setToolTipText("");
+
+        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Yes/No", "1-5", "1-10", "Written" }));
+        jComboBox1.setToolTipText("The type of criteria evaluation scale to be used");
+
+        jLabel1.setText("Criteria Evaluation Scale:");
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 598, Short.MAX_VALUE)
+                    .add(layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 200, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                            .add(jComboBox1, 0, 293, Short.MAX_VALUE))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(addButton)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(deleteButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 178, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
+                .add(23, 23, 23))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(jLabel1)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(deleteButton)
+                    .add(addButton))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 220, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton addButton;
+    private javax.swing.JButton deleteButton;
+    private javax.swing.JComboBox jComboBox1;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JScrollPane jScrollPane1;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/GenericTable.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/GenericTable.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/GenericTable.java	(revision 6)
@@ -0,0 +1,129 @@
+package event.editor;
+
+import javax.swing.*;
+import java.util.*;
+import javax.swing.table.*;
+
+
+class MyTableModel extends AbstractTableModel
+{
+    private JTable table;
+
+    protected static String[] columnNames = {"Role", "Dialog"};
+    private Vector<Vector<String>> rowData = new Vector<Vector<String>>();
+
+    public String getColumnName(int col) {
+        return columnNames[col].toString();
+    }
+    public int getRowCount() { return rowData.size(); }
+    public int getColumnCount() { return columnNames.length; }
+    public Object getValueAt(int row, int col) {
+        return rowData.get(row).get(col);
+    }
+    public boolean isCellEditable(int row, int col)
+        { return col != 0; }
+
+    public void setValueAt(Object value, int row, int col) {
+        rowData.get(row).set(col, (String) value);
+        fireTableCellUpdated(row, col);
+    }
+    public void setTable(JTable theTable)
+    {
+        table = theTable;
+    }
+    public void addRow(String role, String dialog)
+    {
+        Vector<String> theRow = new Vector<String>();
+
+        theRow.add(role);
+        theRow.add(dialog);
+        rowData.add(theRow);
+        this.fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1 );
+    }
+    public void deleteRow(int row)
+    {
+        if (row >= 0)
+        {
+            rowData.remove(row);
+            this.fireTableRowsDeleted(row, row);
+        }
+    }
+}
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class GenericTable {
+
+    public static JTable genericizeTable(JScrollPane scrollPane,
+            final HashMap<JButton, String> types, JButton removeButton)
+    {
+        final JTable dialogTable = new JTable(new MyTableModel());
+        ((MyTableModel) dialogTable.getModel()).setTable(dialogTable);
+        dialogTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+        dialogTable.getColumnModel().getColumn(0).setPreferredWidth(80);
+        dialogTable.getColumnModel().getColumn(1).setPreferredWidth(733);
+        scrollPane.setViewportView(dialogTable);
+
+        for (final JButton button : types.keySet())
+        {
+            button.addMouseListener(new java.awt.event.MouseAdapter() {
+                @Override
+                public void mouseClicked(java.awt.event.MouseEvent evt)
+                {
+                    ((MyTableModel) dialogTable.getModel()).addRow(types.get(button), "");
+                }
+            });
+        }
+
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            @Override
+            public void mouseClicked(java.awt.event.MouseEvent evt)
+            {
+                ((MyTableModel) dialogTable.getModel()).deleteRow(dialogTable.getSelectedRow());
+            }
+        });
+
+        return dialogTable;
+    }
+
+
+    public static void genericizeTable(JScrollPane scrollPane,
+            final JComboBox types, JButton addButton, JButton removeButton)
+    {
+        final JTable dialogTable = genericizeTable(scrollPane, new HashMap<JButton, String>(), removeButton);
+
+        addButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            @Override
+            public void mouseClicked(java.awt.event.MouseEvent evt)
+            {
+                ((MyTableModel) dialogTable.getModel()).addRow((String) types.getSelectedItem(), "");;
+            }
+        });
+    }
+
+    public static void genericizeTable(JScrollPane scrollPane,
+            final JComboBox types, JButton addButton, JButton removeButton,
+            String header1, String header2)
+    {
+        MyTableModel.columnNames[0] = header1;
+        MyTableModel.columnNames[1] = header2;
+
+        GenericTable.genericizeTable(scrollPane, types, addButton, removeButton);
+    }
+
+    public static void genericizeNumberedTable(JScrollPane scrollPane, JButton addButton, JButton removeButton)
+    {
+        MyTableModel.columnNames[0] = "#";
+        final JTable dialogTable = genericizeTable(scrollPane, new HashMap<JButton, String>(), removeButton);
+
+        addButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            private int counter = 1;
+            @Override
+            public void mouseClicked(java.awt.event.MouseEvent evt)
+            {
+                ((MyTableModel) dialogTable.getModel()).addRow("" + counter++, "");;
+            }
+        });
+    }
+}
Index: /branches/ScriptBuilder4/src/event/editor/TelephonePanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/TelephonePanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/TelephonePanel.form	(revision 6)
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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" alignment="1" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Component id="jScrollPane1" alignment="0" pref="602" max="32767" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jTextField1" pref="478" max="32767" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="addInstructorButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="addStudentButton" min="-2" pref="173" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="deleteSelectedButton" min="-2" pref="178" max="-2" attributes="0"/>
+                      <EmptySpace pref="86" max="32767" attributes="0"/>
+                  </Group>
+                  <Component id="removeButton" alignment="1" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace min="-2" pref="26" 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="removeButton" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jTextField1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="separate" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="addInstructorButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="addStudentButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="deleteSelectedButton" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Component id="jScrollPane1" pref="310" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="addStudentButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Add Student Line"/>
+        <Property name="toolTipText" type="java.lang.String" value="Adds a row for student dialog in the table"/>
+      </Properties>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <Properties>
+        <Property name="horizontalScrollBar" type="javax.swing.JScrollBar" editor="org.netbeans.modules.form.ComponentChooserEditor">
+          <ComponentRef name="null"/>
+        </Property>
+      </Properties>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+    </Container>
+    <Component class="javax.swing.JButton" name="deleteSelectedButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Delete Selected Line"/>
+        <Property name="toolTipText" type="java.lang.String" value="Deletes the selected row in the table"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="addInstructorButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Add Instructor Line"/>
+        <Property name="toolTipText" type="java.lang.String" value="Adds a row for instructor dialog in the table"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField1">
+      <Properties>
+        <Property name="toolTipText" type="java.lang.String" value="Specifies the role the instructor plays"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Role of instructor:"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+        <Property name="toolTipText" type="java.lang.String" value="Removes this property"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="removeThisProperty"/>
+      </Events>
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/TMTRadioPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/TMTRadioPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/TMTRadioPanel.form	(revision 6)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="jScrollPane1" alignment="1" pref="487" max="32767" attributes="0"/>
+                  <Component id="jLabel1" alignment="0" min="-2" max="-2" 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="jLabel1" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jScrollPane1" pref="116" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Transmission:"/>
+      </Properties>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <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.JTextArea" name="jTextArea1">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+            <Property name="toolTipText" type="java.lang.String" value="The radio transmission"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/Editor.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/Editor.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/Editor.java	(revision 6)
@@ -0,0 +1,819 @@
+
+package event.editor;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.FlowLayout;
+import javax.swing.*;
+import java.util.*;
+import java.awt.event.*;
+
+enum UpdateType
+{
+    Add, Remove, TitleChange
+}
+
+class PropertyUpdate
+{
+    private UpdateType type;
+    private PropertyPanel panel;
+    private int position = -1;
+
+    public PropertyUpdate(UpdateType theType, PropertyPanel thePanel)
+    {
+        type = theType;
+        panel = thePanel;
+    }
+
+    public PropertyUpdate(UpdateType theType, PropertyPanel thePanel, int thePosition)
+    {
+        this(theType, thePanel);
+        position = thePosition;
+    }
+
+    public int getPosition()
+    {
+        if (position == -1)
+        {
+            throw new RuntimeException("position unknown");
+        }
+
+        return position;
+    }
+
+    public UpdateType getType()
+    {
+        return type;
+    }
+    
+    public PropertyPanel getPanel()
+    {
+        return panel;
+    }
+}
+
+enum PropertyTypes
+{
+    Optional, Multiple;
+}
+
+class PropertyPanel
+{
+    private final JPanel panel;
+    private final Properties property;
+    
+    public PropertyPanel(JPanel thePanel,
+            Properties theProperty)
+    {
+        panel = thePanel;
+        property = theProperty;
+    }
+
+    public JPanel getPanel()
+    {
+        return panel;
+    }
+    
+    public Properties getProperty()
+    {
+        return property;
+    }
+
+    public String title()
+    {
+        return property.getTitle();
+    }
+}
+
+class MultPropertyPanel extends PropertyPanel
+{
+    private int index;
+
+    public MultPropertyPanel(JPanel thePanel,
+            Properties theProperty,
+            int theIndex)
+    {
+        super(thePanel, theProperty);
+        index = theIndex;
+    }
+
+    public int getIndex()
+    {
+        return index;
+    }
+
+    public void setIndex(int newIndex)
+    {
+        index = newIndex;
+    }
+
+    @Override
+    public String title()
+    {
+        return super.title() + " " + index;
+    }
+}
+
+class PropertyPanels extends Observable
+{
+    private Vector<PropertyPanel> properties = new Vector<PropertyPanel>();
+
+    private EnumMap<Properties, Integer> propertyCounter =
+            new EnumMap<Properties, Integer>(Properties.class);
+
+    public PropertyPanels()
+    {
+        for (Properties property : Properties.values())
+        {
+            propertyCounter.put(property, 0);
+        }
+    }
+
+    private int nextIndex(Properties property)
+    {
+        propertyCounter.put(property, propertyCounter.get(property) + 1);
+
+        return propertyCounter.get(property);
+    }
+
+    /**
+    public Vector<PropertyPanel> getProperties()
+    {
+        return (Vector<PropertyPanel>) properties.clone();
+    }
+    */
+
+    private int add(PropertyPanel panel)
+    {
+        int position = 0;
+        
+        for (int i = 0; i < properties.size(); i++)
+        {
+            if (properties.get(i).title().compareTo(panel.title()) < 0)
+            {
+                position = i + 1;
+            }
+        }
+        
+        properties.add(position, panel);
+        
+        return position;
+    }
+
+    public PropertyPanel addPropertyPanel(Properties property, JPanel panel)
+    {
+        PropertyPanel propertyPanel = null;
+
+        if (property.getType() == PropertyTypes.Multiple)
+        {
+            propertyPanel = new MultPropertyPanel(panel, property, nextIndex(property));
+            //propertyPanel.addObserver(this);
+            int position = add(propertyPanel);
+            setChanged();
+            notifyObservers(new PropertyUpdate(UpdateType.Add, propertyPanel, position));
+            
+        }
+        else if (property.getType() == PropertyTypes.Optional)
+        {
+            if (containsProperty(property))
+            {
+                throw new RuntimeException("Property \"" + property + "\" is already added");
+            }
+            else
+            {
+                propertyPanel = new PropertyPanel(panel, property);
+                int position = add(propertyPanel);
+                //propertyPanel.addObserver(this);
+                setChanged();
+                notifyObservers(new PropertyUpdate(UpdateType.Add, propertyPanel, position));
+            }
+        }
+        else
+        {
+            throw new RuntimeException("Property \"" + property + "\" not accounted for");
+        }
+
+        return propertyPanel;
+    }
+
+    private boolean remove(PropertyPanel panel)
+    {
+        boolean result = false;
+
+        if ((result = properties.remove(panel)))
+        {
+            setChanged();
+            notifyObservers(new PropertyUpdate(UpdateType.Remove, panel));
+        }
+        else
+        {
+            throw new RuntimeException("Attempted to remove panel that did not exist");
+        }
+
+
+        if (panel.getProperty().getType() == PropertyTypes.Multiple)
+        {
+            Vector<MultPropertyPanel> panelsOfSameType = new Vector<MultPropertyPanel>();
+            Vector<MultPropertyPanel> panelsOfGreaterIndex = new Vector<MultPropertyPanel>();
+
+            propertyCounter.put(panel.getProperty(), propertyCounter.get(panel.getProperty()) - 1);
+            
+            // extract panels of the same property type
+            for (PropertyPanel pan : properties)
+            {
+                if (pan.getProperty() == panel.getProperty())
+                {
+                    panelsOfSameType.add((MultPropertyPanel) pan);
+                }
+            }
+
+            // extract panels whose index is greater than the index of the panel
+            // being removed
+            for (MultPropertyPanel pan : panelsOfSameType)
+            {
+                if (pan.getIndex() > ((MultPropertyPanel) panel).getIndex())
+                {
+                    panelsOfGreaterIndex.add(pan);
+                }
+            }
+            
+            // decrement the index of each of the remaining panels by one
+            for (MultPropertyPanel pan : panelsOfGreaterIndex)
+            {
+                pan.setIndex(pan.getIndex() - 1);
+                setChanged();
+                notifyObservers(new PropertyUpdate(UpdateType.TitleChange, pan));
+            }
+        }
+        else if (panel.getProperty().getType() == PropertyTypes.Optional)
+        {
+            // do nothing
+        }
+        else
+        {
+            throw new RuntimeException("PropertyTypes not accounted for");
+        }
+
+        return result;
+    }
+
+    public PropertyPanel removeProperty(Properties property)
+    {
+        if (property.getType() == PropertyTypes.Multiple)
+        {
+            throw new RuntimeException("Attemping to remove a property of multiple type");
+        }
+
+        PropertyPanel removed = null;
+
+        for (PropertyPanel panel : properties)
+        {
+            if (panel.getProperty() == property)
+            {
+                removed = panel;
+            }
+        }
+
+        if (removed == null)
+        {
+            throw new RuntimeException("Could not find panel with property \"" + property + "\"");
+        }
+
+        remove(removed);
+        
+        return removed;
+    }
+
+    public PropertyPanel removeProperty(JPanel jPanel)
+    {
+        PropertyPanel removed = null;
+
+        for (PropertyPanel panel : properties)
+        {
+            if (panel.getPanel() == jPanel)
+            {
+                removed = panel;
+            }
+        }
+
+        if (removed == null)
+        {
+            throw new RuntimeException("Could not find jPanel");
+        }
+
+        remove(removed);
+
+        return removed;
+    }
+
+    public PropertyPanel removeProperty(String title)
+    {
+        PropertyPanel removed = null;
+
+        for (PropertyPanel panel : properties)
+        {
+            if (panel.title().equals(title))
+            {
+                if (removed == null)
+                {
+                    removed = panel;
+                }
+                else
+                {
+                    throw new RuntimeException("Attempted to remove a property by title but the title was not unique");
+                }
+            }
+        }
+
+        if (removed == null)
+        {
+            throw new RuntimeException("Did not find titel \"" + title + "\"");
+        }
+
+        remove(removed);
+
+        return removed;        
+    }
+
+    public boolean removeProperty(PropertyPanel panel)
+    {
+        return remove(panel);
+    }
+
+    public boolean containsProperty(Properties property)
+    {
+        boolean contains = false;
+
+        for (PropertyPanel panel : properties)
+        {
+            if (panel.getProperty() == property)
+            {
+                contains = true;
+            }
+        }
+
+        return contains;
+    }
+}
+
+class PropertyModel extends Observable implements Observer
+{
+
+    PropertyPanels properties = new PropertyPanels();
+    
+    private EnumMap<Properties, Class> classMap =
+            new EnumMap<Properties, Class>(Properties.class);
+
+    public PropertyModel()
+    {
+        classMap.put(Properties.ATMS, GenericEvaluationPanel.class);
+        classMap.put(Properties.ActivityLog, GenericEvaluationPanel.class);
+        classMap.put(Properties.CAD, GenericEvaluationPanel.class);
+        classMap.put(Properties.Facilitator, GenericEvaluationPanel.class);
+        classMap.put(Properties.Radio, GenericEvaluationPanel.class);
+
+        classMap.put(Properties.MaintenanceRadio, MaintenanceRadioPanel.class);
+        classMap.put(Properties.TMTRadio, TMTRadioPanel.class);
+        classMap.put(Properties.CHPRadio, CHPRadioPanel.class);
+        classMap.put(Properties.Telephone, TelephonePanel.class);
+
+        classMap.put(Properties.Audio, AudioPanel.class);
+        classMap.put(Properties.CADLog, CADLogPanel.class);
+        classMap.put(Properties.CCTV, CCTVPanel.class);
+        classMap.put(Properties.CMS, CMSEvaluationPanel.class);
+        classMap.put(Properties.Paramics, ParamicsPanel.class);
+        classMap.put(Properties.Tow, TowPanel.class);
+        classMap.put(Properties.Unit, UnitPanel.class);
+        classMap.put(Properties.Witness, WitnessPanel.class);
+
+        properties.addObserver(this);
+    }
+
+    public void addProperty(Properties property)
+    {
+        try
+        {
+            JPanel panel = (JPanel) classMap.get(property).newInstance();
+
+            final PropertyPanel propertyPanel = properties.addPropertyPanel(property, panel);
+            
+            if (property.getType() == PropertyTypes.Multiple)
+            {
+                if (panel instanceof RemoveablePanel)
+                {
+                    ((RemoveablePanel) panel).setRemoveListener(new ActionListener() {
+                        public void actionPerformed(ActionEvent evt)
+                        {
+                            properties.removeProperty(propertyPanel);
+                        }
+                    });
+                }
+                else
+                {
+                    throw new RuntimeException("Property was multiple but panel was not removeable");
+                }
+            }
+        }
+        catch(Exception e)
+        {
+            System.err.println("Could not create panel of type \"" + property + "\"");
+        }
+    }
+
+    public void removeProperty(Properties property)
+    {
+        properties.removeProperty(property);
+    }
+
+    public void update(Observable o, Object arg) {
+        setChanged();
+        notifyObservers(arg);
+    }
+
+    /*
+    public Vector<PropertyPanel> getPropertyPanels()
+    {
+        return properties.getProperties();
+    }
+    */
+}
+
+public class Editor extends javax.swing.JFrame implements Observer {
+
+    private PropertyModel model = new PropertyModel();
+
+    public PropertyModel getPropertyModel()
+    {
+        return model;
+    }
+
+    public void addProperty(Properties property)
+    {
+            model.addProperty(property);
+    }
+
+    private ActionListener optionalChangeListener = new ActionListener() {
+        public void actionPerformed(ActionEvent evt)
+        {
+            JCheckBoxMenuItem src = (JCheckBoxMenuItem) evt.getSource();
+            Properties property = Properties.valueOf(src.getText().replaceAll(" ", ""));
+            
+            if (src.isSelected())
+            {
+                model.addProperty(property);
+            }
+            else
+            {
+                model.removeProperty(property);
+            }
+        }
+    };
+
+    private ActionListener multipleChangeListener = new ActionListener() {
+        public void actionPerformed(ActionEvent evt)
+        {
+            JMenuItem src = (JMenuItem) evt.getSource();
+            model.addProperty(Properties.valueOf(src.getText().replaceAll(" ", "")));
+        }
+    };
+
+    public Editor() {
+        initComponents();
+
+        model.addObserver(this);
+        
+        // For each menu
+        for (int menuCtr = 0; menuCtr < jMenuBar1.getMenuCount(); menuCtr++)
+        {
+            // for each menu item
+            for (java.awt.Component comp : jMenuBar1.getMenu(menuCtr).getMenuComponents())
+            {
+                JMenuItem item = (JMenuItem) comp;
+
+                String itemName = item.getText().replaceAll(" ", "");
+
+                Properties property = Properties.valueOf(itemName);
+
+                if (property.getType() == PropertyTypes.Multiple)
+                {
+                    item.addActionListener(multipleChangeListener);
+                }
+                else if (property.getType() == PropertyTypes.Optional)
+                {
+                    item.addActionListener(optionalChangeListener);
+                }
+                else
+                {
+                    throw new RuntimeException("Property type not accounted for");
+                }
+            }
+        }
+    }
+
+    /** 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() {
+
+        jTabbedPane1 = new javax.swing.JTabbedPane();
+        jMenuBar1 = new javax.swing.JMenuBar();
+        jMenu1 = new javax.swing.JMenu();
+        ATMS = new javax.swing.JCheckBoxMenuItem();
+        ActivityLog = new javax.swing.JCheckBoxMenuItem();
+        CAD = new javax.swing.JCheckBoxMenuItem();
+        CMS = new javax.swing.JMenuItem();
+        Facilitator = new javax.swing.JCheckBoxMenuItem();
+        Radio = new javax.swing.JCheckBoxMenuItem();
+        JMenu2 = new javax.swing.JMenu();
+        MaintenanceRadio = new javax.swing.JCheckBoxMenuItem();
+        TMTRadio = new javax.swing.JCheckBoxMenuItem();
+        Telephone = new javax.swing.JCheckBoxMenuItem();
+        jMenu3 = new javax.swing.JMenu();
+        Audio = new javax.swing.JMenuItem();
+        CADLog = new javax.swing.JMenuItem();
+        CCTV = new javax.swing.JMenuItem();
+        CHPRadio = new javax.swing.JCheckBoxMenuItem();
+        Paramics = new javax.swing.JMenuItem();
+        Tow = new javax.swing.JMenuItem();
+        Unit = new javax.swing.JMenuItem();
+        Witness = new javax.swing.JMenuItem();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+        setTitle("Event Editor");
+
+        jMenu1.setText("Evaluations");
+
+        ATMS.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
+        ATMS.setText("ATMS");
+        ATMS.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ATMSEval.png"))); // NOI18N
+        ATMS.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                multipleChange(evt);
+            }
+        });
+        jMenu1.add(ATMS);
+
+        ActivityLog.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.ALT_MASK));
+        ActivityLog.setText("Activity Log");
+        ActivityLog.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ActivityLogEval.png"))); // NOI18N
+        ActivityLog.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                multipleChange(evt);
+            }
+        });
+        jMenu1.add(ActivityLog);
+
+        CAD.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.ALT_MASK));
+        CAD.setText("CAD");
+        CAD.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CADEval.png"))); // NOI18N
+        CAD.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                multipleChange(evt);
+            }
+        });
+        jMenu1.add(CAD);
+
+        CMS.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        CMS.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CMSEval.png"))); // NOI18N
+        CMS.setText("CMS");
+        CMS.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                multipleChangeListener(evt);
+            }
+        });
+        CMS.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                multipleChange(evt);
+            }
+        });
+        jMenu1.add(CMS);
+
+        Facilitator.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK));
+        Facilitator.setText("Facilitator");
+        Facilitator.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/FacilitatorEval.png"))); // NOI18N
+        Facilitator.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                optionalChange(evt);
+            }
+        });
+        jMenu1.add(Facilitator);
+
+        Radio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, java.awt.event.InputEvent.CTRL_MASK));
+        Radio.setText("Radio");
+        Radio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/RadioEval.png"))); // NOI18N
+        Radio.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                optionalChange(evt);
+            }
+        });
+        jMenu1.add(Radio);
+
+        jMenuBar1.add(jMenu1);
+
+        JMenu2.setText("Instructor Actions");
+
+        MaintenanceRadio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_M, java.awt.event.InputEvent.CTRL_MASK));
+        MaintenanceRadio.setText("Maintenance Radio");
+        MaintenanceRadio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/MaintenanceRadio.png"))); // NOI18N
+        MaintenanceRadio.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                optionalChange(evt);
+            }
+        });
+        JMenu2.add(MaintenanceRadio);
+
+        TMTRadio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_T, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        TMTRadio.setText("TMT Radio");
+        TMTRadio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/TMTRadio.png"))); // NOI18N
+        TMTRadio.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                optionalChange(evt);
+            }
+        });
+        JMenu2.add(TMTRadio);
+
+        Telephone.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_T, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        Telephone.setText("Telephone");
+        Telephone.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Telephone.png"))); // NOI18N
+        Telephone.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                optionalChange(evt);
+            }
+        });
+        JMenu2.add(Telephone);
+
+        jMenuBar1.add(JMenu2);
+
+        jMenu3.setText("Automated Data");
+
+        Audio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
+        Audio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Audio.png"))); // NOI18N
+        Audio.setText("Audio");
+        jMenu3.add(Audio);
+
+        CADLog.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK));
+        CADLog.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CAD.png"))); // NOI18N
+        CADLog.setText("CAD Log");
+        jMenu3.add(CADLog);
+
+        CCTV.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK));
+        CCTV.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CCTV.png"))); // NOI18N
+        CCTV.setText("CCTV");
+        jMenu3.add(CCTV);
+
+        CHPRadio.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.ALT_MASK));
+        CHPRadio.setText("CHP Radio");
+        CHPRadio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CHPRadio.png"))); // NOI18N
+        CHPRadio.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                optionalChange(evt);
+            }
+        });
+        jMenu3.add(CHPRadio);
+
+        Paramics.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK));
+        Paramics.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Paramics.png"))); // NOI18N
+        Paramics.setText("Paramics");
+        jMenu3.add(Paramics);
+
+        Tow.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_T, java.awt.event.InputEvent.CTRL_MASK));
+        Tow.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Tow.png"))); // NOI18N
+        Tow.setText("Tow");
+        jMenu3.add(Tow);
+
+        Unit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_U, java.awt.event.InputEvent.CTRL_MASK));
+        Unit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Unit.png"))); // NOI18N
+        Unit.setText("Unit");
+        jMenu3.add(Unit);
+
+        Witness.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK));
+        Witness.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Witness.png"))); // NOI18N
+        Witness.setText("Witness");
+        jMenu3.add(Witness);
+
+        jMenuBar1.add(jMenu3);
+
+        setJMenuBar(jMenuBar1);
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(jTabbedPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 921, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(jTabbedPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 580, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void multipleChangeListener(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_multipleChangeListener
+
+    }//GEN-LAST:event_multipleChangeListener
+
+    private void multipleChange(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_multipleChange
+
+    }//GEN-LAST:event_multipleChange
+
+    private void optionalChange(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_optionalChange
+
+    }//GEN-LAST:event_optionalChange
+
+    /**
+    * @param args the command line arguments
+    */
+    public static void main(String args[]) {
+        java.awt.EventQueue.invokeLater(new Runnable() {
+            public void run() {
+                new Editor().setVisible(true);
+            }
+        });
+    }
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JCheckBoxMenuItem ATMS;
+    private javax.swing.JCheckBoxMenuItem ActivityLog;
+    private javax.swing.JMenuItem Audio;
+    private javax.swing.JCheckBoxMenuItem CAD;
+    private javax.swing.JMenuItem CADLog;
+    private javax.swing.JMenuItem CCTV;
+    private javax.swing.JCheckBoxMenuItem CHPRadio;
+    private javax.swing.JMenuItem CMS;
+    private javax.swing.JCheckBoxMenuItem Facilitator;
+    private javax.swing.JMenu JMenu2;
+    private javax.swing.JCheckBoxMenuItem MaintenanceRadio;
+    private javax.swing.JMenuItem Paramics;
+    private javax.swing.JCheckBoxMenuItem Radio;
+    private javax.swing.JCheckBoxMenuItem TMTRadio;
+    private javax.swing.JCheckBoxMenuItem Telephone;
+    private javax.swing.JMenuItem Tow;
+    private javax.swing.JMenuItem Unit;
+    private javax.swing.JMenuItem Witness;
+    private javax.swing.JMenu jMenu1;
+    private javax.swing.JMenu jMenu3;
+    private javax.swing.JMenuBar jMenuBar1;
+    private javax.swing.JTabbedPane jTabbedPane1;
+    // End of variables declaration//GEN-END:variables
+
+    public void update(Observable o, Object arg) {
+
+        final PropertyUpdate update = (PropertyUpdate) arg;
+        final ImageIcon image = update.getPanel().getProperty().getImage();
+        final String caption = update.getPanel().title();
+
+        final JLabel title = new JLabel(caption, image, JLabel.CENTER);
+
+        /*
+        final BorderLayout layout = new BorderLayout();
+        final JPanel title = new JPanel(layout);
+        title.setOpaque(false);
+        title.add(new JLabel(image), BorderLayout.WEST);
+        title.add(new JLabel(caption), BorderLayout.EAST);
+        */
+        
+        if (update.getType() == UpdateType.Add)
+        {
+            jTabbedPane1.insertTab(null, null,
+                    update.getPanel().getPanel(), null, update.getPosition());
+            jTabbedPane1.setTabComponentAt(update.getPosition(), title);
+            jTabbedPane1.setSelectedIndex(update.getPosition());
+        }
+        else if (update.getType() == UpdateType.Remove)
+        {
+            jTabbedPane1.remove(update.getPanel().getPanel());
+        }
+        else if (update.getType() == UpdateType.TitleChange)
+        {
+            final int index = jTabbedPane1.indexOfComponent(
+                    update.getPanel().getPanel());
+
+            new Thread(new Runnable() {
+                public void run() {
+                    Color c = jTabbedPane1.getForegroundAt(index);
+                    jTabbedPane1.setForegroundAt(index, Color.blue);
+                    try { Thread.sleep(350); } catch(Exception e) { }
+                    jTabbedPane1.setTabComponentAt(index, title);
+                    try { Thread.sleep(350); } catch(Exception e) { }
+                    jTabbedPane1.setForegroundAt(index, c);
+                }
+            }).start();
+        }
+        else
+        {
+            throw new RuntimeException("UpdateType not accounted for");
+        }
+    }
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/TowPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/TowPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/TowPanel.java	(revision 6)
@@ -0,0 +1,175 @@
+package event.editor;
+
+import java.awt.event.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class TowPanel extends javax.swing.JPanel implements RemoveablePanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form TowPanel */
+    public TowPanel() {
+        initComponents();
+
+        confirmationNumber.addFocusListener(new FocusListener() {
+
+            public void focusGained(FocusEvent e) {
+                help.setText("Confirmation number is formated as a telephone number. Example: (555)555-5555");
+            }
+
+            public void focusLost(FocusEvent e) {
+                help.setText("");
+            }
+
+        });
+
+        publicNumber.addFocusListener(new FocusListener() {
+
+            public void focusGained(FocusEvent e) {
+                help.setText("Public number is formated as a telephone number. Example: (555)555-5555");
+            }
+
+            public void focusLost(FocusEvent e) {
+                help.setText("");
+            }
+
+        });
+
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    /** 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() {
+
+        removeButton = new javax.swing.JButton();
+        jLabel1 = new javax.swing.JLabel();
+        jTextField1 = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        confirmationNumber = new javax.swing.JFormattedTextField();
+        jLabel3 = new javax.swing.JLabel();
+        publicNumber = new javax.swing.JFormattedTextField();
+        jLabel4 = new javax.swing.JLabel();
+        jTextField2 = new javax.swing.JTextField();
+        help = new javax.swing.JLabel();
+
+        removeButton.setText("Remove");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                removeThisProperty(evt);
+            }
+        });
+        removeButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                removeButtonActionPerformed(evt);
+            }
+        });
+
+        jLabel1.setText("Company");
+
+        jLabel2.setText("Confirmation Number");
+
+        try {
+            confirmationNumber.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("(###)###-####")));
+        } catch (java.text.ParseException ex) {
+            ex.printStackTrace();
+        }
+
+        jLabel3.setText("Public Number");
+
+        try {
+            publicNumber.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("(###)###-####")));
+        } catch (java.text.ParseException ex) {
+            ex.printStackTrace();
+        }
+
+        jLabel4.setText("Beat");
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(help, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE)
+                    .add(org.jdesktop.layout.GroupLayout.TRAILING, removeButton)
+                    .add(layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jLabel1)
+                            .add(jLabel2)
+                            .add(jLabel3)
+                            .add(jLabel4))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jTextField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
+                            .add(jTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
+                            .add(confirmationNumber, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
+                            .add(publicNumber, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE))))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .add(removeButton)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel1)
+                    .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel2)
+                    .add(confirmationNumber, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel3)
+                    .add(publicNumber, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel4)
+                    .add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 72, Short.MAX_VALUE)
+                .add(help, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 20, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_removeButtonActionPerformed
+
+    private void removeThisProperty(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeThisProperty
+        if (removeListener != null)
+        {
+            removeListener.actionPerformed(new ActionEvent(this, 0, ""));
+        }
+    }//GEN-LAST:event_removeThisProperty
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JFormattedTextField confirmationNumber;
+    private javax.swing.JLabel help;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JTextField jTextField1;
+    private javax.swing.JTextField jTextField2;
+    private javax.swing.JFormattedTextField publicNumber;
+    private javax.swing.JButton removeButton;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/CMSEvaluationPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/CMSEvaluationPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/CMSEvaluationPanel.java	(revision 6)
@@ -0,0 +1,153 @@
+package event.editor;
+
+import java.awt.event.*;
+import java.util.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class CMSEvaluationPanel extends javax.swing.JPanel implements RemoveablePanel {
+
+    private HashMap<String, Class> properties;
+    private ActionListener removeListener;
+
+    /** Creates new form CMSEvaluation */
+    public CMSEvaluationPanel() {
+        initComponents();
+
+        GenericTable.genericizeNumberedTable(jScrollPane1, addButton, deleteButton);
+    }
+    
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    /** 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() {
+
+        removeButton = new javax.swing.JButton();
+        jLabel3 = new javax.swing.JLabel();
+        jTextField1 = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        jComboBox1 = new javax.swing.JComboBox();
+        jFormattedTextField1 = new javax.swing.JFormattedTextField();
+        jLabel1 = new javax.swing.JLabel();
+        deleteButton = new javax.swing.JButton();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        addButton = new javax.swing.JButton();
+
+        removeButton.setText("Remove");
+        removeButton.setToolTipText("Removes this property");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                removeButtonremoveThisProperty(evt);
+            }
+        });
+
+        jLabel3.setText("Location");
+
+        jTextField1.setToolTipText("Example: SB 55 @ WARNER AVE");
+
+        jLabel2.setText("Type");
+
+        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Update", "New", "Remove" }));
+
+        jFormattedTextField1.setToolTipText("Example: 72");
+
+        jLabel1.setText("CMS ID");
+
+        deleteButton.setText("Delete Selected Message");
+        deleteButton.setToolTipText("Deletes the selected message from the table");
+
+        jScrollPane1.setHorizontalScrollBar(null);
+
+        addButton.setText("Add Message");
+        addButton.setToolTipText("Adds a message to the table");
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(layout.createSequentialGroup()
+                        .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 584, Short.MAX_VALUE)
+                        .addContainerGap())
+                    .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
+                        .add(removeButton)
+                        .addContainerGap())
+                    .add(layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jLabel1)
+                            .add(jLabel3)
+                            .add(jLabel2))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jComboBox1, 0, 520, Short.MAX_VALUE)
+                            .add(jTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 520, Short.MAX_VALUE)
+                            .add(jFormattedTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 520, Short.MAX_VALUE))
+                        .addContainerGap())
+                    .add(layout.createSequentialGroup()
+                        .add(6, 6, 6)
+                        .add(addButton)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(deleteButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 178, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                        .add(293, 293, 293))))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .add(17, 17, 17)
+                .add(removeButton)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel1)
+                    .add(jFormattedTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jLabel2))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel3)
+                    .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .add(31, 31, 31)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(deleteButton)
+                    .add(addButton))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void removeButtonremoveThisProperty(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeButtonremoveThisProperty
+        if (removeListener != null) {
+            removeListener.actionPerformed(new ActionEvent(this, 0, ""));
+        }
+}//GEN-LAST:event_removeButtonremoveThisProperty
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton addButton;
+    private javax.swing.JButton deleteButton;
+    private javax.swing.JComboBox jComboBox1;
+    private javax.swing.JFormattedTextField jFormattedTextField1;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextField jTextField1;
+    private javax.swing.JButton removeButton;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/CADLogPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/CADLogPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/CADLogPanel.form	(revision 6)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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">
+          <EmptySpace min="0" pref="546" max="32767" attributes="0"/>
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Component id="jScrollPane1" alignment="0" pref="506" max="32767" attributes="0"/>
+                  <Group type="102" alignment="1" attributes="0">
+                      <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace pref="330" max="32767" attributes="0"/>
+                      <Component id="removeButton" min="-2" max="-2" attributes="0"/>
+                  </Group>
+              </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"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Component id="removeButton" alignment="1" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel1" alignment="1" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jScrollPane1" pref="120" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="removeButtonremoveThisProperty"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Cad Log Text"/>
+      </Properties>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <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.JTextArea" name="jTextArea1">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/CHPRadioPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/CHPRadioPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/CHPRadioPanel.form	(revision 6)
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="jScrollPane1" alignment="0" pref="730" max="32767" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="addDispatchButton" min="-2" pref="130" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
+                      <Component id="addFieldButton" min="-2" pref="130" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="deleteSelectedButton" min="-2" pref="131" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="1">
+                      <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="audioText" pref="511" max="32767" attributes="0"/>
+                      <EmptySpace type="separate" max="-2" attributes="0"/>
+                      <Component id="jButton2" min="-2" pref="130" max="-2" attributes="0"/>
+                  </Group>
+              </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"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="audioText" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jButton2" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="separate" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="addDispatchButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="addFieldButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="deleteSelectedButton" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Component id="jScrollPane1" pref="341" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="jLabel4">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Radio File"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="audioText">
+      <Properties>
+        <Property name="toolTipText" type="java.lang.String" value="The radio audio file"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="jButton2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Browse"/>
+        <Property name="toolTipText" type="java.lang.String" value="Browse for the radio audio file"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="browse"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JButton" name="addDispatchButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Add Dispatch"/>
+        <Property name="toolTipText" type="java.lang.String" value="Adds a row for dialog by the dispatch operator in the table"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="deleteSelectedButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Delete Selected"/>
+        <Property name="toolTipText" type="java.lang.String" value="Deletes the selected row from the table"/>
+      </Properties>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+    </Container>
+    <Component class="javax.swing.JButton" name="addFieldButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Add Field"/>
+        <Property name="toolTipText" type="java.lang.String" value="Adds a row for dialog by the field operator in the table"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="addFieldButtonActionPerformed"/>
+      </Events>
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/Properties.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/Properties.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/Properties.java	(revision 6)
@@ -0,0 +1,83 @@
+package event.editor;
+import images.*;
+import java.awt.Graphics;
+import javax.swing.ImageIcon;
+import java.net.URL;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+public enum Properties
+{
+    ATMS                ("ATMS", PropertyTypes.Optional,
+        loadImage(Images.getImage("ATMSEval.png"))),
+    ActivityLog         ("Activity Log", PropertyTypes.Optional,
+        loadImage(Images.getImage("ActivityLogEval.png"))),
+    CAD                 ("CAD", PropertyTypes.Optional,
+        loadImage(Images.getImage("CADEval.png"))),
+    Facilitator         ("Faciliatator", PropertyTypes.Optional,
+        loadImage(Images.getImage("FacilitatorEval.png"))),
+    Radio               ("Radio", PropertyTypes.Optional,
+        loadImage(Images.getImage("RadioEval.png"))),
+    MaintenanceRadio    ("Maintenance Radio", PropertyTypes.Optional,
+        loadImage(Images.getImage("MaintenanceRadio.png"))),
+    TMTRadio            ("TMT Radio", PropertyTypes.Optional,
+        loadImage(Images.getImage("TMTRadio.png"))),
+    Telephone           ("Telephone", PropertyTypes.Optional,
+        loadImage(Images.getImage("Telephone.png"))),
+    CHPRadio            ("CHP Radio",PropertyTypes.Optional,
+        loadImage(Images.getImage("CHPRadio.png"))),
+    CMS                 ("CMS", PropertyTypes.Multiple,
+        loadImage(Images.getImage("CMSEval.png"))),
+    Audio               ("Audio", PropertyTypes.Multiple,
+        loadImage(Images.getImage("Audio.png"))),
+    CCTV                ("CCTV", PropertyTypes.Multiple,
+        loadImage(Images.getImage("CCTV.png"))),
+    CADLog              ("CAD Log", PropertyTypes.Multiple,
+        loadImage(Images.getImage("CAD.png"))),
+    Paramics            ("Paramics", PropertyTypes.Multiple,
+        loadImage(Images.getImage("Paramics.png"))),
+    Tow                 ("Tow", PropertyTypes.Multiple,
+        loadImage(Images.getImage("Tow.png"))),
+    Unit                ("Unit", PropertyTypes.Multiple,
+        loadImage(Images.getImage("Unit.png"))),
+    Witness             ("Witness", PropertyTypes.Multiple,
+        loadImage(Images.getImage("Witness.png")));
+
+    private String title;
+    private PropertyTypes type;
+    private ImageIcon image;
+
+    private Properties(String theTitle, PropertyTypes theType, ImageIcon theImage)
+    {
+        title = theTitle;
+        type = theType;
+        image = theImage;
+    }
+
+    public String getTitle()
+    {
+        return title;
+    }
+
+    public PropertyTypes getType()
+    {
+        return type;
+    }
+
+    public ImageIcon getImage()
+    {
+        return image;
+    }
+
+    private static ImageIcon loadImage(URL url)
+    {
+        double scale = 0.8;
+        ImageIcon icon = new ImageIcon(url);
+        Image img = icon.getImage();
+        BufferedImage bi = new BufferedImage(img.getWidth(null),
+                img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
+        Graphics g = bi.createGraphics();
+        g.drawImage(img, 0, 0, (int) (img.getWidth(null) * scale), (int)(img.getHeight(null) * scale), null);
+        return new ImageIcon(bi);
+    }
+}
Index: /branches/ScriptBuilder4/src/event/editor/WitnessPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/WitnessPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/WitnessPanel.form	(revision 6)
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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" alignment="1" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Component id="removeButton" alignment="1" min="-2" max="-2" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace min="-2" pref="15" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jTextField2" alignment="1" pref="547" max="32767" attributes="0"/>
+                          <Component id="jTextField3" alignment="0" pref="547" max="32767" attributes="0"/>
+                          <Component id="jTextField1" alignment="1" pref="547" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="jFormattedTextField1" pref="547" max="32767" attributes="0"/>
+                  </Group>
+              </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="removeButton" min="-2" max="-2" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jTextField1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jTextField2" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jTextField3" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel3" 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="jFormattedTextField1" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace pref="168" max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="removeThisProperty"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="First Name"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField1">
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Last Name"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField2">
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Street Address"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField3">
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel4">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Phone Number"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="jFormattedTextField1">
+      <Properties>
+        <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
+          <Format format="(###)###-####" subtype="-1" type="0"/>
+        </Property>
+      </Properties>
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/UnitPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/UnitPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/UnitPanel.java	(revision 6)
@@ -0,0 +1,157 @@
+package event.editor;
+
+import java.awt.event.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class UnitPanel extends javax.swing.JPanel implements RemoveablePanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form UnitPanel */
+    public UnitPanel() {
+        initComponents();
+
+        unitNumber.addFocusListener(new FocusListener() {
+
+            public void focusGained(FocusEvent e) {
+                help.setText("Unit number is formatted as #-#\t\tExample: 5-5");
+            }
+
+            public void focusLost(FocusEvent e) {
+                help.setText("");
+            }
+
+        });
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+
+    /** 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() {
+
+        jLabel1 = new javax.swing.JLabel();
+        unitNumber = new javax.swing.JFormattedTextField();
+        removeButton = new javax.swing.JButton();
+        jLabel2 = new javax.swing.JLabel();
+        jComboBox1 = new javax.swing.JComboBox();
+        jLabel3 = new javax.swing.JLabel();
+        jComboBox2 = new javax.swing.JComboBox();
+        jLabel4 = new javax.swing.JLabel();
+        jComboBox3 = new javax.swing.JComboBox();
+        help = new javax.swing.JLabel();
+
+        jLabel1.setText("Unit Number");
+
+        try {
+            unitNumber.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("#-#")));
+        } catch (java.text.ParseException ex) {
+            ex.printStackTrace();
+        }
+
+        removeButton.setText("Remove");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                removeThisProperty(evt);
+            }
+        });
+
+        jLabel2.setText("Status");
+
+        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1098", "1097", "ENRT" }));
+
+        jLabel3.setText("Primary");
+
+        jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "True", "False" }));
+
+        jLabel4.setText("Active");
+
+        jComboBox3.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "True", "False" }));
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(org.jdesktop.layout.GroupLayout.TRAILING, removeButton)
+                    .add(org.jdesktop.layout.GroupLayout.TRAILING, help, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE)
+                    .add(layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jLabel1)
+                            .add(jLabel2))
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jComboBox1, 0, 475, Short.MAX_VALUE)
+                            .add(unitNumber, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 475, Short.MAX_VALUE)))
+                    .add(layout.createSequentialGroup()
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jLabel3)
+                            .add(jLabel4))
+                        .add(43, 43, 43)
+                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jComboBox3, 0, 475, Short.MAX_VALUE)
+                            .add(jComboBox2, 0, 475, Short.MAX_VALUE))))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(removeButton)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel1)
+                    .add(unitNumber, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel2)
+                    .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel3)
+                    .add(jComboBox2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel4)
+                    .add(jComboBox3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 128, Short.MAX_VALUE)
+                .add(help, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 20, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void removeThisProperty(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeThisProperty
+        if (removeListener != null)
+        {
+            removeListener.actionPerformed(new ActionEvent(this, 0, ""));
+        }
+    }//GEN-LAST:event_removeThisProperty
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JLabel help;
+    private javax.swing.JComboBox jComboBox1;
+    private javax.swing.JComboBox jComboBox2;
+    private javax.swing.JComboBox jComboBox3;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JButton removeButton;
+    private javax.swing.JFormattedTextField unitNumber;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/CCTVPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/CCTVPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/CCTVPanel.form	(revision 6)
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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 max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="help" alignment="1" pref="540" max="32767" attributes="0"/>
+                  <Component id="removeButton" alignment="1" min="-2" max="-2" attributes="0"/>
+                  <Group type="102" alignment="0" 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"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jTextField1" alignment="0" pref="487" max="32767" attributes="0"/>
+                          <Component id="dir" alignment="0" pref="487" max="32767" attributes="0"/>
+                          <Component id="toggle" alignment="0" pref="487" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+              </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="removeButton" min="-2" max="-2" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jTextField1" 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="dir" 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="toggle" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace min="-2" pref="48" max="-2" attributes="0"/>
+              <Component id="help" pref="13" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="removeButtonremoveThisProperty"/>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="removeButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="ID"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="dir">
+      <Properties>
+        <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
+          <Format subtype="0" type="0"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Toggle"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="jTextField1">
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Dir"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="toggle">
+      <Properties>
+        <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
+          <Format subtype="0" type="0"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="help">
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/ParamicsPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/ParamicsPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/ParamicsPanel.form	(revision 6)
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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" alignment="1" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="separate" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jCheckBox2" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jCheckBox1" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jCheckBox3" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jCheckBox4" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="1" attributes="0">
+                          <Component id="jCheckBox7" min="-2" max="-2" attributes="0"/>
+                          <Component id="jCheckBox5" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jCheckBox8" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jCheckBox6" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jCheckBox10" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="jCheckBox9" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <Component id="removeButton" alignment="1" min="-2" max="-2" attributes="0"/>
+                  <Group type="102" alignment="0" 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"/>
+                      </Group>
+                      <EmptySpace min="-2" pref="36" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jComboBox2" alignment="1" pref="597" max="32767" attributes="1"/>
+                          <Component id="jComboBox1" alignment="0" pref="597" max="32767" attributes="1"/>
+                          <Component id="jComboBox3" alignment="0" pref="597" max="32767" attributes="1"/>
+                      </Group>
+                  </Group>
+              </Group>
+              <EmptySpace min="-2" 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"/>
+              <Component id="removeButton" min="-2" max="-2" 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="jComboBox3" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jComboBox1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jComboBox2" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace type="separate" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Group type="102" alignment="1" attributes="0">
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="jCheckBox1" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jCheckBox2" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="103" alignment="1" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="jCheckBox5" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="jCheckBox7" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="jCheckBox3" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
+                          <Component id="jCheckBox4" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="103" alignment="0" groupAlignment="1" attributes="0">
+                          <Group type="102" alignment="1" attributes="0">
+                              <Component id="jCheckBox10" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="jCheckBox9" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="102" alignment="1" attributes="0">
+                              <Component id="jCheckBox8" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="jCheckBox6" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                  </Group>
+              </Group>
+              <EmptySpace pref="116" max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="removeThisProperty"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Location"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Status"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox1">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="3">
+            <StringItem index="0" value="New"/>
+            <StringItem index="1" value="Changed"/>
+            <StringItem index="2" value="Cleared"/>
+          </StringArray>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox2">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="2">
+            <StringItem index="0" value="Lane Breakdown"/>
+            <StringItem index="1" value="Lane Obstruction"/>
+          </StringArray>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Incident Type"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel4">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lanes affected:"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 1"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox1ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 2"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox2ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox3">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 3"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox3ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox4">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 4"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox4ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox5">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 5"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox5ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox6">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 8"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox6ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox7">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 6"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox7ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox8">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 7"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox8ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox9">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 10"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox9ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox10">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Lane 9"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox10ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox3">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="2">
+            <StringItem index="0" value="187_S_55_ML"/>
+            <StringItem index="1" value="187_N_405_HV"/>
+          </StringArray>
+        </Property>
+      </Properties>
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/RemoveablePanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/RemoveablePanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/RemoveablePanel.java	(revision 6)
@@ -0,0 +1,7 @@
+package event.editor;
+
+import java.awt.event.*;
+
+public interface RemoveablePanel {
+    void setRemoveListener(ActionListener listener);
+}
Index: /branches/ScriptBuilder4/src/event/editor/MaintenanceRadioPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/MaintenanceRadioPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/MaintenanceRadioPanel.form	(revision 6)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="jScrollPane1" alignment="0" pref="583" max="32767" attributes="0"/>
+                  <Component id="jLabel1" alignment="0" min="-2" max="-2" 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="jLabel1" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jScrollPane1" pref="95" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <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.JTextArea" name="jTextArea1">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="rows" type="int" value="5"/>
+            <Property name="toolTipText" type="java.lang.String" value="The radio transmission"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Transmission:"/>
+      </Properties>
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/AudioPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/AudioPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/AudioPanel.form	(revision 6)
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="removeButton" alignment="1" min="-2" max="-2" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Group type="102" alignment="0" attributes="0">
+                              <Component id="audioText" min="-2" pref="395" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="browseButton" pref="93" max="32767" attributes="0"/>
+                          </Group>
+                          <Component id="jFormattedTextField1" alignment="0" pref="497" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+              </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="removeButton" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="audioText" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="browseButton" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jFormattedTextField1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+        <Property name="toolTipText" type="java.lang.String" value="Removes this property"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="removeThisProperty"/>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="removeButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Audio File"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="audioText">
+      <Properties>
+        <Property name="toolTipText" type="java.lang.String" value="The path to the audio file"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Length"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="jFormattedTextField1">
+      <Properties>
+        <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
+          <Format subtype="1" type="0"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="browseButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Browse"/>
+        <Property name="toolTipText" type="java.lang.String" value="Browse for the audio file"/>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="browse"/>
+      </Events>
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/TMTRadioPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/TMTRadioPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/TMTRadioPanel.java	(revision 6)
@@ -0,0 +1,67 @@
+package event.editor;
+
+import java.awt.event.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class TMTRadioPanel extends javax.swing.JPanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form TMTRadio */
+    public TMTRadioPanel() {
+        initComponents();
+    }
+
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jLabel1 = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jTextArea1 = new javax.swing.JTextArea();
+
+        jLabel1.setText("Transmission:");
+
+        jTextArea1.setColumns(20);
+        jTextArea1.setRows(5);
+        jTextArea1.setToolTipText("The radio transmission");
+        jScrollPane1.setViewportView(jTextArea1);
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(org.jdesktop.layout.GroupLayout.TRAILING, jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 487, Short.MAX_VALUE)
+                    .add(jLabel1))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(jLabel1)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 116, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextArea jTextArea1;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/TelephonePanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/TelephonePanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/TelephonePanel.java	(revision 6)
@@ -0,0 +1,126 @@
+package event.editor;
+
+import java.awt.event.*;
+import javax.swing.*;
+import java.util.*;
+import javax.swing.table.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class TelephonePanel extends javax.swing.JPanel {
+
+    private ActionListener removeListener;
+    private JTable dialogTable;
+
+    /** Creates new form TelephonePanel */
+    public TelephonePanel() {
+        initComponents();
+        HashMap<JButton, String> buttonMap = new HashMap<JButton, String>();
+        buttonMap.put(addInstructorButton, "Instructor");
+        buttonMap.put(addStudentButton, "Student");
+        GenericTable.genericizeTable(jScrollPane1, buttonMap, deleteSelectedButton);
+    }
+    
+    /** 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() {
+
+        addStudentButton = new javax.swing.JButton();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        deleteSelectedButton = new javax.swing.JButton();
+        addInstructorButton = new javax.swing.JButton();
+        jTextField1 = new javax.swing.JTextField();
+        jLabel1 = new javax.swing.JLabel();
+        removeButton = new javax.swing.JButton();
+
+        addStudentButton.setText("Add Student Line");
+        addStudentButton.setToolTipText("Adds a row for student dialog in the table");
+
+        jScrollPane1.setHorizontalScrollBar(null);
+
+        deleteSelectedButton.setText("Delete Selected Line");
+        deleteSelectedButton.setToolTipText("Deletes the selected row in the table");
+
+        addInstructorButton.setText("Add Instructor Line");
+        addInstructorButton.setToolTipText("Adds a row for instructor dialog in the table");
+
+        jTextField1.setToolTipText("Specifies the role the instructor plays");
+
+        jLabel1.setText("Role of instructor:");
+
+        removeButton.setText("Remove");
+        removeButton.setToolTipText("Removes this property");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                removeThisProperty(evt);
+            }
+        });
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 602, Short.MAX_VALUE)
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
+                        .add(jLabel1)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(jTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 478, Short.MAX_VALUE))
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
+                        .add(addInstructorButton)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(addStudentButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 173, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(deleteSelectedButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 178, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 86, Short.MAX_VALUE))
+                    .add(removeButton))
+                .add(26, 26, 26))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(removeButton)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jLabel1))
+                .add(18, 18, 18)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(addInstructorButton)
+                    .add(addStudentButton)
+                    .add(deleteSelectedButton))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 310, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void removeThisProperty(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeThisProperty
+        if (removeListener != null)
+        {
+            removeListener.actionPerformed(new ActionEvent(this, 0, ""));
+        }
+    }//GEN-LAST:event_removeThisProperty
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton addInstructorButton;
+    private javax.swing.JButton addStudentButton;
+    private javax.swing.JButton deleteSelectedButton;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextField jTextField1;
+    private javax.swing.JButton removeButton;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/GenericEvaluationPanel.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/GenericEvaluationPanel.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/GenericEvaluationPanel.form	(revision 6)
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <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="2"/>
+    <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" alignment="1" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Component id="jScrollPane1" alignment="0" pref="598" max="32767" attributes="0"/>
+                  <Group type="102" alignment="1" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jLabel1" min="-2" pref="200" max="-2" attributes="0"/>
+                          <Component id="jComboBox1" pref="293" max="32767" attributes="0"/>
+                      </Group>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="addButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                      <Component id="deleteButton" min="-2" pref="178" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace min="-2" pref="23" 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="jLabel1" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jComboBox1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="deleteButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="addButton" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jScrollPane1" pref="220" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JButton" name="addButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Add Criteria"/>
+        <Property name="toolTipText" type="java.lang.String" value="Adds a new row in the table below"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="deleteButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Delete Selected Criteria"/>
+        <Property name="toolTipText" type="java.lang.String" value="Deletes the selected row in the table below"/>
+      </Properties>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <Properties>
+        <Property name="toolTipText" type="java.lang.String" value=""/>
+      </Properties>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+    </Container>
+    <Component class="javax.swing.JComboBox" name="jComboBox1">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="4">
+            <StringItem index="0" value="Yes/No"/>
+            <StringItem index="1" value="1-5"/>
+            <StringItem index="2" value="1-10"/>
+            <StringItem index="3" value="Written"/>
+          </StringArray>
+        </Property>
+        <Property name="toolTipText" type="java.lang.String" value="The type of criteria evaluation scale to be used"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Criteria Evaluation Scale:"/>
+      </Properties>
+    </Component>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/Editor.form
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/Editor.form	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/Editor.form	(revision 6)
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <NonVisualComponents>
+    <Menu class="javax.swing.JMenuBar" name="jMenuBar1">
+      <SubComponents>
+        <Menu class="javax.swing.JMenu" name="jMenu1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Evaluations"/>
+          </Properties>
+          <SubComponents>
+            <MenuItem class="javax.swing.JCheckBoxMenuItem" name="ATMS">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+A"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="ATMS"/>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/ATMSEval.png"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="multipleChange"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JCheckBoxMenuItem" name="ActivityLog">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Alt+A"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Activity Log"/>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/ActivityLogEval.png"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="multipleChange"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JCheckBoxMenuItem" name="CAD">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Alt+C"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="CAD"/>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/CADEval.png"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="multipleChange"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="CMS">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+Alt+C"/>
+                </Property>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/CMSEval.png"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="CMS"/>
+              </Properties>
+              <Events>
+                <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="multipleChangeListener"/>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="multipleChange"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JCheckBoxMenuItem" name="Facilitator">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+F"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Facilitator"/>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/FacilitatorEval.png"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="optionalChange"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JCheckBoxMenuItem" name="Radio">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+R"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Radio"/>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/RadioEval.png"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="optionalChange"/>
+              </Events>
+            </MenuItem>
+          </SubComponents>
+        </Menu>
+        <Menu class="javax.swing.JMenu" name="JMenu2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Instructor Actions"/>
+          </Properties>
+          <SubComponents>
+            <MenuItem class="javax.swing.JCheckBoxMenuItem" name="MaintenanceRadio">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+M"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Maintenance Radio"/>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/MaintenanceRadio.png"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="optionalChange"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JCheckBoxMenuItem" name="TMTRadio">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+Alt+T"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="TMT Radio"/>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/TMTRadio.png"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="optionalChange"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JCheckBoxMenuItem" name="Telephone">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Shift+Ctrl+T"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Telephone"/>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/Telephone.png"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="optionalChange"/>
+              </Events>
+            </MenuItem>
+          </SubComponents>
+        </Menu>
+        <Menu class="javax.swing.JMenu" name="jMenu3">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Automated Data"/>
+          </Properties>
+          <SubComponents>
+            <MenuItem class="javax.swing.JMenuItem" name="Audio">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+A"/>
+                </Property>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/Audio.png"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Audio"/>
+              </Properties>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="CADLog">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+C"/>
+                </Property>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/CAD.png"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="CAD Log"/>
+              </Properties>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="CCTV">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+V"/>
+                </Property>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/CCTV.png"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="CCTV"/>
+              </Properties>
+            </MenuItem>
+            <MenuItem class="javax.swing.JCheckBoxMenuItem" name="CHPRadio">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Alt+C"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="CHP Radio"/>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/CHPRadio.png"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="optionalChange"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="Paramics">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+P"/>
+                </Property>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/Paramics.png"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Paramics"/>
+              </Properties>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="Tow">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+T"/>
+                </Property>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/Tow.png"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Tow"/>
+              </Properties>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="Unit">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+U"/>
+                </Property>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/Unit.png"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Unit"/>
+              </Properties>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="Witness">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+W"/>
+                </Property>
+                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+                  <Image iconType="3" name="/images/Witness.png"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Witness"/>
+              </Properties>
+            </MenuItem>
+          </SubComponents>
+        </Menu>
+      </SubComponents>
+    </Menu>
+  </NonVisualComponents>
+  <Properties>
+    <Property name="defaultCloseOperation" type="int" value="2"/>
+    <Property name="title" type="java.lang.String" value="Event Editor"/>
+  </Properties>
+  <SyntheticProperties>
+    <SyntheticProperty name="menuBar" type="java.lang.String" value="jMenuBar1"/>
+    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+  </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="2"/>
+    <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" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jTabbedPane1" pref="921" 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"/>
+              <Component id="jTabbedPane1" pref="580" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JTabbedPane" name="jTabbedPane1">
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/>
+    </Container>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/event/editor/CHPRadioPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/CHPRadioPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/CHPRadioPanel.java	(revision 6)
@@ -0,0 +1,132 @@
+package event.editor;
+
+import java.awt.event.*;
+import javax.swing.*;
+import java.util.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class CHPRadioPanel extends javax.swing.JPanel {
+
+    private ActionListener removeListener;
+
+
+    /** Creates new form CHPRadioPanel */
+    public CHPRadioPanel() {
+        initComponents();
+        HashMap<JButton, String> buttonMap = new HashMap<JButton, String>();
+        buttonMap.put(addDispatchButton, "Dispatch");
+        buttonMap.put(addFieldButton, "Field");
+        GenericTable.genericizeTable(jScrollPane1, buttonMap, deleteSelectedButton);
+    }
+
+    /** 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() {
+
+        jLabel4 = new javax.swing.JLabel();
+        audioText = new javax.swing.JTextField();
+        jButton2 = new javax.swing.JButton();
+        addDispatchButton = new javax.swing.JButton();
+        deleteSelectedButton = new javax.swing.JButton();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        addFieldButton = new javax.swing.JButton();
+
+        jLabel4.setText("Radio File");
+
+        audioText.setToolTipText("The radio audio file");
+
+        jButton2.setText("Browse");
+        jButton2.setToolTipText("Browse for the radio audio file");
+        jButton2.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                browse(evt);
+            }
+        });
+
+        addDispatchButton.setText("Add Dispatch");
+        addDispatchButton.setToolTipText("Adds a row for dialog by the dispatch operator in the table");
+
+        deleteSelectedButton.setText("Delete Selected");
+        deleteSelectedButton.setToolTipText("Deletes the selected row from the table");
+
+        addFieldButton.setText("Add Field");
+        addFieldButton.setToolTipText("Adds a row for dialog by the field operator in the table");
+        addFieldButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                addFieldButtonActionPerformed(evt);
+            }
+        });
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 730, Short.MAX_VALUE)
+                    .add(layout.createSequentialGroup()
+                        .add(addDispatchButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 130, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                        .add(3, 3, 3)
+                        .add(addFieldButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 130, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                        .add(deleteSelectedButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 131, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))
+                    .add(layout.createSequentialGroup()
+                        .add(jLabel4)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(audioText, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 511, Short.MAX_VALUE)
+                        .add(18, 18, 18)
+                        .add(jButton2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 130, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(audioText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jLabel4)
+                    .add(jButton2))
+                .add(18, 18, 18)
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(addDispatchButton)
+                    .add(addFieldButton)
+                    .add(deleteSelectedButton))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 341, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void browse(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_browse
+        JFileChooser browser = new JFileChooser();
+        int returnVal = browser.showOpenDialog(this);
+        if(returnVal == JFileChooser.APPROVE_OPTION) {
+           audioText.setText(browser.getSelectedFile().getPath());
+        }
+    }//GEN-LAST:event_browse
+
+    private void addFieldButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addFieldButtonActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_addFieldButtonActionPerformed
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton addDispatchButton;
+    private javax.swing.JButton addFieldButton;
+    private javax.swing.JTextField audioText;
+    private javax.swing.JButton deleteSelectedButton;
+    private javax.swing.JButton jButton2;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JScrollPane jScrollPane1;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/event/editor/CADLogPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/event/editor/CADLogPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/event/editor/CADLogPanel.java	(revision 6)
@@ -0,0 +1,91 @@
+package event.editor;
+
+import java.awt.event.*;
+
+/**
+ *
+ * @author nathaniellehrer
+ */
+public class CADLogPanel extends javax.swing.JPanel implements RemoveablePanel {
+
+    private ActionListener removeListener;
+
+    /** Creates new form DetailPanel */
+    public CADLogPanel() {
+        initComponents();
+    }
+
+    public void setRemoveListener(ActionListener listener)
+    {
+        removeListener = listener;
+    }
+    /** 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() {
+
+        removeButton = new javax.swing.JButton();
+        jLabel1 = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jTextArea1 = new javax.swing.JTextArea();
+
+        removeButton.setText("Remove");
+        removeButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                removeButtonremoveThisProperty(evt);
+            }
+        });
+
+        jLabel1.setText("Cad Log Text");
+
+        jTextArea1.setColumns(20);
+        jTextArea1.setRows(5);
+        jScrollPane1.setViewportView(jTextArea1);
+
+        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(0, 546, Short.MAX_VALUE)
+            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+                    .add(org.jdesktop.layout.GroupLayout.LEADING, jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 506, Short.MAX_VALUE)
+                    .add(layout.createSequentialGroup()
+                        .add(jLabel1)
+                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 330, Short.MAX_VALUE)
+                        .add(removeButton)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(layout.createSequentialGroup()
+                .addContainerGap()
+                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+                    .add(removeButton)
+                    .add(jLabel1))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void removeButtonremoveThisProperty(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeButtonremoveThisProperty
+        if (removeListener != null) {
+            removeListener.actionPerformed(new ActionEvent(this, 0, ""));
+        }
+}//GEN-LAST:event_removeButtonremoveThisProperty
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextArea jTextArea1;
+    private javax.swing.JButton removeButton;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/images/Images.java
===================================================================
--- /branches/ScriptBuilder4/src/images/Images.java	(revision 6)
+++ /branches/ScriptBuilder4/src/images/Images.java	(revision 6)
@@ -0,0 +1,57 @@
+package images;
+
+import java.net.URL;
+import java.util.HashMap;
+
+/**
+ * Takes all of the files in the package "images" (the directory containing this
+ * class) and creates a mapping of the name each file that ends with ".png" to
+ * its corresponding URL.
+ * @author Nathaniel Lehrer
+ */
+public class Images
+{
+    private static HashMap<String, URL> images = new HashMap<String, URL>();
+
+    static
+    {
+        images.put("ATMSEval.png", Images.class.getResource("ATMSEval.png"));
+        images.put("ActivityLogEval.png", Images.class.getResource("ActivityLogEval.png"));
+        images.put("Audio.png", Images.class.getResource("Audio.png"));
+        images.put("CAD.png", Images.class.getResource("CAD.png"));
+        images.put("CADEval.png", Images.class.getResource("CADEval.png"));
+        images.put("CCTV.png", Images.class.getResource("CCTV.png"));
+        images.put("CHPRadio.png", Images.class.getResource("CHPRadio.png"));
+        images.put("CMSEval.png", Images.class.getResource("CMSEval.png"));
+        images.put("Collapse.png", Images.class.getResource("Collapse.png"));
+        images.put("Cursor.png", Images.class.getResource("Cursor.png"));
+        images.put("Event.png", Images.class.getResource("Event.png"));
+        images.put("Expand.png", Images.class.getResource("Expand.png"));
+        images.put("FacilitatorEval.png", Images.class.getResource("FacilitatorEval.png"));
+        images.put("MaintenanceRadio.png", Images.class.getResource("MaintenanceRadio.png"));
+        images.put("Paramics.png", Images.class.getResource("Paramics.png"));
+        images.put("Radio.png", Images.class.getResource("Radio.png"));
+        images.put("RadioEval.png", Images.class.getResource("RadioEval.png"));
+        images.put("TMTRadio.png", Images.class.getResource("TMTRadio.png"));
+        images.put("Telephone.png", Images.class.getResource("Telephone.png"));
+        images.put("Tow.png", Images.class.getResource("Tow.png"));
+        images.put("Unit.png", Images.class.getResource("Unit.png"));
+        images.put("Witness.png", Images.class.getResource("Witness.png"));
+    }
+
+    /**
+     * Returns the image with the given name.
+     * @param name The name of the image to lookup.
+     * @return The URL corresponding to the given name if the name is found.
+     * @throws RuntimeException If the name was not found.
+     */
+    public static URL getImage(String name)
+    {
+        if (images.get(name) == null)
+        {
+            throw new RuntimeException("Images of name \"" + name
+                    + "\" was not found.");
+        }
+        return images.get(name);
+    }
+}
Index: /branches/ScriptBuilder4/src/images/.cvsignore
===================================================================
--- /branches/ScriptBuilder4/src/images/.cvsignore	(revision 6)
+++ /branches/ScriptBuilder4/src/images/.cvsignore	(revision 6)
@@ -0,0 +1,1 @@
+.DS_Store
Index: /branches/ScriptBuilder4/src/scriptbuilder/structures/ScriptIncident.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/structures/ScriptIncident.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/structures/ScriptIncident.java	(revision 6)
@@ -0,0 +1,136 @@
+package scriptbuilder.structures;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Observable;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class ScriptIncident extends Observable
+{
+    public List<TimeSlice> slices;
+
+    public Color color;
+    public int number;
+    public String name;
+    public String description;
+    public int length;
+    public boolean collapsed = false;
+    public int offset = 0;
+
+    public void setCollapsed(boolean collapsed)
+    {
+        this.collapsed = collapsed;
+        setChanged();
+        notifyObservers();
+    }
+
+    public void setOffset(int offset)
+    {
+        int shift = offset - this.offset;
+
+        this.offset = offset;
+
+        for (TimeSlice slice : slices)
+        {
+            slice.shift(shift);
+        }
+
+        setChanged();
+        notifyObservers();
+    }
+
+    public ScriptIncident(int number, String name, String description,
+            int length, SimulationScript script)
+    {
+        color = Color.BLACK;
+        this.number = number;
+        this.name = name;
+        this.description = description;
+        this.length = length;
+
+        this.addObserver(script);
+
+        slices = new ArrayList<TimeSlice>();
+    }
+
+    public ScriptIncident(Color color, int number, String name,
+            String description, int length, SimulationScript script)
+    {
+        this.color = color;
+        this.number = number;
+        this.name = name;
+        this.description = description;
+        this.length = length;
+
+        this.addObserver(script);
+
+        slices = new ArrayList<TimeSlice>();
+        for (int i = 0; i < length; i += 60)
+        {
+            slices.add(new TimeSlice(i));
+        }
+    }
+
+    public ScriptIncident(Color color, int number, String name,
+            String description, int length, SimulationScript script,
+            int offset)
+    {
+        this.color = color;
+        this.number = number;
+        this.name = name;
+        this.description = description;
+        this.length = length;
+
+        this.addObserver(script);
+
+        slices = new ArrayList<TimeSlice>();
+        for (int i = 0; i < length; i += 60)
+        {
+            slices.add(new TimeSlice(i));
+        }
+
+        this.setOffset(offset);
+    }
+
+    public static class SliceChangedEvent
+    {
+        public TimeSlice slice;
+
+        SliceChangedEvent(TimeSlice slice)
+        {
+            this.slice = slice;
+        }
+    }
+
+    public void setSliceActive(int i)
+    {
+        setChanged();
+        notifyObservers(new SliceChangedEvent(this.slices.get(i)));
+    }
+
+    public static class IncidentFocusedEvent
+    {
+        public ScriptIncident incident;
+
+        IncidentFocusedEvent(ScriptIncident i)
+        {
+            incident = i;
+        }
+    }
+
+    public void setIncidentActive()
+    {
+        setChanged();
+        notifyObservers(new IncidentFocusedEvent(this));
+    }
+
+    @Override
+    public String toString()
+    {
+        return this.number + " - " + this.name;
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/structures/events/RadioEvent.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/structures/events/RadioEvent.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/structures/events/RadioEvent.java	(revision 6)
@@ -0,0 +1,33 @@
+package scriptbuilder.structures.events;
+
+import scriptbuilder.structures.ScriptEvent;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class RadioEvent extends ScriptEvent
+{
+    public RadioType radioType;
+    public String message;
+
+    public static enum RadioType
+    {
+        TMT, Maintenance
+    }
+
+    public RadioEvent(RadioType radioType, String message)
+    {
+        super(ScriptEvent.ScriptEventType.CHP_RADIO_EVENT);
+
+        this.radioType = radioType;
+        this.message = message;
+    }
+
+    @Override
+    public String toString()
+    {
+        return "Radio Event: { Type=\"" + (radioType == RadioType.TMT ? "TMT" :
+            "Maintenance") + "\" Message=\"" + message + "\" }";
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/structures/ScriptEvent.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/structures/ScriptEvent.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/structures/ScriptEvent.java	(revision 6)
@@ -0,0 +1,63 @@
+package scriptbuilder.structures;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class ScriptEvent implements Comparable<ScriptEvent>
+{
+    public int compareTo(ScriptEvent o)
+    {
+        return this.type.compareTo(o.type);
+    }
+
+    public static enum ScriptEventType
+    {
+        AUDIO_EVENT             ("Audio"),
+        CAD_EVENT               ("CAD"),
+        CCTV_EVENT              ("CCTV"),
+        CHP_RADIO_EVENT         ("CHPRadio"),
+        PARAMICS_EVENT          ("Paramics"),
+        TOW_EVENT               ("Tow"),
+        UNIT_EVENT              ("Unit"),
+        WITNESS_EVENT           ("Witness"),
+        MAINTENANCE_RADIO_EVENT ("MaintenanceRadio"),
+        TMT_RADIO_EVENT         ("TMTRadio"),
+        TELEPHONE_EVENT         ("Telephone"),
+        ATMS_EVAL_EVENT         ("ATMSEval"),
+        ACTIVITY_LOG_EVAL_EVENT ("ActivityLogEval"),
+        CAD_EVAL_EVENT          ("CADEval"),
+        CMS_EVAL_EVENT          ("CMSEval"),
+        FACILITATOR_EVAL_EVENT  ("FacilitatorEval"),
+        RADIO_EVAL_EVENT        ("RadioEval");
+
+        public String IMAGE_NAME;
+
+        private ScriptEventType(String image)
+        {
+            this.IMAGE_NAME = image;
+        }
+    }
+
+    private ScriptEventType type;
+
+    /**
+     * Used for debugging only.
+     * @param type The type of event.
+     */
+    public ScriptEvent(ScriptEventType type)
+    {
+        this.type = type;
+    }
+
+    public ScriptEventType getScriptEventType()
+    {
+        return type;
+    }
+
+    @Override
+    public String toString()
+    {
+        return this.type.toString() + " - [Event Description]";
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/structures/SimulationScript.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/structures/SimulationScript.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/structures/SimulationScript.java	(revision 6)
@@ -0,0 +1,114 @@
+package scriptbuilder.structures;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Random;
+import scriptbuilder.structures.ScriptEvent.ScriptEventType;
+import scriptbuilder.structures.ScriptIncident.IncidentFocusedEvent;
+import scriptbuilder.structures.ScriptIncident.SliceChangedEvent;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class SimulationScript extends Observable implements Observer
+{
+    public static final Color[] incidentColors = { Color.BLACK,
+                                                    Color.BLUE,
+                                                    Color.RED,
+                                                    new Color(0x38, 0x5E, 0x0F),
+                                                    new Color(128, 0, 128),
+                                                    Color.MAGENTA,
+                                                    new Color(0x23, 0x6B, 0x8E),
+                                                    Color.ORANGE,
+                                                    new Color(0x60, 0x33, 0x11),
+                                                    Color.GRAY                  };
+    public List<ScriptIncident> incidents;
+
+    public SimulationScript()
+    {
+        incidents = new ArrayList<ScriptIncident>();
+
+        // Create the media event
+        incidents.add(new ScriptIncident(incidentColors[0], 100, "Media",
+                "An incident for the media in CAD.", 10800, this));
+
+        // Add some demo events
+        incidents.add(new ScriptIncident(incidentColors[1], 174, "Blueberry Truck",
+                "Blueberry truck crashed on the freeway.", 8800, this));
+        incidents.add(new ScriptIncident(incidentColors[2], 175, "Construction Crash",
+                "Crash at construction site on Red Road.", 6800, this));
+        incidents.add(new ScriptIncident(incidentColors[3], 176, "Car Freeway Flip",
+                "Car flipped across the lane divider on the freeway.", 7200, this));
+        incidents.add(new ScriptIncident(incidentColors[4], 177, "Two Lane Crash",
+                "Crash taking two lanes on Tree Road.", 4200, this));
+        incidents.add(new ScriptIncident(incidentColors[5], 178, "Stalled Truck",
+                "Truck stalled on the freeway.", 2800, this));
+        //incidents.add(new ScriptIncident(incidentColors[6], 179, "Tomato Truck Spill",
+        //        "Tomato trucked spilt tomatos all over the freeway.", 3200, this));
+        //incidents.add(new ScriptIncident(incidentColors[7], 180, "Crash at Intersection",
+        //        "Crash at the intersection of Tree Road and Red Road.", 4300, this));
+        //incidents.add(new ScriptIncident(incidentColors[8], 181, "Bomb Threat",
+        //        "Bomb threat and Road X.", 6000, this));*/
+        incidents.add(null);
+        incidents.add(null);
+        incidents.add(null);
+
+        // Create the "other" event
+        incidents.add(new ScriptIncident(incidentColors[9], 999, "Other",
+                "An incident for small-scale events, false events, "  +
+                "and noise.  All events added to this incident will " +
+                "receive a randomly generated incident number.",
+                10800, this));
+
+        Random rng = new Random();
+        ScriptEventType[] eventTypes = ScriptEventType.values();
+
+        for(int i = 0; i < 300; i++)
+        {
+            int n = rng.nextInt();
+            int s = rng.nextInt();
+            int e = rng.nextInt();
+            if (n < 0) n *= -1;
+            if (s < 0) s *= -1;
+            if (e < 0) e *= -1;
+
+            incidents.get(n % 6).slices.get(s % (incidents.get(n % 6)
+                    .slices.size())).addEvent(new ScriptEvent(eventTypes[e % eventTypes.length]));
+        }
+
+        incidents.get(1).setOffset(200);
+        incidents.get(2).setOffset(3400);
+        incidents.get(3).setOffset(1400);
+        incidents.get(4).setOffset(4400);
+        incidents.get(5).setOffset(1400);
+        //incidents.get(6).setOffset(7600);
+        //incidents.get(7).setOffset(2400);
+        //incidents.get(8).setOffset(4800);
+    }
+
+    public void update(Observable o, Object arg)
+    {
+        if (arg instanceof SliceChangedEvent )
+        {
+            // The slice focus has changed; pass the message
+            setChanged();
+            notifyObservers(arg);
+        }
+        else if (arg instanceof IncidentFocusedEvent)
+        {
+            // The slice focus has changed; pass the message
+            setChanged();
+            notifyObservers(arg);
+        }
+        else
+        {
+            // The script has changed, notify observers
+            setChanged();
+            notifyObservers(this);
+        }
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/structures/TimeSlice.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/structures/TimeSlice.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/structures/TimeSlice.java	(revision 6)
@@ -0,0 +1,76 @@
+package scriptbuilder.structures;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class TimeSlice
+{
+    public List<ScriptEvent> events;
+    private int seconds;
+
+    public void addEvent(ScriptEvent event)
+    {
+        events.add(event);
+        Collections.sort(events);
+    }
+
+    public int getX()
+    {
+        return seconds / ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+                ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK;
+    }
+
+    public void shift(int amnt)
+    {
+        seconds += amnt;
+    }
+
+    public TimeSlice(int seconds)
+    {
+        this.seconds = seconds;
+        events = new ArrayList<ScriptEvent>();
+    }
+
+    public String getToolTipText(int y)
+    {
+        int i = (y - ScriptBuilderGuiConstants.SCRIPT_EVENT_ICON_TOP_MARGIN);
+        if (i < 0)
+        {
+            if (i > (-1 * ScriptBuilderGuiConstants.SCRIPT_EVENT_ICON_STEP))
+            {
+                String s = toString();
+                if (s.equals(""))
+                    return null;
+
+                return"<html>" + s.replace("\n", "<br/>") + "</html>";
+            }
+            else
+                return null;
+        }
+        
+        i /= ScriptBuilderGuiConstants.SCRIPT_EVENT_ICON_STEP;
+        if (i < events.size())
+            return events.get(i).toString();
+        return null;
+    }
+
+    @Override
+    public String toString()
+    {
+        StringBuilder sb = new StringBuilder();
+        
+        for (ScriptEvent event : events)
+        {
+            sb.append(event.toString());
+            sb.append('\n');
+        }
+
+        return sb.toString();
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/ScriptBuilderFrame.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/ScriptBuilderFrame.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/ScriptBuilderFrame.java	(revision 6)
@@ -0,0 +1,2420 @@
+/*
+ * ScriptBuilderFrame.java
+ *
+ * Created on May 8, 2010, 12:01:46 PM
+ */
+package scriptbuilder.gui;
+
+import java.awt.Adjustable;
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.event.AdjustmentEvent;
+import java.awt.event.AdjustmentListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Random;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+import scriptbuilder.structures.ScriptEvent;
+import scriptbuilder.structures.ScriptEvent.ScriptEventType;
+import scriptbuilder.structures.ScriptIncident;
+import scriptbuilder.structures.ScriptIncident.IncidentFocusedEvent;
+import scriptbuilder.structures.ScriptIncident.SliceChangedEvent;
+import scriptbuilder.structures.SimulationScript;
+import scriptbuilder.structures.TimeSlice;
+
+/**
+ *
+ * @author Greg
+ */
+public class ScriptBuilderFrame extends javax.swing.JFrame implements Observer
+{
+    private SimulationScript script;
+    public ScriptEventType currentEventType;
+    private ArrayList<JButton> eventButtons = null;
+
+    private boolean edittingIncident;
+    int oldIncidentIndex;
+
+    public SimulationScript getScript()
+    {
+        System.out.println("Change");
+        return script;
+    }
+
+    class MyAdjustmentListener implements AdjustmentListener
+    {
+        public void adjustmentValueChanged(AdjustmentEvent evt)
+        {
+            if (evt.getAdjustable().getOrientation() == Adjustable.HORIZONTAL)
+            {
+                timeStampScrollPane.getHorizontalScrollBar()
+                    .setValue(timelinesScrollPane.getHorizontalScrollBar().getValue());
+            } else
+            {
+                // Event from vertical scrollbar
+            }
+
+            repaint();
+        }
+    }
+
+    private class TimelineKeyListener implements KeyListener
+    {
+        public void keyPressed(KeyEvent e)
+        {
+            JButton lastButton = null;
+            for (JButton eb : eventButtons)
+            {
+                eb.setFocusPainted(false);
+                if (eb.isSelected())
+                {
+                    lastButton = eb;
+                }
+                eb.setSelected(false);
+            }
+
+            JButton newButton = null;
+            switch(e.getKeyChar())
+            {
+                case 'u':
+                    currentEventType = ScriptEventType.AUDIO_EVENT;
+                    newButton = audioButton;
+                    break;
+                case 'c':
+                    currentEventType = ScriptEventType.CAD_EVENT;
+                    newButton = cadButton;
+                    break;
+                case 'v':
+                    currentEventType = ScriptEventType.CCTV_EVENT;
+                    newButton = cctvButton;
+                    break;
+                case 'h':
+                    currentEventType = ScriptEventType.CHP_RADIO_EVENT;
+                    newButton = chpRadioButton;
+                    break;
+                case 'p':
+                    currentEventType = ScriptEventType.PARAMICS_EVENT;
+                    newButton = paramicsButton;
+                    break;
+                case 'o':
+                    currentEventType = ScriptEventType.TOW_EVENT;
+                    newButton = towButton;
+                    break;
+                case 'n':
+                    currentEventType = ScriptEventType.UNIT_EVENT;
+                    newButton = unitButton;
+                    break;
+                case 'w':
+                    currentEventType = ScriptEventType.WITNESS_EVENT;
+                    newButton = witnessButton;
+                    break;
+                case 'm':
+                    currentEventType = ScriptEventType.MAINTENANCE_RADIO_EVENT;
+                    newButton = maintenanceRadioButton;
+                    break;
+                case 't':
+                    currentEventType = ScriptEventType.TMT_RADIO_EVENT;
+                    newButton = tmtRadioButton;
+                    break;
+                case 'e':
+                    currentEventType = ScriptEventType.TELEPHONE_EVENT;
+                    newButton = telephoneButton;
+                    break;
+                case 'a':
+                    currentEventType = ScriptEventType.ATMS_EVAL_EVENT;
+                    newButton = atmsEvalButton;
+                    break;
+                case 'l':
+                    currentEventType = ScriptEventType.ACTIVITY_LOG_EVAL_EVENT;
+                    newButton = activityLogEvalButton;
+                    break;
+                case 'd':
+                    currentEventType = ScriptEventType.CAD_EVAL_EVENT;
+                    newButton = cadEvalButton;
+                    break;
+                case 's':
+                    currentEventType = ScriptEventType.CMS_EVAL_EVENT;
+                    newButton = cmsEvalButton;
+                    break;
+                case 'f':
+                    currentEventType = ScriptEventType.FACILITATOR_EVAL_EVENT;
+                    newButton = facilitatorEvalButton;
+                    break;
+                case 'r':
+                    currentEventType = ScriptEventType.RADIO_EVAL_EVENT;
+                    newButton = radioEvalButton;
+                    break;
+                default:
+                    newButton = lastButton;
+            }
+
+            if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
+            {
+                currentEventType = null;
+                newButton = selectButton;
+            }
+
+            if (newButton != null)
+            {
+                newButton.setSelected(true);
+            }
+
+            repaint();
+        }
+
+
+        public void keyReleased(KeyEvent e)
+
+        {
+        }
+
+        public void keyTyped(KeyEvent e)
+        {
+        }
+    }
+
+    /** Creates new form ScriptBuilderFrame */
+    public ScriptBuilderFrame()
+    {
+        script = new SimulationScript();
+        script.addObserver(this);
+        initComponents();
+        this.update(null, script);
+        selectButton.addKeyListener(new TimelineKeyListener());
+        cadButton.addKeyListener(new TimelineKeyListener());
+        cctvButton.addKeyListener(new TimelineKeyListener());
+        chpRadioButton.addKeyListener(new TimelineKeyListener());
+        paramicsButton.addKeyListener(new TimelineKeyListener());
+        towButton.addKeyListener(new TimelineKeyListener());
+        unitButton.addKeyListener(new TimelineKeyListener());
+        witnessButton.addKeyListener(new TimelineKeyListener());
+        maintenanceRadioButton.addKeyListener(new TimelineKeyListener());
+        tmtRadioButton.addKeyListener(new TimelineKeyListener());
+        telephoneButton.addKeyListener(new TimelineKeyListener());
+        atmsEvalButton.addKeyListener(new TimelineKeyListener());
+        activityLogEvalButton.addKeyListener(new TimelineKeyListener());
+        cadEvalButton.addKeyListener(new TimelineKeyListener());
+        cmsEvalButton.addKeyListener(new TimelineKeyListener());
+        facilitatorEvalButton.addKeyListener(new TimelineKeyListener());
+        radioEvalButton.addKeyListener(new TimelineKeyListener());
+
+        // Hack to refresh the zoom
+        zoomSlider.setValue(zoomSlider.getValue()-1);
+        zoomSlider.setValue(zoomSlider.getValue()+1);
+
+        // Set listener for scroll pane
+        AdjustmentListener listener = new MyAdjustmentListener();
+        timelinesScrollPane.getHorizontalScrollBar().addAdjustmentListener(listener);
+        timelinesScrollPane.getVerticalScrollBar().addAdjustmentListener(listener);
+
+        // Button list
+        eventButtons = new ArrayList<JButton>();
+        eventButtons.add(maintenanceRadioButton);
+        eventButtons.add(tmtRadioButton);
+        eventButtons.add(telephoneButton);
+        eventButtons.add(paramicsButton);
+        eventButtons.add(towButton);
+        eventButtons.add(witnessButton);
+        eventButtons.add(unitButton);
+        eventButtons.add(audioButton);
+        eventButtons.add(cadButton);
+        eventButtons.add(cctvButton);
+        eventButtons.add(chpRadioButton);
+        eventButtons.add(selectButton);
+        eventButtons.add(cmsEvalButton);
+        eventButtons.add(atmsEvalButton);
+        eventButtons.add(cadEvalButton);
+        eventButtons.add(activityLogEvalButton);
+        eventButtons.add(facilitatorEvalButton);
+        eventButtons.add(radioEvalButton);
+    }
+
+    @Override
+    public void update(Observable o, Object arg)
+    {
+        if (arg instanceof SimulationScript)
+        {
+            script = (SimulationScript)arg;
+
+            if (script.incidents.size() != 10)
+                return;
+
+            timelineTickPanel.update(script);
+            timeStampPanel.update(script);
+
+            incidentTimelinePanel1.update(script.incidents.get(0));
+            incidentTimelinePanel2.update(script.incidents.get(1));
+            incidentTimelinePanel3.update(script.incidents.get(2));
+            incidentTimelinePanel4.update(script.incidents.get(3));
+            incidentTimelinePanel5.update(script.incidents.get(4));
+            incidentTimelinePanel6.update(script.incidents.get(5));
+            incidentTimelinePanel7.update(script.incidents.get(6));
+            incidentTimelinePanel8.update(script.incidents.get(7));
+            incidentTimelinePanel9.update(script.incidents.get(8));
+            incidentTimelinePanel10.update(script.incidents.get(9));
+
+            incidentNumberPanel1.update(script.incidents.get(0));
+            incidentNumberPanel2.update(script.incidents.get(1));
+            incidentNumberPanel3.update(script.incidents.get(2));
+            incidentNumberPanel4.update(script.incidents.get(3));
+            incidentNumberPanel5.update(script.incidents.get(4));
+            incidentNumberPanel6.update(script.incidents.get(5));
+            incidentNumberPanel7.update(script.incidents.get(6));
+            incidentNumberPanel8.update(script.incidents.get(7));
+            incidentNumberPanel9.update(script.incidents.get(8));
+            incidentNumberPanel10.update(script.incidents.get(9));
+
+            /**DefaultComboBoxModel model = new DefaultComboBoxModel();
+            for (ScriptIncident i : script.incidents)
+            {
+                if (i != null)
+                    model.addElement(i);
+            }
+            gotoIncident.setModel(model);**/
+
+            this.setPreferredSize(this.getSize());
+            pack();
+        }
+        else if (arg instanceof SliceChangedEvent)
+        {
+            TimeSlice slice = ((SliceChangedEvent)arg).slice;
+
+            DefaultListModel model = new DefaultListModel();
+            for (ScriptEvent e : slice.events)
+            {
+                model.addElement(e);
+            }
+            scriptEventsList.setModel(model);
+        }
+        else if (arg instanceof IncidentFocusedEvent)
+        {
+            ScriptIncident i = ((IncidentFocusedEvent)arg).incident;
+
+            incidentNumber.setText(Integer.toString(i.number));
+            incidentName.setText(i.name);
+            incidentDescription.setText(i.description);
+
+            //gotoIncident.setSelectedItem(i);
+        }
+    }
+
+    /** 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() {
+
+        incidentPopupMenu = new javax.swing.JPopupMenu();
+        popupDeleteIncident = new javax.swing.JMenuItem();
+        eventPopupMenu = new javax.swing.JPopupMenu();
+        cadEvent = new javax.swing.JMenuItem();
+        jMenuItem2 = new javax.swing.JMenuItem();
+        radioEvent = new javax.swing.JMenuItem();
+        jMenuItem4 = new javax.swing.JMenuItem();
+        jMenuItem5 = new javax.swing.JMenuItem();
+        jMenuItem6 = new javax.swing.JMenuItem();
+        cadEventFrame = new javax.swing.JFrame();
+        jLabel5 = new javax.swing.JLabel();
+        radioEventFrame = new javax.swing.JFrame();
+        radioTypeLabel = new javax.swing.JLabel();
+        jLabel7 = new javax.swing.JLabel();
+        radioTypeComboBox = new javax.swing.JComboBox();
+        radioMessageScrollPane = new javax.swing.JScrollPane();
+        radioMessage = new javax.swing.JTextArea();
+        okButton = new javax.swing.JButton();
+        cancelButton = new javax.swing.JButton();
+        eventListPopupMenu = new javax.swing.JPopupMenu();
+        editEventList = new javax.swing.JMenuItem();
+        deleteEventList = new javax.swing.JMenuItem();
+        incidentFrame = new javax.swing.JFrame();
+        jLabel6 = new javax.swing.JLabel();
+        jLabel8 = new javax.swing.JLabel();
+        jLabel9 = new javax.swing.JLabel();
+        jLabel10 = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        addIncidentDescription = new javax.swing.JTextArea();
+        incidentOkButton = new javax.swing.JButton();
+        incidentCancelButton = new javax.swing.JButton();
+        addIncidentNumber = new javax.swing.JSpinner();
+        addIncidentName = new javax.swing.JTextField();
+        jLabel11 = new javax.swing.JLabel();
+        addIncidentLength = new javax.swing.JSpinner();
+        jLabel12 = new javax.swing.JLabel();
+        addIncidentStart = new javax.swing.JSpinner();
+        jButton3 = new javax.swing.JButton();
+        incidentColorField = new javax.swing.JTextField();
+        addNoiseFrame = new javax.swing.JFrame();
+        jLabel13 = new javax.swing.JLabel();
+        jSlider1 = new javax.swing.JSlider();
+        jSlider2 = new javax.swing.JSlider();
+        jLabel14 = new javax.swing.JLabel();
+        jSlider3 = new javax.swing.JSlider();
+        jLabel15 = new javax.swing.JLabel();
+        jTextArea1 = new javax.swing.JTextArea();
+        jSlider4 = new javax.swing.JSlider();
+        jLabel16 = new javax.swing.JLabel();
+        jSlider5 = new javax.swing.JSlider();
+        jLabel17 = new javax.swing.JLabel();
+        jButton1 = new javax.swing.JButton();
+        jButton2 = new javax.swing.JButton();
+        jLabel20 = new javax.swing.JLabel();
+        jLabel21 = new javax.swing.JLabel();
+        incidentColorChooser = new javax.swing.JColorChooser();
+        timelinesScrollPane = new javax.swing.JScrollPane();
+        timelineTickPanel = new scriptbuilder.gui.panels.TimelineTickPanel();
+        incidentTimelinePanel1 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentTimelinePanel2 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentTimelinePanel8 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentTimelinePanel3 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentTimelinePanel6 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentTimelinePanel5 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentTimelinePanel4 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentTimelinePanel7 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentTimelinePanel10 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentTimelinePanel9 = new scriptbuilder.gui.panels.IncidentTimelinePanel();
+        incidentNumberPanel1 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        incidentNumberPanel2 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        incidentNumberPanel3 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        incidentNumberPanel4 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        incidentNumberPanel5 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        incidentNumberPanel6 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        incidentNumberPanel7 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        incidentNumberPanel8 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        incidentNumberPanel9 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        incidentNumberPanel10 = new scriptbuilder.gui.panels.IncidentNumberPanel();
+        scriptEventsPanel = new javax.swing.JPanel();
+        scriptEventsPane = new javax.swing.JScrollPane();
+        scriptEventsList = new javax.swing.JList();
+        zoomSlider = new javax.swing.JSlider();
+        scriptEventsPanel1 = new javax.swing.JPanel();
+        jLabel2 = new javax.swing.JLabel();
+        jLabel3 = new javax.swing.JLabel();
+        jLabel4 = new javax.swing.JLabel();
+        incidentName = new javax.swing.JTextField();
+        incidentDescriptionPane = new javax.swing.JScrollPane();
+        incidentDescription = new javax.swing.JTextArea();
+        incidentNumber = new javax.swing.JTextField();
+        selectButton = new javax.swing.JButton();
+        incidentEventsPanel = new javax.swing.JPanel();
+        maintenanceRadioButton = new javax.swing.JButton();
+        tmtRadioButton = new javax.swing.JButton();
+        telephoneButton = new javax.swing.JButton();
+        unitButton = new javax.swing.JButton();
+        witnessButton = new javax.swing.JButton();
+        paramicsButton = new javax.swing.JButton();
+        towButton = new javax.swing.JButton();
+        audioButton = new javax.swing.JButton();
+        cctvButton = new javax.swing.JButton();
+        cadButton = new javax.swing.JButton();
+        chpRadioButton = new javax.swing.JButton();
+        evaluationEventsPanel = new javax.swing.JPanel();
+        atmsEvalButton = new javax.swing.JButton();
+        cmsEvalButton = new javax.swing.JButton();
+        cadEvalButton = new javax.swing.JButton();
+        facilitatorEvalButton = new javax.swing.JButton();
+        activityLogEvalButton = new javax.swing.JButton();
+        radioEvalButton = new javax.swing.JButton();
+        zoomInIcon = new javax.swing.JLabel();
+        zoomOutIcon = new javax.swing.JLabel();
+        timeStampScrollPane = new javax.swing.JScrollPane();
+        timeStampPanel = new scriptbuilder.gui.panels.TimeStampPanel();
+        scriptBuilderMenuBar = new javax.swing.JMenuBar();
+        fileMenu = new javax.swing.JMenu();
+        fileNew = new javax.swing.JMenuItem();
+        jSeparator1 = new javax.swing.JPopupMenu.Separator();
+        fileOpen = new javax.swing.JMenuItem();
+        jSeparator2 = new javax.swing.JPopupMenu.Separator();
+        fileSave = new javax.swing.JMenuItem();
+        fileSaveAs = new javax.swing.JMenuItem();
+        generateMenu = new javax.swing.JMenu();
+        generateNotebooks = new javax.swing.JMenuItem();
+        jMenuItem3 = new javax.swing.JMenuItem();
+        generateScorecards = new javax.swing.JMenuItem();
+        generateOrganizationChart = new javax.swing.JMenuItem();
+        jSeparator3 = new javax.swing.JPopupMenu.Separator();
+        generateProjectRequirements = new javax.swing.JMenuItem();
+        incidentMenu = new javax.swing.JMenu();
+        newIncident = new javax.swing.JMenuItem();
+        editIncident = new javax.swing.JMenuItem();
+        jSeparator4 = new javax.swing.JPopupMenu.Separator();
+        saveIncident = new javax.swing.JMenuItem();
+        loadIncident = new javax.swing.JMenuItem();
+        jMenu1 = new javax.swing.JMenu();
+        jMenuItem1 = new javax.swing.JMenuItem();
+        helpMenu = new javax.swing.JMenu();
+        helpTutorial = new javax.swing.JMenuItem();
+        helpAbout = new javax.swing.JMenuItem();
+
+        popupDeleteIncident.setText("Delete Incident...");
+        incidentPopupMenu.add(popupDeleteIncident);
+
+        cadEvent.setText("CAD Event");
+        cadEvent.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                cadEventMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                cadEventMouseReleased(evt);
+            }
+        });
+        eventPopupMenu.add(cadEvent);
+
+        jMenuItem2.setText("Paramics Event");
+        eventPopupMenu.add(jMenuItem2);
+
+        radioEvent.setText("Radio Event");
+        radioEvent.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                radioEventMousePressed(evt);
+            }
+        });
+        eventPopupMenu.add(radioEvent);
+
+        jMenuItem4.setText("Telephone Event");
+        eventPopupMenu.add(jMenuItem4);
+
+        jMenuItem5.setText("Video Event");
+        eventPopupMenu.add(jMenuItem5);
+
+        jMenuItem6.setText("Evaluation Event");
+        eventPopupMenu.add(jMenuItem6);
+
+        cadEventFrame.setMinimumSize(new java.awt.Dimension(400, 300));
+
+        jLabel5.setText("CAD Entry");
+
+        javax.swing.GroupLayout cadEventFrameLayout = new javax.swing.GroupLayout(cadEventFrame.getContentPane());
+        cadEventFrame.getContentPane().setLayout(cadEventFrameLayout);
+        cadEventFrameLayout.setHorizontalGroup(
+            cadEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(cadEventFrameLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        cadEventFrameLayout.setVerticalGroup(
+            cadEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(cadEventFrameLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jLabel5)
+                .addContainerGap(1357, Short.MAX_VALUE))
+        );
+
+        radioEventFrame.setTitle("Add Radio Event");
+        radioEventFrame.setMinimumSize(new java.awt.Dimension(400, 300));
+
+        radioTypeLabel.setText("Radio Type:");
+
+        jLabel7.setText("Radio Message:");
+
+        radioTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "TMT", "Maintanence" }));
+
+        radioMessageScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+
+        radioMessage.setColumns(20);
+        radioMessage.setLineWrap(true);
+        radioMessage.setRows(5);
+        radioMessage.setWrapStyleWord(true);
+        radioMessageScrollPane.setViewportView(radioMessage);
+
+        okButton.setText("OK");
+        okButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                okButtonActionPerformed(evt);
+            }
+        });
+
+        cancelButton.setText("Cancel");
+        cancelButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                cancelButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout radioEventFrameLayout = new javax.swing.GroupLayout(radioEventFrame.getContentPane());
+        radioEventFrame.getContentPane().setLayout(radioEventFrameLayout);
+        radioEventFrameLayout.setHorizontalGroup(
+            radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, radioEventFrameLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(radioMessageScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, radioEventFrameLayout.createSequentialGroup()
+                        .addComponent(radioTypeLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(radioTypeComboBox, 0, 312, Short.MAX_VALUE))
+                    .addComponent(jLabel7, javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, radioEventFrameLayout.createSequentialGroup()
+                        .addComponent(cancelButton)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 246, Short.MAX_VALUE)
+                        .addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap())
+        );
+        radioEventFrameLayout.setVerticalGroup(
+            radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(radioEventFrameLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(radioTypeLabel)
+                    .addComponent(radioTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(jLabel7)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(radioMessageScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 198, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(radioEventFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(okButton)
+                    .addComponent(cancelButton))
+                .addContainerGap())
+        );
+
+        editEventList.setText("Edit...");
+        editEventList.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                editEventListActionPerformed(evt);
+            }
+        });
+        eventListPopupMenu.add(editEventList);
+
+        deleteEventList.setText("Delete...");
+        eventListPopupMenu.add(deleteEventList);
+
+        incidentFrame.setTitle("Incident");
+        incidentFrame.setMinimumSize(new java.awt.Dimension(400, 400));
+
+        jLabel6.setText("Incident Number: ");
+
+        jLabel8.setText("Incident Name:");
+
+        jLabel9.setText("Incident Color: ");
+
+        jLabel10.setText("Incident Description:");
+
+        jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+        jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+
+        addIncidentDescription.setColumns(20);
+        addIncidentDescription.setLineWrap(true);
+        addIncidentDescription.setRows(5);
+        addIncidentDescription.setWrapStyleWord(true);
+        jScrollPane1.setViewportView(addIncidentDescription);
+
+        incidentOkButton.setText("OK");
+        incidentOkButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                incidentOkButtonActionPerformed(evt);
+            }
+        });
+
+        incidentCancelButton.setText("Cancel");
+        incidentCancelButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                incidentCancelButtonActionPerformed(evt);
+            }
+        });
+
+        addIncidentNumber.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(101), Integer.valueOf(101), null, Integer.valueOf(1)));
+
+        jLabel11.setText("Incident Length in Minutes: ");
+
+        addIncidentLength.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
+
+        jLabel12.setText("Incident Start Time in Minutes:");
+
+        addIncidentStart.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
+
+        jButton3.setText("Choose...");
+        jButton3.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jButton3ActionPerformed(evt);
+            }
+        });
+
+        incidentColorField.setBackground(new java.awt.Color(0, 0, 0));
+        incidentColorField.setEditable(false);
+
+        javax.swing.GroupLayout incidentFrameLayout = new javax.swing.GroupLayout(incidentFrame.getContentPane());
+        incidentFrame.getContentPane().setLayout(incidentFrameLayout);
+        incidentFrameLayout.setHorizontalGroup(
+            incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, incidentFrameLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 322, Short.MAX_VALUE)
+                    .addComponent(jLabel10, javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, incidentFrameLayout.createSequentialGroup()
+                        .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(jLabel6)
+                            .addComponent(jLabel8)
+                            .addComponent(jLabel9))
+                        .addGap(18, 18, 18)
+                        .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(addIncidentName, javax.swing.GroupLayout.DEFAULT_SIZE, 218, Short.MAX_VALUE)
+                            .addComponent(addIncidentNumber, javax.swing.GroupLayout.DEFAULT_SIZE, 218, Short.MAX_VALUE)
+                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, incidentFrameLayout.createSequentialGroup()
+                                .addComponent(incidentColorField, javax.swing.GroupLayout.DEFAULT_SIZE, 119, Short.MAX_VALUE)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, incidentFrameLayout.createSequentialGroup()
+                        .addComponent(incidentCancelButton)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 188, Short.MAX_VALUE)
+                        .addComponent(incidentOkButton, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, incidentFrameLayout.createSequentialGroup()
+                        .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(jLabel12)
+                            .addComponent(jLabel11))
+                        .addGap(18, 18, 18)
+                        .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(addIncidentStart, javax.swing.GroupLayout.DEFAULT_SIZE, 158, Short.MAX_VALUE)
+                            .addComponent(addIncidentLength, javax.swing.GroupLayout.DEFAULT_SIZE, 158, Short.MAX_VALUE))))
+                .addContainerGap())
+        );
+        incidentFrameLayout.setVerticalGroup(
+            incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(incidentFrameLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel6)
+                    .addComponent(addIncidentNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel8)
+                    .addComponent(addIncidentName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel9)
+                    .addComponent(jButton3)
+                    .addComponent(incidentColorField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jLabel10)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 106, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(addIncidentStart, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel12))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(addIncidentLength, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel11))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(incidentCancelButton)
+                    .addComponent(incidentOkButton))
+                .addContainerGap())
+        );
+
+        addNoiseFrame.setTitle("Generate Noise");
+        addNoiseFrame.setMinimumSize(new java.awt.Dimension(395, 315));
+        addNoiseFrame.setResizable(false);
+
+        jLabel13.setFont(new java.awt.Font("Tahoma", 0, 12));
+        jLabel13.setText("Radio Chatter: ");
+
+        jLabel14.setFont(new java.awt.Font("Tahoma", 0, 12));
+        jLabel14.setText("Lane Closures:");
+
+        jLabel15.setFont(new java.awt.Font("Tahoma", 0, 12));
+        jLabel15.setText("TMCAL Logs:");
+
+        jTextArea1.setColumns(20);
+        jTextArea1.setEditable(false);
+        jTextArea1.setFont(new java.awt.Font("Tahoma", 0, 12));
+        jTextArea1.setLineWrap(true);
+        jTextArea1.setRows(5);
+        jTextArea1.setText("Noise events will be randomly generated for the simulation with frequencies based on the control selections made below");
+        jTextArea1.setWrapStyleWord(true);
+        jTextArea1.setAutoscrolls(false);
+        jTextArea1.setBorder(null);
+        jTextArea1.setDisabledTextColor(new java.awt.Color(0, 0, 0));
+        jTextArea1.setFocusable(false);
+        jTextArea1.setOpaque(false);
+
+        jLabel16.setFont(new java.awt.Font("Tahoma", 0, 12));
+        jLabel16.setText("Background Noise: ");
+
+        jLabel17.setFont(new java.awt.Font("Tahoma", 0, 12));
+        jLabel17.setText("Minor Events:");
+
+        jButton1.setText("Cancel");
+        jButton1.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jButton1ActionPerformed(evt);
+            }
+        });
+
+        jButton2.setText("Generate");
+        jButton2.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jButton2ActionPerformed(evt);
+            }
+        });
+
+        jLabel20.setText("Least Frequent");
+
+        jLabel21.setText("Most Frequent");
+
+        javax.swing.GroupLayout addNoiseFrameLayout = new javax.swing.GroupLayout(addNoiseFrame.getContentPane());
+        addNoiseFrame.getContentPane().setLayout(addNoiseFrameLayout);
+        addNoiseFrameLayout.setHorizontalGroup(
+            addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, addNoiseFrameLayout.createSequentialGroup()
+                .addContainerGap(21, Short.MAX_VALUE)
+                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jTextArea1, javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, addNoiseFrameLayout.createSequentialGroup()
+                            .addComponent(jButton1)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addComponent(jButton2))
+                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, addNoiseFrameLayout.createSequentialGroup()
+                            .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                                    .addComponent(jLabel16)
+                                    .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                    .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                    .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE))
+                                .addComponent(jLabel17, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addGap(4, 4, 4)
+                            .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                .addComponent(jSlider1, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addComponent(jSlider2, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addComponent(jSlider3, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addComponent(jSlider5, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addComponent(jSlider4, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, addNoiseFrameLayout.createSequentialGroup()
+                                    .addComponent(jLabel20)
+                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                    .addComponent(jLabel21))))))
+                .addGap(20, 20, 20))
+        );
+        addNoiseFrameLayout.setVerticalGroup(
+            addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, addNoiseFrameLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jTextArea1, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jLabel21)
+                    .addComponent(jLabel20))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jSlider1, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jSlider2, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                    .addComponent(jLabel15)
+                    .addComponent(jSlider3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(jSlider4, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jSlider5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel17))
+                .addGap(18, 18, 18)
+                .addGroup(addNoiseFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jButton1)
+                    .addComponent(jButton2))
+                .addContainerGap())
+        );
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+        setTitle("Script Builder");
+        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        setMinimumSize(new java.awt.Dimension(800, 800));
+
+        timelinesScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
+        timelinesScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+        timelinesScrollPane.setFocusCycleRoot(true);
+        timelinesScrollPane.setFocusTraversalPolicyProvider(true);
+        timelinesScrollPane.setPreferredSize(new java.awt.Dimension(72000, 1341));
+
+        timelineTickPanel.setMaximumSize(new java.awt.Dimension(7200, 32767));
+        timelineTickPanel.setMinimumSize(new java.awt.Dimension(7200, 0));
+        timelineTickPanel.setPreferredSize(new java.awt.Dimension(7200, 1317));
+
+        incidentTimelinePanel1.setMaximumSize(new java.awt.Dimension(32767, 100));
+        incidentTimelinePanel1.setOpaque(false);
+        incidentTimelinePanel1.setPreferredSize(new java.awt.Dimension(691, 100));
+
+        javax.swing.GroupLayout incidentTimelinePanel1Layout = new javax.swing.GroupLayout(incidentTimelinePanel1);
+        incidentTimelinePanel1.setLayout(incidentTimelinePanel1Layout);
+        incidentTimelinePanel1Layout.setHorizontalGroup(
+            incidentTimelinePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 6778, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel1Layout.setVerticalGroup(
+            incidentTimelinePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentTimelinePanel2.setOpaque(false);
+
+        javax.swing.GroupLayout incidentTimelinePanel2Layout = new javax.swing.GroupLayout(incidentTimelinePanel2);
+        incidentTimelinePanel2.setLayout(incidentTimelinePanel2Layout);
+        incidentTimelinePanel2Layout.setHorizontalGroup(
+            incidentTimelinePanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 6726, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel2Layout.setVerticalGroup(
+            incidentTimelinePanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentTimelinePanel8.setOpaque(false);
+
+        javax.swing.GroupLayout incidentTimelinePanel8Layout = new javax.swing.GroupLayout(incidentTimelinePanel8);
+        incidentTimelinePanel8.setLayout(incidentTimelinePanel8Layout);
+        incidentTimelinePanel8Layout.setHorizontalGroup(
+            incidentTimelinePanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 5686, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel8Layout.setVerticalGroup(
+            incidentTimelinePanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentTimelinePanel3.setOpaque(false);
+
+        javax.swing.GroupLayout incidentTimelinePanel3Layout = new javax.swing.GroupLayout(incidentTimelinePanel3);
+        incidentTimelinePanel3.setLayout(incidentTimelinePanel3Layout);
+        incidentTimelinePanel3Layout.setHorizontalGroup(
+            incidentTimelinePanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 605, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel3Layout.setVerticalGroup(
+            incidentTimelinePanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentTimelinePanel6.setOpaque(false);
+
+        javax.swing.GroupLayout incidentTimelinePanel6Layout = new javax.swing.GroupLayout(incidentTimelinePanel6);
+        incidentTimelinePanel6.setLayout(incidentTimelinePanel6Layout);
+        incidentTimelinePanel6Layout.setHorizontalGroup(
+            incidentTimelinePanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 605, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel6Layout.setVerticalGroup(
+            incidentTimelinePanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentTimelinePanel5.setOpaque(false);
+
+        javax.swing.GroupLayout incidentTimelinePanel5Layout = new javax.swing.GroupLayout(incidentTimelinePanel5);
+        incidentTimelinePanel5.setLayout(incidentTimelinePanel5Layout);
+        incidentTimelinePanel5Layout.setHorizontalGroup(
+            incidentTimelinePanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 617, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel5Layout.setVerticalGroup(
+            incidentTimelinePanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentTimelinePanel4.setOpaque(false);
+
+        javax.swing.GroupLayout incidentTimelinePanel4Layout = new javax.swing.GroupLayout(incidentTimelinePanel4);
+        incidentTimelinePanel4.setLayout(incidentTimelinePanel4Layout);
+        incidentTimelinePanel4Layout.setHorizontalGroup(
+            incidentTimelinePanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 617, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel4Layout.setVerticalGroup(
+            incidentTimelinePanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentTimelinePanel7.setOpaque(false);
+
+        javax.swing.GroupLayout incidentTimelinePanel7Layout = new javax.swing.GroupLayout(incidentTimelinePanel7);
+        incidentTimelinePanel7.setLayout(incidentTimelinePanel7Layout);
+        incidentTimelinePanel7Layout.setHorizontalGroup(
+            incidentTimelinePanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 6884, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel7Layout.setVerticalGroup(
+            incidentTimelinePanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentTimelinePanel10.setOpaque(false);
+
+        javax.swing.GroupLayout incidentTimelinePanel10Layout = new javax.swing.GroupLayout(incidentTimelinePanel10);
+        incidentTimelinePanel10.setLayout(incidentTimelinePanel10Layout);
+        incidentTimelinePanel10Layout.setHorizontalGroup(
+            incidentTimelinePanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 6573, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel10Layout.setVerticalGroup(
+            incidentTimelinePanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentTimelinePanel9.setOpaque(false);
+
+        javax.swing.GroupLayout incidentTimelinePanel9Layout = new javax.swing.GroupLayout(incidentTimelinePanel9);
+        incidentTimelinePanel9.setLayout(incidentTimelinePanel9Layout);
+        incidentTimelinePanel9Layout.setHorizontalGroup(
+            incidentTimelinePanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 6470, Short.MAX_VALUE)
+        );
+        incidentTimelinePanel9Layout.setVerticalGroup(
+            incidentTimelinePanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel1.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel1Layout = new javax.swing.GroupLayout(incidentNumberPanel1);
+        incidentNumberPanel1.setLayout(incidentNumberPanel1Layout);
+        incidentNumberPanel1Layout.setHorizontalGroup(
+            incidentNumberPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 106, Short.MAX_VALUE)
+        );
+        incidentNumberPanel1Layout.setVerticalGroup(
+            incidentNumberPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel2.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel2Layout = new javax.swing.GroupLayout(incidentNumberPanel2);
+        incidentNumberPanel2.setLayout(incidentNumberPanel2Layout);
+        incidentNumberPanel2Layout.setHorizontalGroup(
+            incidentNumberPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+        incidentNumberPanel2Layout.setVerticalGroup(
+            incidentNumberPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel3.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel3Layout = new javax.swing.GroupLayout(incidentNumberPanel3);
+        incidentNumberPanel3.setLayout(incidentNumberPanel3Layout);
+        incidentNumberPanel3Layout.setHorizontalGroup(
+            incidentNumberPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+        incidentNumberPanel3Layout.setVerticalGroup(
+            incidentNumberPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel4.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel4Layout = new javax.swing.GroupLayout(incidentNumberPanel4);
+        incidentNumberPanel4.setLayout(incidentNumberPanel4Layout);
+        incidentNumberPanel4Layout.setHorizontalGroup(
+            incidentNumberPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+        incidentNumberPanel4Layout.setVerticalGroup(
+            incidentNumberPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel5.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel5Layout = new javax.swing.GroupLayout(incidentNumberPanel5);
+        incidentNumberPanel5.setLayout(incidentNumberPanel5Layout);
+        incidentNumberPanel5Layout.setHorizontalGroup(
+            incidentNumberPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+        incidentNumberPanel5Layout.setVerticalGroup(
+            incidentNumberPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel6.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel6Layout = new javax.swing.GroupLayout(incidentNumberPanel6);
+        incidentNumberPanel6.setLayout(incidentNumberPanel6Layout);
+        incidentNumberPanel6Layout.setHorizontalGroup(
+            incidentNumberPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+        incidentNumberPanel6Layout.setVerticalGroup(
+            incidentNumberPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel7.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel7Layout = new javax.swing.GroupLayout(incidentNumberPanel7);
+        incidentNumberPanel7.setLayout(incidentNumberPanel7Layout);
+        incidentNumberPanel7Layout.setHorizontalGroup(
+            incidentNumberPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+        incidentNumberPanel7Layout.setVerticalGroup(
+            incidentNumberPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel8.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel8Layout = new javax.swing.GroupLayout(incidentNumberPanel8);
+        incidentNumberPanel8.setLayout(incidentNumberPanel8Layout);
+        incidentNumberPanel8Layout.setHorizontalGroup(
+            incidentNumberPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+        incidentNumberPanel8Layout.setVerticalGroup(
+            incidentNumberPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel9.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel9Layout = new javax.swing.GroupLayout(incidentNumberPanel9);
+        incidentNumberPanel9.setLayout(incidentNumberPanel9Layout);
+        incidentNumberPanel9Layout.setHorizontalGroup(
+            incidentNumberPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+        incidentNumberPanel9Layout.setVerticalGroup(
+            incidentNumberPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        incidentNumberPanel10.setOpaque(false);
+
+        javax.swing.GroupLayout incidentNumberPanel10Layout = new javax.swing.GroupLayout(incidentNumberPanel10);
+        incidentNumberPanel10.setLayout(incidentNumberPanel10Layout);
+        incidentNumberPanel10Layout.setHorizontalGroup(
+            incidentNumberPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+        incidentNumberPanel10Layout.setVerticalGroup(
+            incidentNumberPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        javax.swing.GroupLayout timelineTickPanelLayout = new javax.swing.GroupLayout(timelineTickPanel);
+        timelineTickPanel.setLayout(timelineTickPanelLayout);
+        timelineTickPanelLayout.setHorizontalGroup(
+            timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(timelineTickPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                        .addComponent(incidentNumberPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(incidentNumberPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                        .addComponent(incidentNumberPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(incidentNumberPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(incidentNumberPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(incidentNumberPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(incidentNumberPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(incidentNumberPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(incidentNumberPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(incidentNumberPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(10, 10, 10)
+                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(incidentTimelinePanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(incidentTimelinePanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                        .addComponent(incidentTimelinePanel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(incidentTimelinePanel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(incidentTimelinePanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentTimelinePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 6778, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentTimelinePanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentTimelinePanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentTimelinePanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentTimelinePanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(190, 190, 190))
+        );
+        timelineTickPanelLayout.setVerticalGroup(
+            timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(timelineTickPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(incidentNumberPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentTimelinePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(timelineTickPanelLayout.createSequentialGroup()
+                        .addComponent(incidentNumberPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentNumberPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentNumberPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentNumberPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentNumberPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(timelineTickPanelLayout.createSequentialGroup()
+                        .addComponent(incidentTimelinePanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentTimelinePanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentTimelinePanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentTimelinePanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentTimelinePanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(incidentTimelinePanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentNumberPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(timelineTickPanelLayout.createSequentialGroup()
+                        .addComponent(incidentTimelinePanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentTimelinePanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(timelineTickPanelLayout.createSequentialGroup()
+                        .addComponent(incidentNumberPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentNumberPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(timelineTickPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(incidentNumberPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(incidentTimelinePanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(252, Short.MAX_VALUE))
+        );
+
+        timelinesScrollPane.setViewportView(timelineTickPanel);
+
+        scriptEventsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Script Events"));
+
+        scriptEventsPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+
+        scriptEventsList.setModel(new DefaultListModel());
+        scriptEventsList.setComponentPopupMenu(eventListPopupMenu);
+        scriptEventsPane.setViewportView(scriptEventsList);
+
+        javax.swing.GroupLayout scriptEventsPanelLayout = new javax.swing.GroupLayout(scriptEventsPanel);
+        scriptEventsPanel.setLayout(scriptEventsPanelLayout);
+        scriptEventsPanelLayout.setHorizontalGroup(
+            scriptEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(scriptEventsPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(scriptEventsPane, javax.swing.GroupLayout.DEFAULT_SIZE, 485, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+        scriptEventsPanelLayout.setVerticalGroup(
+            scriptEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(scriptEventsPanelLayout.createSequentialGroup()
+                .addComponent(scriptEventsPane, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+
+        zoomSlider.setMaximum(21);
+        zoomSlider.setMinimum(5);
+        zoomSlider.setOrientation(javax.swing.JSlider.VERTICAL);
+        zoomSlider.setValue(13);
+        zoomSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        zoomSlider.setFocusable(false);
+        zoomSlider.addChangeListener(new javax.swing.event.ChangeListener() {
+            public void stateChanged(javax.swing.event.ChangeEvent evt) {
+                zoomSliderStateChanged(evt);
+            }
+        });
+
+        scriptEventsPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Incident Information"));
+
+        jLabel2.setText("Incident Number:");
+
+        jLabel3.setText("Incident Name:");
+
+        jLabel4.setText("Incident Description:");
+
+        incidentName.setEditable(false);
+        incidentName.setText("Media");
+
+        incidentDescriptionPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+
+        incidentDescription.setColumns(20);
+        incidentDescription.setEditable(false);
+        incidentDescription.setLineWrap(true);
+        incidentDescription.setRows(5);
+        incidentDescription.setText("All media message events are found in this incident.");
+        incidentDescription.setWrapStyleWord(true);
+        incidentDescriptionPane.setViewportView(incidentDescription);
+
+        incidentNumber.setEditable(false);
+        incidentNumber.setText("100");
+
+        javax.swing.GroupLayout scriptEventsPanel1Layout = new javax.swing.GroupLayout(scriptEventsPanel1);
+        scriptEventsPanel1.setLayout(scriptEventsPanel1Layout);
+        scriptEventsPanel1Layout.setHorizontalGroup(
+            scriptEventsPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(scriptEventsPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(scriptEventsPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(incidentDescriptionPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 453, Short.MAX_VALUE)
+                    .addComponent(jLabel4)
+                    .addGroup(scriptEventsPanel1Layout.createSequentialGroup()
+                        .addGroup(scriptEventsPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(jLabel2)
+                            .addComponent(jLabel3))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(scriptEventsPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(incidentName, javax.swing.GroupLayout.DEFAULT_SIZE, 366, Short.MAX_VALUE)
+                            .addComponent(incidentNumber, javax.swing.GroupLayout.DEFAULT_SIZE, 366, Short.MAX_VALUE))))
+                .addContainerGap())
+        );
+        scriptEventsPanel1Layout.setVerticalGroup(
+            scriptEventsPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(scriptEventsPanel1Layout.createSequentialGroup()
+                .addGroup(scriptEventsPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel2)
+                    .addComponent(incidentNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(scriptEventsPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(incidentName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel3))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jLabel4)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(incidentDescriptionPane, javax.swing.GroupLayout.DEFAULT_SIZE, 125, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+
+        selectButton.setToolTipText("Select");
+        selectButton.setFocusPainted(false);
+        selectButton.setIconTextGap(0);
+        selectButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        selectButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        selectButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                selectButtonActionPerformed(evt);
+            }
+        });
+
+        incidentEventsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Incident Events"));
+
+        maintenanceRadioButton.setText("Maintenance Radio");
+        maintenanceRadioButton.setToolTipText("");
+        maintenanceRadioButton.setFocusPainted(false);
+        maintenanceRadioButton.setIconTextGap(0);
+        maintenanceRadioButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        maintenanceRadioButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        maintenanceRadioButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                maintenanceRadioButtonActionPerformed(evt);
+            }
+        });
+
+        tmtRadioButton.setText("TMT Radio");
+        tmtRadioButton.setToolTipText("");
+        tmtRadioButton.setFocusPainted(false);
+        tmtRadioButton.setIconTextGap(0);
+        tmtRadioButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        tmtRadioButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        tmtRadioButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                tmtRadioButtonActionPerformed(evt);
+            }
+        });
+
+        telephoneButton.setText("Telephone");
+        telephoneButton.setToolTipText("");
+        telephoneButton.setFocusPainted(false);
+        telephoneButton.setIconTextGap(0);
+        telephoneButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        telephoneButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        telephoneButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                telephoneButtonActionPerformed(evt);
+            }
+        });
+
+        unitButton.setText("Unit");
+        unitButton.setToolTipText("");
+        unitButton.setFocusPainted(false);
+        unitButton.setIconTextGap(0);
+        unitButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        unitButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        unitButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                unitButtonActionPerformed(evt);
+            }
+        });
+
+        witnessButton.setText("Witness");
+        witnessButton.setToolTipText("");
+        witnessButton.setFocusPainted(false);
+        witnessButton.setIconTextGap(0);
+        witnessButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        witnessButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        witnessButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                witnessButtonActionPerformed(evt);
+            }
+        });
+
+        paramicsButton.setText("Paramics");
+        paramicsButton.setToolTipText("");
+        paramicsButton.setFocusPainted(false);
+        paramicsButton.setIconTextGap(0);
+        paramicsButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        paramicsButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        paramicsButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                paramicsButtonActionPerformed(evt);
+            }
+        });
+
+        towButton.setText("Tow");
+        towButton.setToolTipText("");
+        towButton.setFocusPainted(false);
+        towButton.setIconTextGap(0);
+        towButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        towButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        towButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                towButtonActionPerformed(evt);
+            }
+        });
+
+        audioButton.setText("Audio");
+        audioButton.setToolTipText("");
+        audioButton.setFocusPainted(false);
+        audioButton.setIconTextGap(0);
+        audioButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        audioButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        audioButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                audioButtonActionPerformed(evt);
+            }
+        });
+
+        cctvButton.setText("CCTV");
+        cctvButton.setToolTipText("");
+        cctvButton.setFocusPainted(false);
+        cctvButton.setIconTextGap(0);
+        cctvButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        cctvButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        cctvButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                cctvButtonActionPerformed(evt);
+            }
+        });
+
+        cadButton.setText("CAD");
+        cadButton.setToolTipText("");
+        cadButton.setFocusPainted(false);
+        cadButton.setIconTextGap(0);
+        cadButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        cadButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        cadButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                cadButtonActionPerformed(evt);
+            }
+        });
+
+        chpRadioButton.setText("CHP Radio");
+        chpRadioButton.setToolTipText("");
+        chpRadioButton.setFocusPainted(false);
+        chpRadioButton.setIconTextGap(0);
+        chpRadioButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        chpRadioButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        chpRadioButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                chpRadioButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout incidentEventsPanelLayout = new javax.swing.GroupLayout(incidentEventsPanel);
+        incidentEventsPanel.setLayout(incidentEventsPanelLayout);
+        incidentEventsPanelLayout.setHorizontalGroup(
+            incidentEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(incidentEventsPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(incidentEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(incidentEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, incidentEventsPanelLayout.createSequentialGroup()
+                            .addComponent(maintenanceRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(tmtRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(telephoneButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(paramicsButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addGroup(incidentEventsPanelLayout.createSequentialGroup()
+                            .addComponent(towButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(unitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(witnessButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(audioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                    .addGroup(incidentEventsPanelLayout.createSequentialGroup()
+                        .addComponent(cadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(cctvButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(chpRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        incidentEventsPanelLayout.setVerticalGroup(
+            incidentEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(incidentEventsPanelLayout.createSequentialGroup()
+                .addGroup(incidentEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(incidentEventsPanelLayout.createSequentialGroup()
+                        .addGroup(incidentEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(maintenanceRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(tmtRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(telephoneButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(incidentEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(towButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(unitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(witnessButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(audioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                    .addComponent(paramicsButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(incidentEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(incidentEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                        .addComponent(cctvButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(chpRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(cadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
+        );
+
+        evaluationEventsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Evaluation Events"));
+
+        atmsEvalButton.setText("ATMS Evaluation");
+        atmsEvalButton.setToolTipText("");
+        atmsEvalButton.setFocusPainted(false);
+        atmsEvalButton.setIconTextGap(0);
+        atmsEvalButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        atmsEvalButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        atmsEvalButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                atmsEvalButtonActionPerformed(evt);
+            }
+        });
+
+        cmsEvalButton.setText("CMS Evaluation");
+        cmsEvalButton.setToolTipText("");
+        cmsEvalButton.setFocusPainted(false);
+        cmsEvalButton.setIconTextGap(0);
+        cmsEvalButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        cmsEvalButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        cmsEvalButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                cmsEvalButtonActionPerformed(evt);
+            }
+        });
+
+        cadEvalButton.setText("CAD Evaluation");
+        cadEvalButton.setToolTipText("");
+        cadEvalButton.setFocusPainted(false);
+        cadEvalButton.setIconTextGap(0);
+        cadEvalButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        cadEvalButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        cadEvalButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                cadEvalButtonActionPerformed(evt);
+            }
+        });
+
+        facilitatorEvalButton.setText("Facilitator Evaluation");
+        facilitatorEvalButton.setToolTipText("");
+        facilitatorEvalButton.setFocusPainted(false);
+        facilitatorEvalButton.setIconTextGap(0);
+        facilitatorEvalButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        facilitatorEvalButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        facilitatorEvalButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                facilitatorEvalButtonActionPerformed(evt);
+            }
+        });
+
+        activityLogEvalButton.setText("Activity Log Evaluation");
+        activityLogEvalButton.setToolTipText("");
+        activityLogEvalButton.setFocusPainted(false);
+        activityLogEvalButton.setIconTextGap(0);
+        activityLogEvalButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        activityLogEvalButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        activityLogEvalButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                activityLogEvalButtonActionPerformed(evt);
+            }
+        });
+
+        radioEvalButton.setText("Radio Evaluation");
+        radioEvalButton.setToolTipText("");
+        radioEvalButton.setFocusPainted(false);
+        radioEvalButton.setIconTextGap(0);
+        radioEvalButton.setMargin(new java.awt.Insets(2, 10, 2, 10));
+        radioEvalButton.setPreferredSize(new java.awt.Dimension(30, 25));
+        radioEvalButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                radioEvalButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout evaluationEventsPanelLayout = new javax.swing.GroupLayout(evaluationEventsPanel);
+        evaluationEventsPanel.setLayout(evaluationEventsPanelLayout);
+        evaluationEventsPanelLayout.setHorizontalGroup(
+            evaluationEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(evaluationEventsPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(evaluationEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(evaluationEventsPanelLayout.createSequentialGroup()
+                        .addComponent(atmsEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(activityLogEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(evaluationEventsPanelLayout.createSequentialGroup()
+                        .addComponent(cmsEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(facilitatorEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(evaluationEventsPanelLayout.createSequentialGroup()
+                        .addComponent(cadEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(radioEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        evaluationEventsPanelLayout.setVerticalGroup(
+            evaluationEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(evaluationEventsPanelLayout.createSequentialGroup()
+                .addGroup(evaluationEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(cmsEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(facilitatorEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(evaluationEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(atmsEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(activityLogEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(evaluationEventsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(cadEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(radioEvalButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
+        );
+
+        zoomInIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ZoomIn.png"))); // NOI18N
+        zoomInIcon.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
+        zoomInIcon.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                zoomInIconMouseClicked(evt);
+            }
+        });
+
+        zoomOutIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ZoomOut.png"))); // NOI18N
+        zoomOutIcon.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
+        zoomOutIcon.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                zoomOutIconMouseClicked(evt);
+            }
+        });
+
+        timeStampScrollPane.setBorder(null);
+        timeStampScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+        timeStampScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
+
+        javax.swing.GroupLayout timeStampPanelLayout = new javax.swing.GroupLayout(timeStampPanel);
+        timeStampPanel.setLayout(timeStampPanelLayout);
+        timeStampPanelLayout.setHorizontalGroup(
+            timeStampPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 1008, Short.MAX_VALUE)
+        );
+        timeStampPanelLayout.setVerticalGroup(
+            timeStampPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 100, Short.MAX_VALUE)
+        );
+
+        timeStampScrollPane.setViewportView(timeStampPanel);
+
+        fileMenu.setText("File");
+        fileMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
+        fileMenu.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                fileMenuActionPerformed(evt);
+            }
+        });
+
+        fileNew.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        fileNew.setText("New");
+        fileMenu.add(fileNew);
+        fileMenu.add(jSeparator1);
+
+        fileOpen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        fileOpen.setText("Open...");
+        fileOpen.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                fileOpenActionPerformed(evt);
+            }
+        });
+        fileMenu.add(fileOpen);
+        fileMenu.add(jSeparator2);
+
+        fileSave.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
+        fileSave.setText("Save");
+        fileSave.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                fileSaveActionPerformed(evt);
+            }
+        });
+        fileMenu.add(fileSave);
+
+        fileSaveAs.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        fileSaveAs.setText("Save as...");
+        fileSaveAs.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                fileSaveAsActionPerformed(evt);
+            }
+        });
+        fileMenu.add(fileSaveAs);
+
+        scriptBuilderMenuBar.add(fileMenu);
+
+        generateMenu.setLabel("Generate");
+        generateMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
+
+        generateNotebooks.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        generateNotebooks.setText("Generate Notebooks...");
+        generateNotebooks.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                generateNotebooksActionPerformed(evt);
+            }
+        });
+        generateMenu.add(generateNotebooks);
+
+        jMenuItem3.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        jMenuItem3.setText("Generate Web Notebook...");
+        generateMenu.add(jMenuItem3);
+
+        generateScorecards.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        generateScorecards.setText("Generate Scorecards...");
+        generateScorecards.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                generateScorecardsActionPerformed(evt);
+            }
+        });
+        generateMenu.add(generateScorecards);
+
+        generateOrganizationChart.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        generateOrganizationChart.setText("Generate D14 TMC Org Chart...");
+        generateOrganizationChart.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                generateOrganizationChartActionPerformed(evt);
+            }
+        });
+        generateMenu.add(generateOrganizationChart);
+        generateMenu.add(jSeparator3);
+
+        generateProjectRequirements.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        generateProjectRequirements.setText("Generate Project Worklist...");
+        generateProjectRequirements.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                generateProjectRequirementsActionPerformed(evt);
+            }
+        });
+        generateMenu.add(generateProjectRequirements);
+
+        scriptBuilderMenuBar.add(generateMenu);
+
+        incidentMenu.setText("Incidents");
+        incidentMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
+
+        newIncident.setText("New Incident...");
+        newIncident.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                newIncidentActionPerformed(evt);
+            }
+        });
+        incidentMenu.add(newIncident);
+
+        editIncident.setText("Edit Incident...");
+        editIncident.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                editIncidentActionPerformed(evt);
+            }
+        });
+        incidentMenu.add(editIncident);
+        incidentMenu.add(jSeparator4);
+
+        saveIncident.setText("Save Incident...");
+        saveIncident.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                saveIncidentActionPerformed(evt);
+            }
+        });
+        incidentMenu.add(saveIncident);
+
+        loadIncident.setText("Load Incident...");
+        loadIncident.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                loadIncidentActionPerformed(evt);
+            }
+        });
+        incidentMenu.add(loadIncident);
+
+        scriptBuilderMenuBar.add(incidentMenu);
+
+        jMenu1.setText("Noise");
+
+        jMenuItem1.setText("Generate Noise...");
+        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem1ActionPerformed(evt);
+            }
+        });
+        jMenu1.add(jMenuItem1);
+
+        scriptBuilderMenuBar.add(jMenu1);
+
+        helpMenu.setText("Help");
+        helpMenu.setMargin(new java.awt.Insets(0, 10, 0, 10));
+
+        helpTutorial.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0));
+        helpTutorial.setText("Tutorial...");
+        helpMenu.add(helpTutorial);
+
+        helpAbout.setText("About...");
+        helpMenu.add(helpAbout);
+
+        scriptBuilderMenuBar.add(helpMenu);
+
+        setJMenuBar(scriptBuilderMenuBar);
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(timelinesScrollPane, 0, 0, Short.MAX_VALUE)
+                    .addComponent(timeStampScrollPane)
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addComponent(scriptEventsPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(scriptEventsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(selectButton, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(incidentEventsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(evaluationEventsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(18, 18, 18)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(zoomInIcon)
+                            .addComponent(zoomSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(zoomOutIcon))))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addContainerGap()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(evaluationEventsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(incidentEventsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGroup(layout.createSequentialGroup()
+                                .addGap(47, 47, 47)
+                                .addComponent(selectButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(20, 20, 20)
+                        .addComponent(zoomInIcon)
+                        .addGap(1, 1, 1)
+                        .addComponent(zoomSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(zoomOutIcon)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(timeStampScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(timelinesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 365, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(scriptEventsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(scriptEventsPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap())
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void zoomSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_zoomSliderStateChanged
+        ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK = zoomSlider.getValue()*2;
+        this.update(script, script);
+        pack();
+        repaint();
+    }//GEN-LAST:event_zoomSliderStateChanged
+
+    private void cadEventMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_cadEventMousePressed
+
+    }//GEN-LAST:event_cadEventMousePressed
+
+    private void radioEventMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_radioEventMousePressed
+
+    }//GEN-LAST:event_radioEventMousePressed
+
+    private void cadEventMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_cadEventMouseReleased
+
+    }//GEN-LAST:event_cadEventMouseReleased
+
+    private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
+        
+    }//GEN-LAST:event_okButtonActionPerformed
+
+    private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
+        radioMessage.setText("");
+        radioTypeComboBox.setSelectedIndex(0);
+        radioEventFrame.setVisible(false);
+    }//GEN-LAST:event_cancelButtonActionPerformed
+
+    private void editEventListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editEventListActionPerformed
+ 
+    }//GEN-LAST:event_editEventListActionPerformed
+
+    private void incidentOkButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_incidentOkButtonActionPerformed
+        if (!edittingIncident)
+        {
+            boolean found = false;
+            int indx = 0;
+            for (ScriptIncident i : script.incidents)
+            {
+                if (i == null)
+                {
+                    found = true;
+                    break;
+                }
+                ++indx;
+                if (i.number == (Integer)addIncidentNumber.getValue())
+                {
+                    JOptionPane.showMessageDialog(this, "Incident number already in use.",
+                        "Unable to Create Incident", JOptionPane.ERROR_MESSAGE);
+                    incidentFrame.setVisible(true);
+                    return;
+                }
+            }
+            if (!found)
+            {
+                JOptionPane.showMessageDialog(this, "Script already has the max number of incidents.",
+                    "Unable to Create Incident", JOptionPane.ERROR_MESSAGE);
+                incidentFrame.setVisible(true);
+                return;
+            }
+
+            script.incidents.remove(indx);
+            SimulationScript.incidentColors[indx] = selectedColor;
+            script.incidents.add(indx,
+                new ScriptIncident(SimulationScript.incidentColors[indx],
+                    (Integer)addIncidentNumber.getValue(), addIncidentName.getText(), addIncidentDescription.getText(),
+                    (Integer)addIncidentLength.getValue() * 60, script));
+            script.incidents.get(indx).setOffset((Integer)addIncidentStart.getValue() * 60);
+        }
+        else
+        {
+            ScriptIncident backup = script.incidents.get(oldIncidentIndex);
+            script.incidents.remove(oldIncidentIndex);
+            script.incidents.add(oldIncidentIndex, null);
+
+            for (ScriptIncident i : script.incidents)
+            {
+                if (i != null && i.number == (Integer)addIncidentNumber.getValue())
+                {
+                    script.incidents.remove(oldIncidentIndex);
+                    script.incidents.add(oldIncidentIndex, backup);
+                    JOptionPane.showMessageDialog(this, "Incident number already in use.",
+                        "Unable to Create Incident", JOptionPane.ERROR_MESSAGE);
+                    incidentFrame.setVisible(true);
+                    return;
+                }
+            }
+
+            script.incidents.remove(oldIncidentIndex);
+            SimulationScript.incidentColors[oldIncidentIndex] = selectedColor;
+            script.incidents.add(oldIncidentIndex,
+                new ScriptIncident(SimulationScript.incidentColors[oldIncidentIndex],
+                    (Integer)addIncidentNumber.getValue(), addIncidentName.getText(), addIncidentDescription.getText(),
+                    (Integer)addIncidentLength.getValue() * 60, script));
+            script.incidents.get(oldIncidentIndex).slices = backup.slices;
+            script.incidents.get(oldIncidentIndex).offset = backup.offset;
+            script.incidents.get(oldIncidentIndex).setOffset((Integer)addIncidentStart.getValue() * 60);
+        }
+        
+        incidentFrame.setVisible(false);
+        repaint();
+    }//GEN-LAST:event_incidentOkButtonActionPerformed
+
+    private void incidentCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_incidentCancelButtonActionPerformed
+        incidentFrame.setVisible(false);
+    }//GEN-LAST:event_incidentCancelButtonActionPerformed
+
+    private void newIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newIncidentActionPerformed
+        edittingIncident = false;
+
+        addIncidentName.setText("");
+        addIncidentNumber.setValue(101);
+        addIncidentStart.setValue(0);
+        addIncidentLength.setValue(0);
+        incidentColorField.setBackground(Color.BLACK);
+        selectedColor = Color.BLACK;
+        addIncidentDescription.setText("");
+
+        incidentFrame.setVisible(true);
+    }//GEN-LAST:event_newIncidentActionPerformed
+
+    private void selectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectButtonActionPerformed
+        currentEventType = null;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        selectButton.setSelected(true);
+    }//GEN-LAST:event_selectButtonActionPerformed
+
+    private void cadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cadButtonActionPerformed
+        currentEventType = ScriptEventType.CAD_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        cadButton.setSelected(true);
+    }//GEN-LAST:event_cadButtonActionPerformed
+
+    private void cctvButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cctvButtonActionPerformed
+        currentEventType = ScriptEventType.CCTV_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        cctvButton.setSelected(true);
+    }//GEN-LAST:event_cctvButtonActionPerformed
+
+    private void chpRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chpRadioButtonActionPerformed
+        currentEventType = ScriptEventType.CHP_RADIO_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        chpRadioButton.setSelected(true);
+    }//GEN-LAST:event_chpRadioButtonActionPerformed
+
+    private void fileMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileMenuActionPerformed
+
+    }//GEN-LAST:event_fileMenuActionPerformed
+
+    private void fileOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileOpenActionPerformed
+        JFileChooser fc = new JFileChooser();
+        fc.setFileFilter(new ExtensionFileFilter("Simulation Script (.sim)", new String[] { "sim" }));
+        fc.showOpenDialog(this);
+    }//GEN-LAST:event_fileOpenActionPerformed
+
+    private void fileSaveAsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveAsActionPerformed
+        JFileChooser fc = new JFileChooser();
+        fc.setFileFilter(new ExtensionFileFilter("Simulation Script (.sim)", new String[] { "sim" }));
+        fc.showSaveDialog(this);
+    }//GEN-LAST:event_fileSaveAsActionPerformed
+
+    private void fileSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveActionPerformed
+        JFileChooser fc = new JFileChooser();
+        fc.setFileFilter(new ExtensionFileFilter("Simulation Script (.sim)", new String[] { "sim" }));
+        fc.showSaveDialog(this);
+    }//GEN-LAST:event_fileSaveActionPerformed
+
+    private void editIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editIncidentActionPerformed
+        Object[] incidentList = script.incidents.toArray();
+        ScriptIncident i = (ScriptIncident)JOptionPane.showInputDialog(
+                            this,
+                            "Select Incident:",
+                            "Edit Incident",
+                            JOptionPane.PLAIN_MESSAGE,
+                            null,
+                            incidentList,
+                            script.incidents.get(0));
+
+        // If a valid incident was selected
+        if (i != null)
+        {
+            edittingIncident = true;
+            oldIncidentIndex = script.incidents.indexOf(i);
+
+            addIncidentName.setText(i.name);
+            addIncidentNumber.setValue(i.number);
+            addIncidentStart.setValue(i.offset / 60);
+            addIncidentLength.setValue(i.length / 60);
+            incidentColorField.setBackground(i.color);
+            selectedColor = i.color;
+            addIncidentDescription.setText(i.description);
+
+            incidentFrame.setVisible(true);
+        }
+    }//GEN-LAST:event_editIncidentActionPerformed
+
+    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
+        addNoiseFrame.setVisible(true);
+    }//GEN-LAST:event_jMenuItem1ActionPerformed
+
+    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
+        addNoiseFrame.setVisible(false);
+    }//GEN-LAST:event_jButton1ActionPerformed
+
+    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
+        Random rng = new Random();
+        ScriptEventType[] eventTypes = ScriptEventType.values();
+
+        /* For prototyping purpose, ignore the sliders and average their values */
+        int total = jSlider1.getValue() + jSlider2.getValue() + jSlider3.getValue() + jSlider5.getValue() + jSlider4.getValue();
+        total /= 5;
+
+        for (int i = 0; i < script.incidents.get(9).slices.size(); i++)
+        {
+            script.incidents.get(9).slices.get(i).events.clear();
+        }
+        
+        for(int i = 0; i < total; i++)
+        {
+            int n = rng.nextInt();
+            int s = rng.nextInt();
+            int e = rng.nextInt();
+            if (n < 0) n *= -1;
+            if (s < 0) s *= -1;
+            if (e < 0) e *= -1;
+
+            script.incidents.get(9).slices.get(s % (script.incidents.get(9)
+                    .slices.size())).addEvent(new ScriptEvent(eventTypes[e % eventTypes.length]));
+        }
+
+        addNoiseFrame.setVisible(false);
+
+        update(script, script);
+}//GEN-LAST:event_jButton2ActionPerformed
+
+    private void saveIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveIncidentActionPerformed
+        Object[] incidentList = script.incidents.toArray();
+        JOptionPane.showInputDialog(
+                            this,
+                            "Select Incident:",
+                            "Save Incident",
+                            JOptionPane.PLAIN_MESSAGE,
+                            null,
+                            incidentList,
+                            script.incidents.get(0));
+
+        JFileChooser fc = new JFileChooser();
+        fc.setFileFilter(new ExtensionFileFilter("Script Incident (.xml)", new String[] { "xml" }));
+        fc.showSaveDialog(this);
+    }//GEN-LAST:event_saveIncidentActionPerformed
+
+    private void loadIncidentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadIncidentActionPerformed
+        JFileChooser fc = new JFileChooser();
+        fc.setFileFilter(new ExtensionFileFilter("Script Incident (.xml)", new String[] { "xml" }));
+        fc.showOpenDialog(this);
+    }//GEN-LAST:event_loadIncidentActionPerformed
+
+    private void generateProjectRequirementsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateProjectRequirementsActionPerformed
+        JFileChooser fc = new JFileChooser();
+        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[] { "pdf" }));
+        fc.setSelectedFile(new File("Requirements.pdf"));
+        fc.showSaveDialog(this);
+    }//GEN-LAST:event_generateProjectRequirementsActionPerformed
+
+    private void generateNotebooksActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateNotebooksActionPerformed
+        JFileChooser fc = new JFileChooser();
+        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[] { "pdf" }));
+        fc.setSelectedFile(new File("Notebooks.pdf"));
+        fc.showSaveDialog(this);
+    }//GEN-LAST:event_generateNotebooksActionPerformed
+
+    private void generateScorecardsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateScorecardsActionPerformed
+        JFileChooser fc = new JFileChooser();
+        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[] { "pdf" }));
+        fc.setSelectedFile(new File("Scorecards.pdf"));
+        fc.showSaveDialog(this);
+    }//GEN-LAST:event_generateScorecardsActionPerformed
+
+    private void generateOrganizationChartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateOrganizationChartActionPerformed
+        JFileChooser fc = new JFileChooser();
+        fc.setFileFilter(new ExtensionFileFilter("Portable Document Format (.pdf)", new String[] { "pdf" }));
+        fc.setSelectedFile(new File("OrganizationChart.pdf"));
+        fc.showSaveDialog(this);
+    }//GEN-LAST:event_generateOrganizationChartActionPerformed
+
+    private void witnessButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_witnessButtonActionPerformed
+        currentEventType = ScriptEventType.WITNESS_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        witnessButton.setSelected(true);
+    }//GEN-LAST:event_witnessButtonActionPerformed
+
+    private void unitButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_unitButtonActionPerformed
+        currentEventType = ScriptEventType.UNIT_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        unitButton.setSelected(true);
+    }//GEN-LAST:event_unitButtonActionPerformed
+
+    private void towButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_towButtonActionPerformed
+        currentEventType = ScriptEventType.TOW_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        towButton.setSelected(true);
+    }//GEN-LAST:event_towButtonActionPerformed
+
+    private void paramicsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_paramicsButtonActionPerformed
+        currentEventType = ScriptEventType.PARAMICS_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        paramicsButton.setSelected(true);
+    }//GEN-LAST:event_paramicsButtonActionPerformed
+
+    private void maintenanceRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_maintenanceRadioButtonActionPerformed
+        currentEventType = ScriptEventType.MAINTENANCE_RADIO_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        maintenanceRadioButton.setSelected(true);
+    }//GEN-LAST:event_maintenanceRadioButtonActionPerformed
+
+    private void atmsEvalButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_atmsEvalButtonActionPerformed
+        currentEventType = ScriptEventType.ATMS_EVAL_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        atmsEvalButton.setSelected(true);
+    }//GEN-LAST:event_atmsEvalButtonActionPerformed
+
+    private void telephoneButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_telephoneButtonActionPerformed
+        currentEventType = ScriptEventType.TELEPHONE_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        telephoneButton.setSelected(true);
+    }//GEN-LAST:event_telephoneButtonActionPerformed
+
+    private void tmtRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tmtRadioButtonActionPerformed
+        currentEventType = ScriptEventType.TMT_RADIO_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        tmtRadioButton.setSelected(true);
+    }//GEN-LAST:event_tmtRadioButtonActionPerformed
+
+    private void cmsEvalButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmsEvalButtonActionPerformed
+        currentEventType = ScriptEventType.CMS_EVAL_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        cmsEvalButton.setSelected(true);
+    }//GEN-LAST:event_cmsEvalButtonActionPerformed
+
+    private void cadEvalButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cadEvalButtonActionPerformed
+        currentEventType = ScriptEventType.CAD_EVAL_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        cadEvalButton.setSelected(true);
+    }//GEN-LAST:event_cadEvalButtonActionPerformed
+
+    private void activityLogEvalButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_activityLogEvalButtonActionPerformed
+        currentEventType = ScriptEventType.ACTIVITY_LOG_EVAL_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        activityLogEvalButton.setSelected(true);
+    }//GEN-LAST:event_activityLogEvalButtonActionPerformed
+
+    private void radioEvalButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioEvalButtonActionPerformed
+        currentEventType = ScriptEventType.RADIO_EVAL_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        radioEvalButton.setSelected(true);
+    }//GEN-LAST:event_radioEvalButtonActionPerformed
+
+    private void facilitatorEvalButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_facilitatorEvalButtonActionPerformed
+        currentEventType = ScriptEventType.FACILITATOR_EVAL_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        facilitatorEvalButton.setSelected(true);
+    }//GEN-LAST:event_facilitatorEvalButtonActionPerformed
+
+    private void audioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_audioButtonActionPerformed
+        currentEventType = ScriptEventType.AUDIO_EVENT;
+        for (JButton eb : eventButtons) eb.setSelected(false);
+        audioButton.setSelected(true);
+    }//GEN-LAST:event_audioButtonActionPerformed
+
+    private void zoomInIconMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_zoomInIconMouseClicked
+        zoomSlider.setValue(zoomSlider.getValue() >= 21 ? 21 : zoomSlider.getValue() + 1);
+    }//GEN-LAST:event_zoomInIconMouseClicked
+
+    private void zoomOutIconMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_zoomOutIconMouseClicked
+        zoomSlider.setValue(zoomSlider.getValue() <= 5 ? 5 : zoomSlider.getValue() - 1);
+    }//GEN-LAST:event_zoomOutIconMouseClicked
+
+    private Color selectedColor = Color.BLACK;
+
+    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
+        Color newColor = incidentColorChooser.showDialog(this, "Incident Color", incidentColorField.getBackground());
+        if (newColor != null)
+        {
+            selectedColor = newColor;
+            incidentColorField.setBackground(newColor);
+        }
+    }//GEN-LAST:event_jButton3ActionPerformed
+
+    /**
+    * @param args the command line arguments
+    */
+    public static void main(String args[])
+    {
+        try {
+            UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
+        } catch (ClassNotFoundException ex) {
+        } catch (InstantiationException ex) {
+        } catch (IllegalAccessException ex) {
+        } catch (UnsupportedLookAndFeelException ex) {
+        }
+
+        try {
+            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
+        } catch (ClassNotFoundException ex) {
+        } catch (InstantiationException ex) {
+        } catch (IllegalAccessException ex) {
+        } catch (UnsupportedLookAndFeelException ex) {
+        }
+
+        java.awt.EventQueue.invokeLater
+        (
+            new Runnable()
+            {
+                public void run()
+                {
+                    new ScriptBuilderFrame().setVisible(true);
+                }
+            }
+        );
+    }
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton activityLogEvalButton;
+    private javax.swing.JTextArea addIncidentDescription;
+    private javax.swing.JSpinner addIncidentLength;
+    private javax.swing.JTextField addIncidentName;
+    private javax.swing.JSpinner addIncidentNumber;
+    private javax.swing.JSpinner addIncidentStart;
+    private javax.swing.JFrame addNoiseFrame;
+    private javax.swing.JButton atmsEvalButton;
+    private javax.swing.JButton audioButton;
+    private javax.swing.JButton cadButton;
+    private javax.swing.JButton cadEvalButton;
+    private javax.swing.JMenuItem cadEvent;
+    private javax.swing.JFrame cadEventFrame;
+    private javax.swing.JButton cancelButton;
+    private javax.swing.JButton cctvButton;
+    private javax.swing.JButton chpRadioButton;
+    private javax.swing.JButton cmsEvalButton;
+    private javax.swing.JMenuItem deleteEventList;
+    private javax.swing.JMenuItem editEventList;
+    private javax.swing.JMenuItem editIncident;
+    private javax.swing.JPanel evaluationEventsPanel;
+    private javax.swing.JPopupMenu eventListPopupMenu;
+    private javax.swing.JPopupMenu eventPopupMenu;
+    private javax.swing.JButton facilitatorEvalButton;
+    private javax.swing.JMenu fileMenu;
+    private javax.swing.JMenuItem fileNew;
+    private javax.swing.JMenuItem fileOpen;
+    private javax.swing.JMenuItem fileSave;
+    private javax.swing.JMenuItem fileSaveAs;
+    private javax.swing.JMenu generateMenu;
+    private javax.swing.JMenuItem generateNotebooks;
+    private javax.swing.JMenuItem generateOrganizationChart;
+    private javax.swing.JMenuItem generateProjectRequirements;
+    private javax.swing.JMenuItem generateScorecards;
+    private javax.swing.JMenuItem helpAbout;
+    private javax.swing.JMenu helpMenu;
+    private javax.swing.JMenuItem helpTutorial;
+    private javax.swing.JButton incidentCancelButton;
+    private javax.swing.JColorChooser incidentColorChooser;
+    private javax.swing.JTextField incidentColorField;
+    private javax.swing.JTextArea incidentDescription;
+    private javax.swing.JScrollPane incidentDescriptionPane;
+    private javax.swing.JPanel incidentEventsPanel;
+    private javax.swing.JFrame incidentFrame;
+    private javax.swing.JMenu incidentMenu;
+    private javax.swing.JTextField incidentName;
+    private javax.swing.JTextField incidentNumber;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel1;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel10;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel2;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel3;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel4;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel5;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel6;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel7;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel8;
+    private scriptbuilder.gui.panels.IncidentNumberPanel incidentNumberPanel9;
+    private javax.swing.JButton incidentOkButton;
+    private javax.swing.JPopupMenu incidentPopupMenu;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel1;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel10;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel2;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel3;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel4;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel5;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel6;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel7;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel8;
+    private scriptbuilder.gui.panels.IncidentTimelinePanel incidentTimelinePanel9;
+    private javax.swing.JButton jButton1;
+    private javax.swing.JButton jButton2;
+    private javax.swing.JButton jButton3;
+    private javax.swing.JLabel jLabel10;
+    private javax.swing.JLabel jLabel11;
+    private javax.swing.JLabel jLabel12;
+    private javax.swing.JLabel jLabel13;
+    private javax.swing.JLabel jLabel14;
+    private javax.swing.JLabel jLabel15;
+    private javax.swing.JLabel jLabel16;
+    private javax.swing.JLabel jLabel17;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel20;
+    private javax.swing.JLabel jLabel21;
+    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.JLabel jLabel9;
+    private javax.swing.JMenu jMenu1;
+    private javax.swing.JMenuItem jMenuItem1;
+    private javax.swing.JMenuItem jMenuItem2;
+    private javax.swing.JMenuItem jMenuItem3;
+    private javax.swing.JMenuItem jMenuItem4;
+    private javax.swing.JMenuItem jMenuItem5;
+    private javax.swing.JMenuItem jMenuItem6;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JPopupMenu.Separator jSeparator1;
+    private javax.swing.JPopupMenu.Separator jSeparator2;
+    private javax.swing.JPopupMenu.Separator jSeparator3;
+    private javax.swing.JPopupMenu.Separator jSeparator4;
+    private javax.swing.JSlider jSlider1;
+    private javax.swing.JSlider jSlider2;
+    private javax.swing.JSlider jSlider3;
+    private javax.swing.JSlider jSlider4;
+    private javax.swing.JSlider jSlider5;
+    private javax.swing.JTextArea jTextArea1;
+    private javax.swing.JMenuItem loadIncident;
+    private javax.swing.JButton maintenanceRadioButton;
+    private javax.swing.JMenuItem newIncident;
+    private javax.swing.JButton okButton;
+    private javax.swing.JButton paramicsButton;
+    private javax.swing.JMenuItem popupDeleteIncident;
+    private javax.swing.JButton radioEvalButton;
+    private javax.swing.JMenuItem radioEvent;
+    private javax.swing.JFrame radioEventFrame;
+    private javax.swing.JTextArea radioMessage;
+    private javax.swing.JScrollPane radioMessageScrollPane;
+    private javax.swing.JComboBox radioTypeComboBox;
+    private javax.swing.JLabel radioTypeLabel;
+    private javax.swing.JMenuItem saveIncident;
+    private javax.swing.JMenuBar scriptBuilderMenuBar;
+    private javax.swing.JList scriptEventsList;
+    private javax.swing.JScrollPane scriptEventsPane;
+    private javax.swing.JPanel scriptEventsPanel;
+    private javax.swing.JPanel scriptEventsPanel1;
+    private javax.swing.JButton selectButton;
+    private javax.swing.JButton telephoneButton;
+    private scriptbuilder.gui.panels.TimeStampPanel timeStampPanel;
+    private javax.swing.JScrollPane timeStampScrollPane;
+    private scriptbuilder.gui.panels.TimelineTickPanel timelineTickPanel;
+    private javax.swing.JScrollPane timelinesScrollPane;
+    private javax.swing.JButton tmtRadioButton;
+    private javax.swing.JButton towButton;
+    private javax.swing.JButton unitButton;
+    private javax.swing.JButton witnessButton;
+    private javax.swing.JLabel zoomInIcon;
+    private javax.swing.JLabel zoomOutIcon;
+    private javax.swing.JSlider zoomSlider;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/IncidentTimelineDrawer.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/IncidentTimelineDrawer.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/IncidentTimelineDrawer.java	(revision 6)
@@ -0,0 +1,32 @@
+package scriptbuilder.gui.drawers;
+
+import java.awt.Graphics2D;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+import scriptbuilder.structures.ScriptIncident;
+import scriptbuilder.structures.TimeSlice;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class IncidentTimelineDrawer
+{
+    public static void DrawIncidentTimeline(Graphics2D g2d, 
+            ScriptIncident incident, boolean collapsed)
+    {
+        // Draw the timeline
+        g2d.setColor(incident.color);
+        g2d.fillRect(incident.offset / ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+            ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK,
+            ScriptBuilderGuiConstants.TIMELINE_TOP_MARGIN,
+            incident.length / ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+            ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK,
+            ScriptBuilderGuiConstants.TIMELINE_HEIGHT);
+
+        // Draw each time slice
+        for (TimeSlice slice : incident.slices)
+        {
+            TimeSliceDrawer.DrawTimeSlice(g2d, slice, collapsed);
+        }
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/EventIconDrawer.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/EventIconDrawer.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/EventIconDrawer.java	(revision 6)
@@ -0,0 +1,145 @@
+package scriptbuilder.gui.drawers;
+
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.imageio.ImageIO;
+import scriptbuilder.structures.ScriptEvent;
+import scriptbuilder.structures.ScriptEvent.ScriptEventType;
+import images.*;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class EventIconDrawer
+{
+    private static Map<String, Image> images = null;
+
+    private static Image radioEventImage = null;
+    private static Image paramicsEventImage = null;
+    private static Image cadEventImage = null;
+    private static Image evaluationEventImage = null;
+
+    private static Image getImage(String name)
+    {
+        if (images == null)
+        {
+            try
+            {
+                images = new HashMap<String, Image>();
+                for (ScriptEventType t : ScriptEventType.values())
+                {
+                    images.put(t.IMAGE_NAME, ImageIO.read(Images.getImage(t.IMAGE_NAME + ".png")));
+                }
+            }
+            catch (IOException ex)
+            {
+                Logger.getLogger(EventIconDrawer.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+            }
+        }
+
+        return images.get(name);
+    }
+
+    private static Image getRadioEventImage()
+    {
+        if (radioEventImage == null)
+        {
+            try
+            {
+                radioEventImage = ImageIO.read(Images.getImage("Radio.png"));
+            }
+            catch (IOException ex)
+            {
+                Logger.getLogger(EventIconDrawer.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        return radioEventImage;
+    }
+
+    private static Image getParamicsEventImage()
+    {
+        if (paramicsEventImage == null)
+        {
+            try
+            {
+                paramicsEventImage = ImageIO.read(Images.getImage("Paramics.png"));
+            }
+            catch (IOException ex)
+            {
+                Logger.getLogger(EventIconDrawer.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        return paramicsEventImage;
+    }
+
+        private static Image getCadEventImage()
+    {
+        if (cadEventImage == null)
+        {
+            try
+            {
+                cadEventImage = ImageIO.read(Images.getImage("CAD.png"));
+            }
+            catch (IOException ex)
+            {
+                Logger.getLogger(EventIconDrawer.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        return cadEventImage;
+    }
+
+    private static Image getEvaluationEventImage()
+    {
+        if (evaluationEventImage == null)
+        {
+            try
+            {
+                evaluationEventImage = ImageIO.read(Images.getImage("Evaluation.png"));
+            }
+            catch (IOException ex)
+            {
+                Logger.getLogger(EventIconDrawer.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        return evaluationEventImage;
+    }
+
+    public static void DrawEventIcon(Graphics2D g2d, ScriptEvent event,
+            int x, int y)
+    {
+        DrawEventIcon(g2d, event.getScriptEventType(), x, y);
+    }
+
+    public static void DrawEventIcon(Graphics2D g2d, ScriptEventType eventType,
+            int x, int y)
+    {
+        g2d.drawImage(getImage(eventType.IMAGE_NAME), x, y, null);
+        /**
+        switch(eventType)
+        {
+            case CHP_RADIO_EVENT:
+                break;
+            case PARAMICS_EVENT:
+                g2d.drawImage(getParamicsEventImage(), x, y, null);
+                break;
+            case CAD_EVENT:
+                g2d.drawImage(getCadEventImage(), x, y, null);
+                break;
+            case CAD_EVAL_EVENT:
+                g2d.drawImage(getEvaluationEventImage(), x, y, null);
+                break;
+        }
+        */
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/CursorDrawer.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/CursorDrawer.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/CursorDrawer.java	(revision 6)
@@ -0,0 +1,72 @@
+package scriptbuilder.gui.drawers;
+
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.imageio.ImageIO;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class CursorDrawer
+{
+    private static Image cursorIconImage = null;
+
+    private static Image getCursorIconImage()
+    {
+        if (cursorIconImage == null)
+        {
+            try
+            {
+                cursorIconImage = ImageIO.read(images.Images.getImage("Cursor.png"));
+            }
+            catch (IOException ex)
+            {
+                Logger.getLogger(EventIconDrawer.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        return cursorIconImage;
+    }
+
+    public static void DrawCursor(Graphics2D g2d, int x,
+            boolean locked)
+    {
+        // Timestamp Border
+        g2d.setColor(ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_BORDER_COLOR);
+        g2d.fillRect(x - ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_BORDER_HORIZONTAL_CENTER,
+                ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_BORDER_TOP_MARGIN,
+                2 * ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_BORDER_HORIZONTAL_CENTER,
+                ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_BORDER_HEIGHT);
+
+        // Timestamp Center
+        g2d.setColor(locked ? ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_LOCKED_COLOR :
+                              ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_ACTIVE_COLOR);
+        g2d.fillRect(x -ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_HORIZONTAL_CENTER,
+                ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_TOP_MARGIN,
+                2 * ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_HORIZONTAL_CENTER,
+                ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_HEIGHT);
+
+        // Timestamp Text
+        g2d.setColor(ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_TEXT_COLOR);
+        int seconds = x / ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK *
+                    ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION;
+        g2d.drawString(seconds / 3600 + ":" +
+                          (seconds / 60 % 60 > 9 ? seconds / 60 % 60 :
+                                             "0" + seconds / 60 % 60)  +
+                          ":00",
+                          x - ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_TEXT_CENTER,
+                          ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_TEXT_TOP_MARGIN);
+
+        // Timestamp Cursor
+        g2d.drawImage(getCursorIconImage(),
+                x - ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_ICON_CENTER,
+                ScriptBuilderGuiConstants.CURSOR_TIMESTAMP_ICON_TOP_MARGIN,
+                null);
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/TimeSliceDrawer.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/TimeSliceDrawer.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/drawers/TimeSliceDrawer.java	(revision 6)
@@ -0,0 +1,69 @@
+package scriptbuilder.gui.drawers;
+
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.geom.AffineTransform;
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.imageio.ImageIO;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+import scriptbuilder.structures.ScriptEvent;
+import scriptbuilder.structures.TimeSlice;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class TimeSliceDrawer
+{
+    private static Image sliceEventImage = null;
+    public static int zoom = 20;
+
+    private static Image getSliceEventImage()
+    {
+        if (sliceEventImage == null)
+        {
+            try
+            {
+                sliceEventImage = ImageIO.read(images.Images.getImage("Event.png"));
+            }
+            catch (IOException ex)
+            {
+                Logger.getLogger(EventIconDrawer.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        return sliceEventImage;
+    }
+
+    public static void DrawTimeSlice(Graphics2D g2d, TimeSlice slice,
+            boolean collapsed)
+    {
+        // If this is an empty slice, return
+        if (slice.events.size() == 0)
+            return;
+
+        // Draw the slice event icon to show that there are events here
+        g2d.drawImage(getSliceEventImage(), slice.getX() -
+                ScriptBuilderGuiConstants.EVENT_ICON_WIDTH,
+                ScriptBuilderGuiConstants.TIMELINE_EVENT_ICON_MARGIN, null);
+
+        // If the incident isn't collapsed, draw the event icons
+        if (!collapsed)
+        {
+            for (int i = 0; i < slice.events.size(); i++)
+            {
+                if (i >= ScriptBuilderGuiConstants.MAX_NUMBER_OF_SCRIPT_EVENT_ICON)
+                    break;
+
+                ScriptEvent event = slice.events.get(i);
+                EventIconDrawer.DrawEventIcon(g2d, event, slice.getX() -
+                        ScriptBuilderGuiConstants.EVENT_ICON_WIDTH,
+                        ScriptBuilderGuiConstants.SCRIPT_EVENT_ICON_TOP_MARGIN +
+                        i * ScriptBuilderGuiConstants.SCRIPT_EVENT_ICON_STEP);
+            }
+        }
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/ScriptBuilderFrame.form
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/ScriptBuilderFrame.form	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/ScriptBuilderFrame.form	(revision 6)
@@ -0,0 +1,2115 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <NonVisualComponents>
+    <Container class="javax.swing.JPopupMenu" name="incidentPopupMenu">
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout">
+        <Property name="useNullLayout" type="boolean" value="true"/>
+      </Layout>
+      <SubComponents>
+        <MenuItem class="javax.swing.JMenuItem" name="popupDeleteIncident">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Delete Incident..."/>
+          </Properties>
+        </MenuItem>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPopupMenu" name="eventPopupMenu">
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout">
+        <Property name="useNullLayout" type="boolean" value="true"/>
+      </Layout>
+      <SubComponents>
+        <MenuItem class="javax.swing.JMenuItem" name="cadEvent">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="CAD Event"/>
+          </Properties>
+          <Events>
+            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="cadEventMousePressed"/>
+            <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="cadEventMouseReleased"/>
+          </Events>
+        </MenuItem>
+        <MenuItem class="javax.swing.JMenuItem" name="jMenuItem2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Paramics Event"/>
+          </Properties>
+        </MenuItem>
+        <MenuItem class="javax.swing.JMenuItem" name="radioEvent">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Radio Event"/>
+          </Properties>
+          <Events>
+            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="radioEventMousePressed"/>
+          </Events>
+        </MenuItem>
+        <MenuItem class="javax.swing.JMenuItem" name="jMenuItem4">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Telephone Event"/>
+          </Properties>
+        </MenuItem>
+        <MenuItem class="javax.swing.JMenuItem" name="jMenuItem5">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Video Event"/>
+          </Properties>
+        </MenuItem>
+        <MenuItem class="javax.swing.JMenuItem" name="jMenuItem6">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Evaluation Event"/>
+          </Properties>
+        </MenuItem>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JFrame" name="cadEventFrame">
+      <Properties>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[400, 300]"/>
+        </Property>
+      </Properties>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jLabel5" min="-2" pref="68" max="-2" attributes="0"/>
+                  <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="jLabel5" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace pref="1357" max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JLabel" name="jLabel5">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="CAD Entry"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JFrame" name="radioEventFrame">
+      <Properties>
+        <Property name="title" type="java.lang.String" value="Add Radio Event"/>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[400, 300]"/>
+        </Property>
+      </Properties>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="1" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Component id="radioMessageScrollPane" alignment="0" pref="380" max="32767" attributes="0"/>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="radioTypeLabel" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                          <Component id="radioTypeComboBox" pref="312" max="32767" attributes="0"/>
+                      </Group>
+                      <Component id="jLabel7" alignment="0" min="-2" max="-2" attributes="0"/>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="cancelButton" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace pref="246" max="32767" attributes="0"/>
+                          <Component id="okButton" min="-2" pref="69" max="-2" attributes="0"/>
+                      </Group>
+                  </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"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="radioTypeLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="radioTypeComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                  <Component id="jLabel7" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="radioMessageScrollPane" pref="198" max="32767" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="okButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="cancelButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JLabel" name="radioTypeLabel">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Radio Type:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel7">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Radio Message:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JComboBox" name="radioTypeComboBox">
+          <Properties>
+            <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+              <StringArray count="2">
+                <StringItem index="0" value="TMT"/>
+                <StringItem index="1" value="Maintanence"/>
+              </StringArray>
+            </Property>
+          </Properties>
+        </Component>
+        <Container class="javax.swing.JScrollPane" name="radioMessageScrollPane">
+          <Properties>
+            <Property name="verticalScrollBarPolicy" type="int" value="22"/>
+          </Properties>
+          <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.JTextArea" name="radioMessage">
+              <Properties>
+                <Property name="columns" type="int" value="20"/>
+                <Property name="lineWrap" type="boolean" value="true"/>
+                <Property name="rows" type="int" value="5"/>
+                <Property name="wrapStyleWord" type="boolean" value="true"/>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Component class="javax.swing.JButton" name="okButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="OK"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="okButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="cancelButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Cancel"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cancelButtonActionPerformed"/>
+          </Events>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPopupMenu" name="eventListPopupMenu">
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout">
+        <Property name="useNullLayout" type="boolean" value="true"/>
+      </Layout>
+      <SubComponents>
+        <MenuItem class="javax.swing.JMenuItem" name="editEventList">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Edit..."/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="editEventListActionPerformed"/>
+          </Events>
+        </MenuItem>
+        <MenuItem class="javax.swing.JMenuItem" name="deleteEventList">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Delete..."/>
+          </Properties>
+        </MenuItem>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JFrame" name="incidentFrame">
+      <Properties>
+        <Property name="title" type="java.lang.String" value="Incident"/>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[400, 400]"/>
+        </Property>
+      </Properties>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="1" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Component id="jScrollPane1" alignment="0" pref="322" max="32767" attributes="0"/>
+                      <Component id="jLabel10" alignment="0" min="-2" max="-2" attributes="0"/>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Group type="103" groupAlignment="0" attributes="0">
+                              <Component id="jLabel6" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Component id="jLabel8" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Component id="jLabel9" alignment="0" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace type="separate" max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="0" attributes="0">
+                              <Component id="addIncidentName" pref="218" max="32767" attributes="0"/>
+                              <Component id="addIncidentNumber" alignment="0" pref="218" max="32767" attributes="0"/>
+                              <Group type="102" alignment="1" attributes="0">
+                                  <Component id="incidentColorField" pref="119" max="32767" attributes="0"/>
+                                  <EmptySpace max="-2" attributes="0"/>
+                                  <Component id="jButton3" min="-2" pref="93" max="-2" attributes="0"/>
+                              </Group>
+                          </Group>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="incidentCancelButton" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace pref="188" max="32767" attributes="0"/>
+                          <Component id="incidentOkButton" min="-2" pref="69" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Group type="103" groupAlignment="0" attributes="0">
+                              <Component id="jLabel12" min="-2" max="-2" attributes="0"/>
+                              <Component id="jLabel11" alignment="0" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace min="-2" pref="18" max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="0" attributes="0">
+                              <Component id="addIncidentStart" alignment="0" pref="158" max="32767" attributes="0"/>
+                              <Component id="addIncidentLength" alignment="0" pref="158" max="32767" attributes="0"/>
+                          </Group>
+                      </Group>
+                  </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"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="addIncidentNumber" 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="addIncidentName" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="jLabel9" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jButton3" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="incidentColorField" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jLabel10" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jScrollPane1" pref="106" max="32767" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="addIncidentStart" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel12" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="addIncidentLength" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel11" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="incidentCancelButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="incidentOkButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JLabel" name="jLabel6">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incident Number: "/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel8">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incident Name:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel9">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incident Color: "/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel10">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incident Description:"/>
+          </Properties>
+        </Component>
+        <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+          <Properties>
+            <Property name="horizontalScrollBarPolicy" type="int" value="31"/>
+            <Property name="verticalScrollBarPolicy" type="int" value="22"/>
+          </Properties>
+          <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.JTextArea" name="addIncidentDescription">
+              <Properties>
+                <Property name="columns" type="int" value="20"/>
+                <Property name="lineWrap" type="boolean" value="true"/>
+                <Property name="rows" type="int" value="5"/>
+                <Property name="wrapStyleWord" type="boolean" value="true"/>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Component class="javax.swing.JButton" name="incidentOkButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="OK"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="incidentOkButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="incidentCancelButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Cancel"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="incidentCancelButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JSpinner" name="addIncidentNumber">
+          <Properties>
+            <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
+              <SpinnerModel initial="101" minimum="101" numberType="java.lang.Integer" stepSize="1" type="number"/>
+            </Property>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="addIncidentName">
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel11">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incident Length in Minutes: "/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JSpinner" name="addIncidentLength">
+          <Properties>
+            <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
+              <SpinnerModel initial="0" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
+            </Property>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel12">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incident Start Time in Minutes:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JSpinner" name="addIncidentStart">
+          <Properties>
+            <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
+              <SpinnerModel initial="0" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
+            </Property>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JButton" name="jButton3">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Choose..."/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton3ActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JTextField" name="incidentColorField">
+          <Properties>
+            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
+              <Color blue="0" green="0" red="0" type="rgb"/>
+            </Property>
+            <Property name="editable" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JFrame" name="addNoiseFrame">
+      <Properties>
+        <Property name="title" type="java.lang.String" value="Generate Noise"/>
+        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[395, 315]"/>
+        </Property>
+        <Property name="resizable" type="boolean" value="false"/>
+      </Properties>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="1" attributes="0">
+                  <EmptySpace pref="21" max="32767" attributes="0"/>
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Component id="jTextArea1" alignment="0" max="32767" attributes="1"/>
+                      <Group type="103" alignment="1" groupAlignment="1" max="-2" attributes="0">
+                          <Group type="102" alignment="0" attributes="1">
+                              <Component id="jButton1" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="32767" attributes="0"/>
+                              <Component id="jButton2" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="102" alignment="0" attributes="0">
+                              <Group type="103" groupAlignment="0" attributes="0">
+                                  <Group type="103" alignment="0" groupAlignment="1" attributes="0">
+                                      <Component id="jLabel16" alignment="1" min="-2" max="-2" attributes="0"/>
+                                      <Component id="jLabel14" alignment="1" min="-2" pref="105" max="-2" attributes="0"/>
+                                      <Component id="jLabel15" alignment="1" min="-2" pref="105" max="-2" attributes="0"/>
+                                      <Component id="jLabel13" alignment="1" min="-2" pref="105" max="-2" attributes="0"/>
+                                  </Group>
+                                  <Component id="jLabel17" alignment="0" min="-2" pref="81" max="-2" attributes="0"/>
+                              </Group>
+                              <EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
+                              <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                                  <Component id="jSlider1" alignment="0" min="-2" pref="245" max="-2" attributes="0"/>
+                                  <Component id="jSlider2" alignment="0" min="-2" pref="245" max="-2" attributes="0"/>
+                                  <Component id="jSlider3" alignment="0" min="-2" pref="245" max="-2" attributes="0"/>
+                                  <Component id="jSlider5" alignment="0" min="-2" pref="245" max="-2" attributes="0"/>
+                                  <Component id="jSlider4" alignment="0" min="-2" pref="245" max="-2" attributes="0"/>
+                                  <Group type="102" alignment="1" attributes="1">
+                                      <Component id="jLabel20" min="-2" max="-2" attributes="0"/>
+                                      <EmptySpace max="32767" attributes="0"/>
+                                      <Component id="jLabel21" min="-2" max="-2" attributes="0"/>
+                                  </Group>
+                              </Group>
+                          </Group>
+                      </Group>
+                  </Group>
+                  <EmptySpace min="-2" pref="20" max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="1" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jTextArea1" pref="39" max="32767" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Component id="jLabel21" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel20" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Component id="jLabel13" min="-2" pref="30" max="-2" attributes="1"/>
+                      <Component id="jSlider1" alignment="1" min="-2" pref="30" max="-2" attributes="1"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Component id="jLabel14" min="-2" pref="28" max="-2" attributes="1"/>
+                      <Component id="jSlider2" alignment="1" min="-2" pref="28" max="-2" attributes="1"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" max="-2" attributes="0">
+                      <Component id="jLabel15" min="-2" max="-2" attributes="1"/>
+                      <Component id="jSlider3" alignment="1" min="-2" max="-2" attributes="1"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Component id="jSlider4" min="-2" pref="29" max="-2" attributes="1"/>
+                      <Component id="jLabel16" min="-2" pref="29" max="-2" attributes="1"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="jSlider5" min="-2" max="-2" attributes="1"/>
+                      <Component id="jLabel17" min="-2" max="-2" attributes="1"/>
+                  </Group>
+                  <EmptySpace type="separate" max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="jButton1" min="-2" max="-2" attributes="0"/>
+                      <Component id="jButton2" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JLabel" name="jLabel13">
+          <Properties>
+            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+              <Font name="Tahoma" size="12" style="0"/>
+            </Property>
+            <Property name="text" type="java.lang.String" value="Radio Chatter: "/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JSlider" name="jSlider1">
+        </Component>
+        <Component class="javax.swing.JSlider" name="jSlider2">
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel14">
+          <Properties>
+            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+              <Font name="Tahoma" size="12" style="0"/>
+            </Property>
+            <Property name="text" type="java.lang.String" value="Lane Closures:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JSlider" name="jSlider3">
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel15">
+          <Properties>
+            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+              <Font name="Tahoma" size="12" style="0"/>
+            </Property>
+            <Property name="text" type="java.lang.String" value="TMCAL Logs:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextArea" name="jTextArea1">
+          <Properties>
+            <Property name="columns" type="int" value="20"/>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+              <Font name="Tahoma" size="12" style="0"/>
+            </Property>
+            <Property name="lineWrap" type="boolean" value="true"/>
+            <Property name="rows" type="int" value="5"/>
+            <Property name="text" type="java.lang.String" value="Noise events will be randomly generated for the simulation with frequencies based on the control selections made below"/>
+            <Property name="wrapStyleWord" type="boolean" value="true"/>
+            <Property name="autoscrolls" type="boolean" value="false"/>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="null"/>
+            </Property>
+            <Property name="disabledTextColor" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
+              <Color blue="0" green="0" red="0" type="rgb"/>
+            </Property>
+            <Property name="focusable" type="boolean" value="false"/>
+            <Property name="opaque" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JSlider" name="jSlider4">
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel16">
+          <Properties>
+            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+              <Font name="Tahoma" size="12" style="0"/>
+            </Property>
+            <Property name="text" type="java.lang.String" value="Background Noise: "/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JSlider" name="jSlider5">
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel17">
+          <Properties>
+            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+              <Font name="Tahoma" size="12" style="0"/>
+            </Property>
+            <Property name="text" type="java.lang.String" value="Minor Events:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JButton" name="jButton1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Cancel"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="jButton2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Generate"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel20">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Least Frequent"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel21">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Most Frequent"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JColorChooser" name="incidentColorChooser">
+    </Component>
+    <Menu class="javax.swing.JMenuBar" name="scriptBuilderMenuBar">
+      <SubComponents>
+        <Menu class="javax.swing.JMenu" name="fileMenu">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="File"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[0, 10, 0, 10]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="fileMenuActionPerformed"/>
+          </Events>
+          <SubComponents>
+            <MenuItem class="javax.swing.JMenuItem" name="fileNew">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Shift+Ctrl+N"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="New"/>
+              </Properties>
+            </MenuItem>
+            <MenuItem class="javax.swing.JPopupMenu$Separator" name="jSeparator1">
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="fileOpen">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Shift+Ctrl+O"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Open..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="fileOpenActionPerformed"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JPopupMenu$Separator" name="jSeparator2">
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="fileSave">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+S"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Save"/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="fileSaveActionPerformed"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="fileSaveAs">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Shift+Ctrl+S"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Save as..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="fileSaveAsActionPerformed"/>
+              </Events>
+            </MenuItem>
+          </SubComponents>
+        </Menu>
+        <Menu class="javax.swing.JMenu" name="generateMenu">
+          <Properties>
+            <Property name="label" type="java.lang.String" value="Generate"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[0, 10, 0, 10]"/>
+            </Property>
+          </Properties>
+          <SubComponents>
+            <MenuItem class="javax.swing.JMenuItem" name="generateNotebooks">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+Alt+N"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Generate Notebooks..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="generateNotebooksActionPerformed"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="jMenuItem3">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+Alt+W"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Generate Web Notebook..."/>
+              </Properties>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="generateScorecards">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+Alt+S"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Generate Scorecards..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="generateScorecardsActionPerformed"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="generateOrganizationChart">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+Alt+O"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Generate D14 TMC Org Chart..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="generateOrganizationChartActionPerformed"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JPopupMenu$Separator" name="jSeparator3">
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="generateProjectRequirements">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="Ctrl+Alt+R"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Generate Project Worklist..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="generateProjectRequirementsActionPerformed"/>
+              </Events>
+            </MenuItem>
+          </SubComponents>
+        </Menu>
+        <Menu class="javax.swing.JMenu" name="incidentMenu">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incidents"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[0, 10, 0, 10]"/>
+            </Property>
+          </Properties>
+          <SubComponents>
+            <MenuItem class="javax.swing.JMenuItem" name="newIncident">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="New Incident..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="newIncidentActionPerformed"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="editIncident">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Edit Incident..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="editIncidentActionPerformed"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JPopupMenu$Separator" name="jSeparator4">
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="saveIncident">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Save Incident..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="saveIncidentActionPerformed"/>
+              </Events>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="loadIncident">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Load Incident..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="loadIncidentActionPerformed"/>
+              </Events>
+            </MenuItem>
+          </SubComponents>
+        </Menu>
+        <Menu class="javax.swing.JMenu" name="jMenu1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Noise"/>
+          </Properties>
+          <SubComponents>
+            <MenuItem class="javax.swing.JMenuItem" name="jMenuItem1">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="Generate Noise..."/>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jMenuItem1ActionPerformed"/>
+              </Events>
+            </MenuItem>
+          </SubComponents>
+        </Menu>
+        <Menu class="javax.swing.JMenu" name="helpMenu">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Help"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[0, 10, 0, 10]"/>
+            </Property>
+          </Properties>
+          <SubComponents>
+            <MenuItem class="javax.swing.JMenuItem" name="helpTutorial">
+              <Properties>
+                <Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
+                  <KeyStroke key="F1"/>
+                </Property>
+                <Property name="text" type="java.lang.String" value="Tutorial..."/>
+              </Properties>
+            </MenuItem>
+            <MenuItem class="javax.swing.JMenuItem" name="helpAbout">
+              <Properties>
+                <Property name="text" type="java.lang.String" value="About..."/>
+              </Properties>
+            </MenuItem>
+          </SubComponents>
+        </Menu>
+      </SubComponents>
+    </Menu>
+  </NonVisualComponents>
+  <Properties>
+    <Property name="defaultCloseOperation" type="int" value="3"/>
+    <Property name="title" type="java.lang.String" value="Script Builder"/>
+    <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
+      <Color id="Default Cursor"/>
+    </Property>
+    <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+      <Dimension value="[800, 800]"/>
+    </Property>
+  </Properties>
+  <SyntheticProperties>
+    <SyntheticProperty name="menuBar" type="java.lang.String" value="scriptBuilderMenuBar"/>
+    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+  </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 max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="timelinesScrollPane" alignment="0" min="0" pref="0" max="32767" attributes="1"/>
+                  <Component id="timeStampScrollPane" alignment="0" max="32767" attributes="0"/>
+                  <Group type="102" alignment="1" attributes="0">
+                      <Component id="scriptEventsPanel1" max="32767" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="scriptEventsPanel" max="32767" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="selectButton" min="-2" pref="40" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="incidentEventsPanel" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="evaluationEventsPanel" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace type="separate" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="zoomInIcon" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="zoomSlider" alignment="0" min="-2" pref="31" max="-2" attributes="0"/>
+                          <Component id="zoomOutIcon" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="1" attributes="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="evaluationEventsPanel" alignment="0" min="-2" pref="141" max="-2" attributes="1"/>
+                          <Component id="incidentEventsPanel" alignment="0" min="-2" pref="141" max="-2" attributes="1"/>
+                          <Group type="102" alignment="0" attributes="0">
+                              <EmptySpace min="-2" pref="47" max="-2" attributes="0"/>
+                              <Component id="selectButton" min="-2" pref="55" max="-2" attributes="1"/>
+                          </Group>
+                      </Group>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace min="-2" pref="20" max="-2" attributes="0"/>
+                      <Component id="zoomInIcon" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
+                      <Component id="zoomSlider" min="-2" pref="69" max="-2" attributes="1"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="zoomOutIcon" min="-2" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="timeStampScrollPane" min="-2" pref="20" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="timelinesScrollPane" min="-2" pref="365" max="-2" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                  <Component id="scriptEventsPanel" max="32767" attributes="1"/>
+                  <Component id="scriptEventsPanel1" alignment="0" max="32767" attributes="1"/>
+              </Group>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JScrollPane" name="timelinesScrollPane">
+      <Properties>
+        <Property name="horizontalScrollBarPolicy" type="int" value="32"/>
+        <Property name="verticalScrollBarPolicy" type="int" value="22"/>
+        <Property name="focusCycleRoot" type="boolean" value="true"/>
+        <Property name="focusTraversalPolicyProvider" type="boolean" value="true"/>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[72000, 1341]"/>
+        </Property>
+      </Properties>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Container class="scriptbuilder.gui.panels.TimelineTickPanel" name="timelineTickPanel">
+          <Properties>
+            <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[7200, 32767]"/>
+            </Property>
+            <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[7200, 0]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[7200, 1317]"/>
+            </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"/>
+                      <Group type="103" groupAlignment="1" attributes="0">
+                          <Group type="103" alignment="1" groupAlignment="0" attributes="0">
+                              <Component id="incidentNumberPanel8" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel9" alignment="0" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="103" alignment="1" groupAlignment="0" attributes="0">
+                              <Component id="incidentNumberPanel1" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel4" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel5" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel6" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel3" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel2" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel7" alignment="0" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <Component id="incidentNumberPanel10" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="incidentTimelinePanel7" max="32767" attributes="1"/>
+                          <Component id="incidentTimelinePanel6" alignment="0" min="-2" max="-2" attributes="1"/>
+                          <Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0">
+                              <Component id="incidentTimelinePanel5" alignment="0" max="32767" attributes="1"/>
+                              <Component id="incidentTimelinePanel4" alignment="0" min="-2" max="-2" attributes="1"/>
+                          </Group>
+                          <Component id="incidentTimelinePanel3" alignment="0" min="-2" max="-2" attributes="1"/>
+                          <Component id="incidentTimelinePanel1" alignment="0" min="-2" pref="6778" max="-2" attributes="1"/>
+                          <Component id="incidentTimelinePanel2" alignment="0" min="-2" max="-2" attributes="1"/>
+                          <Component id="incidentTimelinePanel8" alignment="0" min="-2" max="-2" attributes="1"/>
+                          <Component id="incidentTimelinePanel9" alignment="0" min="-2" max="-2" attributes="1"/>
+                          <Component id="incidentTimelinePanel10" alignment="0" min="-2" max="-2" attributes="1"/>
+                      </Group>
+                      <EmptySpace min="-2" pref="190" 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="incidentNumberPanel1" min="-2" max="-2" attributes="0"/>
+                          <Component id="incidentTimelinePanel1" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Group type="102" alignment="0" attributes="0">
+                              <Component id="incidentNumberPanel2" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel3" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel4" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel5" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel6" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="102" alignment="0" attributes="0">
+                              <Component id="incidentTimelinePanel2" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentTimelinePanel3" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentTimelinePanel4" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentTimelinePanel5" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentTimelinePanel6" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="incidentTimelinePanel7" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="incidentNumberPanel7" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Group type="102" alignment="0" attributes="0">
+                              <Component id="incidentTimelinePanel8" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentTimelinePanel9" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="102" alignment="0" attributes="0">
+                              <Component id="incidentNumberPanel8" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="incidentNumberPanel9" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="incidentNumberPanel10" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="incidentTimelinePanel10" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace pref="252" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+          <SubComponents>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel1">
+              <Properties>
+                <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+                  <Dimension value="[32767, 100]"/>
+                </Property>
+                <Property name="opaque" type="boolean" value="false"/>
+                <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+                  <Dimension value="[691, 100]"/>
+                </Property>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="6778" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel2">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="6726" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel8">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="5686" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel3">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="605" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel6">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="605" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel5">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="617" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel4">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="617" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel7">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="6884" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel10">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="6573" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentTimelinePanel" name="incidentTimelinePanel9">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="6470" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel1">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="106" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel2">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel3">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel4">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel5">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel6">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel7">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel8">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel9">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+            <Container class="scriptbuilder.gui.panels.IncidentNumberPanel" name="incidentNumberPanel10">
+              <Properties>
+                <Property name="opaque" type="boolean" value="false"/>
+              </Properties>
+
+              <Layout>
+                <DimensionLayout dim="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+                <DimensionLayout dim="1">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+                  </Group>
+                </DimensionLayout>
+              </Layout>
+            </Container>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPanel" name="scriptEventsPanel">
+      <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="Script Events"/>
+          </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="scriptEventsPane" pref="485" 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">
+                  <Component id="scriptEventsPane" pref="197" max="32767" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Container class="javax.swing.JScrollPane" name="scriptEventsPane">
+          <Properties>
+            <Property name="verticalScrollBarPolicy" type="int" value="22"/>
+          </Properties>
+          <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.JList" name="scriptEventsList">
+              <Properties>
+                <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+                  <Connection code="new DefaultListModel()" type="code"/>
+                </Property>
+                <Property name="componentPopupMenu" type="javax.swing.JPopupMenu" editor="org.netbeans.modules.form.ComponentChooserEditor">
+                  <ComponentRef name="eventListPopupMenu"/>
+                </Property>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JSlider" name="zoomSlider">
+      <Properties>
+        <Property name="maximum" type="int" value="21"/>
+        <Property name="minimum" type="int" value="5"/>
+        <Property name="orientation" type="int" value="1"/>
+        <Property name="value" type="int" value="13"/>
+        <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
+          <Color id="Default Cursor"/>
+        </Property>
+        <Property name="focusable" type="boolean" value="false"/>
+      </Properties>
+      <Events>
+        <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="zoomSliderStateChanged"/>
+      </Events>
+    </Component>
+    <Container class="javax.swing.JPanel" name="scriptEventsPanel1">
+      <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="Incident Information"/>
+          </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"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="incidentDescriptionPane" alignment="1" pref="453" max="32767" attributes="0"/>
+                      <Component id="jLabel4" alignment="0" min="-2" max="-2" attributes="0"/>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Group type="103" groupAlignment="0" attributes="0">
+                              <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+                              <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="1" attributes="0">
+                              <Component id="incidentName" pref="366" max="32767" attributes="0"/>
+                              <Component id="incidentNumber" alignment="1" pref="366" max="32767" attributes="0"/>
+                          </Group>
+                      </Group>
+                  </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">
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="incidentNumber" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="incidentName" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="incidentDescriptionPane" pref="125" max="32767" attributes="0"/>
+                  <EmptySpace min="-2" max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JLabel" name="jLabel2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incident Number:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel3">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incident Name:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel4">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Incident Description:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="incidentName">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="text" type="java.lang.String" value="Media"/>
+          </Properties>
+        </Component>
+        <Container class="javax.swing.JScrollPane" name="incidentDescriptionPane">
+          <Properties>
+            <Property name="verticalScrollBarPolicy" type="int" value="22"/>
+          </Properties>
+          <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.JTextArea" name="incidentDescription">
+              <Properties>
+                <Property name="columns" type="int" value="20"/>
+                <Property name="editable" type="boolean" value="false"/>
+                <Property name="lineWrap" type="boolean" value="true"/>
+                <Property name="rows" type="int" value="5"/>
+                <Property name="text" type="java.lang.String" value="All media message events are found in this incident."/>
+                <Property name="wrapStyleWord" type="boolean" value="true"/>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Component class="javax.swing.JTextField" name="incidentNumber">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="text" type="java.lang.String" value="100"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JButton" name="selectButton">
+      <Properties>
+        <Property name="toolTipText" type="java.lang.String" value="Select"/>
+        <Property name="focusPainted" type="boolean" value="false"/>
+        <Property name="iconTextGap" type="int" value="0"/>
+        <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+          <Insets value="[2, 10, 2, 10]"/>
+        </Property>
+        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+          <Dimension value="[30, 25]"/>
+        </Property>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="selectButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Container class="javax.swing.JPanel" name="incidentEventsPanel">
+      <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="Incident Events"/>
+          </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"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="103" alignment="0" groupAlignment="0" attributes="0">
+                          <Group type="102" alignment="1" attributes="0">
+                              <Component id="maintenanceRadioButton" min="-2" pref="120" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="tmtRadioButton" min="-2" pref="120" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="telephoneButton" min="-2" pref="120" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="paramicsButton" min="-2" pref="120" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="102" alignment="0" attributes="0">
+                              <Component id="towButton" min="-2" pref="120" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="unitButton" min="-2" pref="120" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="witnessButton" min="-2" pref="120" max="-2" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="audioButton" min="-2" pref="120" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="cadButton" min="-2" pref="120" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="cctvButton" min="-2" pref="120" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="chpRadioButton" min="-2" pref="120" max="-2" attributes="0"/>
+                      </Group>
+                  </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">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" attributes="0">
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="maintenanceRadioButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                              <Component id="tmtRadioButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                              <Component id="telephoneButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="towButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                              <Component id="unitButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                              <Component id="witnessButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                              <Component id="audioButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <Component id="paramicsButton" min="-2" pref="30" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Group type="103" alignment="1" groupAlignment="3" attributes="0">
+                          <Component id="cctvButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                          <Component id="chpRadioButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                      </Group>
+                      <Component id="cadButton" min="-2" pref="30" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JButton" name="maintenanceRadioButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Maintenance Radio"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="maintenanceRadioButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="tmtRadioButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="TMT Radio"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="tmtRadioButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="telephoneButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Telephone"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="telephoneButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="unitButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Unit"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="unitButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="witnessButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Witness"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="witnessButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="paramicsButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Paramics"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="paramicsButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="towButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Tow"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="towButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="audioButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Audio"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="audioButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="cctvButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="CCTV"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cctvButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="cadButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="CAD"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cadButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="chpRadioButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="CHP Radio"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="chpRadioButtonActionPerformed"/>
+          </Events>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPanel" name="evaluationEventsPanel">
+      <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="Evaluation Events"/>
+          </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">
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="atmsEvalButton" min="-2" pref="140" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="activityLogEvalButton" min="-2" pref="140" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="cmsEvalButton" min="-2" pref="140" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="facilitatorEvalButton" min="-2" pref="140" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="cadEvalButton" min="-2" pref="140" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="radioEvalButton" min="-2" pref="140" max="-2" attributes="0"/>
+                      </Group>
+                  </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">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="cmsEvalButton" alignment="0" min="-2" pref="30" max="-2" attributes="0"/>
+                      <Component id="facilitatorEvalButton" alignment="0" min="-2" pref="30" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="atmsEvalButton" alignment="0" min="-2" pref="30" max="-2" attributes="0"/>
+                      <Component id="activityLogEvalButton" alignment="0" min="-2" pref="30" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="cadEvalButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                      <Component id="radioEvalButton" alignment="3" min="-2" pref="30" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JButton" name="atmsEvalButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="ATMS Evaluation"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="atmsEvalButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="cmsEvalButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="CMS Evaluation"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cmsEvalButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="cadEvalButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="CAD Evaluation"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cadEvalButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="facilitatorEvalButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Facilitator Evaluation"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="facilitatorEvalButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="activityLogEvalButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Activity Log Evaluation"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="activityLogEvalButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="radioEvalButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Radio Evaluation"/>
+            <Property name="toolTipText" type="java.lang.String" value=""/>
+            <Property name="focusPainted" type="boolean" value="false"/>
+            <Property name="iconTextGap" type="int" value="0"/>
+            <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
+              <Insets value="[2, 10, 2, 10]"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[30, 25]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="radioEvalButtonActionPerformed"/>
+          </Events>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JLabel" name="zoomInIcon">
+      <Properties>
+        <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+          <Image iconType="3" name="/images/ZoomIn.png"/>
+        </Property>
+        <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
+          <Color id="Hand Cursor"/>
+        </Property>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="zoomInIconMouseClicked"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="zoomOutIcon">
+      <Properties>
+        <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
+          <Image iconType="3" name="/images/ZoomOut.png"/>
+        </Property>
+        <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
+          <Color id="Hand Cursor"/>
+        </Property>
+      </Properties>
+      <Events>
+        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="zoomOutIconMouseClicked"/>
+      </Events>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="timeStampScrollPane">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="null"/>
+        </Property>
+        <Property name="horizontalScrollBarPolicy" type="int" value="31"/>
+        <Property name="verticalScrollBarPolicy" type="int" value="21"/>
+      </Properties>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Container class="scriptbuilder.gui.panels.TimeStampPanel" name="timeStampPanel">
+
+          <Layout>
+            <DimensionLayout dim="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <EmptySpace min="0" pref="1008" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+              </Group>
+            </DimensionLayout>
+          </Layout>
+        </Container>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/ScriptBuilderGuiConstants.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/ScriptBuilderGuiConstants.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/ScriptBuilderGuiConstants.java	(revision 6)
@@ -0,0 +1,71 @@
+package scriptbuilder.gui;
+
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Font;
+import java.awt.Point;
+import java.awt.Toolkit;
+import images.*;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class ScriptBuilderGuiConstants
+{
+    public static int       PIXEL_WIDTH_PER_HORIZONTAL_TICK = 24;
+    public static final int HORIZONTAL_TICK_RESOLUTION = 60,
+                            TIMELINE_TOP_MARGIN = 25,
+                            MAX_NUMBER_OF_SCRIPT_EVENT_ICON = 10,
+                            SCRIPT_EVENT_ICON_TOP_MARGIN = 55,
+                            SCRIPT_EVENT_ICON_STEP = 24,
+                            EVENT_ICON_WIDTH = 10,
+                            TIMELINE_EVENT_ICON_MARGIN = 35,
+                            CURSOR_ICON_HORIZONTAL_CENTER = 10,
+                            CURSOR_TIMESTAMP_TOP_MARGIN = 1,
+                            CURSOR_TIMESTAMP_HEIGHT = 13,
+                            CURSOR_TIMESTAMP_HORIZONTAL_CENTER = 23,
+                            CURSOR_TIMESTAMP_BORDER_TOP_MARGIN = 0,
+                            CURSOR_TIMESTAMP_BORDER_HEIGHT = 15,
+                            CURSOR_TIMESTAMP_BORDER_HORIZONTAL_CENTER = 25,
+                            CURSOR_TIMESTAMP_ICON_CENTER = 10,
+                            CURSOR_TIMESTAMP_ICON_TOP_MARGIN = 16,
+                            CURSOR_TIMESTAMP_TEXT_CENTER = 18,
+                            CURSOR_TIMESTAMP_TEXT_TOP_MARGIN = 11,
+                            TIMELINE_HEIGHT = 3,
+                            TICK_TIMELINE_TOP_MARGIN = 50,
+                            TICK_TIMELINE_LEFT_MARGIN = 119,
+                            TICK_TIMELINE_SMALLEST_LENGTH = 800,
+                            TICK_TIMELINE_HEIGHT = 0,
+                            TICK_TOP_MARGIN = 0,
+                            TICK_HEIGHT = 3400,
+                            TICK_WIDTH = 1,
+                            TIMELINE_COLLAPSED_HEIGHT = 50,
+                            TIMELINE_OPENED_HEIGHT = 320,
+                            INCIDENT_NUMBER_WIDTH = 100,
+                            INCIDENT_NUMBER_TOP_MARGIN = 35,
+                            INCIDENT_NUMBER_LEFT_MARGIN = 60,
+                            TICKS_PER_MAJOR_TICK = 15,
+                            COLLEX_BUTTON_X = 25,
+                            COLLEX_BUTTON_Y = 18,
+                            COLLEX_BUTTON_WIDTH = 20,
+                            COLLEX_BUTTON_HEIGHT = 20;
+
+    public static final Color   CURSOR_TIMESTAMP_BORDER_COLOR = Color.BLACK,
+                                CURSOR_TIMESTAMP_ACTIVE_COLOR = Color.YELLOW,
+                                CURSOR_TIMESTAMP_LOCKED_COLOR = Color.LIGHT_GRAY,
+                                CURSOR_TIMESTAMP_TEXT_COLOR   = Color.BLACK,
+                                TIMELINE_TICK_COLOR           = Color.BLACK,
+                                MINOR_TICK_COLOR              = new Color(0xDADADA);
+
+    public static final Font    INCIDENT_NUMBER_FONT          =
+                                    new Font("Arial", Font.BOLD, 20),
+                                INCIDENT_NAME_FONT          =
+                                    new Font("Arial", Font.BOLD, 12),
+                                TIMELINE_TICK_TIME_FONT       =
+                                    new Font("Arial", Font.BOLD, 14);
+
+    public static final Cursor RADIO_CURSOR = Toolkit.getDefaultToolkit().createCustomCursor(
+                        Toolkit.getDefaultToolkit().getImage(Images.getImage("Radio.png")),
+                        new Point(0, 0), "Radio");
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/ExtensionFileFilter.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/ExtensionFileFilter.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/ExtensionFileFilter.java	(revision 6)
@@ -0,0 +1,51 @@
+package scriptbuilder.gui;
+
+import java.io.File;
+
+import javax.swing.filechooser.FileFilter;
+
+public class ExtensionFileFilter extends FileFilter
+{
+  String description;
+
+  String extensions[];
+
+  public ExtensionFileFilter(String description, String extension) {
+    this(description, new String[] { extension });
+  }
+
+  public ExtensionFileFilter(String description, String extensions[]) {
+    if (description == null) {
+      this.description = extensions[0];
+    } else {
+      this.description = description;
+    }
+    this.extensions = (String[]) extensions.clone();
+    toLower(this.extensions);
+  }
+
+  private void toLower(String array[]) {
+    for (int i = 0, n = array.length; i < n; i++) {
+      array[i] = array[i].toLowerCase();
+    }
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public boolean accept(File file) {
+    if (file.isDirectory()) {
+      return true;
+    } else {
+      String path = file.getAbsolutePath().toLowerCase();
+      for (int i = 0, n = extensions.length; i < n; i++) {
+        String extension = extensions[i];
+        if ((path.endsWith(extension) && (path.charAt(path.length() - extension.length() - 1)) == '.')) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/IncidentNumberPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/IncidentNumberPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/IncidentNumberPanel.java	(revision 6)
@@ -0,0 +1,169 @@
+package scriptbuilder.gui.panels;
+
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.event.MouseEvent;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.imageio.ImageIO;
+import javax.swing.JPanel;
+import javax.swing.event.MouseInputAdapter;
+import scriptbuilder.gui.ScriptBuilderFrame;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+import scriptbuilder.structures.ScriptIncident;
+import scriptbuilder.structures.TimeSlice;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class IncidentNumberPanel extends JPanel
+{
+    ScriptIncident incident;
+    boolean visible;
+    public boolean collapsed = false;
+    private static Image collapseImage = null, expandImage = null;
+
+    private static Image getCollapseImage()
+    {
+        if (collapseImage == null)
+        {
+            try
+            {
+                collapseImage = ImageIO.read(images.Images.getImage("Collapse.png"));
+            }
+            catch (IOException ex)
+            {
+                Logger.getLogger(IncidentNumberPanel.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        return collapseImage;
+    }
+
+    private static Image getExpandImage()
+    {
+        if (expandImage == null)
+        {
+            try
+            {
+                expandImage = ImageIO.read(images.Images.getImage("Expand.png"));
+            }
+            catch (IOException ex)
+            {
+                Logger.getLogger(IncidentNumberPanel.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+
+        return expandImage;
+    }
+
+    private class IncidentNumberMouseListener extends MouseInputAdapter
+    {
+        private final Shape collapseExpandButtonShape =
+                new Rectangle(ScriptBuilderGuiConstants.COLLEX_BUTTON_X, 
+                              ScriptBuilderGuiConstants.COLLEX_BUTTON_Y,
+                              ScriptBuilderGuiConstants.COLLEX_BUTTON_WIDTH,
+                              ScriptBuilderGuiConstants.COLLEX_BUTTON_HEIGHT);
+
+        @Override
+        public void mouseClicked(MouseEvent e)
+        {
+            if (collapseExpandButtonShape.contains(e.getX(), e.getY()))
+            {
+                incident.setCollapsed(!collapsed);
+            }
+        }
+    }
+
+    public IncidentNumberPanel()
+    {
+        super();
+
+        // Add the mouse listener
+        IncidentNumberMouseListener mouseListener =
+                new IncidentNumberMouseListener();
+        addMouseMotionListener(mouseListener);
+        addMouseListener(mouseListener);
+    }
+
+    public void update(ScriptIncident incident)
+    {
+        this.incident = incident;
+        this.visible = incident != null;
+
+        if (incident != null)
+            this.collapsed = incident.collapsed;
+
+        Dimension newSize;
+        if (visible)
+        {
+            if (collapsed)
+            {
+                newSize = new Dimension(
+                        ScriptBuilderGuiConstants.INCIDENT_NUMBER_WIDTH,
+                        ScriptBuilderGuiConstants.TIMELINE_COLLAPSED_HEIGHT);
+            }
+            else
+            {
+                int mostEvents = 0;
+                for (TimeSlice slice : incident.slices)
+                {
+                    if (slice.events.size() > mostEvents)
+                        mostEvents = slice.events.size();
+                }
+
+                newSize = new Dimension(ScriptBuilderGuiConstants.INCIDENT_NUMBER_WIDTH,
+                        ScriptBuilderGuiConstants.TIMELINE_COLLAPSED_HEIGHT +
+                        ScriptBuilderGuiConstants.SCRIPT_EVENT_ICON_STEP * (mostEvents + 1));
+            }
+        }
+        else
+        {
+            newSize = new Dimension(0, 0);
+        }
+        this.setSize(newSize);
+        this.setPreferredSize(newSize);
+
+        if (incident != null)
+            this.setToolTipText(incident.name);
+
+        invalidate();
+    }
+
+    @Override
+    public void paint(Graphics g)
+    {
+        super.paint(g);
+
+        if (!visible)
+            return;
+
+        Graphics2D g2d = (Graphics2D)g;
+        g2d.setColor(incident.color);
+        g2d.setFont(ScriptBuilderGuiConstants.INCIDENT_NUMBER_FONT);
+        g2d.drawString(Integer.toString(incident.number),
+                ScriptBuilderGuiConstants.INCIDENT_NUMBER_LEFT_MARGIN,
+                ScriptBuilderGuiConstants.INCIDENT_NUMBER_TOP_MARGIN);
+
+        g2d.drawImage((collapsed ? getExpandImage() : getCollapseImage()),
+                ScriptBuilderGuiConstants.COLLEX_BUTTON_X,
+                ScriptBuilderGuiConstants.COLLEX_BUTTON_Y, null);
+
+        if (!collapsed)
+        {
+            int y = ScriptBuilderGuiConstants.INCIDENT_NUMBER_TOP_MARGIN * 2 - 14;
+            g2d.setFont(ScriptBuilderGuiConstants.INCIDENT_NAME_FONT);
+            for (String line : incident.name.split(" "))
+            {
+                g2d.drawString(line, 20, y);
+                y += 12;
+            }
+        }
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/IncidentsPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/IncidentsPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/IncidentsPanel.java	(revision 6)
@@ -0,0 +1,43 @@
+package scriptbuilder.gui.panels;
+
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.util.List;
+import javax.swing.JPanel;
+import scriptbuilder.structures.SimulationScript;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class IncidentsPanel extends JPanel
+{
+    private SimulationScript script;
+    private TimelineTickPanel timelineTickPanel;
+    private List<IncidentTimelinePanel> incidentPanels;
+    private List<IncidentNumberPanel> numberPanels;
+
+    public void setScript(SimulationScript script)
+    {
+        this.script = script;
+
+        timelineTickPanel.update(script);
+    }
+
+    public IncidentsPanel()
+    {
+        super();
+
+        timelineTickPanel = new TimelineTickPanel();
+        this.add(timelineTickPanel);
+    }
+
+    @Override
+    public void paint(Graphics g)
+    {
+        super.paint(g);
+
+        Graphics2D g2d = (Graphics2D)g;
+        timelineTickPanel.paint(g);
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/TimelineTickPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/TimelineTickPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/TimelineTickPanel.java	(revision 6)
@@ -0,0 +1,148 @@
+package scriptbuilder.gui.panels;
+
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.event.MouseEvent;
+import javax.swing.JPanel;
+import javax.swing.event.MouseInputAdapter;
+import scriptbuilder.gui.ScriptBuilderFrame;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+import scriptbuilder.gui.drawers.EventIconDrawer;
+import scriptbuilder.structures.ScriptIncident;
+import scriptbuilder.structures.SimulationScript;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class TimelineTickPanel extends JPanel
+{
+    private int longestLength = ScriptBuilderGuiConstants.TICK_TIMELINE_SMALLEST_LENGTH;
+    private int x, y;
+    private boolean focused = false;
+
+    public void setZoom(float zoom)
+    {
+        repaint();
+    }
+
+    public class TimelineTickMouseListener extends MouseInputAdapter
+    {
+        @Override
+        public void mouseEntered(MouseEvent e)
+        {
+            focused = true;
+        }
+
+        @Override
+        public void mouseExited(MouseEvent e)
+        {
+            focused = false;
+            repaint();
+        }
+
+        @Override
+        public void mouseMoved(MouseEvent e)
+        {
+            x = e.getX();
+            y = e.getY();
+
+            repaint();
+        }
+    }
+
+    public TimelineTickPanel()
+    {
+        super();
+
+        TimelineTickMouseListener mouseListener =
+                new TimelineTickMouseListener();
+        addMouseMotionListener(mouseListener);
+        addMouseListener(mouseListener);
+    }
+
+    public void update(SimulationScript script)
+    {
+        longestLength = ScriptBuilderGuiConstants.TICK_TIMELINE_SMALLEST_LENGTH;
+
+        // Get the stats on the incidents
+        int height = ScriptBuilderGuiConstants.TICK_TOP_MARGIN * 4;
+        for (ScriptIncident incident : script.incidents)
+        {
+            if (incident != null)
+            {
+                height += incident.collapsed ?
+                          ScriptBuilderGuiConstants.TIMELINE_OPENED_HEIGHT  :
+                          ScriptBuilderGuiConstants.TIMELINE_OPENED_HEIGHT;
+                if (incident.length > longestLength)
+                    longestLength = incident.length;
+            }
+        }
+
+        Dimension newSize = new Dimension(longestLength /
+                ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+                ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK +
+                ScriptBuilderGuiConstants.TICK_TIMELINE_LEFT_MARGIN + 50,
+                height);
+        this.setPreferredSize(newSize);
+        this.setSize(newSize);
+
+        this.invalidate();
+    }
+
+    @Override
+    public void paint(Graphics g)
+    {
+        super.paint(g);
+
+        Graphics2D g2d = (Graphics2D)g;
+
+        // Draw the horizontal line
+        g2d.setFont(ScriptBuilderGuiConstants.TIMELINE_TICK_TIME_FONT);
+        g2d.setColor(ScriptBuilderGuiConstants.TIMELINE_TICK_COLOR);
+        g2d.fillRect(0, ScriptBuilderGuiConstants.TICK_TIMELINE_TOP_MARGIN,
+                longestLength, ScriptBuilderGuiConstants.TICK_TIMELINE_HEIGHT);
+
+        // Draw the ticks
+        int longestLengthPlusMargin = longestLength /
+                ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+                ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK +
+                ScriptBuilderGuiConstants.TICK_TIMELINE_LEFT_MARGIN;
+
+        // Minutes
+        g2d.setColor(ScriptBuilderGuiConstants.MINOR_TICK_COLOR);
+        int seconds = 0;
+        for (int i = ScriptBuilderGuiConstants.TICK_TIMELINE_LEFT_MARGIN;
+             i <= longestLengthPlusMargin;
+             i += ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK,
+             seconds += ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION)
+        {
+            g2d.drawLine(i, ScriptBuilderGuiConstants.TICK_TOP_MARGIN,
+                         i, ScriptBuilderGuiConstants.TICK_HEIGHT);
+        }
+
+        // Major Ticks
+        g2d.setColor(ScriptBuilderGuiConstants.TIMELINE_TICK_COLOR);
+        seconds = 0;
+        for (int i = ScriptBuilderGuiConstants.TICK_TIMELINE_LEFT_MARGIN;
+             i <= longestLengthPlusMargin;
+             i += ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK *
+                  ScriptBuilderGuiConstants.TICKS_PER_MAJOR_TICK,
+             seconds += ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+                        ScriptBuilderGuiConstants.TICKS_PER_MAJOR_TICK)
+        {
+            g2d.drawLine(i, ScriptBuilderGuiConstants.TICK_TOP_MARGIN,
+                         i, ScriptBuilderGuiConstants.TICK_HEIGHT);
+
+        }
+
+        paintChildren(g);
+
+        if (focused &&
+            ((ScriptBuilderFrame)this.getTopLevelAncestor()).currentEventType != null)
+                EventIconDrawer.DrawEventIcon(g2d,
+                    ((ScriptBuilderFrame)this.getTopLevelAncestor()).currentEventType,
+                    x+5, y+10);
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/TimeStampPanel.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/TimeStampPanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/TimeStampPanel.java	(revision 6)
@@ -0,0 +1,85 @@
+package scriptbuilder.gui.panels;
+
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import javax.swing.JPanel;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+import scriptbuilder.structures.ScriptIncident;
+import scriptbuilder.structures.SimulationScript;
+
+public class TimeStampPanel extends JPanel
+{
+    private int longestLength = ScriptBuilderGuiConstants.TICK_TIMELINE_SMALLEST_LENGTH;
+
+    public void setZoom(float zoom)
+    {
+        repaint();
+    }
+
+    public TimeStampPanel()
+    {
+        super();
+    }
+
+    public void update(SimulationScript script)
+    {
+        longestLength = ScriptBuilderGuiConstants.TICK_TIMELINE_SMALLEST_LENGTH;
+
+        // Get the stats on the incidents
+        int height = ScriptBuilderGuiConstants.TICK_TOP_MARGIN * 4;
+        for (ScriptIncident incident : script.incidents)
+        {
+            if (incident != null)
+            {
+                height += incident.collapsed ?
+                          ScriptBuilderGuiConstants.TIMELINE_OPENED_HEIGHT  :
+                          ScriptBuilderGuiConstants.TIMELINE_OPENED_HEIGHT;
+                if (incident.length > longestLength)
+                    longestLength = incident.length;
+            }
+        }
+
+        Dimension newSize = new Dimension(longestLength /
+                ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+                ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK +
+                ScriptBuilderGuiConstants.TICK_TIMELINE_LEFT_MARGIN + 50,
+                height);
+        this.setPreferredSize(newSize);
+        this.setSize(newSize);
+
+        this.invalidate();
+    }
+
+    @Override
+    public void paint(Graphics g)
+    {
+        super.paint(g);
+
+        Graphics2D g2d = (Graphics2D)g;
+        g2d.setFont(ScriptBuilderGuiConstants.TIMELINE_TICK_TIME_FONT);
+        g2d.setColor(ScriptBuilderGuiConstants.TIMELINE_TICK_COLOR);
+        int longestLengthPlusMargin = longestLength /
+                ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+                ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK +
+                ScriptBuilderGuiConstants.TICK_TIMELINE_LEFT_MARGIN;
+        int seconds = 0;
+
+        // Major Ticks
+        g2d.setColor(ScriptBuilderGuiConstants.TIMELINE_TICK_COLOR);
+        seconds = 0;
+        for (int i = ScriptBuilderGuiConstants.TICK_TIMELINE_LEFT_MARGIN;
+             i <= longestLengthPlusMargin;
+             i += ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK *
+                  ScriptBuilderGuiConstants.TICKS_PER_MAJOR_TICK,
+             seconds += ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+                        ScriptBuilderGuiConstants.TICKS_PER_MAJOR_TICK)
+        {
+            g2d.drawString(seconds / 3600 + ":" +
+                          (seconds / 60 % 60 > 9 ? seconds / 60 % 60 :
+                                             "0" + seconds / 60 % 60)  +
+                          ":00", i - 25, 18);
+
+        }
+    }
+}
Index: /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/IncidentTimelinePanel.java
===================================================================
--- /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/IncidentTimelinePanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/scriptbuilder/gui/panels/IncidentTimelinePanel.java	(revision 6)
@@ -0,0 +1,239 @@
+package scriptbuilder.gui.panels;
+
+import event.editor.Editor;
+import event.editor.Properties;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.event.MouseEvent;
+import java.util.HashMap;
+import java.util.Map;
+import javax.swing.JPanel;
+import javax.swing.event.MouseInputAdapter;
+import scriptbuilder.gui.ScriptBuilderFrame;
+import scriptbuilder.gui.ScriptBuilderGuiConstants;
+import scriptbuilder.gui.drawers.CursorDrawer;
+import scriptbuilder.gui.drawers.EventIconDrawer;
+import scriptbuilder.gui.drawers.IncidentTimelineDrawer;
+import scriptbuilder.structures.ScriptEvent;
+import scriptbuilder.structures.ScriptEvent.ScriptEventType;
+import scriptbuilder.structures.ScriptIncident;
+import scriptbuilder.structures.TimeSlice;
+
+/**
+ *
+ * @author Greg Eddington <geddingt@calpoly.edu>
+ */
+public class IncidentTimelinePanel extends JPanel
+{
+    ScriptIncident incident;
+    boolean collapsed;
+    boolean visible;
+    boolean focused;
+    int cursorTime, lastSlice, x, y;
+    Map<ScriptEventType, Properties> eventTypeToPropertyMap;
+
+    public class IncidentTimelineMouseListener extends MouseInputAdapter
+    {
+        @Override
+        public void mouseEntered(MouseEvent e)
+        {
+            incident.setIncidentActive();
+            focused = true;
+        }
+
+        @Override
+        public void mouseExited(MouseEvent e)
+        {
+            focused = false;
+            repaint();
+        }
+
+        @Override
+        public void mouseClicked(MouseEvent e)
+        {
+            Editor ed = new Editor();
+            ScriptBuilderFrame f = (ScriptBuilderFrame)getTopLevelAncestor();
+
+            x = cursorTime = e.getX();
+            y = e.getY();
+
+            if (e.getX() % ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK >
+                    ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK / 2)
+            {
+                cursorTime += ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK -
+                        e.getX() %
+                        ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK;
+            }
+            else
+            {
+                cursorTime -= e.getX() %
+                    ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK;
+            }
+
+            int newSlice = (cursorTime / ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK) -
+                           (incident.offset / ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION);
+
+            /** Check if click is out of bounds **/
+            if (!(newSlice < incident.slices.size() && newSlice >= 0) || incident == null)
+            {
+                return;
+            }
+
+            for (ScriptEvent se : incident.slices.get(newSlice).events)
+            {
+                ed.addProperty(eventTypeToPropertyMap.get(se.getScriptEventType()));
+            }
+            
+            /** Add a new icon if left mouse button was clicked **/
+            if (e.getButton() == MouseEvent.BUTTON1)
+            {
+                if (f.currentEventType != null)
+                {
+                    ed.addProperty(eventTypeToPropertyMap.get(f.currentEventType));
+                    incident.slices.get(newSlice).addEvent(new ScriptEvent(f.currentEventType));
+                    f.update(f.getScript(), f.getScript());
+                }
+            }
+
+            ed.setVisible(true);
+        }
+
+        @Override
+        public void mouseMoved(MouseEvent e)
+        {
+            x = cursorTime = e.getX();
+            y = e.getY();
+
+            if (e.getX() % ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK >
+                    ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK / 2)
+            {
+                cursorTime += ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK -
+                        e.getX() %
+                        ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK;
+            }
+            else
+            {
+                cursorTime -= e.getX() %
+                    ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK;
+            }
+
+
+            if (incident != null)
+            {
+                int newSlice = (cursorTime / ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK) -
+                        (incident.offset / ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION);
+                if (newSlice < incident.slices.size() && newSlice >= 0)
+                {
+                    incident.setSliceActive(newSlice);
+                    lastSlice = newSlice;
+                    String newToolTip;
+                    if (collapsed)
+                        newToolTip = incident.slices.get(newSlice).toString();
+                    else
+                        newToolTip = incident.slices.get(newSlice).getToolTipText(y);
+                    setToolTipText((newToolTip == null || newToolTip.equals(""))
+                            ? null : newToolTip);
+                }
+            }
+            
+            repaint();
+        }
+    }
+
+    public IncidentTimelinePanel()
+    {
+        super();
+
+//        FACILITATOR_EVAL_EVENT, RADIO_EVAL_EVENT
+
+        eventTypeToPropertyMap = new HashMap();
+        eventTypeToPropertyMap.put(ScriptEventType.AUDIO_EVENT, Properties.Audio);
+        eventTypeToPropertyMap.put(ScriptEventType.CAD_EVENT, Properties.CADLog);
+        eventTypeToPropertyMap.put(ScriptEventType.CCTV_EVENT, Properties.CCTV);
+        eventTypeToPropertyMap.put(ScriptEventType.CHP_RADIO_EVENT, Properties.CHPRadio);
+        eventTypeToPropertyMap.put(ScriptEventType.PARAMICS_EVENT, Properties.Paramics);
+        eventTypeToPropertyMap.put(ScriptEventType.TOW_EVENT, Properties.Tow);
+        eventTypeToPropertyMap.put(ScriptEventType.UNIT_EVENT, Properties.Unit);
+        eventTypeToPropertyMap.put(ScriptEventType.WITNESS_EVENT, Properties.Witness);
+        eventTypeToPropertyMap.put(ScriptEventType.MAINTENANCE_RADIO_EVENT, Properties.MaintenanceRadio);
+        eventTypeToPropertyMap.put(ScriptEventType.TMT_RADIO_EVENT, Properties.TMTRadio);
+        eventTypeToPropertyMap.put(ScriptEventType.TELEPHONE_EVENT, Properties.Telephone);
+        eventTypeToPropertyMap.put(ScriptEventType.ATMS_EVAL_EVENT, Properties.ATMS);
+        eventTypeToPropertyMap.put(ScriptEventType.ACTIVITY_LOG_EVAL_EVENT, Properties.ActivityLog);
+        eventTypeToPropertyMap.put(ScriptEventType.CAD_EVAL_EVENT, Properties.CAD);
+        eventTypeToPropertyMap.put(ScriptEventType.CMS_EVAL_EVENT, Properties.CMS);
+        eventTypeToPropertyMap.put(ScriptEventType.FACILITATOR_EVAL_EVENT, Properties.Facilitator);
+        eventTypeToPropertyMap.put(ScriptEventType.RADIO_EVAL_EVENT, Properties.Radio);
+
+        // Add the mouse listener
+        IncidentTimelineMouseListener mouseListener =
+                new IncidentTimelineMouseListener();
+        addMouseMotionListener(mouseListener);
+        addMouseListener(mouseListener);
+    }
+
+    public void update(ScriptIncident incident)
+    {
+        this.incident = incident;
+        if (incident != null)
+            this.collapsed = incident.collapsed;
+        this.visible = incident != null;
+
+        Dimension newSize;
+        if (visible)
+        {
+            if (collapsed)
+            {
+                newSize = new Dimension((incident.length + incident.offset) /
+                        ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+                        ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK,
+                        ScriptBuilderGuiConstants.TIMELINE_COLLAPSED_HEIGHT);
+            }
+            else
+            {
+                int mostEvents = 0;
+                for (TimeSlice slice : incident.slices)
+                {
+                    if (slice.events.size() > mostEvents)
+                        mostEvents = slice.events.size();
+                }
+
+                newSize = new Dimension((incident.length + incident.offset) /
+                        ScriptBuilderGuiConstants.HORIZONTAL_TICK_RESOLUTION *
+                        ScriptBuilderGuiConstants.PIXEL_WIDTH_PER_HORIZONTAL_TICK,
+                        ScriptBuilderGuiConstants.TIMELINE_COLLAPSED_HEIGHT +
+                        ScriptBuilderGuiConstants.SCRIPT_EVENT_ICON_STEP * (mostEvents + 1));
+            }
+        }
+        else
+        {
+            newSize = new Dimension(0, 0);
+        }
+        this.setSize(newSize);
+        this.setPreferredSize(newSize);
+
+        invalidate();
+    }
+
+    @Override
+    public void paint(Graphics g)
+    {
+        super.paint(g);
+
+        if (!visible)
+            return;
+
+        Graphics2D g2d = (Graphics2D)g;
+        IncidentTimelineDrawer.DrawIncidentTimeline(g2d, incident, collapsed);
+
+        if (focused)
+        {
+            CursorDrawer.DrawCursor(g2d, cursorTime, false);
+            if (((ScriptBuilderFrame)this.getTopLevelAncestor()).currentEventType != null)
+                EventIconDrawer.DrawEventIcon(g2d,
+                    ((ScriptBuilderFrame)this.getTopLevelAncestor()).currentEventType,
+                    x+5, y+10);
+        }
+    }
+}
Index: /branches/ScriptBuilder4/src/old/TimelinePanel.java
===================================================================
--- /branches/ScriptBuilder4/src/old/TimelinePanel.java	(revision 6)
+++ /branches/ScriptBuilder4/src/old/TimelinePanel.java	(revision 6)
@@ -0,0 +1,263 @@
+package old;
+
+//package scriptbuilder.gui.timeline;
+//
+//import java.awt.Color;
+//import java.awt.Font;
+//import java.awt.Graphics;
+//import java.awt.Graphics2D;
+//import java.awt.Polygon;
+//import java.util.ArrayList;
+//import java.util.List;
+//import javax.swing.JPanel;
+//import scriptbuilder.gui.ScriptBuilderFrame;
+//import scriptbuilder.structures.TimelineSlice;
+//import scriptbuilder.structures.ScriptIncident;
+//import scriptbuilder.structures.ScriptEvent;
+//
+///**
+// *
+// * @author Greg Eddington
+// */
+//public class TimelinePanel extends JPanel
+//{
+//    private static Polygon cursor;
+//
+//    private int curX = -300, curY = -300;
+//    private String cursorTimeString;
+//    private float zoom = 1.0f;
+//    private List<ScriptIncident> incidents;
+//    private boolean cursorActive = true;
+//    public int incident = 0;
+//    private ScriptBuilderFrame sbf;
+//
+//    public float getZoom()
+//    {
+//        return zoom;
+//    }
+//
+//    public int getCursorY()
+//    {
+//        return curY;
+//    }
+//
+//    public int getCursorX()
+//    {
+//        return curX;
+//    }
+//
+//    public List<ScriptIncident> getIncidents()
+//    {
+//        return incidents;
+//    }
+//
+//    public void setIncident(int incident)
+//    {
+//        this.incident = incident;
+//    }
+//
+//    public void setCursorActive(boolean active)
+//    {
+//        cursorActive = active;
+//    }
+//
+//    public void setCursorLocation(int x, int y)
+//    {
+//        curX = x;
+//        curY = y;
+//    }
+//
+//    public void setTimeString(String time)
+//    {
+//        cursorTimeString = time;
+//    }
+//
+//    public void setZoom(float zoom)
+//    {
+//        this.zoom = zoom;
+//    }
+//
+//    public void addIcon(int y, TimelineSlice icon)
+//    {
+//        incidents.get(incident).slices.add(icon);
+//    }
+//
+//    public void addEvent(ScriptEvent event)
+//    {
+//        int x = curX-5, y = curY-10;
+//        ScriptIncident inc = incidents.get(incident);
+//        boolean foundIcon = false;
+//
+//        for(int i = 0; i < inc.slices.size(); i++)
+//        {
+//            if (inc.slices.get(i).x == x)
+//            {
+//                inc.slices.get(i).events.add(event);
+//                foundIcon = true;
+//                break;
+//            }
+//        }
+//
+//        if (!foundIcon)
+//        {
+//            TimelineSlice newIcon = new TimelineSlice(x, y, 10, 10);
+//            newIcon.events.add(event);
+//            inc.slices.add(newIcon);
+//        }
+//    }
+//
+//    public void setScriptBuilderFrame(ScriptBuilderFrame sbf)
+//    {
+//        this.sbf = sbf;
+//    }
+//
+//    public TimelinePanel()
+//    {
+//        super();
+//
+//        // Create the object lists
+//        incidents = new ArrayList<ScriptIncident>();
+//
+//        // Create the cursor
+//        cursor = new Polygon();
+//        cursor.addPoint(0, 0);
+//        cursor.addPoint(-(TimelinePanel.TIMELINE_30_SECOND_STEP/2),
+//                TimelinePanel.TIMELINE_30_SECOND_STEP);
+//        cursor.addPoint(TimelinePanel.TIMELINE_30_SECOND_STEP/2,
+//                TimelinePanel.TIMELINE_30_SECOND_STEP);
+//
+//        // Create the media incident
+//        incidents.add(new ScriptIncident(Color.BLACK, 100, "Media",
+//                "The media incident.", 10800));
+//
+//        // Initialize the time string
+//        cursorTimeString = "";
+//    }
+//
+//    @Override
+//    public void paint(Graphics g)
+//    {
+//        Graphics2D g2d = (Graphics2D)g;
+//
+//        super.paint(g);
+//
+//        // Scale the panel
+//        g2d.scale(zoom, zoom);
+//
+//        // Draw the timelines
+//        drawTimelineGrid(g2d);
+//        drawIncidentLines(g2d);
+//
+//        // Draw the event icons
+//        drawTimelineIcons(g2d);
+//
+//        // Redraw the cursor
+//        drawCursor(g2d);
+//
+//
+//
+//        // Update the incident information
+//        if (incident >= 0 && incident < incidents.size() && sbf != null
+//                && incidents != null)
+//            sbf.updateIncident(incidents.get(incident), curX-5);
+//    }
+//
+//    private void drawIncidentLines(Graphics2D g2d)
+//    {
+//        // Draw the incident lines
+//        g2d.setFont(INCIDENT_FONT);
+//        for (int i = 0; i < incidents.size(); i++)
+//        {
+//            // Set the colour for this timeline
+//            g2d.setColor(incidents.get(i).color);
+//
+//            // Draw the timeline's name
+//            g2d.drawString(Integer.toString(incidents.get(i).number),
+//                    INCIDENT_NAME_LEFT_PADDING,
+//                    i * INCIDENT_NAME_VERTICAL_STEP + INCIDENT_NAME_TOP_PADDING);
+//
+//            // Draw the timeline's line
+//            g2d.fillRect(TIMELINE_LEFT_PADDING,
+//                    i * TIMELINE_VERTICAL_STEP + TIMELINE_TOP_PADDING,
+//                    TIMELINE_30_SECOND_STEP * incidents.get(i).length / 30,
+//                    TIMELINE_WIDTH);
+//        }
+//    }
+//
+//    private void drawTimelineGrid(Graphics2D g2d)
+//    {
+//        int maxTime = 360;
+//        int maxHeight = 1000;
+//
+//        g2d.setFont(GRID_FONT);
+//
+//        // Thirty second ticks
+//        g2d.setColor(THIRTY_SECOND_TICK_COLOR);
+//        for (int i = 0; i < maxTime; i++)
+//        {
+//            for (int j = 0; j < maxHeight; j += 2)
+//                g2d.drawLine(i * TIMELINE_30_SECOND_STEP + TIMELINE_LEFT_PADDING,
+//                        (j * THIRTY_SECOND_TICK_STEP) + THIRTY_SECOND_TICK_TOP_PADDING,
+//                        i * TIMELINE_30_SECOND_STEP + TIMELINE_LEFT_PADDING,
+//                        (j * THIRTY_SECOND_TICK_STEP) + THIRTY_SECOND_TICK_TOP_PADDING +
+//                        THIRTY_SECOND_TICK_STEP);
+//        }
+//
+//        // Fifteen minute ticks
+//        g2d.setColor(FIFTEEN_MINUTE_TICK_COLOR);
+//        for (int i = 0; i <= maxTime / 30; i++)
+//        {
+//            int minutes = i * 15;
+//
+//            // Draw the time
+//            g2d.drawString
+//            (
+//                (minutes / 60) + ":" + ((minutes % 60) == 0 ? "00" : (minutes % 60)) + ":00",
+//                i * TIMELINE_15_MINUTE_STEP + TIMELINE_LEFT_PADDING - TIME_LABEL_OFFSET,
+//                FIFTEEN_MINUTE_LABEL_TOP_PADDING
+//            );
+//
+//            // Draw the line
+//            g2d.drawLine(i * TIMELINE_15_MINUTE_STEP + TIMELINE_LEFT_PADDING,
+//                    FIFTEEN_MINUTE_TICK_TOP_PADDING,
+//                    i * TIMELINE_15_MINUTE_STEP + TIMELINE_LEFT_PADDING,
+//                    FIFTEEN_MINUTE_TICK_TOP_PADDING + THIRTY_SECOND_TICK_STEP);
+//            for (int j = 0; j < maxHeight; j += 2)
+//                g2d.drawLine(i * TIMELINE_15_MINUTE_STEP + TIMELINE_LEFT_PADDING,
+//                        (j * THIRTY_SECOND_TICK_STEP) + THIRTY_SECOND_TICK_TOP_PADDING,
+//                        i * TIMELINE_15_MINUTE_STEP + TIMELINE_LEFT_PADDING,
+//                        (j * THIRTY_SECOND_TICK_STEP + THIRTY_SECOND_TICK_STEP)
+//                        + THIRTY_SECOND_TICK_TOP_PADDING);
+//        }
+//    }
+//
+//    private void drawTimelineIcons(Graphics2D g2d)
+//    {
+//        for (ScriptIncident incident : incidents)
+//        {
+//            g2d.setColor(incident.color);
+//            for (TimelineSlice icon : incident.slices)
+//            {
+//                g2d.fill(icon.getShape());
+//            }
+//        }
+//    }
+//
+//    private void drawCursor(Graphics2D g2d)
+//    {
+//        // Draw the cursor
+//        g2d.setColor(CURSOR_COLOR);
+//        cursor.translate(curX - cursor.xpoints[0], curY - cursor.ypoints[0]);
+//        g2d.fill(cursor);
+//
+//        // Draw a timestamp
+//        g2d.setColor(CURSOR_TIME_BORDER_COLOR);
+//        g2d.fillRect(curX-30, curY + 15, 60, 20);
+//        g2d.setColor(cursorActive ? CURSOR_TIME_ACTIVE_BG_COLOR :
+//            CURSOR_TIME_INACTIVE_BG_COLOR);
+//        g2d.fillRect(curX-28, curY + 17, 56, 16);
+//        g2d.setColor(CURSOR_TIME_FONT_COLOR);
+//        g2d.setFont(CURSOR_TIME_FONT);
+//        g2d.drawString(cursorTimeString, curX-20, curY+30);
+//    }
+//}
Index: /branches/ScriptBuilder4/src/old/MouseWatcherPainter.java
===================================================================
--- /branches/ScriptBuilder4/src/old/MouseWatcherPainter.java	(revision 6)
+++ /branches/ScriptBuilder4/src/old/MouseWatcherPainter.java	(revision 6)
@@ -0,0 +1,166 @@
+package old;
+
+///*
+// * To change this template, choose Tools | Templates
+// * and open the template in the editor.
+// */
+//
+//package scriptbuilder.gui.timeline;
+//
+//import java.awt.event.MouseEvent;
+//import javax.swing.JPanel;
+//import javax.swing.event.MouseInputAdapter;
+//import scriptbuilder.structures.TimelineSlice;
+//import scriptbuilder.structures.ScriptIncident;
+//import scriptbuilder.structures.ScriptEvent;
+//
+///**
+// *
+// * @author Greg
+// */
+//public class MouseWatcherPainter extends JPanel
+//{
+//    private boolean active = true;
+//    private int mx, my;
+//    private float zoom;
+//    private TimelinePanel tp;
+//
+//    public void setActive(boolean active)
+//    {
+//        this.active = active;
+//    }
+//
+//    public void setTimelinePanel(TimelinePanel panel)
+//    {
+//        tp = panel;
+//    }
+//
+//    public void setZoom(float zoom)
+//    {
+//        this.zoom = zoom;
+//    }
+//
+//    private class TimelineMouseListener extends MouseInputAdapter
+//    {
+//        @Override
+//        public void mouseMoved(MouseEvent e)
+//        {
+//            // Record the new mouse coordinates
+//            int x = e.getX();
+//            int y = e.getY();
+//
+//            setToolTipText("");
+//            for (ScriptIncident i : tp.getIncidents())
+//            {
+//                for (TimelineSlice c : i.slices)
+//                {
+//                    if (c.getShape().contains(x / zoom, y / zoom))
+//                    {
+//                        String toolTip = "<html>" + i.name + "@" +
+//                                getCursorTimeString(x, zoom);
+//                        for (ScriptEvent v : c.events)
+//                        {
+//                             toolTip += "<br>" + v.getToolTip();
+//                        }
+//                        toolTip += "</html>";
+//                        setToolTipText(toolTip);
+//                    }
+//                }
+//            }
+//
+//            int snappedY = snapY(my, zoom);
+//            if (    active                                                &&
+//                    x / zoom > TimelinePanel.TIMELINE_LEFT_PADDING        &&
+//                    y / zoom > TimelinePanel.TIMELINE_TOP_PADDING -
+//                               TimelinePanel.TIMELINE_VERTICAL_STEP/2     &&
+//                    y / zoom <= (TimelinePanel.TIMELINE_TOP_PADDING +
+//                                (tp.getIncidents().size()-1) *
+//                                TimelinePanel.TIMELINE_VERTICAL_STEP) +
+//                                TimelinePanel.TIMELINE_VERTICAL_STEP/2    &&
+//                    x / zoom <= tp.getIncidents().get(snappedY /
+//                                TimelinePanel.TIMELINE_VERTICAL_STEP).length /
+//                                30 * TimelinePanel.TIMELINE_30_SECOND_STEP
+//                                + TimelinePanel.TIMELINE_LEFT_PADDING
+//               )
+//            {
+//                mx = x;
+//                my = y;
+//                tp.setCursorLocation(snapX(mx, zoom), snappedY);
+//                tp.setTimeString(getCursorTimeString(mx, zoom));
+//                tp.setIncident(snappedY /
+//                        TimelinePanel.TIMELINE_VERTICAL_STEP);
+//            }
+//
+//            tp.repaint();
+//        }
+//
+//        @Override
+//        public void mouseClicked(MouseEvent e)
+//        {
+//            mouseMoved(e);
+//
+//            if (e.getButton() == MouseEvent.BUTTON1)
+//            {
+//                active = !active;
+//
+//                tp.setCursorActive(active);
+//            }
+//            else if (e.getButton() == MouseEvent.BUTTON3)
+//            {
+//                int snappedY = snapY(my, zoom);
+//
+//                tp.addIcon(snappedY, new TimelineSlice(snapX(mx, zoom) - 5, snappedY - 10,
+//                        TimelinePanel.TIMELINE_30_SECOND_STEP,
+//                        TimelinePanel.TIMELINE_30_SECOND_STEP));
+//
+//                tp.repaint();
+//            }
+//
+//            mouseMoved(e);
+//        }
+//    }
+//
+//    public static String getCursorTimeString(int x, float zoom)
+//    {
+//        int seconds = (((int)((float)x / zoom) -
+//            TimelinePanel.TIMELINE_LEFT_PADDING)
+//            + (TimelinePanel.TIMELINE_30_SECOND_STEP / 2)) /
+//            TimelinePanel.TIMELINE_30_SECOND_STEP * 30;
+//        int hours = seconds / 3600;
+//        int minutes = seconds / 60 % 60;
+//        seconds = seconds % 60;
+//
+//        return hours + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" +
+//             ((seconds == 0) ? "00" : seconds);
+//    }
+//
+//    public MouseWatcherPainter()
+//    {
+//        super();
+//
+//        // Add the mouse listener
+//        TimelineMouseListener mouseListener = new TimelineMouseListener();
+//        addMouseMotionListener(mouseListener);
+//        addMouseListener(mouseListener);
+//
+//        zoom = 1.0f;
+//    }
+//
+//    public static int snapX(int mx, float zoom)
+//    {
+//        return ( ( (int)((float)mx / zoom) -
+//            TimelinePanel.TIMELINE_30_SECOND_STEP / 2 )
+//            / TimelinePanel.TIMELINE_30_SECOND_STEP
+//            * TimelinePanel.TIMELINE_30_SECOND_STEP) +
+//            TimelinePanel.TIMELINE_30_SECOND_STEP;
+//    }
+//
+//    public static int snapY(int my, float zoom)
+//    {
+//        return ((int)((float)my / zoom) -
+//                TimelinePanel.TIMELINE_TOP_PADDING/2) /
+//                TimelinePanel.TIMELINE_VERTICAL_STEP *
+//                TimelinePanel.TIMELINE_VERTICAL_STEP +
+//                TimelinePanel.TIMELINE_TOP_PADDING;
+//    }
+//}
